[gtk/fix-icontheme-invalidation] settings: Use system_settings_changed
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/fix-icontheme-invalidation] settings: Use system_settings_changed
- Date: Tue, 21 Apr 2020 16:12:44 +0000 (UTC)
commit d43b95f04f6d7b62f60ff80d03a656bbeb90521b
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Apr 21 12:08:15 2020 -0400
settings: Use system_settings_changed
Replace calls to gtk_style_context_reset_widgets by
system_settings_changed. This gives us a hook to walk
the widget tree whenever a global setting changes and
do per-widget invalidations.
gtk/gtkicontheme.c | 1 -
gtk/gtksettings.c | 39 +++++++++++++++++++++++++++++----------
2 files changed, 29 insertions(+), 11 deletions(-)
---
diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c
index b1c8157de7..88bf54ed7b 100644
--- a/gtk/gtkicontheme.c
+++ b/gtk/gtkicontheme.c
@@ -1311,7 +1311,6 @@ theme_changed_idle__mainthread_unlocked (gpointer user_data)
{
GtkSettings *settings = gtk_settings_get_for_display (self->display);
gtk_style_provider_changed (GTK_STYLE_PROVIDER (settings));
- gtk_style_context_reset_widgets (self->display);
g_object_unref (display);
}
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
index c6b9634213..403bc78db3 100644
--- a/gtk/gtksettings.c
+++ b/gtk/gtksettings.c
@@ -29,7 +29,7 @@
#include "gtkstyleproviderprivate.h"
#include "gtktypebuiltins.h"
#include "gtkversion.h"
-#include "gtkwidget.h"
+#include "gtkwidgetprivate.h"
#include "gdk/gdk-private.h"
@@ -1227,6 +1227,25 @@ settings_update_font_values (GtkSettings *settings)
pango_font_description_free (desc);
}
+static void
+gtk_system_setting_changed (GdkDisplay *display,
+ GtkSystemSetting setting)
+{
+ GList *list, *toplevels;
+
+ toplevels = gtk_window_list_toplevels ();
+ g_list_foreach (toplevels, (GFunc) g_object_ref, NULL);
+
+ for (list = toplevels; list; list = list->next)
+ {
+ if (gtk_widget_get_display (list->data) == display)
+ gtk_widget_system_setting_changed (list->data, setting);
+ g_object_unref (list->data);
+ }
+
+ g_list_free (toplevels);
+}
+
static void
gtk_settings_notify (GObject *object,
GParamSpec *pspec)
@@ -1246,32 +1265,32 @@ gtk_settings_notify (GObject *object,
case PROP_FONT_NAME:
settings_update_font_values (settings);
settings_invalidate_style (settings);
- gtk_style_context_reset_widgets (settings->display);
+ gtk_system_setting_changed (settings->display, GTK_SYSTEM_SETTING_FONT_NAME);
break;
case PROP_THEME_NAME:
case PROP_APPLICATION_PREFER_DARK_THEME:
settings_update_theme (settings);
+ gtk_system_setting_changed (settings->display, GTK_SYSTEM_SETTING_THEME);
+ break;
+ case PROP_ICON_THEME_NAME:
+ gtk_system_setting_changed (settings->display, GTK_SYSTEM_SETTING_ICON_THEME);
break;
case PROP_XFT_DPI:
- /* This is a hack because with gtk_rc_reset_styles() doesn't get
- * widgets with gtk_widget_style_set(), and also causes more
- * recomputation than necessary.
- */
- gtk_style_context_reset_widgets (settings->display);
+ gtk_system_setting_changed (settings->display, GTK_SYSTEM_SETTING_DPI);
break;
case PROP_XFT_ANTIALIAS:
case PROP_XFT_HINTING:
case PROP_XFT_HINTSTYLE:
case PROP_XFT_RGBA:
settings_update_font_options (settings);
- gtk_style_context_reset_widgets (settings->display);
+ gtk_system_setting_changed (settings->display, GTK_SYSTEM_SETTING_FONT_CONFIG);
break;
case PROP_FONTCONFIG_TIMESTAMP:
if (settings_update_fontconfig (settings))
- gtk_style_context_reset_widgets (settings->display);
+ gtk_system_setting_changed (settings->display, GTK_SYSTEM_SETTING_FONT_CONFIG);
break;
case PROP_ENABLE_ANIMATIONS:
- gtk_style_context_reset_widgets (settings->display);
+ gtk_system_setting_changed (settings->display, GTK_SYSTEM_SETTING_ANIMATIONS);
break;
case PROP_CURSOR_THEME_NAME:
case PROP_CURSOR_THEME_SIZE:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]