[gedit] GeditSettings: rework fonts changes handling, add ::fonts-changed signal



commit 13033affa6b43256c52162053ac43000e028854b
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Tue Nov 24 18:17:38 2020 +0100

    GeditSettings: rework fonts changes handling, add ::fonts-changed signal

 gedit/gedit-settings.c | 154 ++++++++++++++++++++-----------------------------
 1 file changed, 63 insertions(+), 91 deletions(-)
---
diff --git a/gedit/gedit-settings.c b/gedit/gedit-settings.c
index a1079f653..bfbfbf938 100644
--- a/gedit/gedit-settings.c
+++ b/gedit/gedit-settings.c
@@ -39,7 +39,13 @@ struct _GeditSettings
        GSettings *settings_file_chooser_state;
 };
 
-/* GeditSettings is a singleton. */
+enum
+{
+       SIGNAL_FONTS_CHANGED,
+       N_SIGNALS
+};
+
+static guint signals[N_SIGNALS];
 static GeditSettings *singleton = NULL;
 
 G_DEFINE_TYPE (GeditSettings, gedit_settings, G_TYPE_OBJECT)
@@ -77,85 +83,47 @@ gedit_settings_class_init (GeditSettingsClass *klass)
 
        object_class->dispose = gedit_settings_dispose;
        object_class->finalize = gedit_settings_finalize;
-}
-
-static void
-set_font (const gchar *font)
-{
-       GList *views;
-       GList *l;
-
-       views = gedit_app_get_views (GEDIT_APP (g_application_get_default ()));
 
-       for (l = views; l != NULL; l = l->next)
-       {
-               /* Note: we use def=FALSE to avoid GeditView to query dconf. */
-               _gedit_view_set_font (GEDIT_VIEW (l->data), FALSE, font);
-       }
-
-       g_list_free (views);
+       /* This signal is emitted when the return value of [...] has potentially
+        * changed.
+        * TODO: write function to get the font.
+        */
+       signals[SIGNAL_FONTS_CHANGED] =
+               g_signal_new ("fonts-changed",
+                             G_TYPE_FROM_CLASS (klass),
+                             G_SIGNAL_RUN_FIRST,
+                             0,
+                             NULL, NULL, NULL,
+                             G_TYPE_NONE, 0);
 }
 
 static void
-on_system_font_changed (GSettings     *settings,
+system_font_changed_cb (GSettings     *settings,
                        const gchar   *key,
                        GeditSettings *self)
 {
-
-       gboolean use_default_font;
-
-       use_default_font = g_settings_get_boolean (self->settings_editor, GEDIT_SETTINGS_USE_DEFAULT_FONT);
-
-       if (use_default_font)
+       if (g_settings_get_boolean (self->settings_editor, GEDIT_SETTINGS_USE_DEFAULT_FONT))
        {
-               gchar *font;
-
-               font = g_settings_get_string (settings, key);
-               set_font (font);
-               g_free (font);
+               g_signal_emit (self, signals[SIGNAL_FONTS_CHANGED], 0);
        }
 }
 
 static void
-on_use_default_font_changed (GSettings     *settings,
+use_default_font_changed_cb (GSettings     *settings,
                             const gchar   *key,
                             GeditSettings *self)
 {
-       gboolean use_default_font;
-       gchar *font;
-
-       use_default_font = g_settings_get_boolean (settings, key);
-
-       if (use_default_font)
-       {
-               font = g_settings_get_string (self->settings_interface, GEDIT_SETTINGS_SYSTEM_FONT);
-       }
-       else
-       {
-               font = g_settings_get_string (self->settings_editor, GEDIT_SETTINGS_EDITOR_FONT);
-       }
-
-       set_font (font);
-
-       g_free (font);
+       g_signal_emit (self, signals[SIGNAL_FONTS_CHANGED], 0);
 }
 
 static void
-on_editor_font_changed (GSettings     *settings,
+editor_font_changed_cb (GSettings     *settings,
                        const gchar   *key,
                        GeditSettings *self)
 {
-       gboolean use_default_font;
-
-       use_default_font = g_settings_get_boolean (self->settings_editor, GEDIT_SETTINGS_USE_DEFAULT_FONT);
-
-       if (!use_default_font)
+       if (!g_settings_get_boolean (self->settings_editor, GEDIT_SETTINGS_USE_DEFAULT_FONT))
        {
-               gchar *font;
-
-               font = g_settings_get_string (settings, key);
-               set_font (font);
-               g_free (font);
+               g_signal_emit (self, signals[SIGNAL_FONTS_CHANGED], 0);
        }
 }
 
@@ -242,43 +210,47 @@ on_syntax_highlighting_changed (GSettings     *settings,
 static void
 gedit_settings_init (GeditSettings *self)
 {
+       self->settings_interface = g_settings_new ("org.gnome.desktop.interface");
+
        self->settings_editor = g_settings_new ("org.gnome.gedit.preferences.editor");
        self->settings_ui = g_settings_new ("org.gnome.gedit.preferences.ui");
        self->settings_file_chooser_state = g_settings_new ("org.gnome.gedit.state.file-chooser");
 
-       self->settings_interface = g_settings_new ("org.gnome.desktop.interface");
-
-       g_signal_connect (self->settings_interface,
-                         "changed::monospace-font-name",
-                         G_CALLBACK (on_system_font_changed),
-                         self);
-
-       /* editor changes */
-
-       g_signal_connect (self->settings_editor,
-                         "changed::use-default-font",
-                         G_CALLBACK (on_use_default_font_changed),
-                         self);
-
-       g_signal_connect (self->settings_editor,
-                         "changed::editor-font",
-                         G_CALLBACK (on_editor_font_changed),
-                         self);
-
-       g_signal_connect (self->settings_editor,
-                         "changed::auto-save",
-                         G_CALLBACK (on_auto_save_changed),
-                         self);
-
-       g_signal_connect (self->settings_editor,
-                         "changed::auto-save-interval",
-                         G_CALLBACK (on_auto_save_interval_changed),
-                         self);
-
-       g_signal_connect (self->settings_editor,
-                         "changed::syntax-highlighting",
-                         G_CALLBACK (on_syntax_highlighting_changed),
-                         self);
+       g_signal_connect_object (self->settings_interface,
+                                "changed::" GEDIT_SETTINGS_SYSTEM_FONT,
+                                G_CALLBACK (system_font_changed_cb),
+                                self,
+                                0);
+
+       g_signal_connect_object (self->settings_editor,
+                                "changed::" GEDIT_SETTINGS_USE_DEFAULT_FONT,
+                                G_CALLBACK (use_default_font_changed_cb),
+                                self,
+                                0);
+
+       g_signal_connect_object (self->settings_editor,
+                                "changed::" GEDIT_SETTINGS_EDITOR_FONT,
+                                G_CALLBACK (editor_font_changed_cb),
+                                self,
+                                0);
+
+       g_signal_connect_object (self->settings_editor,
+                                "changed::auto-save",
+                                G_CALLBACK (on_auto_save_changed),
+                                self,
+                                0);
+
+       g_signal_connect_object (self->settings_editor,
+                                "changed::auto-save-interval",
+                                G_CALLBACK (on_auto_save_interval_changed),
+                                self,
+                                0);
+
+       g_signal_connect_object (self->settings_editor,
+                                "changed::syntax-highlighting",
+                                G_CALLBACK (on_syntax_highlighting_changed),
+                                self,
+                                0);
 }
 
 GeditSettings *


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]