diff --git a/po/POTFILES.in b/po/POTFILES.in index e2c983af..5900c7be 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -37,6 +37,7 @@ src/client/components/components-entry-undo.vala src/client/components/components-in-app-notification.vala src/client/components/components-inspector.vala src/client/components/components-placeholder-pane.vala +src/client/components/components-preferences-window.vala src/client/components/components-validator.vala src/client/components/count-badge.vala src/client/components/folder-popover.vala @@ -73,7 +74,6 @@ src/client/dialogs/attachment-dialog.vala src/client/dialogs/certificate-warning-dialog.vala src/client/dialogs/dialogs-problem-details-dialog.vala src/client/dialogs/password-dialog.vala -src/client/dialogs/preferences-dialog.vala src/client/dialogs/upgrade-dialog.vala src/client/folder-list/folder-list-abstract-folder-entry.vala src/client/folder-list/folder-list-account-branch.vala @@ -440,6 +440,5 @@ ui/main-toolbar.ui ui/main-toolbar-menus.ui ui/main-window-info-bar.ui ui/password-dialog.glade -ui/preferences-dialog.ui ui/problem-details-dialog.ui ui/upgrade_dialog.glade diff --git a/src/client/application/application-client.vala b/src/client/application/application-client.vala index 0e75cde9..88d99c5b 100644 --- a/src/client/application/application-client.vala +++ b/src/client/application/application-client.vala @@ -440,6 +440,7 @@ public class Application.Client : Gtk.Application { MainWindow.add_accelerators(this); Composer.Widget.add_accelerators(this); Components.Inspector.add_accelerators(this); + Components.PreferencesWindow.add_accelerators(this); Dialogs.ProblemDetailsDialog.add_accelerators(this); // Manually place a hold on the application otherwise the @@ -609,10 +610,10 @@ public class Application.Client : Gtk.Application { public async void show_preferences() { yield this.present(); - PreferencesDialog dialog = new PreferencesDialog( - get_active_window(), this + Components.PreferencesWindow prefs = new Components.PreferencesWindow( + get_active_main_window() ); - dialog.run(); + prefs.show(); } public async void new_composer(string? mailto) { diff --git a/src/client/components/components-preferences-window.vala b/src/client/components/components-preferences-window.vala new file mode 100644 index 00000000..198395ad --- /dev/null +++ b/src/client/components/components-preferences-window.vala @@ -0,0 +1,122 @@ +/* + * Copyright 2016 Software Freedom Conservancy Inc. + * Copyright 2019 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +public class Components.PreferencesWindow : Hdy.PreferencesWindow { + + + private const string ACTION_CLOSE = "preferences-close"; + + private const ActionEntry[] WINDOW_ACTIONS = { + { Action.Window.CLOSE, on_close }, + { ACTION_CLOSE, on_close }, + }; + + + public static void add_accelerators(Application.Client app) { + app.add_window_accelerators(ACTION_CLOSE, { "Escape" } ); + } + + + /** Returns the window's associated client application instance. */ + public new Application.Client application { + get { return (Application.Client) base.get_application(); } + set { base.set_application(value); } + } + + + public PreferencesWindow(Application.MainWindow parent) { + Object( + application: parent.application, + transient_for: parent + ); + + var autoselect = new Gtk.Switch(); + autoselect.valign = CENTER; + + var autoselect_row = new Hdy.ActionRow(); + /// Translators: Preferences label + autoselect_row.title = _("_Automatically select next message"); + autoselect_row.use_underline = true; + autoselect_row.activatable_widget = autoselect; + autoselect_row.add_action(autoselect); + + var display_preview = new Gtk.Switch(); + display_preview.valign = CENTER; + + var display_preview_row = new Hdy.ActionRow(); + /// Translators: Preferences label + display_preview_row.title = _("_Display conversation preview"); + display_preview_row.use_underline = true; + display_preview_row.activatable_widget = display_preview; + display_preview_row.add_action(display_preview); + + var three_pane_view = new Gtk.Switch(); + three_pane_view.valign = CENTER; + + var three_pane_view_row = new Hdy.ActionRow(); + /// Translators: Preferences label + three_pane_view_row.title = _("Use _three pane view"); + three_pane_view_row.use_underline = true; + three_pane_view_row.activatable_widget = three_pane_view; + three_pane_view_row.add_action(three_pane_view); + + var startup_notifications = new Gtk.Switch(); + startup_notifications.valign = CENTER; + + var startup_notifications_row = new Hdy.ActionRow(); + /// Translators: Preferences label + startup_notifications_row.title = _("_Watch for new mail when closed"); + startup_notifications_row.use_underline = true; + /// Translators: Preferences tooltip + startup_notifications_row.tooltip_text = _( + "Geary will keep running after all windows are closed" + ); + startup_notifications_row.activatable_widget = startup_notifications; + startup_notifications_row.add_action(startup_notifications); + + var group = new Hdy.PreferencesGroup(); + /// Translators: Preferences group title + //group.title = _("General"); + /// Translators: Preferences group description + //group.description = _("General application preferences"); + group.add(autoselect_row); + group.add(display_preview_row); + group.add(three_pane_view_row); + group.add(startup_notifications_row); + + var page = new Hdy.PreferencesPage(); + page.propagate_natural_height = true; + page.add(group); + page.show_all(); + + add(page); + + GLib.SimpleActionGroup window_actions = new GLib.SimpleActionGroup(); + window_actions.add_action_entries(WINDOW_ACTIONS, this); + insert_action_group(Action.Window.GROUP_NAME, window_actions); + + Application.Configuration config = this.application.config; + config.bind(Application.Configuration.AUTOSELECT_KEY, autoselect, "state"); + config.bind(Application.Configuration.DISPLAY_PREVIEW_KEY, display_preview, "state"); + config.bind(Application.Configuration.FOLDER_LIST_PANE_HORIZONTAL_KEY, three_pane_view, "state"); + config.bind(Application.Configuration.STARTUP_NOTIFICATIONS_KEY, startup_notifications, "state"); + + this.delete_event.connect(on_delete); + } + + private void on_close() { + close(); + } + + private bool on_delete() { + // Sync startup notification option with file state + this.application.autostart.sync_with_config(); + return Gdk.EVENT_PROPAGATE; + } + +} diff --git a/src/client/dialogs/preferences-dialog.vala b/src/client/dialogs/preferences-dialog.vala deleted file mode 100644 index 5a0ce3db..00000000 --- a/src/client/dialogs/preferences-dialog.vala +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright 2016 Software Freedom Conservancy Inc. - * - * This software is licensed under the GNU Lesser General Public License - * (version 2.1 or later). See the COPYING file in this distribution. - */ - -[GtkTemplate (ui = "/org/gnome/Geary/preferences-dialog.ui")] -public class PreferencesDialog : Gtk.Dialog { - - [GtkChild] - private Gtk.CheckButton autoselect; - - [GtkChild] - private Gtk.CheckButton display_preview; - - [GtkChild] - private Gtk.CheckButton three_pane_view; - - [GtkChild] - private Gtk.CheckButton startup_notifications; - - [GtkChild] - private Gtk.HeaderBar header; - - private Application.Client app; - - public PreferencesDialog(Gtk.Window parent, Application.Client app) { - set_transient_for(parent); - set_titlebar(this.header); - this.app = app; - - Application.Configuration config = app.config; - config.bind(Application.Configuration.AUTOSELECT_KEY, autoselect, "active"); - config.bind(Application.Configuration.DISPLAY_PREVIEW_KEY, display_preview, "active"); - config.bind(Application.Configuration.FOLDER_LIST_PANE_HORIZONTAL_KEY, three_pane_view, "active"); - config.bind(Application.Configuration.STARTUP_NOTIFICATIONS_KEY, startup_notifications, "active"); - } - - public new void run() { - // Sync startup notification option with file state - this.app.autostart.sync_with_config(); - - base.run(); - destroy(); - } -} diff --git a/src/client/meson.build b/src/client/meson.build index 3561c48e..aa76e040 100644 --- a/src/client/meson.build +++ b/src/client/meson.build @@ -37,6 +37,7 @@ geary_client_vala_sources = files( 'components/components-inspector-log-view.vala', 'components/components-inspector-system-view.vala', 'components/components-placeholder-pane.vala', + 'components/components-preferences-window.vala', 'components/components-validator.vala', 'components/count-badge.vala', 'components/folder-popover.vala', @@ -78,7 +79,6 @@ geary_client_vala_sources = files( 'dialogs/certificate-warning-dialog.vala', 'dialogs/dialogs-problem-details-dialog.vala', 'dialogs/password-dialog.vala', - 'dialogs/preferences-dialog.vala', 'dialogs/upgrade-dialog.vala', 'folder-list/folder-list-abstract-folder-entry.vala', diff --git a/ui/org.gnome.Geary.gresource.xml b/ui/org.gnome.Geary.gresource.xml index 2138e029..0f1f8881 100644 --- a/ui/org.gnome.Geary.gresource.xml +++ b/ui/org.gnome.Geary.gresource.xml @@ -41,7 +41,6 @@ main-toolbar-menus.ui main-window-info-bar.ui password-dialog.glade - preferences-dialog.ui problem-details-dialog.ui signature-web-view.js upgrade_dialog.glade diff --git a/ui/preferences-dialog.ui b/ui/preferences-dialog.ui deleted file mode 100644 index dc6cd9d0..00000000 --- a/ui/preferences-dialog.ui +++ /dev/null @@ -1,136 +0,0 @@ - - - - - -