From d3440514d510ac87ee780a7ecc7d42b9c5300031 Mon Sep 17 00:00:00 2001 From: Martin Stransky Date: Mon, 12 Jan 2015 11:31:12 +0100 Subject: Gtk3 - added fix for button/entry focus sizes --- mozilla-1073117-button-focus.patch | 78 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 mozilla-1073117-button-focus.patch (limited to 'mozilla-1073117-button-focus.patch') diff --git a/mozilla-1073117-button-focus.patch b/mozilla-1073117-button-focus.patch new file mode 100644 index 0000000..10be353 --- /dev/null +++ b/mozilla-1073117-button-focus.patch @@ -0,0 +1,78 @@ +# HG changeset patch +# Parent ee674865d97716b0334559abb8eec54eb5c72cb0 +# User Martin Stransky +Bug 1073117 - Fixed Theme issues with GTK 3.14 - GtkButtons - use border style +property for focus rendering. Don't follow interior-focus which is always true in Gtk 3.14. +r=?karlt + +diff --git a/widget/gtk/gtk3drawing.c b/widget/gtk/gtk3drawing.c +--- a/widget/gtk/gtk3drawing.c ++++ b/widget/gtk/gtk3drawing.c +@@ -903,29 +903,18 @@ moz_gtk_button_paint(cairo_t *cr, GdkRec + GtkWidgetState* state, + GtkReliefStyle relief, GtkWidget* widget, + GtkTextDirection direction) + { + GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); + GtkStyleContext* style = gtk_widget_get_style_context(widget); + gint x = rect->x, y=rect->y, width=rect->width, height=rect->height; + +- gboolean interior_focus; +- gint focus_width, focus_pad; +- +- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); + gtk_widget_set_direction(widget, direction); +- +- if (!interior_focus && state->focused) { +- x += focus_width + focus_pad; +- y += focus_width + focus_pad; +- width -= 2 * (focus_width + focus_pad); +- height -= 2 * (focus_width + focus_pad); +- } +- ++ + gtk_style_context_save(style); + gtk_style_context_set_state(style, state_flags); + + if (state->isDefault && relief == GTK_RELIEF_NORMAL) { + /* handle default borders both outside and inside the button */ + gint default_top, default_left, default_bottom, default_right; + moz_gtk_button_get_default_overflow(&default_top, &default_left, + &default_bottom, &default_right); +@@ -948,30 +937,22 @@ moz_gtk_button_paint(cairo_t *cr, GdkRec + /* the following line can trigger an assertion (Crux theme) + file ../../gdk/gdkwindow.c: line 1846 (gdk_window_clear_area): + assertion `GDK_IS_WINDOW (window)' failed */ + gtk_render_background(style, cr, x, y, width, height); + gtk_render_frame(style, cr, x, y, width, height); + } + + if (state->focused) { +- if (interior_focus) { +- GtkBorder border; +- gtk_style_context_get_border(style, state_flags, &border); +- x += border.left + focus_pad; +- y += border.top + focus_pad; +- width -= 2 * (border.left + focus_pad); +- height -= 2 * (border.top + focus_pad); +- } else { +- x -= focus_width + focus_pad; +- y -= focus_width + focus_pad; +- width += 2 * (focus_width + focus_pad); +- height += 2 * (focus_width + focus_pad); +- } +- ++ GtkBorder border; ++ gtk_style_context_get_border(style, state_flags, &border); ++ x += border.left; ++ y += border.top; ++ width -= (border.left + border.right); ++ height -= (border.top + border.bottom); + gtk_render_focus(style, cr, x, y, width, height); + } + gtk_style_context_restore(style); + return MOZ_GTK_SUCCESS; + } + + static gint + moz_gtk_toggle_paint(cairo_t *cr, GdkRectangle* rect, -- cgit