From 484a5de81ddd0b395a08c9a42b71389e0b3ea3fc Mon Sep 17 00:00:00 2001 From: trav90 Date: Fri, 6 Apr 2018 10:58:03 -0500 Subject: [GTK3] Force a style resolution on context creation to set GTK 3.4 theming_engine This works around a GTK bug that led to the default engine being used instead for the first draw. --- widget/gtk/WidgetStyleCache.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'widget/gtk') diff --git a/widget/gtk/WidgetStyleCache.cpp b/widget/gtk/WidgetStyleCache.cpp index 916d7c4db..c25b426bd 100644 --- a/widget/gtk/WidgetStyleCache.cpp +++ b/widget/gtk/WidgetStyleCache.cpp @@ -714,6 +714,21 @@ CreateCSSNode(const char* aName, GtkStyleContext* aParentStyle, GType aType) gtk_style_context_set_parent(context, aParentStyle); gtk_widget_path_unref(path); + // In GTK 3.4, gtk_render_* functions use |theming_engine| on the style + // context without ensuring any style resolution sets it appropriately + // in style_data_lookup(). e.g. + // https://git.gnome.org/browse/gtk+/tree/gtk/gtkstylecontext.c?h=3.4.4#n3847 + // + // That can result in incorrect drawing on first draw. To work around this, + // force a style look-up to set |theming_engine|. It is sufficient to do + // this only on context creation, instead of after every modification to the + // context, because themes typically (Ambiance and oxygen-gtk, at least) set + // the "engine" property with the '*' selector. + if (GTK_MAJOR_VERSION == 3 && gtk_get_minor_version() < 6) { + GdkRGBA unused; + gtk_style_context_get_color(context, GTK_STATE_FLAG_NORMAL, &unused); + } + return context; } -- cgit v1.2.3