[Xfce4-commits] <gtk-xfce-engine:master> Merge branch 'peter/gtk3'

Peter de Ridder noreply at xfce.org
Thu Mar 29 22:00:06 CEST 2012


Updating branch refs/heads/master
         to aa2f6b7e241e5a8e7ec32d91f8f2e785ac71819c (commit)
       from e9d9e7b48b69277a064c7eb30a17b1ef16662a7d (commit)

commit aa2f6b7e241e5a8e7ec32d91f8f2e785ac71819c
Merge: e9d9e7b 955dd15
Author: Peter de Ridder <peter at xfce.org>
Date:   Thu Mar 29 21:40:31 2012 +0200

    Merge branch 'peter/gtk3'

commit 955dd154a2a28d209f1cb35bd6c1c7e556c6afc0
Author: Peter de Ridder <peter at xfce.org>
Date:   Thu Mar 29 21:37:37 2012 +0200

    Set -xfce-button-default-border (bug #8454)
    
    Xfce-stellar

commit 8e0ab26b57e5d87b7434ac3045946c07a37dff03
Author: Peter de Ridder <peter at xfce.org>
Date:   Mon Mar 26 23:39:27 2012 +0200

    Draw inset border around default button (bug #8454)
    
    Gtk 3 doesn't draw a inset border around the default button when
    -GtkButton-default-border is set. With -xfce-button-default-border this
    border will be drawn.

commit ad461c453a0415d8781280a857397639a8190271
Author: Peter de Ridder <peter at xfce.org>
Date:   Sun Mar 25 14:12:51 2012 +0200

    Use size for the radio and check boxes (bug #8456)

commit 3765a80cf3acd1e63f3207bc0b873ffcab6ef78c
Author: Peter de Ridder <peter at xfce.org>
Date:   Sun Mar 25 10:43:58 2012 +0200

    Correctly match gtk-tooltip widgets (bug #8494)

commit 3986032f9ebdde4d6c8d4df65bc1446495da0ce2
Author: Peter de Ridder <peter at xfce.org>
Date:   Sun Feb 19 15:26:41 2012 +0100

    Improved menu theming

 gtk-2.0/xfce_theme_draw.c        |  290 +++++++++++++++++++-----------------
 gtk-3.0/xfce_engine.c            |  311 ++++++++++++++++++++++++--------------
 themes/b5/gtk-3.0/gtk.css        |    9 +-
 themes/basic/gtk-3.0/gtk.css     |    4 +
 themes/cadmium/gtk-3.0/gtk.css   |    9 +-
 themes/curve/gtk-3.0/gtk.css     |   10 +-
 themes/dawn/gtk-3.0/gtk.css      |    7 +-
 themes/dusk/gtk-3.0/gtk.css      |    7 +-
 themes/kde2/gtk-3.0/gtk.css      |    5 +-
 themes/kolors/gtk-3.0/gtk.css    |    9 +-
 themes/light/gtk-3.0/gtk.css     |    8 +-
 themes/orange/gtk-3.0/gtk.css    |   14 ++-
 themes/redmondxp/gtk-3.0/gtk.css |   34 ++---
 themes/saltlake/gtk-3.0/gtk.css  |    3 +
 themes/smooth/gtk-3.0/gtk.css    |    8 +-
 themes/stellar/gtk-3.0/gtk.css   |   10 +-
 themes/winter/gtk-3.0/gtk.css    |   12 +-
 themes/xfce-4.0/gtk-3.0/gtk.css  |    8 +-
 themes/xfce-4.2/gtk-3.0/gtk.css  |   12 +-
 themes/xfce-4.4/gtk-3.0/gtk.css  |    9 +-
 themes/xfce-4.6/gtk-3.0/gtk.css  |   20 ++--
 themes/xfce/gtk-3.0/gtk.css      |   20 ++--
 22 files changed, 496 insertions(+), 323 deletions(-)

diff --git a/gtk-2.0/xfce_theme_draw.c b/gtk-2.0/xfce_theme_draw.c
index 8ffc61b..bef4648 100644
--- a/gtk-2.0/xfce_theme_draw.c
+++ b/gtk-2.0/xfce_theme_draw.c
@@ -59,83 +59,8 @@ static GtkStyleClass *parent_class = NULL;
 
 extern GtkStyleClass xfce_default_class;
 
-/* Taken from raleigh theme engine */
-typedef enum
-{
-    CHECK_LIGHT,
-    CHECK_DARK,
-    CHECK_BASE,
-    CHECK_TEXT,
-    CHECK_CROSS,
-    CHECK_DASH,
-    RADIO_LIGHT,
-    RADIO_DARK,
-    RADIO_BASE,
-    RADIO_TEXT
-}
-Part;
-
-#define PART_SIZE 13
-
-static const guint32 check_light_bits[] = {
-    0x0000, 0x0000, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800,
-    0x0800, 0x0800, 0x0ffc, 0x0000,
-};
-static const guint32 check_dark_bits[] = {
-    0x0000, 0x0ffe, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
-    0x0002, 0x0002, 0x0002, 0x0000,
-};
-static const guint32 check_base_bits[] = {
-    0x0000, 0x0000, 0x07fc, 0x07fc, 0x07fc, 0x07fc, 0x07fc, 0x07fc, 0x07fc,
-    0x07fc, 0x07fc, 0x0000, 0x0000,
-};
-static const guint32 check_text_bits[] = {
-    0x0000, 0x0000, 0x1c00, 0x0f00, 0x0380, 0x01c0, 0x00e0, 0x0073, 0x003f,
-    0x003e, 0x001c, 0x0018, 0x0008
-};
-static const guint32 check_cross_bits[] = {
-    0x0000, 0x0000, 0x0000, 0x0300, 0x0380, 0x01d8, 0x00f8, 0x0078, 0x0038,
-    0x0018, 0x0000, 0x0000, 0x0000,
-};
-static const guint32 check_dash_bits[] = {
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f8, 0x03f8, 0x03f8, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000,
-};
-static const guint32 radio_light_bits[] = {
-    0x0000, 0x0000, 0x0000, 0x0400, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800,
-    0x0400, 0x0208, 0x01f0, 0x0000,
-};
-static const guint32 radio_dark_bits[] = {
-    0x0000, 0x01f0, 0x0208, 0x0004, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
-    0x0004, 0x0000, 0x0000, 0x0000,
-};
-static const guint32 radio_base_bits[] = {
-    0x0000, 0x0000, 0x01f0, 0x03f8, 0x07fc, 0x07fc, 0x07fc, 0x07fc, 0x07fc,
-    0x03f8, 0x01f0, 0x0000, 0x0000,
-};
-static const guint32 radio_text_bits[] = {
-    0x0000, 0x0000, 0x0000, 0x0000, 0x00e0, 0x01f0, 0x01f0, 0x01f0, 0x00e0,
-    0x0000, 0x0000, 0x0000, 0x0000,
-};
-
-static struct
-{
-    const guint32 *bits;
-    cairo_surface_t *bmap;
-}
-parts[] =
-{
-    { check_light_bits, NULL },
-    { check_dark_bits,  NULL },
-    { check_base_bits,  NULL },
-    { check_text_bits,  NULL },
-    { check_cross_bits, NULL },
-    { check_dash_bits,  NULL },
-    { radio_light_bits, NULL },
-    { radio_dark_bits,  NULL },
-    { radio_base_bits,  NULL },
-    { radio_text_bits,  NULL }
-};
+#define CHECK_MIN_SIZE 15
+#define CHECK_DRAW_SIZE 11
 
 /* internal functions */
 static void xfce_fill_background(GtkStyle * style, GdkWindow * window, GtkStateType state_type, GdkRectangle * area, GtkWidget * widget, const gchar * detail, gint x, gint y, gint width, gint height);
@@ -1034,102 +959,191 @@ static void draw_box(GtkStyle * style, GdkWindow * window, GtkStateType state_ty
     draw_shadow(style, window, state_type, shadow_type, area, widget, detail, x, y, width, height);
 }
 
-static cairo_surface_t *get_part_bmap (Part part)
+static void draw_dash(cairo_t * cr, const GdkColor * c, gdouble x, gdouble y, guint size)
 {
-    if (!parts[part].bmap)
-    {
-        parts[part].bmap = cairo_image_surface_create_for_data((guchar*)parts[part].bits, CAIRO_FORMAT_A1, PART_SIZE, PART_SIZE, sizeof(guint32));
-    }
-    return parts[part].bmap;
-}
+    guint w, b;
 
-static void draw_part(GdkDrawable * drawable, GdkColor * c, GdkRectangle * area, gint x, gint y, Part part)
-{
-    cairo_t *cr;
+    b = (size + 7) / 10;
 
-    cr = ge_gdk_drawable_to_cairo(drawable, area);
+    w = size / 4;
+    if ((w % 2) != (size % 2))
+    {
+        w += 1;
+    }
 
     gdk_cairo_set_source_color(cr, c);
 
-    cairo_mask_surface(cr, get_part_bmap (part), x, y);
+    cairo_set_line_width (cr, w);
+    cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT);
 
-    cairo_destroy(cr);
+    cairo_move_to (cr, x + b, y + size / 2.0);
+    cairo_line_to (cr, x + size - b, y + size / 2.0);
+
+    cairo_stroke(cr);
 }
 
 static void draw_check(GtkStyle * style, GdkWindow * window, GtkStateType state, GtkShadowType shadow, GdkRectangle * area, GtkWidget * widget, const gchar * detail, gint x, gint y, gint width, gint height)
 {
+    cairo_t *cr;
+    guint size;
+    guint w, b;
+
     CHECK_ARGS;
     SANITIZE_SIZE;
 
-    x -= (1 + PART_SIZE - width) / 2;
-    y -= (1 + PART_SIZE - height) / 2;
-
-    if (DETAIL("check"))    /* Menu item */
+    /* Make sure it doesn't get to small */
+    if (width < CHECK_MIN_SIZE)
+        width = CHECK_DRAW_SIZE;
+    else
     {
-#if 0
-        draw_part(window, style->bg_gc[state], area, x, y, CHECK_BASE);
-#endif
-        draw_part(window, &style->dark[state], area, x, y, CHECK_LIGHT);
-        draw_part(window, &style->dark[state], area, x, y, CHECK_DARK);
+        width -= CHECK_MIN_SIZE - CHECK_DRAW_SIZE;
+        x += (CHECK_MIN_SIZE - CHECK_DRAW_SIZE) / 2;
+    }
+    if (height < CHECK_MIN_SIZE)
+        height = CHECK_DRAW_SIZE;
+    else
+    {
+        height -= CHECK_MIN_SIZE - CHECK_DRAW_SIZE;
+        y += (CHECK_MIN_SIZE - CHECK_DRAW_SIZE) / 2;
+    }
 
-        if (shadow == GTK_SHADOW_IN)
-        {
-            draw_part(window, &style->fg[state], area, x, y, CHECK_CROSS);
-        }
-        else if (shadow == GTK_SHADOW_ETCHED_IN)
-        {
-            draw_part(window, &style->fg[state], area, x, y, CHECK_DASH);
-        }
+    /* Make it square */
+    if (width > height)
+    {
+        x += width - height;
+        size = height;
     }
     else
     {
-        draw_part(window, &style->base[state], area, x, y, CHECK_BASE);
-        draw_part(window, &style->dark[state], area, x, y, CHECK_LIGHT);
-        draw_part(window, &style->dark[state], area, x, y, CHECK_DARK);
+        y += height - width;
+        size = width;
+    }
 
-        if (shadow == GTK_SHADOW_IN)
-        {
-            draw_part(window, &style->text[state], area, x, y, CHECK_CROSS);
-        }
-        else if (shadow == GTK_SHADOW_ETCHED_IN)
-        {
-            draw_part(window, &style->fg[state], area, x, y, CHECK_DASH);
-        }
+    cr = ge_gdk_drawable_to_cairo(window, area);
+
+    cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
+
+    cairo_rectangle (cr, x + 0.5, y + 0.5, width - 1, height - 1);
+
+    if (!DETAIL("check"))    /* not Menu item */
+    {
+        /* Draw the background */
+        gdk_cairo_set_source_color(cr, &style->base[state]);
+        cairo_fill_preserve(cr);
+    }
+
+    /* Draw the border */
+    gdk_cairo_set_source_color(cr, &style->dark[state]);
+    cairo_stroke(cr);
+
+    x += 1;
+    y += 1;
+    size -= 2;
+
+    if (shadow == GTK_SHADOW_IN)
+    {
+        b = (size + 7) / 10;
+        w = ((size + 4 - b) / 6);
+
+        /* Draw the check */
+        gdk_cairo_set_source_color(cr, &style->fg[state]);
+
+        cairo_move_to (cr, x + b, y + floor(size / 2 - 1.5));
+
+        cairo_line_to (cr, x + b, y + size - b);
+        cairo_line_to (cr, x + b + w, y + size - b);
+
+        cairo_line_to (cr, x + size - b, y + b + w);
+        cairo_line_to (cr, x + size - b, y + b);
+        cairo_line_to (cr, x + size - b + 1 - w, y + b);
+
+        cairo_line_to (cr, x + b + w, y + size - b + 1 - 2 * w);
+
+        cairo_line_to (cr, x + b + w, y + floor(size / 2 - 1.5));
+
+        cairo_close_path (cr);
+        cairo_fill(cr);
     }
+    else if (shadow == GTK_SHADOW_ETCHED_IN)
+    {
+        gdk_cairo_set_source_color(cr, &style->fg[state]);
+        draw_dash(cr, &style->fg[state], x, y, size);
+    }
+
+    cairo_destroy(cr);
 }
 
 static void draw_option(GtkStyle * style, GdkWindow * window, GtkStateType state, GtkShadowType shadow, GdkRectangle * area, GtkWidget * widget, const gchar * detail, gint x, gint y, gint width, gint height)
 {
+    cairo_t *cr;
+    guint size;
+
     CHECK_ARGS;
     SANITIZE_SIZE;
 
-    x -= (1 + PART_SIZE - width) / 2;
-    y -= (1 + PART_SIZE - height) / 2;
-
-    if (DETAIL("option"))   /* Menu item */
+    /* Make sure it doesn't get to small */
+    if (width < CHECK_MIN_SIZE)
+        width = CHECK_DRAW_SIZE;
+    else
     {
-#if 0
-        draw_part(window, style->bg_gc[state], area, x, y, RADIO_BASE);
-#endif
-        draw_part(window, &style->dark[state], area, x, y, RADIO_LIGHT);
-        draw_part(window, &style->dark[state], area, x, y, RADIO_DARK);
+        width -= CHECK_MIN_SIZE - CHECK_DRAW_SIZE;
+        x += (CHECK_MIN_SIZE - CHECK_DRAW_SIZE) / 2;
+    }
+    if (height < CHECK_MIN_SIZE)
+        height = CHECK_DRAW_SIZE;
+    else
+    {
+        height -= CHECK_MIN_SIZE - CHECK_DRAW_SIZE;
+        y += (CHECK_MIN_SIZE - CHECK_DRAW_SIZE) / 2;
+    }
 
-        if (shadow == GTK_SHADOW_IN)
-        {
-            draw_part(window, &style->fg[state], area, x, y, RADIO_TEXT);
-        }
+    /* Make it square */
+    if (width > height)
+    {
+        x += width - height;
+        size = height;
     }
     else
     {
-        draw_part(window, &style->base[state], area, x, y, RADIO_BASE);
-        draw_part(window, &style->dark[state], area, x, y, RADIO_LIGHT);
-        draw_part(window, &style->dark[state], area, x, y, RADIO_DARK);
+        y += height - width;
+        size = width;
+    }
 
-        if (shadow == GTK_SHADOW_IN)
-        {
-            draw_part(window, &style->text[state], area, x, y, RADIO_TEXT);
-        }
+    cr = ge_gdk_drawable_to_cairo(window, area);
+
+    cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
+
+    cairo_arc (cr, x + (width / 2.0), y + (height / 2.0), width / 2, 0, 2 * M_PI);
+
+    if (!DETAIL("option"))   /* not Menu item */
+    {
+        /* Draw the background */
+        gdk_cairo_set_source_color(cr, &style->base[state]);
+        cairo_fill_preserve(cr);
     }
+
+    /* Draw the border */
+    gdk_cairo_set_source_color(cr, &style->dark[state]);
+    cairo_stroke(cr);
+
+    x += 1;
+    y += 1;
+    size -= 2;
+
+    if (shadow == GTK_SHADOW_IN)
+    {
+        /* Draw the dot */
+        gdk_cairo_set_source_color(cr, &style->fg[state]);
+
+        cairo_arc (cr, x + (size / 2.0), y + (size / 2.0), (size / 2.0) - ((size + 2) / 5), 0, 2 * M_PI);
+        cairo_fill(cr);
+    }
+    else if (shadow == GTK_SHADOW_ETCHED_IN)
+    {
+        draw_dash(cr, &style->fg[state], x, y, size);
+    }
+
+    cairo_destroy(cr);
 }
 
 static void draw_shadow_gap(GtkStyle * style, GdkWindow * window, GtkStateType state_type, GtkShadowType shadow_type, GdkRectangle * area, GtkWidget * widget, const gchar * detail, gint x, gint y, gint width, gint height, GtkPositionType gap_side, gint gap_x, gint gap_width)
diff --git a/gtk-3.0/xfce_engine.c b/gtk-3.0/xfce_engine.c
index ce25dca..e04b146 100644
--- a/gtk-3.0/xfce_engine.c
+++ b/gtk-3.0/xfce_engine.c
@@ -15,7 +15,7 @@
  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  *
  *  Copyright (C) 1999-2004 Olivier Fourdan (fourdan at xfce.org)
- *  Copyright (C) 2011 Peter de Ridder (peter at xfce.org)
+ *  Copyright (C) 2011-2012 Peter de Ridder (peter at xfce.org)
  *
  *  Portions based Thinice port by
  *                       Tim Gerla <timg at rrv.net>,
@@ -57,6 +57,9 @@
 #define GRIP_STYLE "grip-style"
 #define XFCE_GRIP_STYLE "-"XFCE_NAMESPACE"-"GRIP_STYLE
 
+#define BUTTON_DEFAULT_BORDER "button-default-border"
+#define XFCE_BUTTON_DEFAULT_BORDER "-"XFCE_NAMESPACE"-"BUTTON_DEFAULT_BORDER
+
 /* macros to make sure that things are sane ... */
 #define GE_CAIRO_INIT                               \
     cairo_set_line_width (cr, 1.0);                 \
@@ -65,86 +68,12 @@
 
 G_DEFINE_DYNAMIC_TYPE(XfceEngine, xfce_engine, GTK_TYPE_THEMING_ENGINE)
 
-/* Taken from raleigh theme engine */
-typedef enum
-{
-    CHECK_LIGHT,
-    CHECK_DARK,
-    CHECK_BASE,
-    CHECK_TEXT,
-    CHECK_CROSS,
-    CHECK_DASH,
-    RADIO_LIGHT,
-    RADIO_DARK,
-    RADIO_BASE,
-    RADIO_TEXT
-}
-Part;
-
-#define PART_SIZE 13
-
-static const guint32 check_light_bits[] = {
-    0x0000, 0x0000, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800,
-    0x0800, 0x0800, 0x0ffc, 0x0000,
-};
-static const guint32 check_dark_bits[] = {
-    0x0000, 0x0ffe, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
-    0x0002, 0x0002, 0x0002, 0x0000,
-};
-static const guint32 check_base_bits[] = {
-    0x0000, 0x0000, 0x07fc, 0x07fc, 0x07fc, 0x07fc, 0x07fc, 0x07fc, 0x07fc,
-    0x07fc, 0x07fc, 0x0000, 0x0000,
-};
-static const guint32 check_text_bits[] = {
-    0x0000, 0x0000, 0x1c00, 0x0f00, 0x0380, 0x01c0, 0x00e0, 0x0073, 0x003f,
-    0x003e, 0x001c, 0x0018, 0x0008
-};
-static const guint32 check_cross_bits[] = {
-    0x0000, 0x0000, 0x0000, 0x0300, 0x0380, 0x01d8, 0x00f8, 0x0078, 0x0038,
-    0x0018, 0x0000, 0x0000, 0x0000,
-};
-static const guint32 check_dash_bits[] = {
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f8, 0x03f8, 0x03f8, 0x0000,
-    0x0000, 0x0000, 0x0000, 0x0000,
-};
-static const guint32 radio_light_bits[] = {
-    0x0000, 0x0000, 0x0000, 0x0400, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800,
-    0x0400, 0x0208, 0x01f0, 0x0000,
-};
-static const guint32 radio_dark_bits[] = {
-    0x0000, 0x01f0, 0x0208, 0x0004, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
-    0x0004, 0x0000, 0x0000, 0x0000,
-};
-static const guint32 radio_base_bits[] = {
-    0x0000, 0x0000, 0x01f0, 0x03f8, 0x07fc, 0x07fc, 0x07fc, 0x07fc, 0x07fc,
-    0x03f8, 0x01f0, 0x0000, 0x0000,
-};
-static const guint32 radio_text_bits[] = {
-    0x0000, 0x0000, 0x0000, 0x0000, 0x00e0, 0x01f0, 0x01f0, 0x01f0, 0x00e0,
-    0x0000, 0x0000, 0x0000, 0x0000,
-};
-
-static struct
-{
-    const guint32 *bits;
-    cairo_surface_t *bmap;
-}
-parts[] =
-{
-    { check_light_bits, NULL },
-    { check_dark_bits,  NULL },
-    { check_base_bits,  NULL },
-    { check_text_bits,  NULL },
-    { check_cross_bits, NULL },
-    { check_dash_bits,  NULL },
-    { radio_light_bits, NULL },
-    { radio_dark_bits,  NULL },
-    { radio_base_bits,  NULL },
-    { radio_text_bits,  NULL }
-};
+#define CHECK_MIN_SIZE 15
+#define CHECK_DRAW_SIZE 11
 
 /* internal functions */
 static void xfce_draw_grips(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkOrientation orientation);
+static void xfce_draw_frame(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkBorderStyle border_style);
 
 static void render_line(GtkThemingEngine * engine, cairo_t * cr, gdouble x1, gdouble y1, gdouble x2, gdouble y2);
 static void render_background(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height);
@@ -484,13 +413,58 @@ static void render_frame(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdo
     gint xthick, ythick;
     GtkStateFlags state;
     GtkBorderStyle border_style;
+    GtkBorder border;
+    GtkBorder *default_border;
+
+    state = gtk_theming_engine_get_state(engine);
+    gtk_theming_engine_get(engine, state, GTK_STYLE_PROPERTY_BORDER_STYLE, &border_style, NULL);
+
+    xthick = border.left;
+    ythick = border.top;
+
+    xt = MIN(xthick, width - 1);
+    yt = MIN(ythick, height - 1);
+
+    /* Spin buttons are a special case */
+    if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_SPINBUTTON) && gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_BUTTON))
+    {
+        /* Draw an outset border when hovering a spinner button */
+        if (!(state & GTK_STATE_FLAG_ACTIVE))
+            border_style = GTK_BORDER_STYLE_OUTSET;
+    }
+
+    /* Default buttons are a special case */
+    if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_BUTTON) && gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_DEFAULT))
+    {
+        /* Draw an inset border around the default border */
+        gtk_theming_engine_get(engine, state, XFCE_BUTTON_DEFAULT_BORDER, &default_border, NULL);
+
+	if (default_border &&
+            (default_border->left > xt) && (default_border->right > xt) &&
+	    (default_border->top > yt) && (default_border->bottom > yt))
+	{
+            xfce_draw_frame(engine, cr, x - default_border->left, y - default_border->top,
+                    width + default_border->left + default_border->right, height + default_border->top + default_border->bottom,
+                    GTK_BORDER_STYLE_INSET);
+	}
+
+        gtk_border_free(default_border);
+    }
+
+    xfce_draw_frame(engine, cr, x, y, width, height, border_style);
+}
+
+static void xfce_draw_frame(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkBorderStyle border_style)
+{
+    gint xt, yt;
+    gint xthick, ythick;
+    GtkStateFlags state;
     GdkRGBA dark, light, mid, bg;
     GdkRGBA black = {0.0, 0.0, 0.0, 1.0}; /* black */
     gboolean smooth_edge;
     GtkBorder border;
 
     state = gtk_theming_engine_get_state(engine);
-    gtk_theming_engine_get(engine, state, GTK_STYLE_PROPERTY_BORDER_STYLE, &border_style, NULL);
 
     if (border_style == GTK_BORDER_STYLE_NONE)
         return;
@@ -503,14 +477,6 @@ static void render_frame(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdo
     xthick = border.left;
     ythick = border.top;
 
-    /* Spin buttons are a special case */
-    if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_SPINBUTTON) && gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_BUTTON))
-    {
-        /* Draw an outset border when hovering a spinner button */
-        if (!(state & GTK_STATE_FLAG_ACTIVE))
-            border_style = GTK_BORDER_STYLE_OUTSET;
-    }
-
     xt = MIN(xthick, width - 1);
     yt = MIN(ythick, height - 1);
 
@@ -986,47 +952,117 @@ static void render_frame(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdo
     }
 }
 
-static cairo_surface_t *get_part_bmap (Part part)
+static void draw_dash(cairo_t * cr, const GdkRGBA * c, gdouble x, gdouble y, guint size)
 {
-    if (!parts[part].bmap)
+    guint w, b;
+
+    b = (size + 7) / 10;
+
+    w = size / 4;
+    if ((w % 2) != (size % 2))
     {
-        parts[part].bmap = cairo_image_surface_create_for_data((guchar*)parts[part].bits, CAIRO_FORMAT_A1, PART_SIZE, PART_SIZE, sizeof(guint32));
+        w += 1;
     }
-    return parts[part].bmap;
-}
 
-static void draw_part(cairo_t * cr, const GdkRGBA * c, gdouble x, gdouble y, Part part)
-{
     gdk_cairo_set_source_rgba(cr, c);
 
-    cairo_mask_surface(cr, get_part_bmap (part), x, y);
+    cairo_set_line_width (cr, w);
+    cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT);
+
+    cairo_move_to (cr, x + b, y + size / 2.0);
+    cairo_line_to (cr, x + size - b, y + size / 2.0);
+
+    cairo_stroke(cr);
 }
 
 static void render_check(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height)
 {
     GtkStateFlags state;
     GdkRGBA bg, border, fg;
+    guint size;
+    guint w, b;
 
-    x -= floor((1 + PART_SIZE - width) / 2);
-    y -= floor((1 + PART_SIZE - height) / 2);
+    /* Make sure it doesn't get to small */
+    if (width < CHECK_MIN_SIZE)
+        width = CHECK_DRAW_SIZE;
+    else
+    {
+        width -= CHECK_MIN_SIZE - CHECK_DRAW_SIZE;
+        x += (CHECK_MIN_SIZE - CHECK_DRAW_SIZE) / 2;
+    }
+    if (height < CHECK_MIN_SIZE)
+        height = CHECK_DRAW_SIZE;
+    else
+    {
+        height -= CHECK_MIN_SIZE - CHECK_DRAW_SIZE;
+        y += (CHECK_MIN_SIZE - CHECK_DRAW_SIZE) / 2;
+    }
+
+    /* Make it square */
+    if (width > height)
+    {
+        x += width - height;
+        size = height;
+    }
+    else
+    {
+        y += height - width;
+        size = width;
+    }
 
     state = gtk_theming_engine_get_state(engine);
     gtk_theming_engine_get_background_color(engine, state, &bg);
     gtk_theming_engine_get_border_color(engine, state, &border);
     gtk_theming_engine_get_color(engine, state, &fg);
 
+    GE_CAIRO_INIT;
+
+    cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
+
+    cairo_rectangle (cr, x + 0.5, y + 0.5, size - 1, size - 1);
+
     if (!gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENUITEM))
-        draw_part(cr, &bg, x, y, CHECK_BASE);
-    draw_part(cr, &border, x, y, CHECK_LIGHT);
-    draw_part(cr, &border, x, y, CHECK_DARK);
+    {
+        /* Draw the background */
+        gdk_cairo_set_source_rgba(cr, &bg);
+        cairo_fill_preserve(cr);
+    }
+
+    /* Draw the border */
+    gdk_cairo_set_source_rgba(cr, &border);
+    cairo_stroke(cr);
+
+    x += 1;
+    y += 1;
+    size -= 2;
 
     if (state & GTK_STATE_FLAG_INCONSISTENT)
     {
-        draw_part(cr, &fg, x, y, CHECK_DASH);
+        draw_dash(cr, &fg, x, y, size);
     }
     else if (state & GTK_STATE_FLAG_ACTIVE)
     {
-        draw_part(cr, &fg, x, y, CHECK_CROSS);
+        b = (size + 7) / 10;
+        w = ((size + 4 - b) / 6);
+
+        /* Draw the check */
+        gdk_cairo_set_source_rgba(cr, &fg);
+
+        cairo_move_to (cr, x + b, y + floor(size / 2 - 1.5));
+
+        cairo_line_to (cr, x + b, y + size - b);
+        cairo_line_to (cr, x + b + w, y + size - b);
+
+        cairo_line_to (cr, x + size - b, y + b + w);
+        cairo_line_to (cr, x + size - b, y + b);
+        cairo_line_to (cr, x + size - b + 1 - w, y + b);
+
+        cairo_line_to (cr, x + b + w, y + size - b + 1 - 2 * w);
+
+        cairo_line_to (cr, x + b + w, y + floor(size / 2 - 1.5));
+
+        cairo_close_path (cr);
+        cairo_fill(cr);
     }
 }
 
@@ -1034,27 +1070,73 @@ static void render_option(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gd
 {
     GtkStateFlags state;
     GdkRGBA bg, border, fg;
+    guint size;
 
-    x -= (1 + PART_SIZE - width) / 2;
-    y -= (1 + PART_SIZE - height) / 2;
+    /* Make sure it doesn't get to small */
+    if (width < CHECK_MIN_SIZE)
+        width = CHECK_DRAW_SIZE;
+    else
+    {
+        width -= CHECK_MIN_SIZE - CHECK_DRAW_SIZE;
+        x += (CHECK_MIN_SIZE - CHECK_DRAW_SIZE) / 2;
+    }
+    if (height < CHECK_MIN_SIZE)
+        height = CHECK_DRAW_SIZE;
+    else
+    {
+        height -= CHECK_MIN_SIZE - CHECK_DRAW_SIZE;
+        y += (CHECK_MIN_SIZE - CHECK_DRAW_SIZE) / 2;
+    }
+
+    /* Make it square */
+    if (width > height)
+    {
+        x += width - height;
+        size = height;
+    }
+    else
+    {
+        y += height - width;
+        size = width;
+    }
 
     state = gtk_theming_engine_get_state(engine);
     gtk_theming_engine_get_background_color(engine, state, &bg);
     gtk_theming_engine_get_border_color(engine, state, &border);
     gtk_theming_engine_get_color(engine, state, &fg);
 
+    GE_CAIRO_INIT;
+
+    cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
+
+    cairo_arc (cr, x + (size / 2.0), y + (size / 2.0), (size - 1) / 2.0, 0, 2 * M_PI);
+
     if (!gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENUITEM))
-        draw_part(cr, &bg, x, y, RADIO_BASE);
-    draw_part(cr, &border, x, y, RADIO_LIGHT);
-    draw_part(cr, &border, x, y, RADIO_DARK);
+    {
+        /* Draw the background */
+        gdk_cairo_set_source_rgba(cr, &bg);
+        cairo_fill_preserve(cr);
+    }
+
+    /* Draw the border */
+    gdk_cairo_set_source_rgba(cr, &border);
+    cairo_stroke(cr);
+
+    x += 1;
+    y += 1;
+    size -= 2;
 
     if (state & GTK_STATE_FLAG_INCONSISTENT)
     {
-        draw_part(cr, &fg, x, y, CHECK_DASH);
+        draw_dash(cr, &fg, x, y, size);
     }
     else if (state & GTK_STATE_FLAG_ACTIVE)
     {
-        draw_part(cr, &fg, x, y, RADIO_TEXT);
+        /* Draw the dot */
+        gdk_cairo_set_source_rgba(cr, &fg);
+
+        cairo_arc (cr, x + (size / 2.0), y + (size / 2.0), (size / 2.0) - ((size + 2) / 5), 0, 2 * M_PI);
+        cairo_fill(cr);
     }
 }
 
@@ -1352,6 +1434,8 @@ static void render_frame_gap(GtkThemingEngine * engine, cairo_t * cr, gdouble x,
             ew = 2;
             eh = gap_e - gap_s;
             break;
+        default:
+            return;
     }
 
     cairo_save (cr);
@@ -1363,7 +1447,7 @@ static void render_frame_gap(GtkThemingEngine * engine, cairo_t * cr, gdouble x,
     cairo_rectangle (cr, x0, ey + eh, x1 - x0, y_1 - (ey + eh));
     cairo_clip (cr);
 
-    render_frame (engine, cr, x, y, width, height);
+    xfce_draw_frame (engine, cr, x, y, width, height, border_style);
 
     cairo_restore (cr);
 }
@@ -1576,6 +1660,13 @@ static void xfce_engine_class_init(XfceEngineClass * klass)
     gtk_theming_engine_register_property(XFCE_NAMESPACE, NULL,
             g_param_spec_enum(GRIP_STYLE, "Grip style", "Grip style",
                 XFCE_TYPE_GRIP_STYLE, XFCE_GRIP_ROUGH, 0));
+
+    /* Compatibility properties */
+    gtk_theming_engine_register_property(XFCE_NAMESPACE, NULL,
+            g_param_spec_boxed (BUTTON_DEFAULT_BORDER,
+                "Default Spacing",
+                "Extra space to add for GTK_CAN_DEFAULT buttons",
+                GTK_TYPE_BORDER, 0));
 }
 
 static void xfce_engine_class_finalize(XfceEngineClass * klass)
diff --git a/themes/b5/gtk-3.0/gtk.css b/themes/b5/gtk-3.0/gtk.css
index 6b386e7..e3984ac 100644
--- a/themes/b5/gtk-3.0/gtk.css
+++ b/themes/b5/gtk-3.0/gtk.css
@@ -34,7 +34,6 @@
     -GtkWidget-focus-padding         : 0;
     -GtkCheckButton-indicator-size   : 15;
     -GtkMenuBar-shadow-type          : out;
-    -GtkMenuItem-selected-shadow-type: out;
     -GtkRange-slider-width           : 11;
     -GtkRange-stepper-size           : 11;
     -GtkRange-stepper-spacing        : 0;
@@ -295,6 +294,14 @@ GtkCalendar:selected {
     border-color: @fg_selected;
 }
 
+.menuitem {
+    border-width: 2 2;
+}
+
+.menuitem:hover {
+    border-style: outset;
+}
+
 .slider {
     color: #525051;
 
diff --git a/themes/basic/gtk-3.0/gtk.css b/themes/basic/gtk-3.0/gtk.css
index a9850ae..9c8ed0d 100644
--- a/themes/basic/gtk-3.0/gtk.css
+++ b/themes/basic/gtk-3.0/gtk.css
@@ -43,6 +43,10 @@
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#4B6983, 1.0)), to(shade(#4B6983, 1.1)));
 }
 
+.menuitem {
+    border-width: 0 0;
+}
+
 .scrollbar, .scale {
     border-width: 2 2;
 }
diff --git a/themes/cadmium/gtk-3.0/gtk.css b/themes/cadmium/gtk-3.0/gtk.css
index eed815c..e1aa2d3 100644
--- a/themes/cadmium/gtk-3.0/gtk.css
+++ b/themes/cadmium/gtk-3.0/gtk.css
@@ -318,7 +318,7 @@ GtkCalendar:selected {
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.05)), to(shade(@bg_insensitive, 0.95)));
 }
 
-.dock:hover, .menubar:hover, .toolbar:hover {
+.dock:hover, .toolbar:hover {
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_prelight, 1.05)), to(shade(@bg_prelight, 0.95)));
 }
 
@@ -348,7 +348,12 @@ GtkCalendar:selected {
 }
 
 .menuitem {
-    border-width: 1 2;
+    border-width: 1 1;
+    background-image: none;
+}
+
+.menuitem:hover {
+    border-style: solid;
 }
 
 .slider.vertical, .progressbar.vertical {
diff --git a/themes/curve/gtk-3.0/gtk.css b/themes/curve/gtk-3.0/gtk.css
index c80e03e..26b1679 100644
--- a/themes/curve/gtk-3.0/gtk.css
+++ b/themes/curve/gtk-3.0/gtk.css
@@ -33,7 +33,6 @@
     -GtkWidget-focus-padding         : 0;
     -GtkCheckButton-indicator-size   : 15;
     -GtkMenuBar-shadow-type          : out;
-    -GtkMenuItem-selected-shadow-type: out;
     -GtkRange-slider-width           : 15;
     -GtkRange-stepper-size           : 15;
     -GtkRange-stepper-spacing        : 0;
@@ -319,7 +318,7 @@ GtkCalendar:selected {
     border-color: @fg_selected;
 }
 
-.dock:hover, .menubar:hover, .toolbar:hover {
+.dock:hover .toolbar:hover {
     color: #ffffff;
     background-color: #4464ac;
     border-color: darker(#4464ac);
@@ -341,8 +340,13 @@ GtkCalendar:selected {
 
 .menuitem:hover {
     color: #ffffff;
-    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#4464ac, 0.8)), to(shade(#4464ac, 1.0)));
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#4464ac, 0.8)), to(shade(#4464ac, 1.8)));
     border-color: darker(#4464ac);
+    border-style: outset;
+}
+
+.menuitem *:hover {
+    color: #ffffff;
 }
 
 .menuitem:selected {
diff --git a/themes/dawn/gtk-3.0/gtk.css b/themes/dawn/gtk-3.0/gtk.css
index 980f24c..9b40227 100644
--- a/themes/dawn/gtk-3.0/gtk.css
+++ b/themes/dawn/gtk-3.0/gtk.css
@@ -36,7 +36,6 @@
     -GtkCheckButton-indicator-size   : 12;
     -GtkMenuBar-internal-padding     : 4;
     -GtkMenuBar-shadow-type          : out;
-    -GtkMenuItem-selected-shadow-type: etched-in;
     -GtkPaned-handle-size     	     : 7;
     -GtkRange-slider-width           : 16;
     -GtkRange-stepper-size           : 16;
@@ -366,7 +365,11 @@ GtkCalendar:selected {
 }
 
 .menuitem {
-    border-width: 1 2;
+    border-width: 1 1;
+}
+
+.menuitem:hover {
+    border-style: solid;
 }
 
 .radio {
diff --git a/themes/dusk/gtk-3.0/gtk.css b/themes/dusk/gtk-3.0/gtk.css
index c2cd051..2891f3d 100644
--- a/themes/dusk/gtk-3.0/gtk.css
+++ b/themes/dusk/gtk-3.0/gtk.css
@@ -36,7 +36,6 @@
     -GtkCheckButton-indicator-size   : 8;
     -GtkMenuBar-internal-padding     : 1;
     -GtkMenuBar-shadow-type          : out;
-    -GtkMenuItem-selected-shadow-type: etched-in;
     -GtkPaned-handle-size     	     : 4;
     -GtkRange-slider-width           : 12;
     -GtkRange-stepper-size           : 10;
@@ -345,7 +344,11 @@ GtkCalendar:selected {
 }
 
 .menuitem {
-    border-width: 1 2;
+    border-width: 1 1;
+}
+
+.menuitem:hover {
+    border-style: solid;
 }
 
 .slider.vertical {
diff --git a/themes/kde2/gtk-3.0/gtk.css b/themes/kde2/gtk-3.0/gtk.css
index 6a1d7a3..6605da0 100644
--- a/themes/kde2/gtk-3.0/gtk.css
+++ b/themes/kde2/gtk-3.0/gtk.css
@@ -32,7 +32,6 @@
     -GtkButton-default-outside-border: 0;
     -GtkWidget-focus-line-width      : 1;
     -GtkCheckButton-indicator-size   : 15;
-    -GtkMenuItem-selected-shadow-type: in;
     -GtkRange-slider-width           : 15;
     -GtkRange-stepper-size           : 15;
     -GtkRange-trough-border          : 0;
@@ -327,3 +326,7 @@ GtkCalendar:selected {
 .button:selected {
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.9)), to(shade(@bg_selected, 1.1)));
 }
+
+.menuitem:hover {
+    border-style: inset;
+}
diff --git a/themes/kolors/gtk-3.0/gtk.css b/themes/kolors/gtk-3.0/gtk.css
index 4f8f371..e0fe63c 100644
--- a/themes/kolors/gtk-3.0/gtk.css
+++ b/themes/kolors/gtk-3.0/gtk.css
@@ -34,7 +34,6 @@
     -GtkWidget-focus-padding         : 0;
     -GtkCheckButton-indicator-size   : 15;
     -GtkMenuBar-shadow-type          : out;
-    -GtkMenuItem-selected-shadow-type: none;
     -GtkRange-slider-width           : 11;
     -GtkRange-stepper-size           : 13;
     -GtkRange-stepper-spacing        : 0;
@@ -378,3 +377,11 @@ GtkCalendar:selected {
 .button.vertical:selected, .slider.vertical:selected {
     background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_selected, 0.9)), to(shade(@bg_selected, 1.1)));
 }
+
+.menuitem {
+    border-width: 0 0;
+}
+
+.menuitem:hover {
+    border-style: none;
+}
diff --git a/themes/light/gtk-3.0/gtk.css b/themes/light/gtk-3.0/gtk.css
index 7ce6f0c..aef787f 100644
--- a/themes/light/gtk-3.0/gtk.css
+++ b/themes/light/gtk-3.0/gtk.css
@@ -34,7 +34,6 @@
     -GtkWidget-focus-padding         : 0;
     -GtkCheckButton-indicator-size   : 15;
     -GtkMenuBar-shadow-type          : out;
-    -GtkMenuItem-selected-shadow-type: in;
     -GtkRange-slider-width           : 15;
     -GtkRange-stepper-size           : 15;
     -GtkRange-stepper-spacing        : 0;
@@ -318,3 +317,10 @@ GtkCalendar:selected {
     border-color: darker(#f5f5dd);
 }
 
+.menuitem {
+    border-width: 2 2;
+}
+
+.menuitem:hover {
+    border-style: inset;
+}
diff --git a/themes/orange/gtk-3.0/gtk.css b/themes/orange/gtk-3.0/gtk.css
index ae01db4..161f108 100644
--- a/themes/orange/gtk-3.0/gtk.css
+++ b/themes/orange/gtk-3.0/gtk.css
@@ -39,7 +39,6 @@
     -GtkButton-child-displacement-x  : 0;
     -GtkButton-child-displacement-y  : 1;
     -GtkCheckButton-indicator-size   : 12;
-    -GtkMenuItem-selected-shadow-type: none;
     -GtkPaned-handle-size            : 7;
     -GtkRange-slider-width           : 15;
     -GtkRange-stepper-size           : 15;
@@ -339,7 +338,7 @@ GtkCalendar:selected {
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#f8f7f5, 1.05)), to(shade(#f8f7f5, 0.95)));
     border-color: darker(#f8f7f5);
 
-    border-width: 1 2;
+    border-width: 0 0;
 }
 
 .menuitem:active, .menu:active {
@@ -353,10 +352,17 @@ GtkCalendar:selected {
     border-color: darker(#f8f7f5);
 }
 
-.menuitem:hover, .menu:hover {
+.menu:hover {
+    color: #000000;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#ffe371, 1.05)), to(shade(#ffe371, 0.95)));
+    border-color: darker(#ffe371);
+}
+
+.menuitem:hover {
     color: #000000;
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#ffe371, 1.05)), to(shade(#ffe371, 0.95)));
     border-color: darker(#ffe371);
+    border-style: none;
 }
 
 .menuitem:selected, .menu:selected {
@@ -378,7 +384,7 @@ GtkCalendar:selected {
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.05)), to(shade(@bg_insensitive, 0.95)));
 }
 
-.menubar:hover, .toolbar:hover {
+.toolbar:hover {
     color: #000000;
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#fff0b3, 1.05)), to(shade(#fff0b3, 0.95)));
     border-color: darker(#fff0b3);
diff --git a/themes/redmondxp/gtk-3.0/gtk.css b/themes/redmondxp/gtk-3.0/gtk.css
index 26afbcb..af1217c 100644
--- a/themes/redmondxp/gtk-3.0/gtk.css
+++ b/themes/redmondxp/gtk-3.0/gtk.css
@@ -34,7 +34,6 @@
     -GtkWidget-focus-padding         : 0;
     -GtkCheckButton-indicator-size   : 15;
     -GtkMenuBar-shadow-type          : out;
-    -GtkMenuItem-selected-shadow-type: none;
     -GtkRange-slider-width           : 15;
     -GtkRange-stepper-size           : 15;
     -GtkRange-stepper-spacing        : 0;
@@ -348,31 +347,15 @@ GtkCalendar:selected {
 }
 
 .menubar {
-    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 0.9)), to(shade(@bg_normal, 1.1)));
-
     border-width: 2 2;
 }
 
 .menubar:active {
     color: #ffffff;
-    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#0055ef, 1.1)), to(shade(#0055ef, 0.9)));
-    border-color: darker(#0055ef);
-}
-
-.menubar:insensitive {
-    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 0.9)), to(shade(@bg_insensitive, 1.1)));
-}
-
-.menubar:hover {
-    color: #ffffff;
-    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#0055ef, 0.9)), to(shade(#0055ef, 1.1)));
+    background-color: #0055ef;
     border-color: darker(#0055ef);
 }
 
-.menubar:selected {
-    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 1.1)), to(shade(@bg_selected, 0.9)));
-}
-
 .button {
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#fafaf2, 1.1)), to(shade(#fafaf2, 0.9)));
     border-color: darker(#fafaf2);
@@ -449,6 +432,21 @@ GtkCalendar:selected {
     border-color: darker(#efebdf);
 }
 
+.menuitem {
+    border-width: 0 0;
+}
+
+.menuitem:hover {
+    color: #ffffff;
+    background-color: #0055ef;
+    border-color: darker(#0055ef);
+    border-style: none;
+}
+
+.menuitem *:hover {
+    color: #ffffff;
+}
+
 .scale.slider.horizontal {
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#efebdf, 1.1)), to(shade(#efebdf, 0.9)));
     border-color: darker(#efebdf);
diff --git a/themes/saltlake/gtk-3.0/gtk.css b/themes/saltlake/gtk-3.0/gtk.css
index 96d8e96..ccd28b0 100644
--- a/themes/saltlake/gtk-3.0/gtk.css
+++ b/themes/saltlake/gtk-3.0/gtk.css
@@ -300,3 +300,6 @@ GtkCalendar:selected {
     border-width: 1 1;
 }
 
+.menuitem:hover {
+    border-style: solid;
+}
diff --git a/themes/smooth/gtk-3.0/gtk.css b/themes/smooth/gtk-3.0/gtk.css
index 6f0a541..163e838 100644
--- a/themes/smooth/gtk-3.0/gtk.css
+++ b/themes/smooth/gtk-3.0/gtk.css
@@ -33,7 +33,6 @@
     -GtkWidget-focus-line-width      : 1;
     -GtkWidget-focus-padding         : 0;
     -GtkCheckButton-indicator-size   : 15;
-    -GtkMenuItem-selected-shadow-type: out;
     -GtkRange-slider-width           : 15;
     -GtkRange-stepper-size           : 15;
     -GtkRange-stepper-spacing        : 0;
@@ -295,3 +294,10 @@ GtkCalendar:selected {
     border-color: @fg_selected;
 }
 
+.menuitem {
+    border-width: 2 2;
+}
+
+.menuitem:hover {
+    border-style: outset;
+}
diff --git a/themes/stellar/gtk-3.0/gtk.css b/themes/stellar/gtk-3.0/gtk.css
index 8a23661..04e48b3 100644
--- a/themes/stellar/gtk-3.0/gtk.css
+++ b/themes/stellar/gtk-3.0/gtk.css
@@ -31,9 +31,9 @@
 
     -GtkButton-default-border        : 5;
     -GtkButton-default-outside-border: 6;
+    -xfce-button-default-border      : 5;
     -GtkWidget-focus-padding         : 0;
     -GtkCheckButton-indicator-size   : 15;
-    -GtkMenuItem-selected-shadow-type: in;
     -GtkRange-slider-width           : 12;
     -GtkRange-stepper-size           : 12;
     -GtkRange-stepper-spacing        : 0;
@@ -76,6 +76,10 @@
     border-color: darker(@bg_selected);
 }
 
+*:focus {
+    -xfce-button-default-border: 7;
+}
+
 .view, .entry {
     color: @text_normal;
     background-color: @base_normal;
@@ -298,9 +302,9 @@ GtkCalendar:selected {
     border-color: @fg_selected;
 }
 
-.menu:hover {
+.menuitem:hover {
     color: #FFFFFF;
     background-color: #9BA0B0;
     border-color: darker(#9BA0B0);
+    border-style: inset;
 }
-
diff --git a/themes/winter/gtk-3.0/gtk.css b/themes/winter/gtk-3.0/gtk.css
index 5ad62aa..45dbcba 100644
--- a/themes/winter/gtk-3.0/gtk.css
+++ b/themes/winter/gtk-3.0/gtk.css
@@ -33,7 +33,6 @@
     -GtkButton-default-outside-border: 0;
     -GtkCheckButton-indicator-size   : 15;
     -GtkMenuBar-shadow-type          : out;
-    -GtkMenuItem-selected-shadow-type: out;
     -GtkPaned-handle-size            : 8;
     -GtkRange-slider-width           : 15;
     -GtkRange-stepper-size           : 15;
@@ -330,7 +329,7 @@ GtkCalendar:selected {
     border-color: darker(#A4B8CB);
 }
 
-.dock:hover, .menubar:hover, .toolbar:hover {
+.dock:hover .toolbar:hover {
     color: #224466;
     background-color: #B3C8DD;
     border-color: darker(#B3C8DD);
@@ -360,12 +359,19 @@ GtkCalendar:selected {
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 0.8)), to(shade(@bg_insensitive, 1.8)));
 }
 
-.button:hover, .menuitem:hover {
+.button:hover {
     color: #224466;
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#B3C8DD, 0.8)), to(shade(#B3C8DD, 1.8)));
     border-color: darker(#B3C8DD);
 }
 
+.menuitem:hover {
+    color: #224466;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#B3C8DD, 0.8)), to(shade(#B3C8DD, 1.8)));
+    border-color: darker(#B3C8DD);
+    border-style: outset;
+}
+
 .button:selected, .menuitem:selected {
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.8)), to(shade(@bg_selected, 1.8)));
 }
diff --git a/themes/xfce-4.0/gtk-3.0/gtk.css b/themes/xfce-4.0/gtk-3.0/gtk.css
index cb95aba..abba4ac 100644
--- a/themes/xfce-4.0/gtk-3.0/gtk.css
+++ b/themes/xfce-4.0/gtk-3.0/gtk.css
@@ -36,7 +36,6 @@
     -GtkButton-default-outside-border: 0;
     -GtkCheckButton-indicator-size   : 15;
     -GtkMenuBar-shadow-type          : out;
-    -GtkMenuItem-selected-shadow-type: out;
     -GtkPaned-handle-size            : 8;
     -GtkRange-slider-width           : 15;
     -GtkRange-stepper-size           : 15;
@@ -336,7 +335,7 @@ GtkCalendar:selected {
     border-color: darker(#bfbdbb);
 }
 
-.menubar:hover, .dock:hover, .toolbar:hover {
+.dock:hover, .toolbar:hover {
     color: #ffffff;
     background-color: #606080;
     border-color: darker(#606080);
@@ -362,6 +361,11 @@ GtkCalendar:selected {
     color: #ffffff;
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#606080, 0.8)), to(shade(#606080, 1.8)));
     border-color: darker(#606080);
+    border-style: outset;
+}
+
+.menuitem *:hover {
+    color: #ffffff;
 }
 
 .menuitem:selected {
diff --git a/themes/xfce-4.2/gtk-3.0/gtk.css b/themes/xfce-4.2/gtk-3.0/gtk.css
index c05e88e..8e88f4a 100644
--- a/themes/xfce-4.2/gtk-3.0/gtk.css
+++ b/themes/xfce-4.2/gtk-3.0/gtk.css
@@ -40,7 +40,6 @@
     -GtkCheckButton-indicator-size   : 12;
     -GtkMenuBar-internal-padding     : 2;
     -GtkMenuBar-shadow-type          : out;
-    -GtkMenuItem-selected-shadow-type: etched-in;
     -GtkPaned-handle-size            : 7;
     -GtkRange-slider-width           : 15;
     -GtkRange-stepper-size           : 15;
@@ -355,7 +354,7 @@ GtkCalendar:selected {
     background-color: #ffffff;
     border-color: darker(#ffffff);
 
-    border-width: 1 2;
+    border-width: 1;
 }
 
 .menuitem:active {
@@ -373,6 +372,11 @@ GtkCalendar:selected {
     color: #ffffff;
     background-color: #5582c2;
     border-color: darker(#5582c2);
+    border-style: solid;
+}
+
+.menuitem *:hover {
+    color: #ffffff;
 }
 
 .menuitem:selected {
@@ -380,14 +384,14 @@ GtkCalendar:selected {
     border-color: darker(@bg_selected);
 }
 
-.menubar:active .toolbar:active {
+.menubar:active, .toolbar:active {
     color: #ffffff;
     background-color: #d3d7e0;
     border-color: darker(#d3d7e0);
 }
 
 
-.menubar:hover .toolbar:hover {
+.toolbar:hover {
     color: #ffffff;
     background-color: #5582c2;
     border-color: darker(#5582c2);
diff --git a/themes/xfce-4.4/gtk-3.0/gtk.css b/themes/xfce-4.4/gtk-3.0/gtk.css
index d0babc0..3dd8c32 100644
--- a/themes/xfce-4.4/gtk-3.0/gtk.css
+++ b/themes/xfce-4.4/gtk-3.0/gtk.css
@@ -45,7 +45,6 @@
     -GtkButton-child-displacement-x  : 0;
     -GtkButton-child-displacement-y  : 1;
     -GtkCheckButton-indicator-size   : 12;
-    -GtkMenuItem-selected-shadow-type: etched-in;
     -GtkPaned-handle-size            : 7;
     -GtkRange-slider-width           : 15;
     -GtkRange-stepper-size           : 15;
@@ -355,7 +354,7 @@ GtkCalendar:selected {
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#ffffff, 1.1)), to(shade(#ffffff, 0.95)));
     border-color: darker(#ffffff);
 
-    border-width: 1 2;
+    border-width: 1 1;
 }
 
 .menuitem:active {
@@ -371,6 +370,7 @@ GtkCalendar:selected {
 .menuitem:hover {
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#d3d7cf, 1.1)), to(shade(#d3d7cf, 0.95)));
     border-color: darker(#d3d7cf);
+    border-style: solid;
 }
 
 .menuitem:selected {
@@ -396,11 +396,6 @@ GtkCalendar:selected {
     border-color: darker(#eeeeec);
 }
 
-.menubar:hover {
-    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#d3d7cf, 1.2)), to(shade(#d3d7cf, 0.9)));
-    border-color: darker(#d3d7cf);
-}
-
 .menubar:selected {
     color: #000000;
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.9)), to(shade(@bg_selected, 1.2)));
diff --git a/themes/xfce-4.6/gtk-3.0/gtk.css b/themes/xfce-4.6/gtk-3.0/gtk.css
index 69088e5..22416df 100644
--- a/themes/xfce-4.6/gtk-3.0/gtk.css
+++ b/themes/xfce-4.6/gtk-3.0/gtk.css
@@ -62,8 +62,6 @@
     -GtkMenu-horizontal-padding      : 0;
     -GtkMenu-vertical-padding        : 0;
 
-    -GtkMenuItem-selected-shadow-type: etched-in;
-
     -GtkPaned-handle-size            : 3;
 
     -GtkRange-slider-width           : 15;
@@ -369,7 +367,7 @@ GtkCalendar:selected {
     background-color: #fafaf7;
     border-color: darker(#fafaf7);
 
-    border-width: 1 2;
+    border-width: 1 1;
 }
 
 .menu:active, .memuitem:active {
@@ -383,10 +381,18 @@ GtkCalendar:selected {
     border-color: darker(#fafaf7);
 }
 
-.menu:hover, .menuitem:hover {
+.menu:hover {
+    color: #101010;
+    background-color: #cce2ff;
+    border-color: darker(#cce2ff);
+}
+
+.menuitem:hover {
     color: #101010;
+    background-image: none;
     background-color: #cce2ff;
     border-color: darker(#cce2ff);
+    border-style: solid;
 }
 
 .menu:selected, .menuitem:selected {
@@ -413,12 +419,6 @@ GtkCalendar:selected {
     border-color: darker(#eeeeec);
 }
 
-.menubar:hover {
-    color: #101010;
-    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#cce2ff, 1.0)), to(shade(#cce2ff, 0.9)));
-    border-color: darker(#cce2ff);
-}
-
 .menubar:selected {
     color: #101010;
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.9)), to(shade(@bg_selected, 1.0)));
diff --git a/themes/xfce/gtk-3.0/gtk.css b/themes/xfce/gtk-3.0/gtk.css
index 69088e5..22416df 100644
--- a/themes/xfce/gtk-3.0/gtk.css
+++ b/themes/xfce/gtk-3.0/gtk.css
@@ -62,8 +62,6 @@
     -GtkMenu-horizontal-padding      : 0;
     -GtkMenu-vertical-padding        : 0;
 
-    -GtkMenuItem-selected-shadow-type: etched-in;
-
     -GtkPaned-handle-size            : 3;
 
     -GtkRange-slider-width           : 15;
@@ -369,7 +367,7 @@ GtkCalendar:selected {
     background-color: #fafaf7;
     border-color: darker(#fafaf7);
 
-    border-width: 1 2;
+    border-width: 1 1;
 }
 
 .menu:active, .memuitem:active {
@@ -383,10 +381,18 @@ GtkCalendar:selected {
     border-color: darker(#fafaf7);
 }
 
-.menu:hover, .menuitem:hover {
+.menu:hover {
+    color: #101010;
+    background-color: #cce2ff;
+    border-color: darker(#cce2ff);
+}
+
+.menuitem:hover {
     color: #101010;
+    background-image: none;
     background-color: #cce2ff;
     border-color: darker(#cce2ff);
+    border-style: solid;
 }
 
 .menu:selected, .menuitem:selected {
@@ -413,12 +419,6 @@ GtkCalendar:selected {
     border-color: darker(#eeeeec);
 }
 
-.menubar:hover {
-    color: #101010;
-    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#cce2ff, 1.0)), to(shade(#cce2ff, 0.9)));
-    border-color: darker(#cce2ff);
-}
-
 .menubar:selected {
     color: #101010;
     background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.9)), to(shade(@bg_selected, 1.0)));


More information about the Xfce4-commits mailing list