summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-09-30 15:05:52 +0000
committerMatthias Clasen <mclasen@redhat.com>2020-09-30 15:05:52 +0000
commitc4c00461fe39d215fbd8d78efd2a9f89bbd7d888 (patch)
tree4a2bafe58597de83828f33bce5e28405c063f9a0
parent88e8a5272e4420f8040bc2cbb5be3855a0f9ee4e (diff)
parent33059211f43f775a24d1abbac70095198ff94ab7 (diff)
downloadgtk+-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.c7
-rw-r--r--gtk/gtkcsswidgetnode.c5
-rw-r--r--gtk/gtksettings.c3
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)