From b8f9510ae4e514eb67c8afe457042944a4bba513 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 7 Dec 2022 11:06:47 +0100 Subject: [PATCH] I#2111 - Add Appearance settings into Preferences Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/2111 --- data/images/CMakeLists.txt | 2 + data/images/mode-with-headerbar.png | Bin 0 -> 11885 bytes data/images/mode-without-headerbar.png | Bin 0 -> 12444 bytes po/POTFILES.in | 1 + src/modules/CMakeLists.txt | 1 + .../appearance-settings/CMakeLists.txt | 21 + .../evolution-appearance-settings.c | 463 ++++++++++++++++++ 7 files changed, 488 insertions(+) create mode 100644 data/images/mode-with-headerbar.png create mode 100644 data/images/mode-without-headerbar.png create mode 100644 src/modules/appearance-settings/CMakeLists.txt create mode 100644 src/modules/appearance-settings/evolution-appearance-settings.c diff --git a/data/images/CMakeLists.txt b/data/images/CMakeLists.txt index 1d8ee48b48..ea58e229ed 100644 --- a/data/images/CMakeLists.txt +++ b/data/images/CMakeLists.txt @@ -3,6 +3,8 @@ set(images draft-paper.png draft-stamp.jpg midnight-stars.jpg + mode-with-headerbar.png + mode-without-headerbar.png paper.png rect.png ribbon.jpg diff --git a/data/images/mode-with-headerbar.png b/data/images/mode-with-headerbar.png new file mode 100644 index 0000000000000000000000000000000000000000..8e369aa4a6c57f4bc77b025a336d4e140d4db7da GIT binary patch literal 11885 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 M$*ap%%b0!oKl{X9b^rhX literal 0 HcmV?d00001 diff --git a/data/images/mode-without-headerbar.png b/data/images/mode-without-headerbar.png new file mode 100644 index 0000000000000000000000000000000000000000..4ddd31149035b9e78f127b7d4c45992677f3857e GIT binary patch literal 12444 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 Dd$XOQ literal 0 HcmV?d00001 diff --git a/po/POTFILES.in b/po/POTFILES.in index deb9f6cb1d..2e3bb8e83a 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -393,6 +393,7 @@ src/mail/vfoldertypes.xml.in src/modules/accounts-window/e-accounts-window-editors.c src/modules/accounts-window/e-collection-wizard-page.c src/modules/accounts-window/e-webdav-browser-page.c +src/modules/appearance-settings/evolution-appearance-settings.c src/modules/addressbook/autocompletion-config.c src/modules/addressbook/eab-composer-util.c src/modules/addressbook/e-book-shell-backend.c diff --git a/src/modules/CMakeLists.txt b/src/modules/CMakeLists.txt index d995f4dc60..8fcc7b5bf0 100644 --- a/src/modules/CMakeLists.txt +++ b/src/modules/CMakeLists.txt @@ -62,6 +62,7 @@ add_subdirectory(addressbook) add_subdirectory(calendar) add_subdirectory(mail) add_subdirectory(accounts-window) +add_subdirectory(appearance-settings) add_subdirectory(backup-restore) add_subdirectory(book-config-carddav) add_subdirectory(book-config-google) diff --git a/src/modules/appearance-settings/CMakeLists.txt b/src/modules/appearance-settings/CMakeLists.txt new file mode 100644 index 0000000000..747d0056bf --- /dev/null +++ b/src/modules/appearance-settings/CMakeLists.txt @@ -0,0 +1,21 @@ +set(extra_deps + evolution-shell +) +set(sources + evolution-appearance-settings.c +) +set(extra_defines + -DEVOLUTION_IMAGESDIR=\"${imagesdir}\" +) +set(extra_cflags) +set(extra_incdirs) +set(extra_ldflags) + +add_evolution_module(module-appearance-settings + sources + extra_deps + extra_defines + extra_cflags + extra_incdirs + extra_ldflags +) diff --git a/src/modules/appearance-settings/evolution-appearance-settings.c b/src/modules/appearance-settings/evolution-appearance-settings.c new file mode 100644 index 0000000000..94617bfef3 --- /dev/null +++ b/src/modules/appearance-settings/evolution-appearance-settings.c @@ -0,0 +1,463 @@ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, see . + * + */ + +#include "evolution-config.h" + +#include + +#include "e-util/e-util.h" +#include "e-util/e-util-private.h" +#include "shell/e-shell-window.h" + +/* Standard GObject macros */ +#define E_TYPE_APPEARANCE_SETTINGS \ + (e_appearance_settings_get_type ()) +#define E_APPEARANCE_SETTINGS(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST \ + ((obj), E_TYPE_APPEARANCE_SETTINGS, EAppearanceSettings)) + +typedef struct _EAppearanceSettings EAppearanceSettings; +typedef struct _EAppearanceSettingsClass EAppearanceSettingsClass; + +struct _EAppearanceSettings { + EExtension parent; +}; + +struct _EAppearanceSettingsClass { + EExtensionClass parent_class; +}; + +/* Module Entry Points */ +void e_module_load (GTypeModule *type_module); +void e_module_unload (GTypeModule *type_module); + +/* Forward Declarations */ +GType e_appearance_settings_get_type (void); + +G_DEFINE_DYNAMIC_TYPE (EAppearanceSettings, e_appearance_settings, E_TYPE_EXTENSION) + +typedef struct _ToolbarIconSizeData { + gint ref_count; + EToolbarIconSize current_value; + GtkWidget *radio_default; + GtkWidget *radio_small; + GtkWidget *radio_large; +} ToolbarIconSizeData; + +static void +e_appearance_settings_toolbar_icon_size_changed_cb (GSettings *settings, + const gchar *key, + gpointer user_data) +{ + ToolbarIconSizeData *tisd = user_data; + EToolbarIconSize current_value; + + g_return_if_fail (tisd != NULL); + + if (g_strcmp0 (key, "toolbar-icon-size") != 0) + return; + + current_value = g_settings_get_enum (settings, "toolbar-icon-size"); + + if (tisd->current_value == current_value) + return; + + tisd->current_value = current_value; + + switch (tisd->current_value) { + default: + case E_TOOLBAR_ICON_SIZE_DEFAULT: + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tisd->radio_default), TRUE); + break; + case E_TOOLBAR_ICON_SIZE_SMALL: + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tisd->radio_small), TRUE); + break; + case E_TOOLBAR_ICON_SIZE_LARGE: + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tisd->radio_large), TRUE); + break; + } +} + +static ToolbarIconSizeData * +toolbar_icon_size_data_ref (ToolbarIconSizeData *tisd) +{ + g_atomic_int_inc (&tisd->ref_count); + + return tisd; +} + +static void +toolbar_icon_size_data_unref (ToolbarIconSizeData *tisd) +{ + if (g_atomic_int_dec_and_test (&tisd->ref_count)) { + GSettings *settings; + + settings = e_util_ref_settings ("org.gnome.evolution.shell"); + g_signal_handlers_disconnect_by_func (settings, G_CALLBACK (e_appearance_settings_toolbar_icon_size_changed_cb), tisd); + g_clear_object (&settings); + + g_free (tisd); + } +} + +static void +e_appearance_settings_toolbar_icon_size_toggled_cb (GtkWidget *radio_button, + gpointer user_data) +{ + ToolbarIconSizeData *tisd = user_data; + EToolbarIconSize new_value; + GSettings *settings; + + g_return_if_fail (tisd != NULL); + g_return_if_fail (tisd->radio_default == radio_button || + tisd->radio_small == radio_button || + tisd->radio_large == radio_button); + + if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radio_button))) + return; + + new_value = radio_button == tisd->radio_small ? E_TOOLBAR_ICON_SIZE_SMALL : + radio_button == tisd->radio_large ? E_TOOLBAR_ICON_SIZE_LARGE : + E_TOOLBAR_ICON_SIZE_DEFAULT; + + if (new_value == tisd->current_value) + return; + + tisd->current_value = new_value; + + settings = e_util_ref_settings ("org.gnome.evolution.shell"); + g_settings_set_enum (settings, "toolbar-icon-size", tisd->current_value); + g_clear_object (&settings); +} + +static GtkWidget * +e_appearance_settings_page_new (EPreferencesWindow *window) +{ + PangoAttrList *bold; + PangoAttrList *italic; + GtkGrid *grid; + GtkWidget *widget, *main_radio; + GSettings *settings; + ToolbarIconSizeData *tisd; + gchar *filename; + gint row = 0; + + settings = e_util_ref_settings ("org.gnome.evolution.shell"); + + bold = pango_attr_list_new (); + pango_attr_list_insert (bold, pango_attr_weight_new (PANGO_WEIGHT_BOLD)); + + italic = pango_attr_list_new (); + pango_attr_list_insert (italic, pango_attr_style_new (PANGO_STYLE_ITALIC)); + + grid = GTK_GRID (gtk_grid_new ()); + g_object_set (grid, + "halign", GTK_ALIGN_FILL, + "hexpand", TRUE, + "valign", GTK_ALIGN_FILL, + "vexpand", TRUE, + "border-width", 12, + "row-spacing", 2, + NULL); + + widget = gtk_label_new (_("Title Bar Mode")); + g_object_set (widget, + "halign", GTK_ALIGN_START, + "hexpand", FALSE, + "attributes", bold, + NULL); + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + /* Translators: This is the GNOME project name; you probably do not want to translate it, apart of changing the mnemonic */ + widget = gtk_radio_button_new_with_mnemonic (NULL, _("_GNOME")); + g_object_set (widget, + "margin-start", 12, + NULL); + + main_radio = widget; + + g_settings_bind ( + settings, "use-header-bar", + widget, "active", + G_SETTINGS_BIND_DEFAULT); + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + filename = g_build_filename (EVOLUTION_IMAGESDIR, "mode-with-headerbar.png", NULL); + widget = gtk_image_new_from_file (filename); + g_object_set (widget, + "margin-start", 30, + "margin-bottom", 6, + NULL); + g_free (filename); + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + /* Translators: This belongs under "Title Bar Mode" setting, thus similar to "Title Bar Mode: Standard" */ + widget = gtk_radio_button_new_with_mnemonic (NULL, _("_Standard")); + g_object_set (widget, + "margin-start", 12, + NULL); + + gtk_radio_button_join_group (GTK_RADIO_BUTTON (widget), GTK_RADIO_BUTTON (main_radio)); + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + filename = g_build_filename (EVOLUTION_IMAGESDIR, "mode-without-headerbar.png", NULL); + widget = gtk_image_new_from_file (filename); + g_object_set (widget, + "margin-start", 30, + NULL); + g_free (filename); + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + tisd = g_new0 (ToolbarIconSizeData, 1); + tisd->ref_count = 1; + + widget = gtk_label_new (_("Toolbar Icon Size")); + g_object_set (widget, + "halign", GTK_ALIGN_START, + "hexpand", FALSE, + "attributes", bold, + "margin-top", 12, + NULL); + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + /* Translators: This is for "Toolbar Icon Size: Default" */ + widget = gtk_radio_button_new_with_mnemonic (NULL, _("_Default")); + g_object_set (widget, + "margin-start", 12, + NULL); + + main_radio = widget; + + tisd->radio_default = widget; + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + /* Translators: This is for "Toolbar Icon Size: Small" */ + widget = gtk_radio_button_new_with_mnemonic (NULL, _("Sm_all")); + g_object_set (widget, + "margin-start", 12, + NULL); + + gtk_radio_button_join_group (GTK_RADIO_BUTTON (widget), GTK_RADIO_BUTTON (main_radio)); + tisd->radio_small = widget; + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + /* Translators: This is for "Toolbar Icon Size: Large" */ + widget = gtk_radio_button_new_with_mnemonic (NULL, _("_Large")); + g_object_set (widget, + "margin-start", 12, + NULL); + + gtk_radio_button_join_group (GTK_RADIO_BUTTON (widget), GTK_RADIO_BUTTON (main_radio)); + tisd->radio_large = widget; + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + g_signal_connect (settings, "changed::toolbar-icon-size", + G_CALLBACK (e_appearance_settings_toolbar_icon_size_changed_cb), tisd); + + /* Read after the signal handler is connected */ + tisd->current_value = g_settings_get_enum (settings, "toolbar-icon-size"); + + switch (tisd->current_value) { + default: + case E_TOOLBAR_ICON_SIZE_DEFAULT: + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tisd->radio_default), TRUE); + break; + case E_TOOLBAR_ICON_SIZE_SMALL: + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tisd->radio_small), TRUE); + break; + case E_TOOLBAR_ICON_SIZE_LARGE: + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tisd->radio_large), TRUE); + break; + } + + g_signal_connect_data (tisd->radio_default, "toggled", + G_CALLBACK (e_appearance_settings_toolbar_icon_size_toggled_cb), toolbar_icon_size_data_ref (tisd), + (GClosureNotify) toolbar_icon_size_data_unref, G_CONNECT_DEFAULT); + + g_signal_connect_data (tisd->radio_small, "toggled", + G_CALLBACK (e_appearance_settings_toolbar_icon_size_toggled_cb), toolbar_icon_size_data_ref (tisd), + (GClosureNotify) toolbar_icon_size_data_unref, G_CONNECT_DEFAULT); + + g_signal_connect_data (tisd->radio_large, "toggled", + G_CALLBACK (e_appearance_settings_toolbar_icon_size_toggled_cb), toolbar_icon_size_data_ref (tisd), + (GClosureNotify) toolbar_icon_size_data_unref, G_CONNECT_DEFAULT); + + toolbar_icon_size_data_unref (tisd); + + widget = gtk_label_new (_("Layout")); + g_object_set (widget, + "halign", GTK_ALIGN_START, + "hexpand", FALSE, + "attributes", bold, + "margin-top", 12, + NULL); + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + widget = gtk_check_button_new_with_mnemonic (_("Show M_enu Bar")); + g_object_set (widget, + "margin-start", 12, + NULL); + + g_settings_bind ( + settings, "menubar-visible", + widget, "active", + G_SETTINGS_BIND_DEFAULT); + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + widget = gtk_check_button_new_with_mnemonic (_("Show _Tool Bar")); + g_object_set (widget, + "margin-start", 12, + NULL); + + g_settings_bind ( + settings, "toolbar-visible", + widget, "active", + G_SETTINGS_BIND_DEFAULT); + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + widget = gtk_check_button_new_with_mnemonic (_("Show Side _Bar")); + g_object_set (widget, + "margin-start", 12, + NULL); + + g_settings_bind ( + settings, "sidebar-visible", + widget, "active", + G_SETTINGS_BIND_DEFAULT); + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + widget = gtk_check_button_new_with_mnemonic (_("Show Stat_us Bar")); + g_object_set (widget, + "margin-start", 12, + NULL); + + g_settings_bind ( + settings, "statusbar-visible", + widget, "active", + G_SETTINGS_BIND_DEFAULT); + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + widget = gtk_label_new (_("Note: Some changes will not take effect until restart")); + g_object_set (widget, + "halign", GTK_ALIGN_START, + "hexpand", FALSE, + "attributes", italic, + "margin-top", 12, + NULL); + + gtk_grid_attach (grid, widget, 0, row, 2, 1); + row++; + + pango_attr_list_unref (bold); + pango_attr_list_unref (italic); + + widget = GTK_WIDGET (grid); + gtk_widget_show_all (widget); + + g_clear_object (&settings); + + return widget; +} + +static void +appearance_settings_constructed (GObject *object) +{ + EExtensible *extensible; + EAppearanceSettings *extension; + EShellWindow *shell_window; + EShell *shell; + GtkWidget *preferences_window; + + extension = E_APPEARANCE_SETTINGS (object); + extensible = e_extension_get_extensible (E_EXTENSION (extension)); + + shell_window = E_SHELL_WINDOW (extensible); + shell = e_shell_window_get_shell (shell_window); + preferences_window = e_shell_get_preferences_window (shell); + + e_preferences_window_add_page ( + E_PREFERENCES_WINDOW (preferences_window), + "page-appearance", + "preferences-system", + _("Appearance"), + NULL, + e_appearance_settings_page_new, + 950); + + /* Chain up to parent's method. */ + G_OBJECT_CLASS (e_appearance_settings_parent_class)->constructed (object); +} + +static void +e_appearance_settings_class_init (EAppearanceSettingsClass *class) +{ + GObjectClass *object_class; + EExtensionClass *extension_class; + + object_class = G_OBJECT_CLASS (class); + object_class->constructed = appearance_settings_constructed; + + extension_class = E_EXTENSION_CLASS (class); + extension_class->extensible_type = E_TYPE_SHELL_WINDOW; +} + +static void +e_appearance_settings_class_finalize (EAppearanceSettingsClass *class) +{ +} + +static void +e_appearance_settings_init (EAppearanceSettings *extension) +{ +} + +G_MODULE_EXPORT void +e_module_load (GTypeModule *type_module) +{ + e_appearance_settings_register_type (type_module); +} + +G_MODULE_EXPORT void +e_module_unload (GTypeModule *type_module) +{ +}