Remember attachments dir and reuse adding/saving attachments and images.
* src/client/application/geary-controller.vala (GearyController): Replace use of last_save_directory with new attachments_dir property on the configuration object. * src/client/dialogs/attachment-dialog.vala (AttachmentDialog): Replace current_folder with use of last_save_directory with new attachments_dir property on the configuration object. Add config object as ctor param and object field, update call sites.
This commit is contained in:
parent
7787af3aac
commit
527399be76
5 changed files with 47 additions and 26 deletions
|
|
@ -2,6 +2,12 @@
|
|||
|
||||
<schema id="org.gnome.Geary" path="/org/gnome/Geary/">
|
||||
|
||||
<key name="attachments-directory" type="s">
|
||||
<default>''</default>
|
||||
<summary>Default attachments directory</summary>
|
||||
<description>Location used when opening and saving attachments</description>
|
||||
</key>
|
||||
|
||||
<key name="print-directory" type="s">
|
||||
<default>''</default>
|
||||
<summary>Default print output directory</summary>
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
*/
|
||||
public class Configuration {
|
||||
|
||||
public const string ATTACHMENTS_DIR_KEY = "attachments-directory";
|
||||
public const string PRINT_DIR_KEY = "print-directory";
|
||||
public const string WINDOW_WIDTH_KEY = "window-width";
|
||||
public const string WINDOW_HEIGHT_KEY = "window-height";
|
||||
|
|
@ -63,6 +64,11 @@ public class Configuration {
|
|||
}
|
||||
}
|
||||
|
||||
public string? attachments_dir {
|
||||
owned get { return settings.get_string(ATTACHMENTS_DIR_KEY); }
|
||||
set { settings.set_string(ATTACHMENTS_DIR_KEY, value); }
|
||||
}
|
||||
|
||||
public string? print_dir {
|
||||
owned get { return settings.get_string(PRINT_DIR_KEY); }
|
||||
set { settings.set_string(PRINT_DIR_KEY, value); }
|
||||
|
|
|
|||
|
|
@ -112,7 +112,6 @@ public class GearyController : Geary.BaseObject {
|
|||
private Gee.Set<Geary.App.Conversation> selected_conversations = new Gee.HashSet<Geary.App.Conversation>();
|
||||
private Geary.App.Conversation? last_deleted_conversation = null;
|
||||
private Gee.LinkedList<ComposerWidget> composer_widgets = new Gee.LinkedList<ComposerWidget>();
|
||||
private File? last_save_directory = null;
|
||||
private NewMessagesMonitor? new_messages_monitor = null;
|
||||
private NewMessagesIndicator? new_messages_indicator = null;
|
||||
private UnityLauncher? unity_launcher = null;
|
||||
|
|
@ -2079,7 +2078,7 @@ public class GearyController : Geary.BaseObject {
|
|||
return;
|
||||
|
||||
File dest_dir = File.new_for_path(filename);
|
||||
this.last_save_directory = dest_dir;
|
||||
this.application.config.attachments_dir = dest_dir.get_path();
|
||||
|
||||
debug("Saving attachments to %s", dest_dir.get_path());
|
||||
|
||||
|
|
@ -2124,7 +2123,7 @@ public class GearyController : Geary.BaseObject {
|
|||
|
||||
if (accepted && !Geary.String.is_empty(accepted_filename)) {
|
||||
File destination = File.new_for_path(accepted_filename);
|
||||
this.last_save_directory = destination.get_parent();
|
||||
this.application.config.attachments_dir = destination.get_parent().get_path();
|
||||
yield write_buffer_to_file(buffer, destination);
|
||||
}
|
||||
}
|
||||
|
|
@ -2173,8 +2172,9 @@ public class GearyController : Geary.BaseObject {
|
|||
null
|
||||
);
|
||||
#endif
|
||||
if (this.last_save_directory != null)
|
||||
dialog.set_current_folder(this.last_save_directory.get_path());
|
||||
string? dir = this.application.config.attachments_dir;
|
||||
if (!Geary.String.is_empty(dir))
|
||||
dialog.set_current_folder(dir);
|
||||
dialog.set_create_folders(true);
|
||||
dialog.set_local_only(false);
|
||||
return dialog;
|
||||
|
|
|
|||
|
|
@ -2216,7 +2216,7 @@ public class ComposerWidget : Gtk.EventBox {
|
|||
}
|
||||
|
||||
private void on_add_attachment() {
|
||||
AttachmentDialog dialog = new AttachmentDialog(this.container.top_window);
|
||||
AttachmentDialog dialog = new AttachmentDialog(this.container.top_window, this.config);
|
||||
if (dialog.run() == Gtk.ResponseType.ACCEPT) {
|
||||
dialog.hide();
|
||||
foreach (File file in dialog.get_files()) {
|
||||
|
|
@ -2227,6 +2227,7 @@ public class ComposerWidget : Gtk.EventBox {
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
dialog.destroy();
|
||||
}
|
||||
|
|
@ -2236,7 +2237,7 @@ public class ComposerWidget : Gtk.EventBox {
|
|||
}
|
||||
|
||||
private void on_insert_image(SimpleAction action, Variant? param) {
|
||||
AttachmentDialog dialog = new AttachmentDialog(this.container.top_window);
|
||||
AttachmentDialog dialog = new AttachmentDialog(this.container.top_window, this.config);
|
||||
Gtk.FileFilter filter = new Gtk.FileFilter();
|
||||
// Translators: This is the name of the file chooser filter
|
||||
// when inserting an image in the composer.
|
||||
|
|
|
|||
|
|
@ -5,40 +5,44 @@
|
|||
*/
|
||||
|
||||
public class AttachmentDialog : Object {
|
||||
|
||||
private const int PREVIEW_SIZE = 180;
|
||||
private const int PREVIEW_PADDING = 3;
|
||||
|
||||
private Configuration config;
|
||||
|
||||
#if GTK_3_20
|
||||
private Gtk.FileChooserNative? chooser = null;
|
||||
#else
|
||||
private Gtk.FileChooserDialog? chooser = null;
|
||||
#endif
|
||||
private const int PREVIEW_SIZE = 180;
|
||||
private const int PREVIEW_PADDING = 3;
|
||||
|
||||
private static string? current_folder = null;
|
||||
|
||||
private Gtk.Image preview_image;
|
||||
|
||||
|
||||
private Gtk.Image preview_image = new Gtk.Image();
|
||||
|
||||
public delegate bool Attacher(File attachment_file, bool alert_errors = true);
|
||||
|
||||
public AttachmentDialog(Gtk.Window? parent) {
|
||||
public AttachmentDialog(Gtk.Window? parent, Configuration config) {
|
||||
this.config = config;
|
||||
|
||||
#if GTK_3_20
|
||||
chooser = new Gtk.FileChooserNative(_("Choose a file"), parent, Gtk.FileChooserAction.OPEN, _("_Attach"), Stock._CANCEL);
|
||||
this.chooser = new Gtk.FileChooserNative(_("Choose a file"), parent, Gtk.FileChooserAction.OPEN, _("_Attach"), Stock._CANCEL);
|
||||
#else
|
||||
chooser = new Gtk.FileChooserDialog(_("Choose a file"), parent, Gtk.FileChooserAction.OPEN, Stock._CANCEL, Gtk.ResponseType.CANCEL, _("_Attach"), Gtk.ResponseType.ACCEPT);
|
||||
this.chooser = new Gtk.FileChooserDialog(_("Choose a file"), parent, Gtk.FileChooserAction.OPEN, Stock._CANCEL, Gtk.ResponseType.CANCEL, _("_Attach"), Gtk.ResponseType.ACCEPT);
|
||||
#endif
|
||||
|
||||
if (!Geary.String.is_empty(current_folder)) {
|
||||
chooser.set_current_folder(current_folder);
|
||||
string? dir = config.attachments_dir;
|
||||
if (!Geary.String.is_empty(dir)) {
|
||||
this.chooser.set_current_folder(dir);
|
||||
}
|
||||
chooser.set_local_only(false);
|
||||
chooser.set_select_multiple(true);
|
||||
this.chooser.set_local_only(false);
|
||||
this.chooser.set_select_multiple(true);
|
||||
|
||||
// preview widget is not supported on Win32 (this will fallback to gtk file chooser)
|
||||
// and possibly by some org.freedesktop.portal.FileChooser (preview will be ignored).
|
||||
preview_image = new Gtk.Image();
|
||||
chooser.set_preview_widget(preview_image);
|
||||
chooser.use_preview_label = false;
|
||||
this.chooser.set_preview_widget(this.preview_image);
|
||||
this.chooser.use_preview_label = false;
|
||||
|
||||
chooser.update_preview.connect(on_update_preview);
|
||||
this.chooser.update_preview.connect(on_update_preview);
|
||||
}
|
||||
|
||||
// XXX Once we depend on GTK+ 3.20 as a minimum, convert this
|
||||
|
|
@ -54,7 +58,11 @@ public class AttachmentDialog : Object {
|
|||
}
|
||||
|
||||
public int run() {
|
||||
return this.chooser.run();
|
||||
int response = this.chooser.run();
|
||||
if (response == Gtk.ResponseType.ACCEPT) {
|
||||
this.config.attachments_dir = this.chooser.get_current_folder();
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
public void hide() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue