diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-09-30 15:05:52 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-09-30 15:05:52 +0000 |
commit | c4c00461fe39d215fbd8d78efd2a9f89bbd7d888 (patch) | |
tree | 4a2bafe58597de83828f33bce5e28405c063f9a0 | |
parent | 88e8a5272e4420f8040bc2cbb5be3855a0f9ee4e (diff) | |
parent | 33059211f43f775a24d1abbac70095198ff94ab7 (diff) | |
download | gtk+-c4c00461fe39d215fbd8d78efd2a9f89bbd7d888.tar.gz |
Merge branch 'issue2780' into 'gtk-3-24'
cssnode: Bail out nicely if there is no settings
See merge request GNOME/gtk!2646
-rw-r--r-- | gtk/gtkcssnode.c | 7 | ||||
-rw-r--r-- | gtk/gtkcsswidgetnode.c | 5 | ||||
-rw-r--r-- | gtk/gtksettings.c | 3 |
3 files changed, 13 insertions, 2 deletions
diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c index 42d9eb6c6c..3567b3ed77 100644 --- a/gtk/gtkcssnode.c +++ b/gtk/gtkcssnode.c @@ -1432,6 +1432,7 @@ GtkStyleProviderPrivate * gtk_css_node_get_style_provider (GtkCssNode *cssnode) { GtkStyleProviderPrivate *result; + GtkSettings *settings; result = gtk_css_node_get_style_provider_or_null (cssnode); if (result) @@ -1440,7 +1441,11 @@ gtk_css_node_get_style_provider (GtkCssNode *cssnode) if (cssnode->parent) return gtk_css_node_get_style_provider (cssnode->parent); - return GTK_STYLE_PROVIDER_PRIVATE (_gtk_settings_get_style_cascade (gtk_settings_get_default (), 1)); + settings = gtk_settings_get_default (); + if (!settings) + return NULL; + + return GTK_STYLE_PROVIDER_PRIVATE (_gtk_settings_get_style_cascade (settings, 1)); } void diff --git a/gtk/gtkcsswidgetnode.c b/gtk/gtkcsswidgetnode.c index 575e3ca46b..2d65b266db 100644 --- a/gtk/gtkcsswidgetnode.c +++ b/gtk/gtkcsswidgetnode.c @@ -235,6 +235,7 @@ gtk_css_widget_node_get_style_provider (GtkCssNode *node) GtkCssWidgetNode *widget_node = GTK_CSS_WIDGET_NODE (node); GtkStyleContext *context; GtkStyleCascade *cascade; + GtkSettings *settings; if (widget_node->widget == NULL) return NULL; @@ -243,6 +244,10 @@ gtk_css_widget_node_get_style_provider (GtkCssNode *node) if (context) return gtk_style_context_get_style_provider (context); + settings = gtk_widget_get_settings (widget_node->widget); + if (!settings) + return NULL; + cascade = _gtk_settings_get_style_cascade (gtk_widget_get_settings (widget_node->widget), gtk_widget_get_scale_factor (widget_node->widget)); return GTK_STYLE_PROVIDER_PRIVATE (cascade); diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c index 0f60dcdfe4..2e7c035705 100644 --- a/gtk/gtksettings.c +++ b/gtk/gtksettings.c @@ -1843,12 +1843,13 @@ GtkStyleCascade * _gtk_settings_get_style_cascade (GtkSettings *settings, gint scale) { - GtkSettingsPrivate *priv = settings->priv; + GtkSettingsPrivate *priv; GtkStyleCascade *new_cascade; GSList *list; g_return_val_if_fail (GTK_IS_SETTINGS (settings), NULL); + priv = settings->priv; for (list = priv->style_cascades; list; list = list->next) { if (_gtk_style_cascade_get_scale (list->data) == scale) |