Martin Stransky d344051
# HG changeset patch
Martin Stransky d344051
# Parent ee674865d97716b0334559abb8eec54eb5c72cb0
Martin Stransky d344051
# User Martin Stransky <stransky@redhat.com>
Martin Stransky d344051
Bug 1073117 - Fixed Theme issues with GTK 3.14 - GtkButtons - use border style 
Martin Stransky d344051
property for focus rendering. Don't follow interior-focus which is always true in Gtk 3.14.
Martin Stransky d344051
r=?karlt
Martin Stransky d344051
Martin Stransky d344051
diff --git a/widget/gtk/gtk3drawing.c b/widget/gtk/gtk3drawing.c
Martin Stransky d344051
--- a/widget/gtk/gtk3drawing.c
Martin Stransky d344051
+++ b/widget/gtk/gtk3drawing.c
Martin Stransky d344051
@@ -903,29 +903,18 @@ moz_gtk_button_paint(cairo_t *cr, GdkRec
Martin Stransky d344051
                      GtkWidgetState* state,
Martin Stransky d344051
                      GtkReliefStyle relief, GtkWidget* widget,
Martin Stransky d344051
                      GtkTextDirection direction)
Martin Stransky d344051
 {
Martin Stransky d344051
     GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
Martin Stransky d344051
     GtkStyleContext* style = gtk_widget_get_style_context(widget);    
Martin Stransky d344051
     gint x = rect->x, y=rect->y, width=rect->width, height=rect->height;
Martin Stransky d344051
 
Martin Stransky d344051
-    gboolean interior_focus;
Martin Stransky d344051
-    gint focus_width, focus_pad;
Martin Stransky d344051
-
Martin Stransky d344051
-    moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad);
Martin Stransky d344051
     gtk_widget_set_direction(widget, direction);
Martin Stransky d344051
-
Martin Stransky d344051
-    if (!interior_focus && state->focused) {
Martin Stransky d344051
-        x += focus_width + focus_pad;
Martin Stransky d344051
-        y += focus_width + focus_pad;
Martin Stransky d344051
-        width -= 2 * (focus_width + focus_pad);
Martin Stransky d344051
-        height -= 2 * (focus_width + focus_pad);
Martin Stransky d344051
-    }
Martin Stransky d344051
-  
Martin Stransky d344051
+ 
Martin Stransky d344051
     gtk_style_context_save(style);
Martin Stransky d344051
     gtk_style_context_set_state(style, state_flags);
Martin Stransky d344051
 
Martin Stransky d344051
     if (state->isDefault && relief == GTK_RELIEF_NORMAL) {
Martin Stransky d344051
         /* handle default borders both outside and inside the button */
Martin Stransky d344051
         gint default_top, default_left, default_bottom, default_right;
Martin Stransky d344051
         moz_gtk_button_get_default_overflow(&default_top, &default_left,
Martin Stransky d344051
                                             &default_bottom, &default_right);
Martin Stransky d344051
@@ -948,30 +937,22 @@ moz_gtk_button_paint(cairo_t *cr, GdkRec
Martin Stransky d344051
         /* the following line can trigger an assertion (Crux theme)
Martin Stransky d344051
            file ../../gdk/gdkwindow.c: line 1846 (gdk_window_clear_area):
Martin Stransky d344051
            assertion `GDK_IS_WINDOW (window)' failed */
Martin Stransky d344051
         gtk_render_background(style, cr, x, y, width, height);
Martin Stransky d344051
         gtk_render_frame(style, cr, x, y, width, height);
Martin Stransky d344051
     }
Martin Stransky d344051
 
Martin Stransky d344051
     if (state->focused) {
Martin Stransky d344051
-        if (interior_focus) {
Martin Stransky d344051
-            GtkBorder border;
Martin Stransky d344051
-            gtk_style_context_get_border(style, state_flags, &border);
Martin Stransky d344051
-            x += border.left + focus_pad;
Martin Stransky d344051
-            y += border.top + focus_pad;
Martin Stransky d344051
-            width -= 2 * (border.left + focus_pad);
Martin Stransky d344051
-            height -= 2 * (border.top + focus_pad);
Martin Stransky d344051
-        } else {
Martin Stransky d344051
-            x -= focus_width + focus_pad;
Martin Stransky d344051
-            y -= focus_width + focus_pad;
Martin Stransky d344051
-            width += 2 * (focus_width + focus_pad);
Martin Stransky d344051
-            height += 2 * (focus_width + focus_pad);
Martin Stransky d344051
-        }
Martin Stransky d344051
-
Martin Stransky d344051
+        GtkBorder border;
Martin Stransky d344051
+        gtk_style_context_get_border(style, state_flags, &border);
Martin Stransky d344051
+        x += border.left;
Martin Stransky d344051
+        y += border.top;
Martin Stransky d344051
+        width -= (border.left + border.right);
Martin Stransky d344051
+        height -= (border.top + border.bottom);
Martin Stransky d344051
         gtk_render_focus(style, cr, x, y, width, height);
Martin Stransky d344051
     }
Martin Stransky d344051
     gtk_style_context_restore(style);
Martin Stransky d344051
     return MOZ_GTK_SUCCESS;
Martin Stransky d344051
 }
Martin Stransky d344051
 
Martin Stransky d344051
 static gint
Martin Stransky d344051
 moz_gtk_toggle_paint(cairo_t *cr, GdkRectangle* rect,