diff --git a/mozilla-1160154.patch b/mozilla-1160154.patch index 8971fbb..1dbf3d5 100644 --- a/mozilla-1160154.patch +++ b/mozilla-1160154.patch @@ -1,53 +1,115 @@ +# HG changeset patch +# Parent 3a4bfa5d2d026f7d3fbfd0f87663b87b5caa9344 +# User Petr Jasicek +Bug 1160154 - Decrease padding between icons in the personal toolbar with Gtk3 by using "image-button" css style class. r=karlt + diff --git a/widget/gtk/gtk3drawing.c b/widget/gtk/gtk3drawing.c --- a/widget/gtk/gtk3drawing.c +++ b/widget/gtk/gtk3drawing.c -@@ -72,16 +72,19 @@ static gboolean is_initialized; - #define ARROW_DOWN G_PI - #define ARROW_RIGHT G_PI_2 - #define ARROW_LEFT (G_PI+G_PI_2) - - #if !GTK_CHECK_VERSION(3,14,0) - #define GTK_STATE_FLAG_CHECKED (1 << 11) - #endif - -+// See Bug 1160154 for details -+#define MAX_WIDGET_PADDING 6 -+ - static GtkStateFlags - GetStateFlagsFromGtkWidgetState(GtkWidgetState* state) - { - GtkStateFlags stateFlags = GTK_STATE_FLAG_NORMAL; - - if (state->disabled) - stateFlags = GTK_STATE_FLAG_INSENSITIVE; - else { -@@ -2590,22 +2593,22 @@ moz_gtk_add_style_border(GtkStyleContext - } - - static void - moz_gtk_add_style_padding(GtkStyleContext* style, - gint* left, gint* top, gint* right, gint* bottom) - { - GtkBorder padding; - -- gtk_style_context_get_padding(style, 0, &padding); -- -- *left += padding.left; -- *right += padding.right; -- *top += padding.top; -- *bottom += padding.bottom; -+ gtk_style_context_get_padding(style, 0, &padding); -+ -+ *left += (padding.left > MAX_WIDGET_PADDING) ? MAX_WIDGET_PADDING : padding.left; -+ *right += (padding.right > MAX_WIDGET_PADDING) ? MAX_WIDGET_PADDING : padding.right; -+ *top += (padding.top > MAX_WIDGET_PADDING) ? MAX_WIDGET_PADDING : padding.top; -+ *bottom += (padding.bottom > MAX_WIDGET_PADDING) ? MAX_WIDGET_PADDING : padding.bottom; - } - - gint - moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - gint* right, gint* bottom, GtkTextDirection direction, +@@ -2629,26 +2629,35 @@ moz_gtk_get_widget_border(GtkThemeWidget gboolean inhtml) { GtkWidget* w; - + GtkStyleContext* style; + *left = *top = *right = *bottom = 0; + + switch (widget) { + case MOZ_GTK_BUTTON: ++ case MOZ_GTK_TOOLBAR_BUTTON: + { + ensure_button_widget(); + style = gtk_widget_get_style_context(gButtonWidget); + + *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButtonWidget)); + + /* Don't add this padding in HTML, otherwise the buttons will + become too big and stuff the layout. */ + if (!inhtml) { ++ if (widget == MOZ_GTK_TOOLBAR_BUTTON) { ++ gtk_style_context_save(style); ++ gtk_style_context_add_class(style, "image-button"); ++ } ++ + moz_gtk_add_style_padding(style, left, top, right, bottom); ++ ++ if (widget == MOZ_GTK_TOOLBAR_BUTTON) ++ gtk_style_context_restore(style); + } + + moz_gtk_add_style_border(style, left, top, right, bottom); + return MOZ_GTK_SUCCESS; + } + case MOZ_GTK_ENTRY: + { + ensure_entry_widget(); +@@ -3081,16 +3090,17 @@ moz_gtk_widget_paint(GtkThemeWidgetType + GtkTextDirection direction) + { + /* A workaround for https://bugzilla.gnome.org/show_bug.cgi?id=694086 + */ + cairo_new_path(cr); + + switch (widget) { + case MOZ_GTK_BUTTON: ++ case MOZ_GTK_TOOLBAR_BUTTON: + if (state->depressed) { + ensure_toggle_button_widget(); + return moz_gtk_button_paint(cr, rect, state, + (GtkReliefStyle) flags, + gToggleButtonWidget, direction); + } + ensure_button_widget(); + return moz_gtk_button_paint(cr, rect, state, +diff --git a/widget/gtk/gtkdrawing.h b/widget/gtk/gtkdrawing.h +--- a/widget/gtk/gtkdrawing.h ++++ b/widget/gtk/gtkdrawing.h +@@ -84,16 +84,18 @@ typedef gint (*style_prop_t)(GtkStyle*, + /*** checkbox/radio flags ***/ + #define MOZ_GTK_WIDGET_CHECKED 1 + #define MOZ_GTK_WIDGET_INCONSISTENT (1 << 1) + + /*** widget type constants ***/ + typedef enum { + /* Paints a GtkButton. flags is a GtkReliefStyle. */ + MOZ_GTK_BUTTON, ++ /* Paints a button with image and no text */ ++ MOZ_GTK_TOOLBAR_BUTTON, + /* Paints a GtkCheckButton. flags is a boolean, 1=checked, 0=not checked. */ + MOZ_GTK_CHECKBUTTON, + /* Paints a GtkRadioButton. flags is a boolean, 1=checked, 0=not checked. */ + MOZ_GTK_RADIOBUTTON, + /** + * Paints the button of a GtkScrollbar. flags is a GtkArrowType giving + * the arrow direction. + */ +diff --git a/widget/gtk/nsNativeThemeGTK.cpp b/widget/gtk/nsNativeThemeGTK.cpp +--- a/widget/gtk/nsNativeThemeGTK.cpp ++++ b/widget/gtk/nsNativeThemeGTK.cpp +@@ -386,21 +386,25 @@ nsNativeThemeGTK::GetGtkWidgetAndState(u + *aWidgetFlags = CheckBooleanAttr(aFrame, nsGkAtoms::parentfocused); + } + } + } + } + + switch (aWidgetType) { + case NS_THEME_BUTTON: ++ if (aWidgetFlags) ++ *aWidgetFlags = GTK_RELIEF_NORMAL; ++ aGtkWidgetType = MOZ_GTK_BUTTON; ++ break; + case NS_THEME_TOOLBAR_BUTTON: + case NS_THEME_TOOLBAR_DUAL_BUTTON: + if (aWidgetFlags) +- *aWidgetFlags = (aWidgetType == NS_THEME_BUTTON) ? GTK_RELIEF_NORMAL : GTK_RELIEF_NONE; +- aGtkWidgetType = MOZ_GTK_BUTTON; ++ *aWidgetFlags = GTK_RELIEF_NONE; ++ aGtkWidgetType = MOZ_GTK_TOOLBAR_BUTTON; + break; + case NS_THEME_FOCUS_OUTLINE: + aGtkWidgetType = MOZ_GTK_ENTRY; + break; + case NS_THEME_CHECKBOX: + case NS_THEME_RADIO: + aGtkWidgetType = (aWidgetType == NS_THEME_RADIO) ? MOZ_GTK_RADIOBUTTON : MOZ_GTK_CHECKBUTTON; + break;