[gedit/zbrown/deteplification-src: 274/633] Improve the code that applies the style scheme setting to the documents




commit 91b255a34936a491e1adee65c7ef7fd0bc53ec63
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Thu Apr 23 17:07:49 2020 +0200

    Improve the code that applies the style scheme setting to the documents
    
    GLib >= 2.64 is required for g_warning_once().
    
    - For the fallback, take the default GSettings value instead of
    hard-coding 'tango'.
    - Avoid code duplication between GeditSettings and GeditDocument, do
    everything in GeditDocument.
    - Use _gedit_settings_peek_editor_settings().

 gedit/gedit-document.c | 86 +++++++++++++++++++++++++++++++++++++++-----------
 gedit/gedit-settings.c | 56 --------------------------------
 meson.build            |  2 ++
 3 files changed, 69 insertions(+), 75 deletions(-)
---
diff --git a/gedit/gedit-document.c b/gedit/gedit-document.c
index 5c96d7b31..9a4f8dcb8 100644
--- a/gedit/gedit-document.c
+++ b/gedit/gedit-document.c
@@ -649,32 +649,75 @@ save_encoding_metadata (GeditDocument *doc)
                                     NULL);
 }
 
-static GtkSourceStyleScheme *
-get_default_style_scheme (GSettings *editor_settings)
+static gchar *
+get_default_style_scheme_id (void)
+{
+       GeditSettings *settings;
+       GSettings *editor_settings;
+       GVariant *default_value;
+       gchar *default_style_scheme_id;
+
+       settings = _gedit_settings_get_singleton ();
+       editor_settings = _gedit_settings_peek_editor_settings (settings);
+
+       default_value = g_settings_get_default_value (editor_settings, GEDIT_SETTINGS_SCHEME);
+       default_style_scheme_id = g_variant_dup_string (default_value, NULL);
+       g_variant_unref (default_value);
+
+       return default_style_scheme_id;
+}
+
+static void
+update_style_scheme (GeditDocument *doc)
 {
+       GeditSettings *settings;
+       GSettings *editor_settings;
+       gchar *style_scheme_id;
        GtkSourceStyleSchemeManager *manager;
-       gchar *scheme_id;
-       GtkSourceStyleScheme *def_style;
+       GtkSourceStyleScheme *style_scheme = NULL;
+
+       settings = _gedit_settings_get_singleton ();
+       editor_settings = _gedit_settings_peek_editor_settings (settings);
+       style_scheme_id = g_settings_get_string (editor_settings, GEDIT_SETTINGS_SCHEME);
 
        manager = gtk_source_style_scheme_manager_get_default ();
-       scheme_id = g_settings_get_string (editor_settings, GEDIT_SETTINGS_SCHEME);
-       def_style = gtk_source_style_scheme_manager_get_scheme (manager, scheme_id);
 
-       if (def_style == NULL)
+       if (style_scheme_id != NULL)
+       {
+               style_scheme = gtk_source_style_scheme_manager_get_scheme (manager, style_scheme_id);
+       }
+
+       if (style_scheme == NULL)
        {
-               g_warning ("Default style scheme '%s' cannot be found, falling back to 'tango' style 
scheme.", scheme_id);
+               gchar *default_style_scheme_id;
 
-               def_style = gtk_source_style_scheme_manager_get_scheme (manager, "tango");
+               default_style_scheme_id = get_default_style_scheme_id ();
 
-               if (def_style == NULL)
+               g_warning_once ("Style scheme '%s' cannot be found, falling back to '%s' default style 
scheme.",
+                               style_scheme_id,
+                               default_style_scheme_id);
+
+               style_scheme = gtk_source_style_scheme_manager_get_scheme (manager, default_style_scheme_id);
+               if (style_scheme == NULL)
                {
-                       g_warning ("Style scheme 'tango' cannot be found, check your GtkSourceView 
installation.");
+                       g_warning_once ("Default style scheme '%s' cannot be found, check your GtkSourceView 
installation.",
+                                       default_style_scheme_id);
                }
+
+               g_free (default_style_scheme_id);
        }
 
-       g_free (scheme_id);
+       gtk_source_buffer_set_style_scheme (GTK_SOURCE_BUFFER (doc), style_scheme);
+
+       g_free (style_scheme_id);
+}
 
-       return def_style;
+static void
+editor_settings_scheme_changed_cb (GSettings     *editor_settings,
+                                  const gchar   *key,
+                                  GeditDocument *doc)
+{
+       update_style_scheme (doc);
 }
 
 static GtkSourceLanguage *
@@ -817,8 +860,9 @@ on_location_changed (GtkSourceFile *file,
 static void
 gedit_document_init (GeditDocument *doc)
 {
+       GeditSettings *settings;
+       GSettings *editor_settings;
        GeditDocumentPrivate *priv;
-       GtkSourceStyleScheme *style_scheme;
 
        gedit_debug (DEBUG_DOCUMENT);
 
@@ -859,11 +903,15 @@ gedit_document_init (GeditDocument *doc)
                         "highlight-matching-brackets",
                         G_SETTINGS_BIND_GET | G_SETTINGS_BIND_NO_SENSITIVITY);
 
-       style_scheme = get_default_style_scheme (priv->editor_settings);
-       if (style_scheme != NULL)
-       {
-               gtk_source_buffer_set_style_scheme (GTK_SOURCE_BUFFER (doc), style_scheme);
-       }
+       settings = _gedit_settings_get_singleton ();
+       editor_settings = _gedit_settings_peek_editor_settings (settings);
+       g_signal_connect_object (editor_settings,
+                                "changed::" GEDIT_SETTINGS_SCHEME,
+                                G_CALLBACK (editor_settings_scheme_changed_cb),
+                                doc,
+                                0);
+
+       update_style_scheme (doc);
 
        g_signal_connect (doc,
                          "notify::content-type",
diff --git a/gedit/gedit-settings.c b/gedit/gedit-settings.c
index be58cfcd5..11094e564 100644
--- a/gedit/gedit-settings.c
+++ b/gedit/gedit-settings.c
@@ -36,8 +36,6 @@ struct _GeditSettings
        GSettings *interface;
        GSettings *editor;
        GSettings *ui;
-
-       gchar *old_scheme;
 };
 
 /* GeditSettings is a singleton. */
@@ -62,8 +60,6 @@ gedit_settings_finalize (GObject *object)
 {
        GeditSettings *self = GEDIT_SETTINGS (object);
 
-       g_free (self->old_scheme);
-
        if (singleton == self)
        {
                singleton = NULL;
@@ -159,53 +155,6 @@ on_editor_font_changed (GSettings     *settings,
        }
 }
 
-static void
-on_scheme_changed (GSettings     *settings,
-                  const gchar   *key,
-                  GeditSettings *self)
-{
-       GtkSourceStyleSchemeManager *manager;
-       GtkSourceStyleScheme *style;
-       gchar *scheme;
-       GList *docs;
-       GList *l;
-
-       scheme = g_settings_get_string (settings, key);
-
-       if (self->old_scheme != NULL && g_str_equal (scheme, self->old_scheme))
-       {
-               g_free (scheme);
-               return;
-       }
-
-       g_free (self->old_scheme);
-       self->old_scheme = scheme;
-
-       manager = gtk_source_style_scheme_manager_get_default ();
-       style = gtk_source_style_scheme_manager_get_scheme (manager, scheme);
-       if (style == NULL)
-       {
-               g_warning ("Default style scheme '%s' not found, falling back to 'tango'", scheme);
-
-               style = gtk_source_style_scheme_manager_get_scheme (manager, "tango");
-               if (style == NULL)
-               {
-                       g_warning ("Style scheme 'tango' cannot be found, check your GtkSourceView 
installation.");
-                       return;
-               }
-       }
-
-       docs = gedit_app_get_documents (GEDIT_APP (g_application_get_default ()));
-
-       for (l = docs; l != NULL; l = l->next)
-       {
-               GtkSourceBuffer *buffer = GTK_SOURCE_BUFFER (l->data);
-               gtk_source_buffer_set_style_scheme (buffer, style);
-       }
-
-       g_list_free (docs);
-}
-
 static void
 on_auto_save_changed (GSettings     *settings,
                      const gchar   *key,
@@ -320,11 +269,6 @@ gedit_settings_init (GeditSettings *self)
                          G_CALLBACK (on_editor_font_changed),
                          self);
 
-       g_signal_connect (self->editor,
-                         "changed::scheme",
-                         G_CALLBACK (on_scheme_changed),
-                         self);
-
        g_signal_connect (self->editor,
                          "changed::auto-save",
                          G_CALLBACK (on_auto_save_changed),
diff --git a/meson.build b/meson.build
index f86064beb..8a8454da5 100644
--- a/meson.build
+++ b/meson.build
@@ -47,6 +47,8 @@ libgd_subproject = subproject(
 libgd_dep = libgd_subproject.get_variable('libgd_dep')
 
 # Dependencies
+glib_req = '>= 2.64'
+gtk_req = '>= 2.22'
 libpeas_req = '>= 1.14.1'
 libxml_req = '>= 2.5.0'
 libsoup_req = '>= 2.60.0'


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