summaryrefslogtreecommitdiff
path: root/gui-libs/gtk/files/gtk-4.10.3-crash-css-color.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gui-libs/gtk/files/gtk-4.10.3-crash-css-color.patch')
-rw-r--r--gui-libs/gtk/files/gtk-4.10.3-crash-css-color.patch107
1 files changed, 107 insertions, 0 deletions
diff --git a/gui-libs/gtk/files/gtk-4.10.3-crash-css-color.patch b/gui-libs/gtk/files/gtk-4.10.3-crash-css-color.patch
new file mode 100644
index 000000000000..df8781a73a6c
--- /dev/null
+++ b/gui-libs/gtk/files/gtk-4.10.3-crash-css-color.patch
@@ -0,0 +1,107 @@
+https://gitlab.gnome.org/GNOME/gtk/-/commit/966a23503a2e8bbb948270e06f3eb13ca4c06632
+
+From 966a23503a2e8bbb948270e06f3eb13ca4c06632 Mon Sep 17 00:00:00 2001
+From: Benjamin Otte <otte@redhat.com>
+Date: Tue, 2 May 2023 19:48:54 +0200
+Subject: [PATCH] css: Don't transition to currentColor
+
+Transition to the color that is in use instead.
+
+Fixes crashes because currentColor is not an RGBA color and
+therefor could not be queried later.
+
+Fixes #5798
+--- a/gtk/gtkcssfiltervalue.c
++++ b/gtk/gtkcssfiltervalue.c
+@@ -102,10 +102,10 @@ gtk_css_filter_clear (GtkCssFilter *filter)
+ }
+
+ static void
+-gtk_css_filter_init_identity (GtkCssFilter *filter,
+- GtkCssFilterType type)
++gtk_css_filter_init_identity (GtkCssFilter *filter,
++ const GtkCssFilter *other)
+ {
+- switch (type)
++ switch (other->type)
+ {
+ case GTK_CSS_FILTER_BRIGHTNESS:
+ filter->brightness.value = _gtk_css_number_value_new (1, GTK_CSS_NUMBER);
+@@ -135,7 +135,7 @@ gtk_css_filter_init_identity (GtkCssFilter *filter,
+ filter->blur.value = _gtk_css_number_value_new (0, GTK_CSS_PX);
+ break;
+ case GTK_CSS_FILTER_DROP_SHADOW:
+- filter->drop_shadow.value = gtk_css_shadow_value_new_filter ();
++ filter->drop_shadow.value = gtk_css_shadow_value_new_filter (other->drop_shadow.value);
+ break;
+ case GTK_CSS_FILTER_NONE:
+ default:
+@@ -143,7 +143,7 @@ gtk_css_filter_init_identity (GtkCssFilter *filter,
+ break;
+ }
+
+- filter->type = type;
++ filter->type = other->type;
+ }
+
+ #define R 0.2126
+@@ -466,7 +466,7 @@ gtk_css_value_filter_equal (const GtkCssValue *value1,
+ {
+ GtkCssFilter filter;
+
+- gtk_css_filter_init_identity (&filter, larger->filters[i].type);
++ gtk_css_filter_init_identity (&filter, &larger->filters[i]);
+
+ if (!gtk_css_filter_equal (&larger->filters[i], &filter))
+ {
+@@ -590,7 +590,7 @@ gtk_css_value_filter_transition (GtkCssValue *start,
+ {
+ GtkCssFilter filter;
+
+- gtk_css_filter_init_identity (&filter, start->filters[i].type);
++ gtk_css_filter_init_identity (&filter, &start->filters[i]);
+ gtk_css_filter_transition (&result->filters[i],
+ &start->filters[i],
+ &filter,
+@@ -602,7 +602,7 @@ gtk_css_value_filter_transition (GtkCssValue *start,
+ {
+ GtkCssFilter filter;
+
+- gtk_css_filter_init_identity (&filter, end->filters[i].type);
++ gtk_css_filter_init_identity (&filter, &end->filters[i]);
+ gtk_css_filter_transition (&result->filters[i],
+ &filter,
+ &end->filters[i],
+--- a/gtk/gtkcssshadowvalue.c
++++ b/gtk/gtkcssshadowvalue.c
+@@ -331,7 +331,7 @@ gtk_css_shadow_value_new (ShadowValue *shadows,
+ }
+
+ GtkCssValue *
+-gtk_css_shadow_value_new_filter (void)
++gtk_css_shadow_value_new_filter (const GtkCssValue *other)
+ {
+ ShadowValue value;
+
+@@ -340,7 +340,7 @@ gtk_css_shadow_value_new_filter (void)
+ value.voffset = _gtk_css_number_value_new (0, GTK_CSS_NUMBER);
+ value.radius = _gtk_css_number_value_new (0, GTK_CSS_NUMBER);
+ value.spread = _gtk_css_number_value_new (0, GTK_CSS_NUMBER);
+- value.color = _gtk_css_color_value_new_current_color ();
++ value.color = gtk_css_value_ref (other->shadows[0].color);
+
+ return gtk_css_shadow_value_new (&value, 1, TRUE);
+ }
+--- a/gtk/gtkcssshadowvalueprivate.h
++++ b/gtk/gtkcssshadowvalueprivate.h
+@@ -35,7 +35,7 @@
+ G_BEGIN_DECLS
+
+ GtkCssValue * gtk_css_shadow_value_new_none (void);
+-GtkCssValue * gtk_css_shadow_value_new_filter (void);
++GtkCssValue * gtk_css_shadow_value_new_filter (const GtkCssValue *other);
+
+ GtkCssValue * gtk_css_shadow_value_parse (GtkCssParser *parser,
+ gboolean box_shadow_mode);
+--
+GitLab