bug 1324886 with GTK versions < 3.8 draw menuitem background and frame only when in hover and not a separator r?stransky
MozReview-Commit-ID: JdZbuXRbP9X
--- a/widget/gtk/gtk3drawing.cpp
+++ b/widget/gtk/gtk3drawing.cpp
@@ -1808,22 +1808,28 @@ moz_gtk_menu_separator_paint(cairo_t *cr
}
// See gtk_menu_item_draw() for reference.
static gint
moz_gtk_menu_item_paint(WidgetNodeType widget, cairo_t *cr, GdkRectangle* rect,
GtkWidgetState* state, GtkTextDirection direction)
{
gint x, y, w, h;
+ guint minorVersion = gtk_get_minor_version();
+ GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
- GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
+ // GTK versions prior to 3.8 render the background and frame only when not
+ // a separator and in hover prelight.
+ if (minorVersion < 8 && (widget == MOZ_GTK_MENUSEPARATOR ||
+ !(state_flags & GTK_STATE_FLAG_PRELIGHT)))
+ return MOZ_GTK_SUCCESS;
+
GtkStyleContext* style = ClaimStyleContext(widget, direction, state_flags);
- bool pre_3_6 = gtk_check_version(3, 6, 0) != nullptr;
- if (pre_3_6) {
+ if (minorVersion < 6) {
// GTK+ 3.4 saves the style context and adds the menubar class to
// menubar children, but does each of these only when drawing, not
// during layout.
gtk_style_context_save(style);
if (widget == MOZ_GTK_MENUBARITEM) {
gtk_style_context_add_class(style, GTK_STYLE_CLASS_MENUBAR);
}
}
@@ -1831,17 +1837,17 @@ moz_gtk_menu_item_paint(WidgetNodeType w
x = rect->x;
y = rect->y;
w = rect->width;
h = rect->height;
gtk_render_background(style, cr, x, y, w, h);
gtk_render_frame(style, cr, x, y, w, h);
- if (pre_3_6) {
+ if (minorVersion < 6) {
gtk_style_context_restore(style);
}
ReleaseStyleContext(style);
return MOZ_GTK_SUCCESS;
}
static gint