[gedit] Improve the code that applies the style scheme setting to the documents
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit] Improve the code that applies the style scheme setting to the documents
- Date: Thu, 23 Apr 2020 15:59:56 +0000 (UTC)
commit bc47fe8487307077cec9ba786fa76b2c246ff7e0
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, 68 insertions(+), 76 deletions(-)
---
diff --git a/gedit/gedit-document.c b/gedit/gedit-document.c
index cbf166033..6644eb248 100644
--- a/gedit/gedit-document.c
+++ b/gedit/gedit-document.c
@@ -637,32 +637,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 *
@@ -765,8 +808,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);
@@ -807,11 +851,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 e9b83d738..afba0c000 100644
--- a/meson.build
+++ b/meson.build
@@ -47,7 +47,7 @@ libgd_subproject = subproject(
libgd_dep = libgd_subproject.get_variable('libgd_dep')
# Dependencies
-gio_dep = dependency('gio-2.0', version: '>= 2.52')
+gio_dep = dependency('gio-2.0', version: '>= 2.64')
gtk_dep = dependency('gtk+-3.0', version: '>= 3.22')
gtksourceview_dep = dependency('gtksourceview-4', version: '>= 4.0.2')
tepl_dep = dependency('tepl-5', version: '>= 4.99')
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]