[gtk/fix-icontheme-invalidation] widget: Add a system_setting_changed vfunc
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/fix-icontheme-invalidation] widget: Add a system_setting_changed vfunc
- Date: Tue, 21 Apr 2020 16:12:39 +0000 (UTC)
commit a204c624828b59587e8f1faaa9e4390c9471de62
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Apr 21 12:05:45 2020 -0400
widget: Add a system_setting_changed vfunc
This is going to be a better replacement for
gtk_style_context_reset_widgets().
gtk/gtkenums.h | 10 ++++++++++
gtk/gtkwidget.c | 24 ++++++++++++++++++++++++
gtk/gtkwidget.h | 4 ++++
gtk/gtkwidgetprivate.h | 2 ++
4 files changed, 40 insertions(+)
---
diff --git a/gtk/gtkenums.h b/gtk/gtkenums.h
index 3069183f61..1f19f64ba9 100644
--- a/gtk/gtkenums.h
+++ b/gtk/gtkenums.h
@@ -1088,4 +1088,14 @@ typedef enum {
GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_RELATION
} GtkConstraintVflParserError;
+typedef enum {
+ GTK_SYSTEM_SETTING_DPI,
+ GTK_SYSTEM_SETTING_FONT_NAME,
+ GTK_SYSTEM_SETTING_FONT_CONFIG,
+ GTK_SYSTEM_SETTING_DISPLAY,
+ GTK_SYSTEM_SETTING_ICON_THEME,
+ GTK_SYSTEM_SETTING_THEME,
+ GTK_SYSTEM_SETTING_ANIMATIONS
+} GtkSystemSetting;
+
#endif /* __GTK_ENUMS_H__ */
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index b1c9bea8bd..7735d78c68 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -592,6 +592,8 @@ static gboolean gtk_widget_real_query_tooltip (GtkWidget *widget,
GtkTooltip *tooltip);
static void gtk_widget_real_css_changed (GtkWidget *widget,
GtkCssStyleChange *change);
+static void gtk_widget_real_system_setting_changed (GtkWidget *widget,
+ GtkSystemSetting setting);
static void gtk_widget_real_set_focus_child (GtkWidget *widget,
GtkWidget *child);
@@ -911,6 +913,7 @@ gtk_widget_class_init (GtkWidgetClass *klass)
klass->keynav_failed = gtk_widget_real_keynav_failed;
klass->query_tooltip = gtk_widget_real_query_tooltip;
klass->css_changed = gtk_widget_real_css_changed;
+ klass->system_setting_changed = gtk_widget_real_system_setting_changed;
/* Accessibility support */
klass->priv->accessible_type = GTK_TYPE_ACCESSIBLE;
@@ -4865,6 +4868,20 @@ gtk_widget_real_css_changed (GtkWidget *widget,
}
}
+static void
+gtk_widget_real_system_setting_changed (GtkWidget *widget,
+ GtkSystemSetting setting)
+{
+ GtkWidget *child;
+
+ for (child = _gtk_widget_get_first_child (widget);
+ child != NULL;
+ child = _gtk_widget_get_next_sibling (child))
+ {
+ gtk_widget_system_setting_changed (child, setting);
+ }
+}
+
static gboolean
direction_is_forward (GtkDirectionType direction)
{
@@ -10627,6 +10644,13 @@ gtk_widget_css_changed (GtkWidget *widget,
GTK_WIDGET_GET_CLASS (widget)->css_changed (widget, change);
}
+void
+gtk_widget_system_setting_changed (GtkWidget *widget,
+ GtkSystemSetting setting)
+{
+ GTK_WIDGET_GET_CLASS (widget)->system_setting_changed (widget, setting);
+}
+
GtkCssNode *
gtk_widget_get_css_node (GtkWidget *widget)
{
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
index a08309efb8..021a96c604 100644
--- a/gtk/gtkwidget.h
+++ b/gtk/gtkwidget.h
@@ -201,6 +201,7 @@ struct _GtkWidget
* should then discard their caches that depend on CSS and queue resizes or
* redraws accordingly. The default implementation will take care of this for
* all the default CSS properties, so implementations must chain up.
+ * @system_setting_changed: Emitted when a system setting was changed. Must chain up.
* @snapshot: Vfunc for gtk_widget_snapshot().
* @contains: Vfunc for gtk_widget_contains().
*/
@@ -277,6 +278,9 @@ struct _GtkWidgetClass
void (* css_changed) (GtkWidget *widget,
GtkCssStyleChange *change);
+ void (* system_setting_changed) (GtkWidget *widget,
+ GtkSystemSetting settings);
+
void (* snapshot) (GtkWidget *widget,
GtkSnapshot *snapshot);
diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h
index db969f4cb2..9157d7e796 100644
--- a/gtk/gtkwidgetprivate.h
+++ b/gtk/gtkwidgetprivate.h
@@ -282,6 +282,8 @@ gboolean _gtk_widget_captured_event (GtkWidget *widget,
void gtk_widget_css_changed (GtkWidget *widget,
GtkCssStyleChange *change);
+void gtk_widget_system_setting_changed (GtkWidget *widget,
+ GtkSystemSetting setting);
void _gtk_widget_update_parent_muxer (GtkWidget *widget);
GtkActionMuxer * _gtk_widget_get_action_muxer (GtkWidget *widget,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]