diff options
author | trav90 <travawine@protonmail.ch> | 2018-04-06 10:58:03 -0500 |
---|---|---|
committer | trav90 <travawine@protonmail.ch> | 2018-04-06 10:58:03 -0500 |
commit | 5cda24f542a520480aa29829c5f7f931c43d2d68 (patch) | |
tree | 53d2ed4c9356f3128f5dbd57c37aabd6be1c1e96 /widget/gtk | |
parent | e118ded918e23c219592087ccbb27603bec964b8 (diff) | |
download | uxp-5cda24f542a520480aa29829c5f7f931c43d2d68.tar.gz |
[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.
Diffstat (limited to 'widget/gtk')
-rw-r--r-- | widget/gtk/WidgetStyleCache.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/widget/gtk/WidgetStyleCache.cpp b/widget/gtk/WidgetStyleCache.cpp index 916d7c4dbb..c25b426bdb 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; } |