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

Peter de Ridder noreply at xfce.org
Sun Jan 8 17:10:03 CET 2012


Updating branch refs/heads/peter/gtk3
         to ca97cba4b998dc068097016f6e2655c396151f35 (commit)
       from b987209c2065518f6354f13883f8bc4180a251a0 (commit)

commit ca97cba4b998dc068097016f6e2655c396151f35
Merge: b987209 cab2bc1
Author: Peter de Ridder <peter at xfce.org>
Date:   Sat Dec 17 16:24:06 2011 +0100

    Merge branch 'peter/gtk3'

commit cab2bc1fbe877bea724e454ab7545fa3777b68f5
Author: Peter de Ridder <peter at xfce.org>
Date:   Tue Dec 13 23:46:20 2011 +0100

    Removed non-existing style properties

commit e43f1ad1f60932c71dc3d42a2867dd109be1b734
Author: Peter de Ridder <peter at xfce.org>
Date:   Mon Dec 12 14:56:41 2011 +0100

    More consistency with Gtk 2 for check, radio and notebook tab

commit 4e67318b817588aa941542a02849c2394fe1c462
Author: Peter de Ridder <peter at xfce.org>
Date:   Mon Dec 12 14:54:48 2011 +0100

    For grip style slide use color instead of background:selected

commit 18dcbfbff5e3df29e9dede82004bff9b5e896abc
Author: Peter de Ridder <peter at xfce.org>
Date:   Sun Dec 11 23:14:03 2011 +0100

    Added top comment to Gtk 3 themes which have them in Gtk 2 version
    
    Xfce-orange

commit 3d966ec6c302b7b484d353588ac1bc054c080cad
Author: Peter de Ridder <peter at xfce.org>
Date:   Sun Dec 11 23:12:55 2011 +0100

    Added missing border-color
    
    Xfce-redmondxp

commit 9b1cb5cd048373e139b3b24509646b509bbc582c
Author: Peter de Ridder <peter at xfce.org>
Date:   Sun Dec 11 23:10:31 2011 +0100

    Converting last themes to Gtk 3
    
    Xfce-4.0, Xfce-4.2, Xfce-4.4, Xfce-4.6, Xfce

commit d21ebb88432202809961605797a5fcdc02da0e22
Author: Peter de Ridder <peter at xfce.org>
Date:   Fri Nov 18 23:57:52 2011 +0100

    Converting more gradient themes to Gtk 3
    
    Xfce-orange, Xfce-redmondxp

commit 381e98fcc9ad07b1b5e15d85131581f74dad5e41
Author: Peter de Ridder <peter at xfce.org>
Date:   Fri Nov 18 23:55:25 2011 +0100

    Swapped gradient order for active and selected
    
    Xfce-basic, Xfce-cadmium, Xfce-dusk

commit 64be8a6e7ef052dff61c6a8dbf6902af200429f2
Author: Peter de Ridder <peter at xfce.org>
Date:   Thu Nov 17 22:19:12 2011 +0100

    Converted basic theme to Gtk 3 not matching Gtk 2 colors
    
    Xfce-basic

commit 1fa76c110247ec0f456da415a7ef6530c37c48b4
Author: Peter de Ridder <peter at xfce.org>
Date:   Sun Nov 13 14:36:43 2011 +0100

    Started on converting gradient themes to Gtk 3
    
    Xfce-dawn, Xfce-dusk, Xfce-kde2, Xfce-kolors, Xfce-winter

commit e40aac426d54806bd1965a7409e6d6abadd62ef0
Author: Peter de Ridder <peter at xfce.org>
Date:   Tue Oct 18 21:31:43 2011 +0200

    Converting more themes to Gtk 3
    
    Xfce-cadmium, Xfce-curve

commit c770fd81eb3b659abfedc5d61e6c3200c894989c
Author: Peter de Ridder <peter at xfce.org>
Date:   Tue Oct 18 21:29:28 2011 +0200

    Improved compatibility between Gtk 2 and Gtk 3 theme
    
    Xfce-b5, Xfce-light, Xfce-saltlake, Xfce-smooth, Xfce-stellar

commit 5bec77f3d932c49e09700ff0293c25dd1d932874
Author: Peter de Ridder <peter at xfce.org>
Date:   Tue Sep 27 23:03:24 2011 +0200

    Started on converting the first themes to Gtk 3
    
    Xfce-b5, Xfce-light, Xfce-saltlake, Xfce-smooth, Xfce-stellar

commit 6a8475e3a9da3b2cd6e5b2865dd8a4eb4aefd344
Author: Peter de Ridder <peter at xfce.org>
Date:   Fri Sep 23 21:37:19 2011 +0200

    Added Gtk 3 Xfce engine
    
    Split the source into Gtk 2 and Gtk 3 variant and added basic Gtk 3
    implementation to mimic Gtk 2 look

 Makefile.am                                       |    7 +-
 configure.in.in                                   |   56 +-
 {src => gtk-2.0}/Makefile.am                      |    6 +-
 {src => gtk-2.0}/cairo-support.c                  |    0
 {src => gtk-2.0}/cairo-support.h                  |    0
 {src => gtk-2.0}/ge-support.h                     |    0
 {src => gtk-2.0}/general-support.h                |    0
 {src => gtk-2.0}/gradient_draw.c                  |    0
 {src => gtk-2.0}/gradient_draw.h                  |    0
 {src => gtk-2.0}/xfce_rc_style.c                  |    0
 {src => gtk-2.0}/xfce_rc_style.h                  |    0
 {src => gtk-2.0}/xfce_style.h                     |    0
 {src => gtk-2.0}/xfce_theme_draw.c                |    0
 {src => gtk-2.0}/xfce_theme_main.c                |    0
 gtk-3.0/Makefile.am                               |   51 +
 gtk-3.0/xfce_engine.c                             | 1708 +++++++++++++++++++++
 src/xfce_theme_main.c => gtk-3.0/xfce_engine.h    |   41 +-
 {src => gtk-3.0}/xfce_style.h                     |    0
 src/gradient_draw.h => gtk-3.0/xfce_style_types.h |   22 +-
 {src => gtk-3.0}/xfce_theme_main.c                |   17 +-
 gtk-3.0/xfce_typebuiltin.c.template               |   38 +
 gtk-3.0/xfce_typebuiltin.h.template               |   22 +
 themes/b5/Makefile.am                             |    3 +-
 themes/b5/gtk-3.0/Makefile.am                     |    5 +
 themes/b5/gtk-3.0/gtk.css                         |  283 ++++
 themes/basic/Makefile.am                          |    3 +-
 themes/basic/gtk-3.0/Makefile.am                  |    5 +
 themes/basic/gtk-3.0/gtk.css                      |   48 +
 themes/cadmium/Makefile.am                        |    3 +-
 themes/cadmium/gtk-3.0/Makefile.am                |    5 +
 themes/cadmium/gtk-3.0/gtk.css                    |  348 +++++
 themes/curve/Makefile.am                          |    3 +-
 themes/curve/gtk-3.0/Makefile.am                  |    5 +
 themes/curve/gtk-3.0/gtk.css                      |  326 ++++
 themes/dawn/Makefile.am                           |    3 +-
 themes/dawn/gtk-3.0/Makefile.am                   |    5 +
 themes/dawn/gtk-3.0/gtk.css                       |  349 +++++
 themes/dusk/Makefile.am                           |    3 +-
 themes/dusk/gtk-3.0/Makefile.am                   |    5 +
 themes/dusk/gtk-3.0/gtk.css                       |  345 +++++
 themes/kde2/Makefile.am                           |    3 +-
 themes/kde2/gtk-3.0/Makefile.am                   |    5 +
 themes/kde2/gtk-3.0/gtk.css                       |  304 ++++
 themes/kolors/Makefile.am                         |    3 +-
 themes/kolors/gtk-3.0/Makefile.am                 |    5 +
 themes/kolors/gtk-3.0/gtk.css                     |  355 +++++
 themes/light/Makefile.am                          |    3 +-
 themes/light/gtk-3.0/Makefile.am                  |    5 +
 themes/light/gtk-3.0/gtk.css                      |  295 ++++
 themes/orange/Makefile.am                         |    3 +-
 themes/orange/gtk-3.0/Makefile.am                 |    5 +
 themes/orange/gtk-3.0/gtk.css                     |  448 ++++++
 themes/redmondxp/Makefile.am                      |    3 +-
 themes/redmondxp/gtk-3.0/Makefile.am              |    5 +
 themes/redmondxp/gtk-3.0/gtk.css                  |  445 ++++++
 themes/saltlake/Makefile.am                       |    3 +-
 themes/saltlake/gtk-3.0/Makefile.am               |    5 +
 themes/saltlake/gtk-3.0/gtk.css                   |  277 ++++
 themes/smooth/Makefile.am                         |    3 +-
 themes/smooth/gtk-3.0/Makefile.am                 |    5 +
 themes/smooth/gtk-3.0/gtk.css                     |  272 ++++
 themes/stellar/Makefile.am                        |    3 +-
 themes/stellar/gtk-3.0/Makefile.am                |    5 +
 themes/stellar/gtk-3.0/gtk.css                    |  281 ++++
 themes/winter/Makefile.am                         |    3 +-
 themes/winter/gtk-3.0/Makefile.am                 |    5 +
 themes/winter/gtk-3.0/gtk.css                     |  395 +++++
 themes/xfce-4.0/Makefile.am                       |    3 +-
 themes/xfce-4.0/gtk-3.0/Makefile.am               |    5 +
 themes/xfce-4.0/gtk-3.0/gtk.css                   |  420 +++++
 themes/xfce-4.2/Makefile.am                       |    3 +-
 themes/xfce-4.2/gtk-3.0/Makefile.am               |    5 +
 themes/xfce-4.2/gtk-3.0/gtk.css                   |  454 ++++++
 themes/xfce-4.4/Makefile.am                       |    3 +-
 themes/xfce-4.4/gtk-3.0/Makefile.am               |    5 +
 themes/xfce-4.4/gtk-3.0/gtk.css                   |  476 ++++++
 themes/xfce-4.6/Makefile.am                       |    3 +-
 themes/xfce-4.6/gtk-3.0/Makefile.am               |    5 +
 themes/xfce-4.6/gtk-3.0/gtk.css                   |  494 ++++++
 themes/xfce/Makefile.am                           |    3 +-
 themes/xfce/gtk-3.0/Makefile.am                   |    5 +
 themes/xfce/gtk-3.0/gtk.css                       |  494 ++++++
 82 files changed, 9159 insertions(+), 78 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 4a85e6c..ad88561 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,12 @@
 
 SUBDIRS = \
 	themes \
-	src
+	$(GTK_SUBDIRS)
+
+DIST_SUBDIRS= \
+	themes \
+	gtk-2.0 \
+	gtk-3.0
 	
 distclean-local:
 	rm -rf *.cache *~
diff --git a/configure.in.in b/configure.in.in
index e73d192..e423ad6 100644
--- a/configure.in.in
+++ b/configure.in.in
@@ -5,8 +5,8 @@ dnl
 dnl ***************************
 dnl *** Version information ***
 dnl ***************************
-m4_define([gtk_xfce_engine_version_major], [2])
-m4_define([gtk_xfce_engine_version_minor], [9])
+m4_define([gtk_xfce_engine_version_major], [3])
+m4_define([gtk_xfce_engine_version_minor], [0])
 m4_define([gtk_xfce_engine_version_micro], [0])
 m4_define([gtk_xfce_engine_version_nano],  []) dnl leave this empty to have no nano version
 m4_define([gtk_xfce_engine_version_build], [@REVISION@])
@@ -54,12 +54,29 @@ AC_HEADER_STDC()
 dnl ***********************************
 dnl *** Check for required packages ***
 dnl ***********************************
-XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.20.0])
-XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.24.0])
+AM_PATH_GLIB_2_0([2.24.0])
 XDT_CHECK_PACKAGE([GMODULE], [gmodule-2.0], [2.24.0])
 
-GTK_BINARY_VERSION=`$PKG_CONFIG --variable=gtk_binary_version gtk+-2.0`
-AC_SUBST([GTK_BINARY_VERSION])
+dnl ***********************************
+dnl *** Check for optional packages ***
+dnl ***********************************
+XDT_CHECK_OPTIONAL_PACKAGE([GTK2], [gtk+-2.0], [2.20.0], [gtk2], [Gtk 2 theme engine])
+XDT_CHECK_OPTIONAL_PACKAGE([GTK3], [gtk+-3.0], [3.0.0], [gtk3], [Gtk 3 theme engine])
+
+GTK_SUBDIRS=""
+if test x"$GTK2_FOUND" = x"yes"
+then
+  GTK2_BINARY_VERSION=`$PKG_CONFIG --variable=gtk_binary_version gtk+-2.0`
+  AC_SUBST([GTK2_BINARY_VERSION])
+  GTK_SUBDIRS="$GTK_SUBDIRS gtk-2.0"
+fi
+if test x"$GTK3_FOUND" = x"yes"
+then
+  GTK3_BINARY_VERSION=`$PKG_CONFIG --variable=gtk_binary_version gtk+-3.0`
+  AC_SUBST([GTK3_BINARY_VERSION])
+  GTK_SUBDIRS="$GTK_SUBDIRS gtk-3.0"
+fi
+AC_SUBST([GTK_SUBDIRS])
 
 dnl ***********************************
 dnl *** Check for debugging support ***
@@ -82,46 +99,67 @@ AC_SUBST([PLATFORM_LDFLAGS])
 AC_OUTPUT([
 gtk-xfce-engine-2.spec
 Makefile
-src/Makefile
+gtk-2.0/Makefile
+gtk-3.0/Makefile
 themes/b5/Makefile
 themes/b5/gtk-2.0/Makefile
+themes/b5/gtk-3.0/Makefile
 themes/xfce/gtk-2.0/Makefile
+themes/xfce/gtk-3.0/Makefile
 themes/xfce/Makefile
 themes/xfce-4.0/gtk-2.0/Makefile
+themes/xfce-4.0/gtk-3.0/Makefile
 themes/xfce-4.0/Makefile
 themes/xfce-4.2/gtk-2.0/Makefile
+themes/xfce-4.2/gtk-3.0/Makefile
 themes/xfce-4.2/Makefile
 themes/xfce-4.4/Makefile
 themes/xfce-4.4/gtk-2.0/Makefile
+themes/xfce-4.4/gtk-3.0/Makefile
 themes/xfce-4.6/Makefile
 themes/xfce-4.6/gtk-2.0/Makefile
+themes/xfce-4.6/gtk-3.0/Makefile
 themes/basic/gtk-2.0/Makefile
+themes/basic/gtk-3.0/Makefile
 themes/basic/Makefile
 themes/cadmium/gtk-2.0/Makefile
+themes/cadmium/gtk-3.0/Makefile
 themes/cadmium/Makefile
 themes/curve/gtk-2.0/Makefile
+themes/curve/gtk-3.0/Makefile
 themes/curve/Makefile
 themes/dawn/gtk-2.0/Makefile
+themes/dawn/gtk-3.0/Makefile
 themes/dawn/Makefile
 themes/dusk/gtk-2.0/Makefile
+themes/dusk/gtk-3.0/Makefile
 themes/dusk/Makefile
 themes/kolors/gtk-2.0/Makefile
+themes/kolors/gtk-3.0/Makefile
 themes/kolors/Makefile
 themes/kde2/gtk-2.0/Makefile
+themes/kde2/gtk-3.0/Makefile
 themes/kde2/Makefile
 themes/light/Makefile
 themes/light/gtk-2.0/Makefile
+themes/light/gtk-3.0/Makefile
 themes/orange/gtk-2.0/Makefile
+themes/orange/gtk-3.0/Makefile
 themes/orange/Makefile
 themes/redmondxp/gtk-2.0/Makefile
+themes/redmondxp/gtk-3.0/Makefile
 themes/redmondxp/Makefile
 themes/saltlake/gtk-2.0/Makefile
+themes/saltlake/gtk-3.0/Makefile
 themes/saltlake/Makefile
 themes/smooth/gtk-2.0/Makefile
+themes/smooth/gtk-3.0/Makefile
 themes/smooth/Makefile
 themes/stellar/gtk-2.0/Makefile
+themes/stellar/gtk-3.0/Makefile
 themes/stellar/Makefile
 themes/winter/gtk-2.0/Makefile
+themes/winter/gtk-3.0/Makefile
 themes/winter/Makefile
 themes/Makefile
 ])
@@ -132,5 +170,9 @@ dnl ***************************
 echo
 echo "Build Configuration:"
 echo
+echo "* Gtk 2 Engine: $GTK2_FOUND"
+echo "* Gtk 3 Engine: $GTK3_FOUND"
+echo
+echo "* Install Prefix: $prefix"
 echo "* Debug Support: $enable_debug"
 echo
diff --git a/src/Makefile.am b/gtk-2.0/Makefile.am
similarity index 86%
rename from src/Makefile.am
rename to gtk-2.0/Makefile.am
index d81392e..6311eed 100644
--- a/src/Makefile.am
+++ b/gtk-2.0/Makefile.am
@@ -4,7 +4,7 @@ INCLUDES = \
 	-DG_LOG_DOMAIN=\"gtk-xfce-engine\" \
 	$(PLATFORM_CPPFLAGS)
 
-enginedir = $(libdir)/gtk-2.0/$(GTK_BINARY_VERSION)/engines
+enginedir = $(libdir)/gtk-2.0/$(GTK2_BINARY_VERSION)/engines
 
 engine_LTLIBRARIES = libxfce.la
 
@@ -22,13 +22,13 @@ libxfce_la_SOURCES = \
 	xfce_style.h
 
 libxfce_la_CFLAGS = \
-	$(GTK_CFLAGS) \
+	$(GTK2_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(GMODULE_CFLAGS) \
 	$(PLATFORM_CFLAGS)
 
 libxfce_la_LIBADD = \
-	$(GTK_LIBS) \
+	$(GTK2_LIBS) \
 	$(GLIB_LIBS) \
 	$(GMODULE_LIBS)
 
diff --git a/src/cairo-support.c b/gtk-2.0/cairo-support.c
similarity index 100%
rename from src/cairo-support.c
rename to gtk-2.0/cairo-support.c
diff --git a/src/cairo-support.h b/gtk-2.0/cairo-support.h
similarity index 100%
rename from src/cairo-support.h
rename to gtk-2.0/cairo-support.h
diff --git a/src/ge-support.h b/gtk-2.0/ge-support.h
similarity index 100%
rename from src/ge-support.h
rename to gtk-2.0/ge-support.h
diff --git a/src/general-support.h b/gtk-2.0/general-support.h
similarity index 100%
rename from src/general-support.h
rename to gtk-2.0/general-support.h
diff --git a/src/gradient_draw.c b/gtk-2.0/gradient_draw.c
similarity index 100%
rename from src/gradient_draw.c
rename to gtk-2.0/gradient_draw.c
diff --git a/src/gradient_draw.h b/gtk-2.0/gradient_draw.h
similarity index 100%
copy from src/gradient_draw.h
copy to gtk-2.0/gradient_draw.h
diff --git a/src/xfce_rc_style.c b/gtk-2.0/xfce_rc_style.c
similarity index 100%
rename from src/xfce_rc_style.c
rename to gtk-2.0/xfce_rc_style.c
diff --git a/src/xfce_rc_style.h b/gtk-2.0/xfce_rc_style.h
similarity index 100%
rename from src/xfce_rc_style.h
rename to gtk-2.0/xfce_rc_style.h
diff --git a/src/xfce_style.h b/gtk-2.0/xfce_style.h
similarity index 100%
copy from src/xfce_style.h
copy to gtk-2.0/xfce_style.h
diff --git a/src/xfce_theme_draw.c b/gtk-2.0/xfce_theme_draw.c
similarity index 100%
rename from src/xfce_theme_draw.c
rename to gtk-2.0/xfce_theme_draw.c
diff --git a/src/xfce_theme_main.c b/gtk-2.0/xfce_theme_main.c
similarity index 100%
copy from src/xfce_theme_main.c
copy to gtk-2.0/xfce_theme_main.c
diff --git a/gtk-3.0/Makefile.am b/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..b8b425b
--- /dev/null
+++ b/gtk-3.0/Makefile.am
@@ -0,0 +1,51 @@
+
+INCLUDES = \
+	-I$(top_srcdir) \
+	-DG_LOG_DOMAIN=\"gtk-xfce-engine\" \
+	$(PLATFORM_CPPFLAGS)
+
+enginedir = $(libdir)/gtk-3.0/$(GTK3_BINARY_VERSION)/theming-engines
+
+engine_LTLIBRARIES = libxfce.la
+
+BUILT_SOURCES = \
+	xfce_typebuiltin.c \
+	xfce_typebuiltin.h
+
+libxfce_la_SOURCES = \
+	xfce_theme_main.c \
+	xfce_engine.c \
+	xfce_engine.h \
+	xfce_style_types.h \
+	xfce_typebuiltin.c \
+	xfce_typebuiltin.h
+
+libxfce_la_CFLAGS = \
+	$(GTK3_CFLAGS) \
+	$(GLIB_CFLAGS) \
+	$(GMODULE_CFLAGS) \
+	$(PLATFORM_CFLAGS)
+
+libxfce_la_LIBADD = \
+	$(GTK3_LIBS) \
+	$(GLIB_LIBS) \
+	$(GMODULE_LIBS)
+
+libxfce_la_LDFLAGS = \
+	-module \
+	-avoid-version \
+	-no-undefined \
+	$(PLATFORM_LDFLAGS)
+
+xfce_typebuiltin.h: xfce_style_types.h Makefile xfce_typebuiltin.h.template
+	@( cd $(srcdir) && $(GLIB_MKENUMS) --template ./xfce_typebuiltin.h.template \
+	./xfce_style_types.h ) >> xgen-gtbh \
+	&& (cmp -s xgen-gtbh $@ || (echo "Creating $@..."; cp xgen-gtbh $@) ) \
+	&& rm -f xgen-gtbh
+
+xfce_typebuiltin.c: xfce_style_types.h Makefile xfce_typebuiltin.c.template
+	@( cd $(srcdir) && $(GLIB_MKENUMS) --template ./xfce_typebuiltin.c.template \
+	./xfce_style_types.h ) >> xgen-gtbc \
+	&& (cmp -s xgen-gtbc $@ || (echo "Creating $@..."; cp xgen-gtbc $@) ) \
+	&& rm -f xgen-gtbc
+
diff --git a/gtk-3.0/xfce_engine.c b/gtk-3.0/xfce_engine.c
new file mode 100644
index 0000000..1c2640e
--- /dev/null
+++ b/gtk-3.0/xfce_engine.c
@@ -0,0 +1,1708 @@
+/*  $Id$
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  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)
+ *
+ *  Portions based Thinice port by
+ *                       Tim Gerla <timg at rrv.net>,
+ *                       Tomas Ögren <stric at ing.umu.se,
+ *                       Richard Hult <rhult at codefactory.se>
+ *  Portions based on Smooth theme by
+ *                       Andrew Johnson <ajgenius at ajgenius.us>
+ *  Portions based on IceGradient theme by
+ *                       Tim Gerla <timg at means.net>
+ *                       Tomas Ögren <stric at ing.umu.se>
+ *                       JM Perez <jose.perez at upcnet.es>
+ *  Portions based on Wonderland theme by
+ *                       Garrett LeSage
+ *                       Alexander Larsson
+ *                       Owen Taylor <otaylor at redhat.com>
+ *  Portions based on Raleigh theme by
+ *                       Owen Taylor <otaylor at redhat.com>
+ *  Portions based on Notif theme
+ *  Portions based on Notif2 theme
+ *  Portions based on original GTK theme
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <gtk/gtk.h>
+
+#include <math.h>
+
+#include "xfce_style_types.h"
+#include "xfce_typebuiltin.h"
+#include "xfce_engine.h"
+
+/* css properties */
+#define XFCE_NAMESPACE "xfce"
+#define SMOOTH_EDGE "smooth-edge"
+#define XFCE_SMOOTH_EDGE "-"XFCE_NAMESPACE"-"SMOOTH_EDGE
+#define GRIP_STYLE "grip-style"
+#define XFCE_GRIP_STYLE "-"XFCE_NAMESPACE"-"GRIP_STYLE
+
+/* macros to make sure that things are sane ... */
+#define GE_CAIRO_INIT                               \
+    cairo_set_line_width (cr, 1.0);                 \
+    cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE); \
+    cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);
+
+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 }
+};
+
+/* internal functions */
+static void xfce_draw_grips(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkOrientation orientation);
+
+static void render_line(GtkThemingEngine * engine, cairo_t * cr, gdouble x1, gdouble y1, gdouble x2, gdouble y2);
+static void render_frame(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height);
+
+static void render_check(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height);
+static void render_option(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height);
+static void render_frame_gap(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkPositionType gap_side, gdouble gap_s, gdouble gap_e);
+static void render_extension(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkPositionType gap_side);
+static void render_slider(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkOrientation orientation);
+static void render_handle(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height);
+static void render_activity(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height);
+
+static void color_dark2light(const GdkRGBA * color, GdkRGBA * color_return)
+{
+    GtkSymbolicColor *literal, *shade;
+
+    literal = gtk_symbolic_color_new_literal(color);
+    shade = gtk_symbolic_color_new_shade(literal, 1.3 / 0.7);
+    gtk_symbolic_color_unref(literal);
+
+    gtk_symbolic_color_resolve(shade, NULL, color_return);
+    gtk_symbolic_color_unref(shade);
+}
+
+static void color_dark2light_mid(const GdkRGBA * color_dark_, GdkRGBA * color_light_, GdkRGBA * color_mid_)
+{
+    GtkSymbolicColor *dark, *light, *mid;
+
+    dark = gtk_symbolic_color_new_literal(color_dark_);
+    light = gtk_symbolic_color_new_shade(dark, 1.3 / 0.7);
+
+    gtk_symbolic_color_resolve(light, NULL, color_light_);
+    mid = gtk_symbolic_color_new_mix(light, dark, 0.5);
+    gtk_symbolic_color_unref(light);
+    gtk_symbolic_color_unref(dark);
+
+    gtk_symbolic_color_resolve(mid, NULL, color_mid_);
+    gtk_symbolic_color_unref(mid);
+}
+
+static void xfce_draw_grip_rough (GtkThemingEngine * engine, cairo_t * cr, GtkStateFlags state, gdouble x, gdouble y, gdouble width, gdouble height, GtkOrientation orientation)
+{
+    gint xx, yy;
+    gint xthick, ythick;
+    GdkRGBA light, dark;
+    GtkBorder border;
+
+    gtk_theming_engine_get_border(engine, state, &border);
+
+    xthick = border.left;
+    ythick = border.top;
+
+    gtk_theming_engine_get_border_color(engine, state, &dark);
+    color_dark2light(&dark, &light);
+
+    if (orientation == GTK_ORIENTATION_HORIZONTAL)
+    {
+        if (width > 15 + xthick)
+        {
+            gint len = (height - 2 * (ythick + 2) > 4 ? height - 2 * (ythick + 2) :  height - 2 * ythick);
+            gint delta = x + (width / 2) - 5;
+            yy = y + (height - len) / 2;
+            for(xx = 0; xx < 10; xx += 2)
+            {
+                gdk_cairo_set_source_rgba(cr, &dark);   
+                cairo_move_to(cr, xx + delta + 0.5, yy + 0.5);
+                cairo_line_to(cr, xx + delta + 0.5, yy + len - 0.5);
+                cairo_stroke(cr);
+                gdk_cairo_set_source_rgba(cr, &light);   
+                cairo_move_to(cr, xx + delta + 1.5, yy + 0.5);
+                cairo_line_to(cr, xx + delta + 1.5, yy + len - 0.5);
+                cairo_stroke(cr);
+            }
+        }
+    }
+    else
+    {
+        if (height > 15 + ythick)
+        {
+            gint len = (width - 2 * (xthick + 2) > 4 ? width - 2 * (xthick + 2) :  width - 2 * xthick);
+            gint delta = y + (height / 2) - 5;
+            xx = x + (width - len) / 2;
+            for(yy = 0; yy < 10; yy += 2)
+            {
+                gdk_cairo_set_source_rgba(cr, &dark);   
+                cairo_move_to(cr, xx + 0.5, yy + delta + 0.5);
+                cairo_line_to(cr, xx + len - 0.5, yy + delta + 0.5);
+                cairo_stroke(cr);
+                gdk_cairo_set_source_rgba(cr, &light);   
+                cairo_move_to(cr, xx + 0.5, yy + delta + 1.5);
+                cairo_line_to(cr, xx + len - 0.5, yy + delta + 1.5);
+                cairo_stroke(cr);
+            }
+        }
+    }
+}
+
+static void xfce_draw_grip_slide (GtkThemingEngine * engine, cairo_t * cr, GtkStateFlags state, gdouble x, gdouble y, gdouble width, gdouble height, GtkOrientation orientation)
+{
+    gint gx, gy, gwidth, gheight;
+    GdkRGBA light, dark, mid, bg;
+    GtkBorder border;
+
+    gtk_theming_engine_get_border(engine, state, &border);
+
+    gtk_theming_engine_get_border_color(engine, state, &dark);
+    color_dark2light_mid(&dark, &light, &mid);
+    gtk_theming_engine_get_color(engine, state, &bg);
+
+    gx = gy = gwidth = gheight = 0;
+
+    if (orientation == GTK_ORIENTATION_HORIZONTAL)
+    {
+        gint delta = ((gint)((height - 3) / 2));
+        gx = x + delta;
+        gy = y + delta;
+        gwidth = width - 2 * delta - 1;
+        gheight = height - 2 * delta - 1;
+    }
+    else
+    {
+        gint delta = ((gint)((width - 3) / 2));
+        gx = x + delta;
+        gy = y + delta;
+        gwidth = width - 2 * delta - 1;
+        gheight = height - 2 * delta - 1;
+    }
+
+    if ((gheight > 1) && (gwidth > 1))
+    {
+        gdk_cairo_set_source_rgba(cr, &bg);     
+        cairo_rectangle(cr, gx + 1, gy + 1, gwidth - 1, gheight - 1);
+        cairo_fill(cr);
+
+        gdk_cairo_set_source_rgba(cr, &dark);   
+        cairo_move_to(cr, gx + 0.5, gy + gheight + 0.5);
+        cairo_line_to(cr, gx + 0.5, gy + 0.5);
+        cairo_line_to(cr, gx + gwidth + 0.5, gy + 0.5);
+        cairo_stroke(cr);
+
+        gdk_cairo_set_source_rgba(cr, &light);  
+        cairo_move_to(cr, gx + 0.5, gy + gheight + 0.5);
+        cairo_line_to(cr, gx + gwidth + 0.5, gy + gheight + 0.5);
+        cairo_line_to(cr, gx + gwidth + 0.5, gy + 0.5);
+        cairo_stroke(cr);
+
+        gdk_cairo_set_source_rgba(cr, &mid);    
+        cairo_rectangle(cr, gx, gy, 1, 1);
+        cairo_rectangle(cr, gx + gwidth, gy, 1, 1);
+        cairo_rectangle(cr, gx, gy + gheight, 1, 1);
+        cairo_rectangle(cr, gx + gwidth, gy + gheight, 1, 1);
+        cairo_fill(cr);
+    }
+}
+
+static void xfce_draw_grips(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkOrientation orientation)
+{
+    GtkStateFlags state;
+    XfceGripStyle grip_style = XFCE_GRIP_ROUGH;
+
+    state = gtk_theming_engine_get_state(engine);
+    gtk_theming_engine_get(engine, state, XFCE_GRIP_STYLE, &grip_style, NULL);
+
+    switch (grip_style)
+    {
+        case XFCE_GRIP_DISABLED:
+            break;
+        case XFCE_GRIP_ROUGH:
+            xfce_draw_grip_rough (engine, cr, state, x, y, width, height, orientation);
+            break;
+        case XFCE_GRIP_SLIDE:
+            xfce_draw_grip_slide (engine, cr, state, x, y, width, height, orientation);
+            break;
+    }
+}
+
+static void render_line(GtkThemingEngine * engine, cairo_t * cr, gdouble x1, gdouble y_1, gdouble x2, gdouble y_2)
+{
+    gint16 xthick, ythick;
+    gint16 thickness_light;
+    gint16 thickness_dark;
+    GtkStateFlags state;
+    GdkRGBA light, dark;
+    GtkBorder border;
+    GtkBorderStyle border_style;
+
+    state = gtk_theming_engine_get_state(engine);
+
+    gtk_theming_engine_get(engine, state, GTK_STYLE_PROPERTY_BORDER_STYLE, &border_style, NULL);
+
+#if 0
+    if (border_style == GTK_BORDER_STYLE_NONE)
+        return;
+#endif
+
+    cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT);
+
+    gtk_theming_engine_get_border_color(engine, state, &dark);
+    gtk_theming_engine_get_border(engine, state, &border);
+
+    xthick = border.left;
+    ythick = border.top;
+
+#if 0
+    switch (border_style)
+    {
+        case GTK_BORDER_STYLE_NONE:
+            break;
+        case GTK_BORDER_STYLE_SOLID:
+            light = dark;
+            break;
+        case GTK_BORDER_STYLE_INSET:
+            break;
+        case GTK_BORDER_STYLE_OUTSET:
+            light = dark;
+            color_dark2light(&light, &dark);
+            break;
+    }
+#endif
+    color_dark2light(&dark, &light);
+
+    /* Vertical */
+    if (floor(x1 - x2) == 0)
+    {
+        thickness_light = xthick / 2;
+        thickness_dark = xthick - thickness_light;
+
+	/* Compensation for the way x and y are caclculated */
+	x1 += 1 + thickness_dark - thickness_light;
+        y_2 += 1;
+
+        cairo_set_line_width (cr, thickness_dark);
+        gdk_cairo_set_source_rgba(cr, &dark);
+        cairo_move_to(cr, x1 - (thickness_dark / 2.0), y_1);
+        cairo_line_to(cr, x1 - (thickness_dark / 2.0), y_2);
+        cairo_stroke(cr);
+
+        cairo_set_line_width (cr, thickness_light);
+        gdk_cairo_set_source_rgba(cr, &light);
+        cairo_move_to(cr, x1 + (thickness_light / 2.0), y_1);
+        cairo_line_to(cr, x1 + (thickness_light / 2.0), y_2);
+        cairo_stroke(cr);
+    }
+    else
+    {
+        thickness_light = ythick / 2;
+        thickness_dark = ythick - thickness_light;
+
+	/* Compensation for the way x and y are caclculated */
+	y_1 += 1 + thickness_dark - thickness_light;
+        x2 += 1;
+
+        cairo_set_line_width (cr, thickness_dark);
+        gdk_cairo_set_source_rgba(cr, &dark);
+        cairo_move_to(cr, x1, y_1 - (thickness_dark / 2.0));
+        cairo_line_to(cr, x2, y_1 - (thickness_dark / 2.0));
+        cairo_stroke(cr);
+
+        cairo_set_line_width (cr, thickness_light);
+        gdk_cairo_set_source_rgba(cr, &light);
+        cairo_move_to(cr, x1, y_1 + (thickness_light / 2.0));
+        cairo_line_to(cr, x2, y_1 + (thickness_light / 2.0));
+        cairo_stroke(cr);
+    }
+}
+
+static void render_frame(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height)
+{
+    gint xt, yt;
+    gint xthick, ythick;
+    GtkStateFlags state;
+    GtkBorderStyle border_style;
+    GdkRGBA dark, light, mid, bg;
+    GdkRGBA black = {0.0, 0.0, 0.0, 1.0}; /* black */
+    gboolean smooth_edge;
+    GtkBorder border;
+    GtkJunctionSides junction;
+
+    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;
+
+    GE_CAIRO_INIT;
+
+    gtk_theming_engine_get_border_color(engine, state, &dark);
+    gtk_theming_engine_get_border(engine, state, &border);
+
+    xthick = border.left;
+    ythick = border.top;
+
+    /* Spin buttons are a special case */
+    if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_SPINBUTTON))
+    {
+        junction = gtk_theming_engine_get_junction_sides(engine);
+        if ((junction & GTK_JUNCTION_TOP) == GTK_JUNCTION_TOP || (junction & GTK_JUNCTION_BOTTOM) == GTK_JUNCTION_BOTTOM)
+        {
+            if (!(state & GTK_STATE_FLAG_ACTIVE))
+            {
+                border_style = GTK_BORDER_STYLE_OUTSET;
+            }
+
+            if (state == GTK_STATE_FLAG_NORMAL || state & GTK_STATE_FLAG_INSENSITIVE)
+            {
+                gtk_theming_engine_get_border_color(engine, state, &dark);
+            }
+            else
+            {
+                gtk_theming_engine_get_border_color(engine, GTK_STATE_FLAG_NORMAL, &dark);
+            }
+
+            y = floor(y);
+            height = ceil(height);
+
+            xt = MIN(xthick, width - 1);
+            yt = MIN(ythick, height - 1);
+
+            gtk_theming_engine_get(engine, state, XFCE_SMOOTH_EDGE, &smooth_edge, NULL);
+            color_dark2light_mid(&dark, &light, &mid);
+            if (smooth_edge)
+            {
+                if ((xt > 1) && (yt > 1))
+                {
+                    gdk_cairo_set_source_rgba(cr, &dark);
+                    if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
+                    {
+                        cairo_rectangle(cr, x - 2, y, 1, 1);
+                    }
+                    if ((junction & GTK_JUNCTION_BOTTOM) != GTK_JUNCTION_BOTTOM)
+                    {
+                        cairo_rectangle(cr, x - 2, y + height - 1, 1, 1);
+                    }
+                    cairo_fill(cr);
+
+                    if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
+                    {
+                        cairo_move_to(cr, x - 0.5, y + 1.5);
+                    }
+                    else
+                    {
+                        cairo_move_to(cr, x - 0.5, y + 0.5);
+                    }
+                    if ((junction & GTK_JUNCTION_BOTTOM) != GTK_JUNCTION_BOTTOM)
+                    {
+                        cairo_line_to(cr, x - 0.5, y + height - 1.5);
+                    }
+                    else
+                    {
+                        cairo_line_to(cr, x - 0.5, y + height - 0.5);
+                    }
+                    cairo_stroke(cr);
+
+                    if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
+                    {
+                        gdk_cairo_set_source_rgba(cr, &mid);
+                        cairo_rectangle(cr, x - 2, y + 1, 1, 1);
+                        cairo_fill(cr);
+                    }
+
+                    gdk_cairo_set_source_rgba(cr, &light);
+                    if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
+                    {
+                        cairo_move_to(cr, x - 1.5, y + 2.5);
+                    }
+                    else
+                    {
+                        cairo_move_to(cr, x - 1.5, y + 0.5);
+                    }
+                    if ((junction & GTK_JUNCTION_BOTTOM) != GTK_JUNCTION_BOTTOM)
+                    {
+                        cairo_line_to(cr, x - 1.5, y + height - 1.5);
+                    }
+                    else
+                    {
+                        cairo_line_to(cr, x - 1.5, y + height - 0.5);
+                    }
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &mid);
+                    if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
+                    {
+                        cairo_rectangle(cr, x - 1, y, 1, 1);
+                    }
+                    if ((junction & GTK_JUNCTION_BOTTOM) != GTK_JUNCTION_BOTTOM)
+                    {
+                        cairo_rectangle(cr, x - 1, y + height - 1, 1, 1);
+                    }
+                    cairo_fill(cr);
+                }
+                else if ((xt > 0) && (yt > 0))
+                {
+                    gdk_cairo_set_source_rgba(cr, &light);
+                    cairo_move_to(cr, x - 0.5, y + 0.5);
+                    cairo_line_to(cr, x - 0.5, y + height - 0.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &mid);
+                    if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
+                    {
+                        cairo_rectangle(cr, x - 1, y, 1, 1);
+                    }
+                    if ((junction & GTK_JUNCTION_BOTTOM) != GTK_JUNCTION_BOTTOM)
+                    {
+                        cairo_rectangle(cr, x - 1, y + height - 1, 1, 1);
+                    }
+                    cairo_fill(cr);
+                }
+            }
+            else
+            {
+                if ((xt > 1) && (yt > 1))
+                {
+                    if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
+                    {
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x - 1.5, y + 0.5);
+                        cairo_line_to(cr, x - 0.5, y + 0.5);
+                        cairo_stroke(cr);
+                    }
+
+                    gdk_cairo_set_source_rgba(cr, &light);
+                    if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
+                    {
+                        cairo_move_to(cr, x - 0.5, y + 1.5);
+                    }
+                    else
+                    {
+                        cairo_move_to(cr, x - 0.5, y + 0.5);
+                    }
+                    cairo_line_to(cr, x - 0.5, y + height - 0.5);
+                    if ((junction & GTK_JUNCTION_BOTTOM) != GTK_JUNCTION_BOTTOM)
+                    {
+                        cairo_line_to(cr, x - 1.5, y + height - 0.5);
+                    }
+                    cairo_stroke(cr);
+
+                    if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
+                    {
+                        gdk_cairo_set_source_rgba(cr, &black);
+                        cairo_rectangle(cr, x - 2, y + 1, 1, 1);
+                        cairo_fill(cr);
+                    }
+
+                    gdk_cairo_set_source_rgba(cr, &dark);
+                    if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
+                    {
+                        cairo_move_to(cr, x - 1.5, y + 2.5);
+                    }
+                    else
+                    {
+                        cairo_move_to(cr, x - 1.5, y + 0.5);
+                    }
+                    if ((junction & GTK_JUNCTION_BOTTOM) != GTK_JUNCTION_BOTTOM)
+                    {
+                        cairo_line_to(cr, x - 1.5, y + height - 1.5);
+                    }
+                    else
+                    {
+                        cairo_line_to(cr, x - 1.5, y + height - 0.5);
+                    }
+                    cairo_stroke(cr);
+                }
+                else if ((xt > 0) && (yt > 0))
+                {
+                    if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
+                    {
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_rectangle(cr, x - 1, y, 1, 1);
+                        cairo_fill(cr);
+                    }
+
+                    gdk_cairo_set_source_rgba(cr, &light);
+                    if ((junction & GTK_JUNCTION_TOP) != GTK_JUNCTION_TOP)
+                    {
+                        cairo_move_to(cr, x - 0.5, y + 1.5);
+                    }
+                    else
+                    {
+                        cairo_move_to(cr, x - 0.5, y + 0.5);
+                    }
+                    cairo_line_to(cr, x - 0.5, y + height - 0.5);
+                    cairo_stroke(cr);
+                }
+            }
+
+            if (state != GTK_STATE_FLAG_NORMAL && !(state & GTK_STATE_FLAG_INSENSITIVE))
+            {
+                gtk_theming_engine_get_border_color(engine, state, &dark);
+            }
+        }
+    }
+
+    xt = MIN(xthick, width - 1);
+    yt = MIN(ythick, height - 1);
+
+    switch (border_style)
+    {
+        case GTK_BORDER_STYLE_NONE:
+            break;
+        case GTK_BORDER_STYLE_SOLID:
+	    gdk_cairo_set_source_rgba(cr, &dark);
+            if ((xt > 1) && (yt > 1))
+            {
+		cairo_set_line_width(cr, 2.0);
+                cairo_rectangle(cr, x + 1, y + 1, width - 2, height - 2);
+	    }
+            else if ((xt > 0) && (yt > 0))
+            {
+                cairo_rectangle(cr, x + 0.5, y + 0.5, width - 1, height - 1);
+            }
+	    cairo_stroke(cr);
+            break;
+        case GTK_BORDER_STYLE_INSET:
+            gtk_theming_engine_get(engine, state, XFCE_SMOOTH_EDGE, &smooth_edge, NULL);
+            color_dark2light_mid(&dark, &light, &mid);
+            if (smooth_edge)
+            {
+                if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_TROUGH))
+                {
+                    /* Do nothing */
+                }
+                else if ((xt > 1) && (yt > 1))
+                {
+                    gdk_cairo_set_source_rgba(cr, &dark);
+                    cairo_move_to(cr, x + 1.5, y + 0.5);
+                    cairo_line_to(cr, x + width - 1.5, y + 0.5);
+                    cairo_move_to(cr, x + 0.5, y + 1.5);
+                    cairo_line_to(cr, x + 0.5, y + height - 1.5);
+
+                    cairo_move_to(cr, x + 1.5, y + height - 0.5);
+                    cairo_line_to(cr, x + width - 1.5, y + height - 0.5);
+                    cairo_move_to(cr, x + width - 0.5, y + 1.5);
+                    cairo_line_to(cr, x + width - 0.5, y + height - 1.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &mid);
+                    cairo_move_to(cr, x + width - 1.5, y + 1.5);
+                    cairo_line_to(cr, x + 1.5, y + 1.5);
+                    cairo_line_to(cr, x + 1.5, y + height - 1.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &light);
+                    cairo_move_to(cr, x + 2.5, y + height - 1.5);
+                    cairo_line_to(cr, x + width - 1.5, y + height - 1.5);
+                    cairo_line_to(cr, x + width - 1.5, y + 2.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &mid);
+                    cairo_rectangle(cr, x, y, 1, 1);
+                    cairo_rectangle(cr, x + width - 1, y, 1, 1);
+                    cairo_rectangle(cr, x, y + height - 1, 1, 1);
+                    cairo_rectangle(cr, x + width - 1, y + height - 1, 1, 1);
+                    cairo_fill(cr);
+                }
+                else if ((xt > 0) && (yt > 0))
+                {
+                    gdk_cairo_set_source_rgba(cr, &dark);
+                    cairo_move_to(cr, x + 1.5, y + 0.5);
+                    cairo_line_to(cr, x + width - 0.5, y + 0.5);
+                    cairo_move_to(cr, x + 0.5, y + 1.5);
+                    cairo_line_to(cr, x + 0.5, y + height - 0.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &light);
+                    cairo_move_to(cr, x + 1.5, y + height - 0.5);
+                    cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                    cairo_line_to(cr, x + width - 0.5, y + 1.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &mid);
+                    cairo_rectangle(cr, x, y, 1, 1);
+                    cairo_rectangle(cr, x + width - 1, y, 1, 1);
+                    cairo_rectangle(cr, x, y + height - 1, 1, 1);
+                    cairo_rectangle(cr, x + width - 1, y + height - 1, 1, 1);
+                    cairo_fill(cr);
+                }
+            }
+            else
+            {
+                if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_TROUGH))
+                {
+		    gtk_theming_engine_get_border_color(engine, GTK_STATE_FLAG_ACTIVE, &dark);
+                    gdk_cairo_set_source_rgba(cr, &dark);
+                    cairo_rectangle(cr, x + 0.5, y + 0.5, width - 1, height - 1);
+                    cairo_stroke(cr);
+                }
+                else if ((xt > 1) && (yt > 1))
+                {
+                    gdk_cairo_set_source_rgba(cr, &dark);
+                    cairo_move_to(cr, x + width - 0.5, y + 0.5);
+                    cairo_line_to(cr, x + 0.5, y + 0.5);
+                    cairo_line_to(cr, x + 0.5, y + height - 0.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &light);
+                    cairo_move_to(cr, x + 1.5, y + height - 0.5);
+                    cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                    cairo_line_to(cr, x + width - 0.5, y + 1.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &black);
+                    cairo_move_to(cr, x + width - 1.5, y + 1.5);
+                    cairo_line_to(cr, x + 1.5, y + 1.5);
+                    cairo_line_to(cr, x + 1.5, y + height - 1.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &dark);
+                    cairo_move_to(cr, x + 2.5, y + height - 1.5);
+                    cairo_line_to(cr, x + width - 1.5, y + height - 1.5);
+                    cairo_line_to(cr, x + width - 1.5, y + 2.5);
+                    cairo_stroke(cr);
+                }
+                else if ((xt > 0) && (yt > 0))
+                {
+                    gdk_cairo_set_source_rgba(cr, &dark);
+                    cairo_move_to(cr, x + width - 0.5, y + 0.5);
+                    cairo_line_to(cr, x + 0.5, y + 0.5);
+                    cairo_line_to(cr, x + 0.5, y + height - 0.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &light);
+                    cairo_move_to(cr, x + 1.5, y + height - 0.5);
+                    cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                    cairo_line_to(cr, x + width - 0.5, y + 1.5);
+                    cairo_stroke(cr);
+                }
+            }
+            break;
+        case GTK_BORDER_STYLE_OUTSET:
+            gtk_theming_engine_get(engine, state, XFCE_SMOOTH_EDGE, &smooth_edge, NULL);
+            color_dark2light_mid(&dark, &light, &mid);
+            if (smooth_edge)
+            {
+                if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_SPINBUTTON) && !(state & GTK_STATE_FLAG_PRELIGHT))
+		{
+                    /* Do nothing */
+		}
+		else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_PROGRESSBAR))
+                {
+                    gdk_cairo_set_source_rgba(cr, &dark);
+                    cairo_rectangle(cr, x + 0.5, y + 0.5, width - 1, height - 1);
+                    cairo_stroke(cr);
+
+		    gtk_theming_engine_get_border_color(engine, GTK_STATE_FLAG_NORMAL, &dark);
+		    color_dark2light_mid(&dark, &light, &mid);
+
+                    gdk_cairo_set_source_rgba(cr, &mid);
+                    cairo_rectangle(cr, x, y, 1, 1);
+                    cairo_rectangle(cr, x + width - 1, y, 1, 1);
+                    cairo_rectangle(cr, x, y + height - 1, 1, 1);
+                    cairo_rectangle(cr, x + width - 1, y + height - 1, 1, 1);
+                    cairo_fill(cr);
+                }
+                else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENU))
+                {
+                    if ((xt > 0) && (yt > 0))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_rectangle(cr, x + 0.5, y + 0.5, width - 1, height - 1);
+                        cairo_stroke(cr);
+                    }
+                }
+                else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENUBAR))
+                {
+                    if ((xt > 1) && (yt > 1))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &mid);
+                        cairo_move_to(cr, x + 0.5, y + height - 1.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 1.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x + 0.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                        cairo_stroke(cr);
+                    }
+                    else if ((xt > 0) && (yt > 0))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x + 0.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                        cairo_stroke(cr);
+                    }
+                }
+                else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_DOCK) ||
+                         gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_TOOLBAR))
+                {
+                    if ((xt > 1) && (yt > 1))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &light);
+                        cairo_move_to(cr, x + 0.5, y + 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + 0.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &mid);
+                        cairo_move_to(cr, x + 0.5 , y + height - 1.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 1.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x + 0.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                        cairo_stroke(cr);
+                    }
+                    else if ((xt > 0) && (yt > 0))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &light);
+                        cairo_move_to(cr, x + 0.5, y + 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + 0.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x + 0.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                        cairo_stroke(cr);
+                    }
+                }
+                else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_SLIDER))
+                {
+                    if ((xt > 1) && (yt > 1))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x + width - 0.5, y + 0.5);
+                        cairo_line_to(cr, x + 0.5, y + 0.5);
+                        cairo_line_to(cr, x + 0.5, y + height - 0.5);
+
+                        cairo_move_to(cr, x + 1.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + 1.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &light);
+                        cairo_move_to(cr, x + width - 2.5, y + 1.5);
+                        cairo_line_to(cr, x + 1.5, y + 1.5);
+                        cairo_line_to(cr, x + 1.5, y + height - 2.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &mid);
+                        cairo_move_to(cr, x + 1.5, y + height - 1.5);
+                        cairo_line_to(cr, x + width - 1.5, y + height - 1.5);
+                        cairo_line_to(cr, x + width - 1.5, y + 1.5);
+                        cairo_stroke(cr);
+                    }
+                    else if ((xt > 0) && (yt > 0))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &light);
+                        cairo_move_to(cr, x + width - 0.5, y + 0.5);
+                        cairo_line_to(cr, x + 0.5, y + 0.5);
+                        cairo_line_to(cr, x + 0.5, y + height - 0.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x + 1.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + 1.5);
+                        cairo_stroke(cr);
+                    }
+                }
+                else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_FRAME))
+                {
+                    if ((xt > 1) && (yt > 1))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &light);
+                        cairo_move_to(cr, x + width - 1.5, y + 0.5);
+                        cairo_line_to(cr, x + 0.5, y + 0.5);
+                        cairo_line_to(cr, x + 0.5, y + height - 1.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x + 0.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + 0.5);
+                        cairo_stroke(cr);
+
+                        gtk_theming_engine_get_background_color(engine, state, &bg);
+                        gdk_cairo_set_source_rgba(cr, &bg);
+                        cairo_move_to(cr, x + width - 1.5, y + 1.5);
+                        cairo_line_to(cr, x + 1.5, y + 1.5);
+                        cairo_line_to(cr, x + 1.5, y + height - 1.5);
+
+                        cairo_move_to(cr, x + 2.5, y + height - 1.5);
+                        cairo_line_to(cr, x + width - 1.5, y + height - 1.5);
+                        cairo_line_to(cr, x + width - 1.5, y + 2.5);
+                        cairo_stroke(cr);
+                    }
+                    else if ((xt > 0) && (yt > 0))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &light);
+                        cairo_move_to(cr, x + width - 0.5, y + 0.5);
+                        cairo_line_to(cr, x + 0.5, y + 0.5);
+                        cairo_line_to(cr, x + 0.5, y + height - 0.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x + 1.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + 1.5);
+                        cairo_stroke(cr);
+                    }
+                }
+                else
+                {
+                    if ((xt > 1) && (yt > 1))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x + 1.5, y + 0.5);
+                        cairo_line_to(cr, x + width - 1.5, y + 0.5);
+                        cairo_move_to(cr, x + 0.5, y + 1.5);
+                        cairo_line_to(cr, x + 0.5, y + height - 1.5);
+
+                        cairo_move_to(cr, x + 1.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 1.5, y + height - 0.5);
+                        cairo_move_to(cr, x + width - 0.5, y + 1.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 1.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &light);
+                        cairo_move_to(cr, x + width - 2.5, y + 1.5);
+                        cairo_line_to(cr, x + 1.5, y + 1.5);
+                        cairo_line_to(cr, x + 1.5, y + height - 2.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &mid);
+                        cairo_move_to(cr, x + 1.5, y + height - 1.5);
+                        cairo_line_to(cr, x + width - 1.5, y + height - 1.5);
+                        cairo_line_to(cr, x + width - 1.5, y + 1.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &mid);
+                        cairo_rectangle(cr, x, y, 1, 1);
+                        cairo_rectangle(cr, x + width - 1, y, 1, 1);
+                        cairo_rectangle(cr, x, y + height - 1, 1, 1);
+                        cairo_rectangle(cr, x + width - 1, y + height - 1, 1, 1);
+                        cairo_fill(cr);
+                    }
+                    else if ((xt > 0) && (yt > 0))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &light);
+                        cairo_move_to(cr, x + 1.5, y + 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + 0.5);
+                        cairo_move_to(cr, x + 0.5, y + 1.5);
+                        cairo_line_to(cr, x + 0.5, y + height - 0.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x + 1.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + 1.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &mid);
+                        cairo_rectangle(cr, x, y, 1, 1);
+                        cairo_rectangle(cr, x + width - 1, y, 1, 1);
+                        cairo_rectangle(cr, x, y + height - 1, 1, 1);
+                        cairo_rectangle(cr, x + width - 1, y + height - 1, 1, 1);
+                        cairo_fill(cr);
+                    }
+                }
+            }
+            else
+            {
+                if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_SPINBUTTON) && !(state & GTK_STATE_FLAG_PRELIGHT))
+		{
+                    /* Do nothing */
+		}
+                else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENUBAR))
+                {
+                    if ((xt > 1) && (yt > 1))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &mid);
+                        cairo_move_to(cr, x + 0.5, y + height - 1.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 1.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x + 0.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                        cairo_stroke(cr);
+                    }
+                    else if ((xt > 0) && (yt > 0))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x + 0.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                        cairo_stroke(cr);
+                    }
+                }
+                else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_DOCK) ||
+                         gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_TOOLBAR))
+                {
+                    if ((xt > 1) && (yt > 1))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &light);
+                        cairo_move_to(cr, x + 0.5, y + 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + 0.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &mid);
+                        cairo_move_to(cr, x + 0.5 , y + height - 1.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 1.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x + 0.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                        cairo_stroke(cr);
+                    }
+                    else if ((xt > 0) && (yt > 0))
+                    {
+                        gdk_cairo_set_source_rgba(cr, &light);
+                        cairo_move_to(cr, x + 0.5, y + 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + 0.5);
+                        cairo_stroke(cr);
+
+                        gdk_cairo_set_source_rgba(cr, &dark);
+                        cairo_move_to(cr, x + 0.5, y + height - 0.5);
+                        cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                        cairo_stroke(cr);
+                    }
+                }
+                else if ((xt > 1) && (yt > 1))
+                {
+                    gdk_cairo_set_source_rgba(cr, &dark);
+                    cairo_move_to(cr, x + width - 0.5, y + 0.5);
+                    cairo_line_to(cr, x + 0.5, y + 0.5);
+                    cairo_line_to(cr, x + 0.5, y + height - 0.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &black);
+                    cairo_move_to(cr, x + 1.5, y + height - 0.5);
+                    cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                    cairo_line_to(cr, x + width - 0.5, y + 1.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &light);
+                    cairo_move_to(cr, x + width - 1.5, y + 1.5);
+                    cairo_line_to(cr, x + 1.5, y + 1.5);
+                    cairo_line_to(cr, x + 1.5, y + height - 1.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &dark);
+                    cairo_move_to(cr, x + 2.5, y + height - 1.5);
+                    cairo_line_to(cr, x + width - 1.5, y + height - 1.5);
+                    cairo_line_to(cr, x + width - 1.5, y + 2.5);
+                    cairo_stroke(cr);
+                }
+                else if ((xt > 0) && (yt > 0))
+                {
+                    gdk_cairo_set_source_rgba(cr, &light);
+                    cairo_move_to(cr, x + width - 0.5, y + 0.5);
+                    cairo_line_to(cr, x + 0.5, y + 0.5);
+                    cairo_line_to(cr, x + 0.5, y + height - 0.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &dark);
+                    cairo_move_to(cr, x + 1.5, y + height - 0.5);
+                    cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                    cairo_line_to(cr, x + width - 0.5, y + 1.5);
+                    cairo_stroke(cr);
+                }
+            }
+            break;
+    }
+}
+
+static cairo_surface_t *get_part_bmap (Part part)
+{
+    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;
+}
+
+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);
+}
+
+static void render_check(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height)
+{
+    GtkStateFlags state;
+    GdkRGBA bg, border, fg;
+
+    x -= (1 + PART_SIZE - width) / 2;
+    y -= (1 + PART_SIZE - height) / 2;
+
+    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);
+
+    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);
+
+    if (state & GTK_STATE_FLAG_INCONSISTENT)
+    {
+        draw_part(cr, &fg, x, y, CHECK_DASH);
+    }
+    else if (state & GTK_STATE_FLAG_ACTIVE)
+    {
+        draw_part(cr, &fg, x, y, CHECK_CROSS);
+    }
+}
+
+static void render_option(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height)
+{
+    GtkStateFlags state;
+    GdkRGBA bg, border, fg;
+
+    x -= (1 + PART_SIZE - width) / 2;
+    y -= (1 + PART_SIZE - height) / 2;
+
+    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);
+
+    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);
+
+    if (state & GTK_STATE_FLAG_INCONSISTENT)
+    {
+        draw_part(cr, &fg, x, y, CHECK_DASH);
+    }
+    else if (state & GTK_STATE_FLAG_ACTIVE)
+    {
+        draw_part(cr, &fg, x, y, RADIO_TEXT);
+    }
+}
+
+static void render_frame_gap(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkPositionType gap_side, gdouble gap_s, gdouble gap_e)
+{
+    GtkStateFlags state;
+    GtkBorderStyle border_style;
+    gdouble x0, y_0, x1, y_1;
+    gdouble ex, ey, ew, eh;
+
+    state = gtk_theming_engine_get_state(engine);
+
+    if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_NOTEBOOK))
+    {
+        GdkRGBA c1;
+        GdkRGBA c2;
+        GdkRGBA c3;
+        GdkRGBA c4 = {0.0, 0.0, 0.0, 1.0}; /* black */
+        gboolean smooth_edge;
+
+        GE_CAIRO_INIT;
+
+        gtk_theming_engine_get(engine, state, XFCE_SMOOTH_EDGE, &smooth_edge, NULL);
+        if (smooth_edge)
+        {
+            gtk_theming_engine_get_background_color(engine, state, &c2);
+            gtk_theming_engine_get_border_color(engine, state, &c1);
+            c3 = c2;
+            c4 = c1;
+        }
+        else
+        {
+            gtk_theming_engine_get_border_color(engine, state, &c1);
+            color_dark2light(&c1, &c2);
+            c3 = c1;
+        }
+
+        switch (gap_side)
+        {
+            case GTK_POS_TOP:
+                gdk_cairo_set_source_rgba(cr, &c1);
+                cairo_move_to(cr, x + 0.5, y + 0.5);
+                cairo_line_to(cr, x + 0.5, y + height - 0.5);
+                cairo_stroke(cr);
+
+                gdk_cairo_set_source_rgba(cr, &c2);
+                cairo_move_to(cr, x + 1.5, y + 1.5);
+                cairo_line_to(cr, x + 1.5, y + height - 1.5);
+                cairo_stroke(cr);
+
+                gdk_cairo_set_source_rgba(cr, &c3);
+                cairo_move_to(cr, x + 2.5, y + height - 1.5);
+                cairo_line_to(cr, x + width - 1.5, y + height - 1.5);
+                cairo_line_to(cr, x + width - 1.5, y + 0.5);
+                cairo_stroke(cr);
+
+                gdk_cairo_set_source_rgba(cr, &c4);
+                cairo_move_to(cr, x + 1.5, y + height - 0.5);
+                cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                cairo_line_to(cr, x + width - 0.5, y + 0.5);
+                cairo_stroke(cr);
+
+                cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT);
+                if (gap_s > 0)
+                {
+                    gdk_cairo_set_source_rgba(cr, &c1);
+                    cairo_move_to(cr, x, y + 0.5);
+                    cairo_line_to(cr, x + gap_s, y + 0.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &c2);
+                    cairo_move_to(cr, x + 1, y + 1.5);
+                    cairo_line_to(cr, x + gap_s, y + 1.5);
+                    cairo_stroke(cr);
+
+                    cairo_rectangle(cr, x + gap_s, y + 0.5, 1, 1);
+                    cairo_move_to(cr, x + gap_s, y);
+                    cairo_line_to(cr, x + gap_s + 1, y + 0.5);
+                    cairo_fill(cr);
+                }
+                if ((width - gap_e) > 0)
+                {
+                    gdk_cairo_set_source_rgba(cr, &c1);
+                    cairo_move_to(cr, x + gap_e, y + 0.5);
+                    cairo_line_to(cr, x + width - 1, y + 0.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &c2);
+                    cairo_move_to(cr, x + gap_e, y + 1.5);
+                    cairo_line_to(cr, x + width - 1, y + 1.5);
+
+                    cairo_move_to(cr, x + gap_e - 1, y + 0.5);
+                    cairo_line_to(cr, x + gap_e, y + 0.5);
+                    cairo_stroke(cr);
+                }
+                break;
+            case GTK_POS_BOTTOM:
+                gdk_cairo_set_source_rgba(cr, &c1);
+                cairo_move_to(cr, x + width - 0.5, y + 0.5);
+                cairo_line_to(cr, x + 0.5, y + 0.5);
+                cairo_line_to(cr, x + 0.5, y + height - 0.5);
+                cairo_stroke(cr);
+
+                gdk_cairo_set_source_rgba(cr, &c2);
+                cairo_move_to(cr, x + width - 1.5, y + 1.5);
+                cairo_line_to(cr, x + 1.5, y + 1.5);
+                cairo_line_to(cr, x + 1.5, y + height - 0.5);
+                cairo_stroke(cr);
+
+                gdk_cairo_set_source_rgba(cr, &c3);
+                cairo_move_to(cr, x + width - 1.5, y + 1.5);
+                cairo_line_to(cr, x + width - 1.5, y + height - 0.5);
+                cairo_stroke(cr);
+
+                gdk_cairo_set_source_rgba(cr, &c4);
+                cairo_move_to(cr, x + width - 0.5, y + 0.5);
+                cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                cairo_stroke(cr);
+
+                cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT);
+                if (gap_s > 0)
+                {
+                    gdk_cairo_set_source_rgba(cr, &c4);
+                    cairo_move_to(cr, x, y + height - 0.5);
+                    cairo_line_to(cr, x + gap_s, y + height - 0.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &c3);
+                    cairo_move_to(cr, x + 1, y + height - 1.5);
+                    cairo_line_to(cr, x + gap_s, y + height - 1.5);
+
+                    cairo_move_to(cr, x + gap_s, y + height - 0.5);
+                    cairo_line_to(cr, x + gap_s + 1, y + height - 0.5);
+                    cairo_stroke(cr);
+                }
+                if ((width - gap_e) > 0)
+                {
+                    gdk_cairo_set_source_rgba(cr, &c4);
+                    cairo_move_to(cr, x + gap_e, y + height - 0.5);
+                    cairo_line_to(cr, x + width - 1, y + height - 0.5);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &c3);
+                    cairo_move_to(cr, x + gap_e, y + height - 1.5);
+                    cairo_line_to(cr, x + width - 1, y + height - 1.5);
+
+                    cairo_move_to(cr, x + gap_e - 1, y + height - 0.5);
+                    cairo_line_to(cr, x + gap_e, y + height - 0.5);
+                    cairo_stroke(cr);
+                }
+                break;
+            case GTK_POS_LEFT:
+                gdk_cairo_set_source_rgba(cr, &c1);
+                cairo_move_to(cr, x + 0.5, y + 0.5);
+                cairo_line_to(cr, x + width - 0.5, y + 0.5);
+                cairo_stroke(cr);
+
+                gdk_cairo_set_source_rgba(cr, &c2);
+                cairo_move_to(cr, x + 0.5, y + 1.5);
+                cairo_line_to(cr, x + width - 1.5, y + 1.5);
+                cairo_stroke(cr);
+
+                gdk_cairo_set_source_rgba(cr, &c3);
+                cairo_move_to(cr, x + 0.5, y + height - 1.5);
+                cairo_line_to(cr, x + width - 1.5, y + height - 1.5);
+                cairo_line_to(cr, x + width - 1.5, y + 1.5);
+                cairo_stroke(cr);
+
+                gdk_cairo_set_source_rgba(cr, &c4);
+                cairo_move_to(cr, x + 1.5, y + height - 0.5);
+                cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                cairo_line_to(cr, x + width - 0.5, y + 0.5);
+                cairo_stroke(cr);
+
+                cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT);
+                if (gap_s > 0)
+                {
+                    gdk_cairo_set_source_rgba(cr, &c1);
+                    cairo_move_to(cr, x + 0.5, y);
+                    cairo_line_to(cr, x + 0.5, y + gap_s);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &c2);
+                    cairo_move_to(cr, x + 1.5, y + 1);
+                    cairo_line_to(cr, x + 1.5, y + gap_s);
+
+                    cairo_move_to(cr, x + 0.5, y + gap_s);
+                    cairo_line_to(cr, x + 0.5, y + gap_s + 1);
+                    cairo_stroke(cr);
+                }
+                if ((width - gap_e) > 0)
+                {
+                    gdk_cairo_set_source_rgba(cr, &c1);
+                    cairo_move_to(cr, x + 0.5, y + gap_e);
+                    cairo_line_to(cr, x + 0.5, y + height - 1);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &c2);
+                    cairo_move_to(cr, x + 1.5, y + gap_e);
+                    cairo_line_to(cr, x + 1.5, y + height - 1);
+
+                    cairo_move_to(cr, x + 0.5, y + gap_e - 1);
+                    cairo_line_to(cr, x + 0.5, y + gap_e);
+                    cairo_stroke(cr);
+                }
+                break;
+            case GTK_POS_RIGHT:
+                gdk_cairo_set_source_rgba(cr, &c1);
+                cairo_move_to(cr, x + width - 0.5, y + 0.5);
+                cairo_line_to(cr, x + 0.5, y + 0.5);
+                cairo_line_to(cr, x + 0.5, y + height - 0.5);
+                cairo_stroke(cr);
+
+                gdk_cairo_set_source_rgba(cr, &c2);
+                cairo_move_to(cr, x + width - 0.5, y + 1.5);
+                cairo_line_to(cr, x + 1.5, y + 1.5);
+                cairo_line_to(cr, x + 1.5, y + height - 1.5);
+                cairo_stroke(cr);
+
+                gdk_cairo_set_source_rgba(cr, &c3);
+                cairo_move_to(cr, x + 1.5, y + height - 1.5);
+                cairo_line_to(cr, x + width - 0.5, y + height - 1.5);
+                cairo_stroke(cr);
+
+                gdk_cairo_set_source_rgba(cr, &c4);
+                cairo_move_to(cr, x + 1.5, y + height - 0.5);
+                cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+                cairo_stroke(cr);
+
+                cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT);
+                if (gap_s > 0)
+                {
+                    gdk_cairo_set_source_rgba(cr, &c4);
+                    cairo_move_to(cr, x + width - 0.5, y);
+                    cairo_line_to(cr, x + width - 0.5, y + gap_s);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &c3);
+                    cairo_move_to(cr, x + width - 1.5, y + 1);
+                    cairo_line_to(cr, x + width - 1.5, y + gap_s);
+
+                    cairo_move_to(cr, x + width - 0.5, y + gap_s);
+                    cairo_line_to(cr, x + width - 0.5, y + gap_s + 1);
+                    cairo_stroke(cr);
+                }
+                if ((width - gap_e) > 0)
+                {
+                    gdk_cairo_set_source_rgba(cr, &c4);
+                    cairo_move_to(cr, x + width - 0.5, y + gap_e);
+                    cairo_line_to(cr, x + width - 0.5, y + height - 1);
+                    cairo_stroke(cr);
+
+                    gdk_cairo_set_source_rgba(cr, &c3);
+                    cairo_move_to(cr, x + width - 1.5, y + gap_e);
+                    cairo_line_to(cr, x + width - 1.5, y + height - 1);
+
+                    cairo_move_to(cr, x + width - 0.5, y + gap_e - 1);
+                    cairo_line_to(cr, x + width - 0.5, y + gap_e);
+                    cairo_stroke(cr);
+                }
+                break;
+        }
+
+        return;
+    }
+
+    gtk_theming_engine_get(engine, state, GTK_STYLE_PROPERTY_BORDER_STYLE, &border_style, NULL);
+
+    if (border_style == GTK_BORDER_STYLE_NONE)
+        return;
+
+    switch (gap_side)
+    {
+        case GTK_POS_TOP:
+            ex = x + gap_s;
+            ey = y;
+            ew = gap_e - gap_s;
+            eh = 2;
+            break;
+        case GTK_POS_BOTTOM:
+            ex = x + gap_s;
+            ey = y + height - 2;
+            ew = gap_e - gap_s;
+            eh = 2;
+            break;
+        case GTK_POS_LEFT:
+            ex = x;
+            ey = y + gap_s;
+            ew = 2;
+            eh = gap_e - gap_s;
+            break;
+        case GTK_POS_RIGHT:
+            ex = x + width - 2;
+            ey = y + gap_s;
+            ew = 2;
+            eh = gap_e - gap_s;
+            break;
+    }
+
+    cairo_save (cr);
+
+    cairo_clip_extents (cr, &x0, &y_0, &x1, &y_1);
+    cairo_rectangle (cr, x0, y_0, x1 - x0, ey - y_0);
+    cairo_rectangle (cr, x0, ey, ex - x0, eh);
+    cairo_rectangle (cr, ex + ew, ey, x1 - (ex + ew), eh);
+    cairo_rectangle (cr, x0, ey + eh, x1 - x0, y_1 - (ey + eh));
+    cairo_clip (cr);
+
+    render_frame (engine, cr, x, y, width, height);
+
+    cairo_restore (cr);
+}
+
+static void render_extension(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkPositionType gap_side)
+{
+    GtkStateFlags state;
+    gboolean smooth_edge = FALSE;
+    GdkRGBA c1;
+    GdkRGBA c2;
+    GdkRGBA c3;
+    GdkRGBA c4 = {0.0, 0.0, 0.0, 1.0}; /* black */
+    GtkBorder border;
+
+    GE_CAIRO_INIT;
+
+    state = gtk_theming_engine_get_state(engine);
+    gtk_theming_engine_get_border(engine, state, &border);
+
+    GTK_THEMING_ENGINE_GET_CLASS(engine)->render_background(engine, cr, x - border.left + 1, y - border.top + 1, width + border.left + border.right - 2, height + border.top + border.bottom - 2);
+
+    gtk_theming_engine_get(engine, state, XFCE_SMOOTH_EDGE, &smooth_edge, NULL);
+
+    if (smooth_edge)
+    {
+        gtk_theming_engine_get_background_color(engine, state, &c2);
+        gtk_theming_engine_get_border_color(engine, state, &c1);
+        c3 = c2;
+        c4 = c1;
+    }
+    else
+    {
+        gtk_theming_engine_get_border_color(engine, state, &c1);
+        color_dark2light(&c1, &c2);
+        c3 = c1;
+    }
+
+    switch (gap_side)
+    {
+        case GTK_POS_TOP:
+            gdk_cairo_set_source_rgba(cr, &c1);
+            cairo_move_to(cr, x + 0.5, y + 0.5);
+            cairo_line_to(cr, x + 0.5, y + height - 1.5);
+            cairo_stroke(cr);
+
+            gdk_cairo_set_source_rgba(cr, &c2);
+            cairo_move_to(cr, x + 1.5, y + 1.5);
+            cairo_line_to(cr, x + 1.5, y + height - 1.5);
+            cairo_stroke(cr);
+
+            gdk_cairo_set_source_rgba(cr, &c3);
+            cairo_move_to(cr, x + 2.5, y + height - 1.5);
+            cairo_line_to(cr, x + width - 1.5, y + height - 1.5);
+            cairo_line_to(cr, x + width - 1.5, y + 0.5);
+            cairo_stroke(cr);
+
+            gdk_cairo_set_source_rgba(cr, &c4);
+            cairo_move_to(cr, x + 1.5, y + height - 0.5);
+            cairo_line_to(cr, x + width - 1.5, y + height - 0.5);
+            cairo_move_to(cr, x + width - 0.5, y + 0.5);
+            cairo_line_to(cr, x + width - 0.5, y + height - 1.5);
+            cairo_stroke(cr);
+            break;
+        case GTK_POS_BOTTOM:
+            gdk_cairo_set_source_rgba(cr, &c1);
+            cairo_move_to(cr, x + 1.5, y + 0.5);
+            cairo_line_to(cr, x + width - 1.5, y + 0.5);
+            cairo_move_to(cr, x + 0.5, y + 1.5);
+            cairo_line_to(cr, x + 0.5, y + height - 0.5);
+            cairo_stroke(cr);
+
+            gdk_cairo_set_source_rgba(cr, &c2);
+            cairo_move_to(cr, x + width - 1.5, y + 1.5);
+            cairo_line_to(cr, x + 1.5, y + 1.5);
+            cairo_line_to(cr, x + 1.5, y + height - 0.5);
+            cairo_stroke(cr);
+
+            gdk_cairo_set_source_rgba(cr, &c3);
+            cairo_move_to(cr, x + width - 1.5, y + 2.5);
+            cairo_line_to(cr, x + width - 1.5, y + height - 0.5);
+            cairo_stroke(cr);
+
+            gdk_cairo_set_source_rgba(cr, &c4);
+            cairo_move_to(cr, x + width - 0.5, y + 1.5);
+            cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+            cairo_stroke(cr);
+            break;
+        case GTK_POS_LEFT:
+            gdk_cairo_set_source_rgba(cr, &c1);
+            cairo_move_to(cr, x + 0.5, y + 0.5);
+            cairo_line_to(cr, x + width - 1.5, y + 0.5);
+            cairo_stroke(cr);
+
+            gdk_cairo_set_source_rgba(cr, &c2);
+            cairo_move_to(cr, x + 1.5, y + 1.5);
+            cairo_line_to(cr, x + width - 1.5, y + 1.5);
+            cairo_stroke(cr);
+
+            gdk_cairo_set_source_rgba(cr, &c3);
+            cairo_move_to(cr, x + 0.5, y + height - 1.5);
+            cairo_line_to(cr, x + width - 1.5, y + height - 1.5);
+            cairo_line_to(cr, x + width - 1.5, y + 2.5);
+            cairo_stroke(cr);
+
+            gdk_cairo_set_source_rgba(cr, &c4);
+            cairo_move_to(cr, x + 0.5, y + height - 0.5);
+            cairo_line_to(cr, x + width - 1.5, y + height - 0.5);
+            cairo_move_to(cr, x + width - 0.5, y + 1.5);
+            cairo_line_to(cr, x + width - 0.5, y + height - 1.5);
+            cairo_stroke(cr);
+            break;
+        case GTK_POS_RIGHT:
+            gdk_cairo_set_source_rgba(cr, &c1);
+            cairo_move_to(cr, x + 1.5, y + 0.5);
+            cairo_line_to(cr, x + width - 0.5, y + 0.5);
+            cairo_move_to(cr, x + 0.5, y + 1.5);
+            cairo_line_to(cr, x + 0.5, y + height - 1.5);
+            cairo_stroke(cr);
+
+            gdk_cairo_set_source_rgba(cr, &c2);
+            cairo_move_to(cr, x + width - 0.5, y + 1.5);
+            cairo_line_to(cr, x + 1.5, y + 1.5);
+            cairo_line_to(cr, x + 1.5, y + height - 1.5);
+            cairo_stroke(cr);
+
+            gdk_cairo_set_source_rgba(cr, &c3);
+            cairo_move_to(cr, x + 2.5, y + height - 1.5);
+            cairo_line_to(cr, x + width - 0.5, y + height - 1.5);
+            cairo_stroke(cr);
+
+            gdk_cairo_set_source_rgba(cr, &c4);
+            cairo_move_to(cr, x + 1.5, y + height - 0.5);
+            cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+            cairo_stroke(cr);
+            break;
+    }
+}
+
+static void render_slider(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkOrientation orientation)
+{
+    GE_CAIRO_INIT;
+
+    GTK_THEMING_ENGINE_GET_CLASS(engine)->render_background(engine, cr, x, y, width, height);
+    GTK_THEMING_ENGINE_GET_CLASS(engine)->render_frame(engine, cr, x, y, width, height);
+    xfce_draw_grips(engine, cr, x, y, width, height, orientation);
+}
+
+static void render_handle(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height)
+{
+    GtkOrientation orientation;
+
+    if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_GRIP))
+    {
+        GTK_THEMING_ENGINE_CLASS(xfce_engine_parent_class)->render_handle(engine, cr, x, y, width, height);
+        return;
+    }
+
+    GE_CAIRO_INIT;
+
+    orientation = GTK_ORIENTATION_HORIZONTAL;
+    if (height > width)
+        orientation = GTK_ORIENTATION_VERTICAL;
+
+#if 0
+    GTK_THEMING_ENGINE_GET_CLASS(engine)->render_background(engine, cr, x, y, width, height);
+#endif
+    xfce_draw_grips(engine, cr, x, y, width, height, orientation);
+}
+
+static void render_activity(GtkThemingEngine * engine, cairo_t * cr, gdouble x, gdouble y, gdouble width, gdouble height)
+{
+    if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_PROGRESSBAR))
+    {
+        GTK_THEMING_ENGINE_GET_CLASS(engine)->render_background(engine, cr, x, y, width, height);
+        GTK_THEMING_ENGINE_GET_CLASS(engine)->render_frame(engine, cr, x, y, width, height);
+    }
+    else
+    {
+        GTK_THEMING_ENGINE_CLASS(xfce_engine_parent_class)->render_activity(engine, cr, x, y, width, height);
+    }
+}
+
+void xfce_engine_register_types(GTypeModule * module)
+{
+    xfce_engine_register_type(module);
+}
+
+static void xfce_engine_init(XfceEngine * engine)
+{
+}
+
+static void xfce_engine_class_init(XfceEngineClass * klass)
+{
+    GtkThemingEngineClass *engine_class = GTK_THEMING_ENGINE_CLASS(klass);
+
+    engine_class->render_line = render_line;
+    engine_class->render_frame = render_frame;
+    engine_class->render_check = render_check;
+    engine_class->render_option = render_option;
+    engine_class->render_frame_gap = render_frame_gap;
+    engine_class->render_extension = render_extension;
+    engine_class->render_slider = render_slider;
+    engine_class->render_handle = render_handle;
+    engine_class->render_activity = render_activity;
+
+    gtk_theming_engine_register_property(XFCE_NAMESPACE, NULL,
+            g_param_spec_boolean(SMOOTH_EDGE, "Smooth edge", "Smooth edge",
+                FALSE, 0));
+    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));
+}
+
+static void xfce_engine_class_finalize(XfceEngineClass * klass)
+{
+}
+
diff --git a/src/xfce_theme_main.c b/gtk-3.0/xfce_engine.h
similarity index 65%
copy from src/xfce_theme_main.c
copy to gtk-3.0/xfce_engine.h
index 58941c0..25c4ed6 100644
--- a/src/xfce_theme_main.c
+++ b/gtk-3.0/xfce_engine.h
@@ -15,6 +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)
  *
  *  Portions based Thinice port by 
  *                       Tim Gerla <timg at rrv.net>,
@@ -41,36 +42,28 @@
 #  include "config.h"
 #endif
 
-#include <gmodule.h>
 #include <gtk/gtk.h>
-#include "xfce_rc_style.h"
-#include "xfce_style.h"
 
-G_MODULE_EXPORT void theme_init(GTypeModule * module);
-G_MODULE_EXPORT void theme_exit(void);
-G_MODULE_EXPORT GtkRcStyle *theme_create_rc_style(void);
-G_MODULE_EXPORT const gchar * g_module_check_init (GModule * module);
+typedef struct _XfceEngine XfceEngine;
+typedef struct _XfceEngineClass XfceEngineClass;
 
+#define XFCE_TYPE_ENGINE              xfce_engine_get_type()
+#define XFCE_ENGINE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), XFCE_TYPE_ENGINE, XfceEngine))
+#define XFCE_ENGINE_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), XFCE_TYPE_ENGINE, XfceEngineClass))
+#define XFCE_IS_ENGINE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), XFCE_TYPE_ENGINE))
+#define XFCE_IS_ENGINE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), XFCE_TYPE_ENGINE))
+#define XFCE_ENGINE_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), XFCE_TYPE_ENGINE, XfceEngineClass))
 
-
-G_MODULE_EXPORT void theme_init(GTypeModule * module)
+struct _XfceEngine
 {
-    xfce_rc_style_register_type(module);
-    xfce_style_register_type(module);
-}
+    GtkThemingEngine parent_instance;
+};
 
-G_MODULE_EXPORT void theme_exit(void)
+struct _XfceEngineClass
 {
-}
+    GtkThemingEngineClass parent_class;
+};
 
-G_MODULE_EXPORT GtkRcStyle *theme_create_rc_style(void)
-{
-    void *ptr;
-    ptr = GTK_RC_STYLE(g_object_new(XFCE_TYPE_RC_STYLE, NULL));
-    return (GtkRcStyle *) ptr;
-}
+GType xfce_engine_get_type(void);
 
-G_MODULE_EXPORT const gchar * g_module_check_init (GModule * module)
-{
-  return gtk_check_version (GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION - GTK_INTERFACE_AGE);
-}
+void xfce_engine_register_types(GTypeModule * module);
diff --git a/src/xfce_style.h b/gtk-3.0/xfce_style.h
similarity index 100%
rename from src/xfce_style.h
rename to gtk-3.0/xfce_style.h
diff --git a/src/gradient_draw.h b/gtk-3.0/xfce_style_types.h
similarity index 73%
rename from src/gradient_draw.h
rename to gtk-3.0/xfce_style_types.h
index fc7f859..213cea0 100644
--- a/src/gradient_draw.h
+++ b/gtk-3.0/xfce_style_types.h
@@ -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 Peter de Ridder (peter at xfce.org)
  *
  *  Portions based Thinice port by 
  *                       Tim Gerla <timg at rrv.net>,
@@ -38,20 +38,14 @@
  *  Portions based on original GTK theme
  */
 
-#ifndef INC_GRADIENT_DRAW_H
-#define INC_GRADIENT_DRAW_H
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
 
 typedef enum
 {
-    GRADIENT_HORIZONTAL,
-    GRADIENT_VERTICAL,
-    GRADIENT_NORTHERN_DIAGONAL,
-    GRADIENT_SOUTHERN_DIAGONAL
-} GradientType;
+    XFCE_GRIP_DISABLED,
+    XFCE_GRIP_ROUGH,
+    XFCE_GRIP_SLIDE
+} XfceGripStyle;
 
-#define GRADIENT(horizontal) (horizontal ? GRADIENT_HORIZONTAL : GRADIENT_VERTICAL)
-#define DIAGONALGRADIENT(northern) (northern ? GRADIENT_NORTHERN_DIAGONAL : GRADIENT_SOUTHERN_DIAGONAL)
-
-void gradient_draw_shaded(cairo_t * cr, gint x, gint y, gint width, gint height, const GdkColor * color, gfloat shine_value, gfloat shade_value, GradientType gradient_style);
-
-#endif /* INC_GRADIENT_DRAW_H */
diff --git a/src/xfce_theme_main.c b/gtk-3.0/xfce_theme_main.c
similarity index 86%
rename from src/xfce_theme_main.c
rename to gtk-3.0/xfce_theme_main.c
index 58941c0..60c994c 100644
--- a/src/xfce_theme_main.c
+++ b/gtk-3.0/xfce_theme_main.c
@@ -15,6 +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)
  *
  *  Portions based Thinice port by 
  *                       Tim Gerla <timg at rrv.net>,
@@ -43,31 +44,29 @@
 
 #include <gmodule.h>
 #include <gtk/gtk.h>
-#include "xfce_rc_style.h"
-#include "xfce_style.h"
+#include "xfce_engine.h"
 
 G_MODULE_EXPORT void theme_init(GTypeModule * module);
 G_MODULE_EXPORT void theme_exit(void);
-G_MODULE_EXPORT GtkRcStyle *theme_create_rc_style(void);
+G_MODULE_EXPORT GtkThemingEngine *create_engine(void);
 G_MODULE_EXPORT const gchar * g_module_check_init (GModule * module);
 
 
 
 G_MODULE_EXPORT void theme_init(GTypeModule * module)
 {
-    xfce_rc_style_register_type(module);
-    xfce_style_register_type(module);
+    xfce_engine_register_types(module);
 }
 
 G_MODULE_EXPORT void theme_exit(void)
 {
 }
 
-G_MODULE_EXPORT GtkRcStyle *theme_create_rc_style(void)
+G_MODULE_EXPORT GtkThemingEngine *create_engine(void)
 {
-    void *ptr;
-    ptr = GTK_RC_STYLE(g_object_new(XFCE_TYPE_RC_STYLE, NULL));
-    return (GtkRcStyle *) ptr;
+    GtkThemingEngine *ptr;
+    ptr = GTK_THEMING_ENGINE(g_object_new(XFCE_TYPE_ENGINE, "name", "xfce", NULL));
+    return ptr;
 }
 
 G_MODULE_EXPORT const gchar * g_module_check_init (GModule * module)
diff --git a/gtk-3.0/xfce_typebuiltin.c.template b/gtk-3.0/xfce_typebuiltin.c.template
new file mode 100644
index 0000000..1c5309b
--- /dev/null
+++ b/gtk-3.0/xfce_typebuiltin.c.template
@@ -0,0 +1,38 @@
+/*** BEGIN file-header ***/
+#include <gtk/gtk.h>
+#include "xfce_style_types.h"
+#include "xfce_typebuiltin.h"
+
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType @enum_name at _get_type(void)
+{
+    static GType etype = 0;
+    if (G_UNLIKELY(etype == 0))
+    {
+        static const G at Type@Value values[] = {
+/*** END value-header ***/
+
+/*** BEGIN value-production ***/
+            { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
+/*** END value-production ***/
+
+/*** BEGIN value-tail ***/
+            { 0, NULL, NULL }
+        };
+        etype = g_ at type@_register_static(g_intern_static_string("@EnumName@"), values);
+    }
+    return etype;
+}
+
+/*** END value-tail ***/
+
+/*** BEGIN file-tail ***/
+
+/*** END file-tail ***/
+
diff --git a/gtk-3.0/xfce_typebuiltin.h.template b/gtk-3.0/xfce_typebuiltin.h.template
new file mode 100644
index 0000000..b52140b
--- /dev/null
+++ b/gtk-3.0/xfce_typebuiltin.h.template
@@ -0,0 +1,22 @@
+/*** BEGIN file-header ***/
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType @enum_name at _get_type (void) G_GNUC_CONST;
+#define @ENUMPREFIX at _TYPE_@ENUMSHORT@ (@enum_name at _get_type ())
+/*** END value-header ***/
+
+/*** BEGIN file-tail ***/
+
+G_END_DECLS
+/*** END file-tail ***/
+
diff --git a/themes/b5/Makefile.am b/themes/b5/Makefile.am
index 157ddb0..60ad9a8 100644
--- a/themes/b5/Makefile.am
+++ b/themes/b5/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-b5
 
diff --git a/themes/b5/gtk-3.0/Makefile.am b/themes/b5/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..ee99671
--- /dev/null
+++ b/themes/b5/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-b5/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/b5/gtk-3.0/gtk.css b/themes/b5/gtk-3.0/gtk.css
new file mode 100644
index 0000000..3b8f50a
--- /dev/null
+++ b/themes/b5/gtk-3.0/gtk.css
@@ -0,0 +1,283 @@
+
+ at define-color fg_active #525051;
+ at define-color fg_insensitive #525051;
+ at define-color fg_normal #000000;
+ at define-color fg_prelight #000000;
+ at define-color fg_selected #000000;
+
+ at define-color bg_active #dddbde;
+ at define-color bg_insensitive #dddbde;
+ at define-color bg_normal #dddbde;
+ at define-color bg_prelight #efedef;
+ at define-color bg_selected #b7b5b8;
+
+ at define-color base_active #dddbde;
+ at define-color base_insensitive #d6d4d6;
+ at define-color base_normal #ffffff;
+ at define-color base_prelight #efedef;
+ at define-color base_selected #b7b5b8;
+
+ at define-color text_active #000000;
+ at define-color text_insensitive #000000;
+ at define-color text_normal #000000;
+ at define-color text_prelight #000000;
+ at define-color text_selected #000000;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 0;
+    -GtkCheckButton-indicator-size   : 14;
+    -GtkMenuBar-shadow-type          : out;
+    -GtkMenuItem-selected-shadow-type: out;
+    -GtkRange-slider-width           : 11;
+    -GtkRange-stepper-size           : 11;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkToolbar-shadow-type          : out;
+    -GtkWidget-interior-focus        : true;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.button, .header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.scale.trough, .scrollbar.trough {
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+.slider {
+    color: #525051;
+
+    border-width: 1 1;
+}
+
+.slider:active {
+    background-color: #f0ebef;
+    border-color: darker(#f0ebef);
+}
+
diff --git a/themes/basic/Makefile.am b/themes/basic/Makefile.am
index 77e790f..e055dab 100644
--- a/themes/basic/Makefile.am
+++ b/themes/basic/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-basic
 
diff --git a/themes/basic/gtk-3.0/Makefile.am b/themes/basic/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..50aad2d
--- /dev/null
+++ b/themes/basic/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-basic/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/basic/gtk-3.0/gtk.css b/themes/basic/gtk-3.0/gtk.css
new file mode 100644
index 0000000..a9850ae
--- /dev/null
+++ b/themes/basic/gtk-3.0/gtk.css
@@ -0,0 +1,48 @@
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+    -xfce-grip-style: disabled;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 2;
+    -GtkMenuBar-shadow-type          : out;
+    -GtkToolbar-shadow-type          : out;
+    -GtkWidget-interior-focus        : true;
+    -GtkRange-slider-width           : 14;
+    -GtkRange-stepper-size           : 14;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+}
+
+*:insensitive {
+    text-shadow: 1 1 white;
+}
+
+.button {
+    border-width: 2 2;
+
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#DCDAD5, 1.1)), to(shade(#DCDAD5, 1.0)));
+}                                                         
+                                                          
+.button:active {                                          
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#9E9A91, 1.0)), to(shade(#9E9A91, 1.1)));
+}                                                         
+                                                          
+.button:insensitive {                                     
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#C8C5BE, 1.1)), to(shade(#C8C5BE, 1.0)));
+}                                                         
+                                                          
+.button:hover {                                           
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#4B6983, 1.1)), to(shade(#4B6983, 1.0)));
+}
+
+.button:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#4B6983, 1.0)), to(shade(#4B6983, 1.1)));
+}
+
+.scrollbar, .scale {
+    border-width: 2 2;
+}
diff --git a/themes/cadmium/Makefile.am b/themes/cadmium/Makefile.am
index 8b23789..2ffbe0a 100644
--- a/themes/cadmium/Makefile.am
+++ b/themes/cadmium/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-cadmium
 
diff --git a/themes/cadmium/gtk-3.0/Makefile.am b/themes/cadmium/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..42e966d
--- /dev/null
+++ b/themes/cadmium/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-cadmium/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/cadmium/gtk-3.0/gtk.css b/themes/cadmium/gtk-3.0/gtk.css
new file mode 100644
index 0000000..12152fd
--- /dev/null
+++ b/themes/cadmium/gtk-3.0/gtk.css
@@ -0,0 +1,348 @@
+
+ at define-color fg_active #000000;
+ at define-color fg_insensitive #8e8e8a;
+ at define-color fg_normal #000000;
+ at define-color fg_prelight #000000;
+ at define-color fg_selected #000000;
+
+ at define-color bg_active #cececa;
+ at define-color bg_insensitive #eeeeef;
+ at define-color bg_normal #eeeeef;
+ at define-color bg_prelight #ddddea;
+ at define-color bg_selected #ddddea;
+
+ at define-color base_active #cececa;
+ at define-color base_insensitive #eeeeef;
+ at define-color base_normal #ffffff;
+ at define-color base_prelight #d8dbe0;
+ at define-color base_selected #ddddea;
+
+ at define-color text_active #000000;
+ at define-color text_insensitive #000000;
+ at define-color text_normal #000000;
+ at define-color text_prelight #000000;
+ at define-color text_selected #000000;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+    -xfce-grip-style: disabled;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkButton-child-displacement-x  : 0;
+    -GtkButton-child-displacement-y  : 1;
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 2;
+    -GtkCheckButton-indicator-size   : 12;
+    -GtkMenuBar-internal-padding     : 0;
+    -GtkMenuBar-shadow-type          : out;
+    -GtkPaned-handle-size            : 7;
+    -GtkRange-slider-width           : 12;
+    -GtkRange-stepper-size           : 12;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkToolbar-shadow-type          : out;
+    -GtkWidget-interior-focus        : true;
+
+    border-width: 2 2;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.button, .header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.trough {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 1.0)), to(shade(@bg_active, 2.0)));
+    border-color: darker(@bg_active);
+}
+
+.trough.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 1.0)), to(shade(@bg_active, 2.0)));
+    border-color: darker(@bg_active);
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+.dock, .menubar, .toolbar {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 1.05)), to(shade(@bg_normal, 0.95)));
+}
+
+.dock:active, .menubar:active, .toolbar:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 1.05)), to(shade(@bg_active, 0.95)));
+}
+
+.dock:insensitive, .menubar:insensitive, .toolbar:insensitive {
+    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 {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_prelight, 1.05)), to(shade(@bg_prelight, 0.95)));
+}
+
+.dock:selected, .menubar:selected, .toolbar:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 1.05)), to(shade(@bg_selected, 0.95)));
+}
+
+.button, .slider.horizontal, .progressbar {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#cdcdda, 2.0)), to(shade(#cdcdda, 1.0)));
+    border-color: darker(#cdcdda);
+}
+
+.button:active, .slider.horizontal:active, .progressbar:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 1.0)), to(shade(@bg_active, 2.0)));
+}
+
+.button:insensitive, .slider.horizontal:insensitive, .progressbar:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 2.0)), to(shade(@bg_insensitive, 1.0)));
+}
+
+.button:hover, .slider.horizontal:hover, .progressbar:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_prelight, 2.0)), to(shade(@bg_prelight, 1.0)));
+}
+
+.button:selected, .slider.horizontal:selected, .progressbar:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 1.0)), to(shade(@bg_selected, 2.0)));
+}
+
+.menuitem {
+    border-width: 1 2;
+}
+
+.slider.vertical, .progressbar.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#cdcdda, 2.0)), to(shade(#cdcdda, 1.0)));
+    border-color: darker(#cdcdda);
+}
+
+.slider.vertical:active, .progressbar.vertical:active {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 1.0)), to(shade(@bg_active, 2.0)));
+}
+
+.slider.vertical:insensitive, .progressbar.vertical:insensitive {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_insensitive, 2.0)), to(shade(@bg_insensitive, 1.0)));
+}
+
+.slider.vertical:hover, .progressbar.vertical:hover {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_prelight, 2.0)), to(shade(@bg_prelight, 1.0)));
+}
+
+.slider.vertical:selected, .progressbar.vertical:selected {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_selected, 1.0)), to(shade(@bg_selected, 2.0)));
+}
diff --git a/themes/curve/Makefile.am b/themes/curve/Makefile.am
index 50dea53..8dd05df 100644
--- a/themes/curve/Makefile.am
+++ b/themes/curve/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-curve
 
diff --git a/themes/curve/gtk-3.0/Makefile.am b/themes/curve/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..4ee6cde
--- /dev/null
+++ b/themes/curve/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-curve/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/curve/gtk-3.0/gtk.css b/themes/curve/gtk-3.0/gtk.css
new file mode 100644
index 0000000..2250807
--- /dev/null
+++ b/themes/curve/gtk-3.0/gtk.css
@@ -0,0 +1,326 @@
+
+ at define-color fg_active #000000;
+ at define-color fg_insensitive #7f7f7f;
+ at define-color fg_normal #000000;
+ at define-color fg_prelight #000000;
+ at define-color fg_selected #ffffff;
+
+ at define-color bg_active #cccccc;
+ at define-color bg_insensitive #d8d8d8;
+ at define-color bg_normal #e5e5e5;
+ at define-color bg_prelight #f5f5f5;
+ at define-color bg_selected #4464ac;
+
+ at define-color base_active #99a6bf;
+ at define-color base_insensitive #d8d8d8;
+ at define-color base_normal #ffffff;
+ at define-color base_prelight #e5e5e5;
+ at define-color base_selected #4464ac;
+
+ at define-color text_active #ffffff;
+ at define-color text_insensitive #808080;
+ at define-color text_normal #000000;
+ at define-color text_prelight #000000;
+ at define-color text_selected #ffffff;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkWidget-focus-padding         : 0;
+    -GtkCheckButton-indicator-size   : 14;
+    -GtkMenuBar-shadow-type          : out;
+    -GtkMenuItem-selected-shadow-type: out;
+    -GtkRange-slider-width           : 15;
+    -GtkRange-stepper-size           : 15;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkStatusbar-shadow-type        : in;
+    -GtkToolbar-shadow-type          : out;
+    -GtkWidget-focus-line-pattern    : "\0";
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-interior-focus        : false;
+
+    border-width: 2 2;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.button, .header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    -xfce-smooth-edge: false;
+
+    border-width: 1 1;
+
+    color: #ffffff;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#4464ac, 0.8)), to(shade(#4464ac, 1.8)));
+    border-color: darker(#4464ac);
+}
+
+.trough {
+    -xfce-smooth-edge: false;
+
+    border-width: 1 1;
+
+    color: #ffffff;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 0.8)), to(shade(@bg_normal, 1.8)));
+    border-color: darker(@bg_normal);
+}
+
+.trough.scale, .trough.scrollbar {
+    -xfce-smooth-edge: true;
+
+    border-width: 2 2;
+
+    background-color: @bg_active;
+    background-image: none;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+.dock:hover, .menubar:hover, .toolbar:hover {
+    color: #ffffff;
+    background-color: #4464ac;
+    border-color: darker(#4464ac);
+}
+
+.menuitem {
+    -xfce-smooth-edge: false;
+
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 0.8)), to(shade(@bg_normal, 1.8)));
+}
+
+.menuitem:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 0.8)), to(shade(@bg_active, 1.8)));
+}
+
+.menuitem:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 0.8)), to(shade(@bg_insensitive, 1.8)));
+}
+
+.menuitem:hover {
+    color: #ffffff;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#4464ac, 0.8)), to(shade(#4464ac, 1.0)));
+    border-color: darker(#4464ac);
+}
+
+.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/dawn/Makefile.am b/themes/dawn/Makefile.am
index 3237f52..3678158 100644
--- a/themes/dawn/Makefile.am
+++ b/themes/dawn/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-dawn
 
diff --git a/themes/dawn/gtk-3.0/Makefile.am b/themes/dawn/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..0c75afe
--- /dev/null
+++ b/themes/dawn/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-dawn/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/dawn/gtk-3.0/gtk.css b/themes/dawn/gtk-3.0/gtk.css
new file mode 100644
index 0000000..5ab7043
--- /dev/null
+++ b/themes/dawn/gtk-3.0/gtk.css
@@ -0,0 +1,349 @@
+
+ at define-color fg_active #1f1f1f;
+ at define-color fg_insensitive #8e8e8a;
+ at define-color fg_normal #1f1f1f;
+ at define-color fg_prelight #000000;
+ at define-color fg_selected #000000;
+
+ at define-color bg_active #bfbfbc;
+ at define-color bg_insensitive #ebe8e4;
+ at define-color bg_normal #ebe8e4;
+ at define-color bg_prelight #b0c0d0;
+ at define-color bg_selected #b0c0d0;
+
+ at define-color base_active #bfbfbc;
+ at define-color base_insensitive #ebe8e4;
+ at define-color base_normal #ffffff;
+ at define-color base_prelight #b0c0d0;
+ at define-color base_selected #699dc9;
+
+ at define-color text_active #1f1f1f;
+ at define-color text_insensitive #1f1f1f;
+ at define-color text_normal #1f1f1f;
+ at define-color text_prelight #000000;
+ at define-color text_selected #ffffff;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+    -xfce-grip-style: disabled;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkButton-child-displacement-x  : 0;
+    -GtkButton-child-displacement-y  : 1;
+    -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;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkToolbar-shadow-type          : out;
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 3;
+    -GtkWidget-interior-focus        : true;
+
+    border-width: 2 2;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_prelight, 1.1)), to(shade(@bg_prelight, 1.0)));
+    border-color: darker(@bg_prelight);
+
+    border-width: 1 1;
+}
+
+.progressbar.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_prelight, 1.1)), to(shade(@bg_prelight, 1.0)));
+    border-color: darker(@bg_prelight);
+
+    border-width: 1 1;
+}
+
+.trough {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 1.0)), to(shade(@bg_normal, 1.1)));
+}
+
+.trough.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_normal, 1.0)), to(shade(@bg_normal, 1.1)));
+}
+
+.scale.trough, .scrollbar.trough {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 1.0)), to(shade(@bg_active, 1.1)));
+    border-color: darker(@bg_active);
+}
+
+.scale.vertical, .scrollbar.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 1.0)), to(shade(@bg_active, 1.1)));
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+.button, .slider.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 1.1)), to(shade(@bg_normal, 1.0)));
+
+    -GtkWidget-focus-padding: 0;
+}
+
+.button:active, .slider.horizontal:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 1.0)), to(shade(@bg_active, 1.1)));
+}
+
+.button:insensitive, .slider.horizontal:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 1.0)));
+}
+
+.button:hover, .slider.horizontal:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_prelight, 1.1)), to(shade(@bg_prelight, 1.0)));
+}
+
+.button:selected, .slider.horizontal:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 1.0)), to(shade(@bg_selected, 1.1)));
+}
+
+.button.vertical, .slider.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_normal, 1.1)), to(shade(@bg_normal, 1.0)));
+}
+
+.button.vertical:active, .slider.vertical:active {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 1.0)), to(shade(@bg_active, 1.1)));
+}
+
+.button.vertical:insensitive, .slider.vertical:insensitive {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 1.0)));
+}
+
+.button.vertical:hover, .slider.vertical:hover {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_prelight, 1.1)), to(shade(@bg_prelight, 1.0)));
+}
+
+.button.vertical:selected, .slider.vertical:selected {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_selected, 1.0)), to(shade(@bg_selected, 1.1)));
+}
+
+.menuitem {
+    border-width: 1 2;
+}
+
+.radio {
+    -GtkCheckButton-indicator-size: 14;
+}
diff --git a/themes/dusk/Makefile.am b/themes/dusk/Makefile.am
index ca92df8..1f13d4b 100644
--- a/themes/dusk/Makefile.am
+++ b/themes/dusk/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-dusk
 
diff --git a/themes/dusk/gtk-3.0/Makefile.am b/themes/dusk/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..7391e83
--- /dev/null
+++ b/themes/dusk/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-dusk/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/dusk/gtk-3.0/gtk.css b/themes/dusk/gtk-3.0/gtk.css
new file mode 100644
index 0000000..0f0bc12
--- /dev/null
+++ b/themes/dusk/gtk-3.0/gtk.css
@@ -0,0 +1,345 @@
+
+ at define-color fg_active #dadada;
+ at define-color fg_insensitive #151515;
+ at define-color fg_normal #ffffff;
+ at define-color fg_prelight #fcfcfc;
+ at define-color fg_selected #fcfcfc;
+
+ at define-color bg_active #151515;
+ at define-color bg_insensitive #303030;
+ at define-color bg_normal #232323;
+ at define-color bg_prelight #003263;
+ at define-color bg_selected #002849;
+
+ at define-color base_active #2f519a;
+ at define-color base_insensitive #303030;
+ at define-color base_normal #121212;
+ at define-color base_prelight #002849;
+ at define-color base_selected #003263;
+
+ at define-color text_active #fcfcfc;
+ at define-color text_insensitive #fcfcfc;
+ at define-color text_normal #fcfcfc;
+ at define-color text_prelight #fcfcfc;
+ at define-color text_selected #fcfcfc;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+    -xfce-grip-style: disabled;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkButton-child-displacement-x  : 0;
+    -GtkButton-child-displacement-y  : 1;
+    -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;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-has-backward-stepper: true;
+    -GtkScrollbar-has-secondary-backward-stepper: false;
+    -GtkScrollbar-min-slider-length  : 10;
+    -GtkToolbar-shadow-type          : out;
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 1;
+    -GtkWidget-interior-focus        : true;
+    -GtkWidget-cursor-color          : #fcfcfc;
+    -GtkWidget-secondary-cursor-color: #fcfcfc;
+    -GtkWidget-cursor-aspect-ratio   : 0.1;
+
+    border-width: 1 1;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+
+    border-width: 1 1;
+}
+
+.scale.trough, .scrollbar.trough {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 1.0)), to(shade(@bg_active, 1.25)));
+    border-color: darker(@bg_active);
+}
+
+.trough.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 1.0)), to(shade(@bg_active, 1.25)));
+    border-color: darker(@bg_active);
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+.radio {
+    -GtkCheckButton-indicator-size: 10;
+}
+
+.menuitem {
+    border-width: 1 2;
+}
+
+.button, .slider.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 1.25)), to(shade(@bg_normal, 1.0)));
+
+    -GtkWidget-focus-padding: 0;
+}
+
+.button:active, .slider.horizontal:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 1.0)), to(shade(@bg_active, 1.25)));
+}
+
+.button:insensitive, .slider.horizontal:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.25)), to(shade(@bg_insensitive, 1.0)));
+}
+
+.button:hover, .slider.horizontal:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_prelight, 1.25)), to(shade(@bg_prelight, 1.0)));
+}
+
+.button:selected, .slider.horizontal:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 1.0)), to(shade(@bg_selected, 1.25)));
+}
+
+.menuitem {
+    border-width: 1 2;
+}
+
+.slider.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_normal, 1.25)), to(shade(@bg_normal, 1.0)));
+}
+
+.slider.vertical:active {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 1.0)), to(shade(@bg_active, 1.25)));
+}
+
+.slider.vertical:insensitive {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_insensitive, 1.25)), to(shade(@bg_insensitive, 1.0)));
+}
+
+.slider.vertical:hover {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_prelight, 1.25)), to(shade(@bg_prelight, 1.0)));
+}
+
+.slider.vertical:selected {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_selected, 1.0)), to(shade(@bg_selected, 1.25)));
+}
+
diff --git a/themes/kde2/Makefile.am b/themes/kde2/Makefile.am
index 688adad..62d49cd 100644
--- a/themes/kde2/Makefile.am
+++ b/themes/kde2/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-kde2
 
diff --git a/themes/kde2/gtk-3.0/Makefile.am b/themes/kde2/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..feeaf9d
--- /dev/null
+++ b/themes/kde2/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-kde2/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/kde2/gtk-3.0/gtk.css b/themes/kde2/gtk-3.0/gtk.css
new file mode 100644
index 0000000..c7cad14
--- /dev/null
+++ b/themes/kde2/gtk-3.0/gtk.css
@@ -0,0 +1,304 @@
+
+ at define-color fg_active rgb(25%, 25%, 25%);
+ at define-color fg_insensitive rgb(72%, 72%, 72%);
+ at define-color fg_normal rgb(0%, 0%, 0%);
+ at define-color fg_prelight rgb(0%, 0%, 0%);
+ at define-color fg_selected rgb(100%, 100%, 100%);
+
+ at define-color bg_active rgb(93%, 93%, 93%);
+ at define-color bg_insensitive rgb(86%, 86%, 86%);
+ at define-color bg_normal rgb(86%, 86%, 86%);
+ at define-color bg_prelight rgb(93%, 93%, 93%);
+ at define-color bg_selected rgb(4%, 47%, 54%);
+
+ at define-color base_active rgb(86%, 86%, 86%);
+ at define-color base_insensitive rgb(86%, 86%, 86%);
+ at define-color base_normal rgb(100%, 100%, 100%);
+ at define-color base_prelight rgb(93%, 93%, 93%);
+ at define-color base_selected rgb(4%, 47%, 54%);
+
+ at define-color text_active rgb(0%, 0%, 0%);
+ at define-color text_insensitive rgb(72%, 72%, 72%);
+ at define-color text_normal rgb(0%, 0%, 0%);
+ at define-color text_prelight rgb(0%, 0%, 0%);
+ at define-color text_selected rgb(100%, 100%, 100%);
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkWidget-focus-line-width      : 1;
+    -GtkCheckButton-indicator-size   : 14;
+    -GtkMenuItem-selected-shadow-type: in;
+    -GtkRange-slider-width           : 15;
+    -GtkRange-stepper-size           : 15;
+    -GtkRange-trough-border          : 0;
+    -GtkSpinButton-shadow-type       : in;
+    -GtkScrollbar-has-backward-stepper: true;
+    -GtkScrollbar-has-forward-stepper: true;
+    -GtkScrollbar-has-secondary-backward-stepper: true;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkWidget-focus-padding         : 2;
+    -GtkWidget-interior-focus        : true;
+
+    border-width: 2 2;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+
+    border-width: 1 1;
+}
+
+.scale.trough, .scrollbar.trough {
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+.dock, .menubar, .toolbar {
+    border-width: 3 3;
+}
+
+.button {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 1.1)), to(shade(@bg_normal, 0.9)));
+
+    border-width: 3 3;
+
+    -GtkWidget-focus-padding: 0;
+}
+
+.button:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 0.9)), to(shade(@bg_active, 1.1)));
+}
+
+.button:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.9)));
+}
+
+.button:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_prelight, 1.1)), to(shade(@bg_prelight, 0.9)));
+}
+
+.button:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.9)), to(shade(@bg_selected, 1.1)));
+}
diff --git a/themes/kolors/Makefile.am b/themes/kolors/Makefile.am
index d16e379..ce29426 100644
--- a/themes/kolors/Makefile.am
+++ b/themes/kolors/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-kolors
 
diff --git a/themes/kolors/gtk-3.0/Makefile.am b/themes/kolors/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..f558f78
--- /dev/null
+++ b/themes/kolors/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-kolors/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/kolors/gtk-3.0/gtk.css b/themes/kolors/gtk-3.0/gtk.css
new file mode 100644
index 0000000..4fd136e
--- /dev/null
+++ b/themes/kolors/gtk-3.0/gtk.css
@@ -0,0 +1,355 @@
+
+ at define-color fg_active #1f1f1f;
+ at define-color fg_insensitive #BFBCB2;
+ at define-color fg_normal #1f1f1f;
+ at define-color fg_prelight #1f1f1f;
+ at define-color fg_selected #1f1f1f;
+
+ at define-color bg_active #E4E0D5;
+ at define-color bg_insensitive #E4E0D5;
+ at define-color bg_normal #eeeee6;
+ at define-color bg_prelight #ffdd76;
+ at define-color bg_selected #ffdd76;
+
+ at define-color base_active #fef4d6;
+ at define-color base_insensitive #fdfdfd;
+ at define-color base_normal #fdfdfd;
+ at define-color base_prelight #ffdd76;
+ at define-color base_selected #ffdd76;
+
+ at define-color text_active #1f1f1f;
+ at define-color text_insensitive #e9e9e9;
+ at define-color text_normal #1f1f1f;
+ at define-color text_prelight #1f1f1f;
+ at define-color text_selected #1f1f1f;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+    -xfce-grip-style: disabled;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkWidget-focus-padding         : 0;
+    -GtkCheckButton-indicator-size   : 14;
+    -GtkMenuBar-shadow-type          : out;
+    -GtkMenuItem-selected-shadow-type: none;
+    -GtkRange-slider-width           : 11;
+    -GtkRange-stepper-size           : 13;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkScrollbar-has-backward-stepper: true;
+    -GtkScrollbar-has-secondary-backward-stepper: true;
+    -GtkStatusbar-shadow-type        : in;
+    -GtkToolbar-shadow-type          : out;
+    -GtkWidget-focus-line-pattern    : "\0";
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-interior-focus        : true;
+
+    border-width: 1 1;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+
+    -GtkCheckButton-indicator-size: 10;
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_prelight, 1.1)), to(shade(@bg_prelight, 0.9)));
+    border-color: darker(@bg_prelight);
+
+    border-width: 1 1;
+}
+
+.progressbar.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_prelight, 1.1)), to(shade(@bg_prelight, 0.9)));
+    border-color: darker(@bg_prelight);
+
+    border-width: 1 1;
+}
+
+.trough {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 0.9)), to(shade(@bg_normal, 1.1)));
+}
+
+.trough.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_normal, 0.9)), to(shade(@bg_normal, 1.1)));
+}
+
+.scale.trough, .scrollbar.trough {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 0.9)), to(shade(@bg_active, 1.1)));
+    border-color: darker(@bg_active);
+}
+
+.scale.vertical, .scrollbar.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 0.9)), to(shade(@bg_active, 1.1)));
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+.dock, .menubar, .toolbar {
+    border-width: 1 2;
+}
+
+.button, .slider.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 1.1)), to(shade(@bg_normal, 0.9)));
+
+    border-width: 1 1;
+}
+
+.button:active, .slider.horizontal:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 0.9)), to(shade(@bg_active, 1.1)));
+}
+
+.button:insensitive, .slider.horizontal:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.9)));
+}
+
+.button:hover, .slider.horizontal:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_prelight, 1.1)), to(shade(@bg_prelight, 0.9)));
+}
+
+.button:selected, .slider.horizontal:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.9)), to(shade(@bg_selected, 1.1)));
+}
+
+.button.vertical, .slider.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_normal, 1.1)), to(shade(@bg_normal, 0.9)));
+
+    border-width: 1 1;
+}
+
+.button.vertical:active, .slider.vertical:active {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 0.9)), to(shade(@bg_active, 1.1)));
+}
+
+.button.vertical:insensitive, .slider.vertical:insensitive {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.9)));
+}
+
+.button.vertical:hover, .slider.vertical:hover {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_prelight, 1.1)), to(shade(@bg_prelight, 0.9)));
+}
+
+.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)));
+}
diff --git a/themes/light/Makefile.am b/themes/light/Makefile.am
index c8959af..4224b9d 100644
--- a/themes/light/Makefile.am
+++ b/themes/light/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-light
 
diff --git a/themes/light/gtk-3.0/Makefile.am b/themes/light/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..60f0b49
--- /dev/null
+++ b/themes/light/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-light/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/light/gtk-3.0/gtk.css b/themes/light/gtk-3.0/gtk.css
new file mode 100644
index 0000000..b8c15ff
--- /dev/null
+++ b/themes/light/gtk-3.0/gtk.css
@@ -0,0 +1,295 @@
+
+ at define-color fg_active #000000;
+ at define-color fg_insensitive #c5c5be;
+ at define-color fg_normal #000000;
+ at define-color fg_prelight #000000;
+ at define-color fg_selected #000000;
+
+ at define-color bg_active #d4d4cd;
+ at define-color bg_insensitive #ededdd;
+ at define-color bg_normal #ededdd;
+ at define-color bg_prelight #f5f5dd;
+ at define-color bg_selected #bcb4cf;
+
+ at define-color base_active #e5e5e5;
+ at define-color base_insensitive #e5e5e5;
+ at define-color base_normal #ffffff;
+ at define-color base_prelight #f5f5dd;
+ at define-color base_selected #bcb4cf;
+
+ at define-color text_active #000000;
+ at define-color text_insensitive #000000;
+ at define-color text_normal #000000;
+ at define-color text_prelight #000000;
+ at define-color text_selected #000000;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 0;
+    -GtkCheckButton-indicator-size   : 14;
+    -GtkMenuBar-shadow-type          : out;
+    -GtkMenuItem-selected-shadow-type: in;
+    -GtkRange-slider-width           : 15;
+    -GtkRange-stepper-size           : 15;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkToolbar-shadow-type          : out;
+    -GtkWidget-interior-focus        : true;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+
+    border-width: 1 1;
+}
+
+.scale.trough, .scrollbar.trough {
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: #d4d4ce;
+    border-color: darker(#d4d4ce);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: #f8f8ef;
+    border-color: darker(#f8f8ef);
+}
+
+.button {
+    color: @fg_normal;
+    background-color: #f8f8ef;
+    border-color: darker(#f8f8ef);
+}
+
+.button:active {
+    background-color: #cfcfc4;
+    border-color: darker(#cfcfc4);
+}
+
+.button:insensitive {
+    background-color: #f8f8ef;
+    border-color: darker(#f8f8ef);
+}
+
+.button:hover {
+    background-color: #f5f5dd;
+    border-color: darker(#f5f5dd);
+}
+
diff --git a/themes/orange/Makefile.am b/themes/orange/Makefile.am
index 6f702b7..3263c58 100644
--- a/themes/orange/Makefile.am
+++ b/themes/orange/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-orange
 
diff --git a/themes/orange/gtk-3.0/Makefile.am b/themes/orange/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..7b537be
--- /dev/null
+++ b/themes/orange/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-orange/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/orange/gtk-3.0/gtk.css b/themes/orange/gtk-3.0/gtk.css
new file mode 100644
index 0000000..75151cf
--- /dev/null
+++ b/themes/orange/gtk-3.0/gtk.css
@@ -0,0 +1,448 @@
+/* Created January 2006
+ * Carl Bolduc <drcurl at gmail.com> and Olivier Fourdan <fourdan at xfce.org>
+ * Ported from gtk-2.0 to gtk-3.0 by Peter de Ridder <peter at xfce.org>
+ * Released under the GPL license
+ */
+
+ at define-color fg_active #000000;
+ at define-color fg_insensitive #858481;
+ at define-color fg_normal #000000;
+ at define-color fg_prelight #000000;
+ at define-color fg_selected #000000;
+
+ at define-color bg_active #fff9e1;
+ at define-color bg_insensitive #f4f2ed;
+ at define-color bg_normal #f4f2ed;
+ at define-color bg_prelight #fff9e1;
+ at define-color bg_selected #e0dcd7;
+
+ at define-color base_active #e0dcd7;
+ at define-color base_insensitive #f4f2ed;
+ at define-color base_normal #ffffff;
+ at define-color base_prelight #fff9e1;
+ at define-color base_selected #ffe371;
+
+ at define-color text_active #000000;
+ at define-color text_insensitive #000000;
+ at define-color text_normal #000000;
+ at define-color text_prelight #000000;
+ at define-color text_selected #000000;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+    -xfce-grip-style: disabled;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -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;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-has-backward-stepper: true;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 4;
+    -GtkWidget-interior-focus        : true;
+
+    border-width: 2 2;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+
+    -GtkCheckButton-indicator-size: 14;
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    background-color: #ffe371;
+    border-color: darker(#ffe371);
+
+    border-width: 0 0;
+}
+
+.trough {
+    background-color: #f4f2ed;
+    border-color: darker(#f4f2ed);
+}
+
+.scale.trough, .scrollbar.trough {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#e0dcd7, 0.95)), to(shade(#e0dcd7, 1.05)));
+    border-color: darker(#e0dcd7);
+}
+
+.trough.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#e0dcd7, 0.95)), to(shade(#e0dcd7, 1.05)));
+    border-color: darker(#e0dcd7);
+}
+
+.notebook {
+    background-color: #f8f7f5;
+    border-color: darker(#f8f7f5);
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: #e0dcd7;
+    border-color: darker(#e0dcd7);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: #f8f7f5;
+    border-color: darker(#f8f7f5);
+}
+
+.menu {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#f8f7f5, 1.05)), to(shade(#f8f7f5, 0.95)));
+    border-color: darker(#f8f7f5);
+}
+
+.menuitem {
+    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;
+}
+
+.menuitem:active, .menu:active {
+    color: #000000;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#ffe371, 0.95)), to(shade(#ffe371, 1.05)));
+    border-color: darker(#ffe371);
+}
+
+.menuitem:insensitive, .menu:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#f8f7f5, 1.05)), to(shade(#f8f7f5, 0.95)));
+    border-color: darker(#f8f7f5);
+}
+
+.menuitem: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:selected, .menu:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#ffe371, 0.95)), to(shade(#ffe371, 1.05)));
+    border-color: darker(#ffe371);
+}
+
+.menubar, .toolbar {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 1.05)), to(shade(@bg_normal, 0.95)));
+}
+
+.menubar:active, .toolbar:active {
+    color: #000000;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#ffe371, 0.95)), to(shade(#ffe371, 1.05)));
+    border-color: darker(#ffe371);
+}
+
+.menubar:insensitive, .toolbar:insensitive {
+    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 {
+    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);
+}
+
+.menubar:selected, .toolbar:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#ffe371, 0.95)), to(shade(#ffe371, 1.05)));
+    border-color: darker(#ffe371);
+}
+
+.button {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#ebe6e1, 1.05)), to(shade(#ebe6e1, 0.95)));
+    border-color: darker(#ebe6e1);
+
+    -GtkWidget-focus-padding: 1;
+}                                                         
+                                                          
+.button:active {                                          
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#ffe371, 0.95)), to(shade(#ffe371, 1.05)));
+    border-color: darker(#ffe371);
+}                                                         
+                                                          
+.button:insensitive {                                     
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.05)), to(shade(@bg_insensitive, 0.95)));
+    border-color: darker(@bg_insensitive);
+}                                                         
+                                                          
+.button:hover {                                           
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#fff0b3, 1.05)), to(shade(#fff0b3, 0.95)));
+    border-color: darker(#fff0b3);
+}
+
+.button:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.95)), to(shade(@bg_selected, 1.05)));
+    border-color: darker(@bg_selected);
+}
+
+.slider.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#f4f2ed, 1.05)), to(shade(#f4f2ed, 0.95)));
+    border-color: darker(#f4f2ed);
+}
+
+.slider.horizontal:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#e0dcd7, 0.95)), to(shade(#e0dcd7, 1.05)));
+    border-color: darker(#e0dcd7);
+}
+
+.slider.horizontal:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.05)), to(shade(@bg_insensitive, 0.95)));
+    border-color: darker(@bg_insensitive);
+}
+
+.slider.horizontal:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#fff0b3, 1.05)), to(shade(#fff0b3, 0.95)));
+    border-color: darker(#fff0b3);
+}
+
+.slider.horizontal:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.95)), to(shade(@bg_selected, 1.05)));
+    border-color: darker(@bg_selected);
+}
+
+.slider.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#f4f2ed, 1.05)), to(shade(#f4f2ed, 0.95)));
+    border-color: darker(#f4f2ed);
+}
+
+.slider.vertical:active {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#e0dcd7, 0.95)), to(shade(#e0dcd7, 1.05)));
+    border-color: darker(#e0dcd7);
+}
+
+.slider.vertical:insensitive {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_insensitive, 1.05)), to(shade(@bg_insensitive, 0.95)));
+    border-color: darker(@bg_insensitive);
+}
+
+.slider.vertical:hover {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#fff0b3, 1.05)), to(shade(#fff0b3, 0.95)));
+    border-color: darker(#fff0b3);
+}
+
+.slider.vertical:selected {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_selected, 0.95)), to(shade(@bg_selected, 1.05)));
+    border-color: darker(@bg_selected);
+}
+
+.tooltip {
+    color: #000000;
+    background-color: #ffffdf;
+    border-color: darker(#ffffdf);
+}
diff --git a/themes/redmondxp/Makefile.am b/themes/redmondxp/Makefile.am
index e833304..f0af13d 100644
--- a/themes/redmondxp/Makefile.am
+++ b/themes/redmondxp/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-redmondxp
 
diff --git a/themes/redmondxp/gtk-3.0/Makefile.am b/themes/redmondxp/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..f677f5d
--- /dev/null
+++ b/themes/redmondxp/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-redmondxp/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/redmondxp/gtk-3.0/gtk.css b/themes/redmondxp/gtk-3.0/gtk.css
new file mode 100644
index 0000000..6386924
--- /dev/null
+++ b/themes/redmondxp/gtk-3.0/gtk.css
@@ -0,0 +1,445 @@
+
+ at define-color fg_active #000000;
+ at define-color fg_insensitive #7f7f79;
+ at define-color fg_normal #000000;
+ at define-color fg_prelight #000000;
+ at define-color fg_selected #ffffff;
+
+ at define-color bg_active #d4d4ce;
+ at define-color bg_insensitive #efebdf;
+ at define-color bg_normal #efebdf;
+ at define-color bg_prelight #efebdf;
+ at define-color bg_selected #0055ef;
+
+ at define-color base_active #e5e5e5;
+ at define-color base_insensitive #efebdf;
+ at define-color base_normal #ffffff;
+ at define-color base_prelight #efebdf;
+ at define-color base_selected #0055ef;
+
+ at define-color text_active #000000;
+ at define-color text_insensitive #000000;
+ at define-color text_normal #000000;
+ at define-color text_prelight #000000;
+ at define-color text_selected #ffffff;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 0;
+    -GtkCheckButton-indicator-size   : 14;
+    -GtkMenuBar-shadow-type          : out;
+    -GtkMenuItem-selected-shadow-type: none;
+    -GtkRange-slider-width           : 15;
+    -GtkRange-stepper-size           : 15;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkToolbar-shadow-type          : out;
+    -GtkWidget-interior-focus        : true;
+
+    border-width: 2 2;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+
+    border-width: 1 1;
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    color: #ffffff;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#0055ef, 0.9)), to(shade(#0055ef, 1.1)));
+    border-color: darker(#0055ef);
+
+    border-width: 1 1;
+}
+
+.trough {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 0.9)), to(shade(@bg_normal, 1.1)));
+}
+
+.scale.trough, .scrollbar.trough {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 0.9)), to(shade(@bg_active, 1.1)));
+    border-color: darker(@bg_active);
+}
+
+.trough.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 0.9)), to(shade(@bg_active, 1.1)));
+    border-color: darker(@bg_active);
+}
+
+.notebook {
+    background-color: #fafaf2;
+    border-color: darker(#fafaf2);
+
+    border-width: 1 1;
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: #d4d4ce;
+    border-color: darker(#d4d4ce);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: #fafaf2;
+    border-color: darker(#fafaf2);
+}
+
+.menu {
+    background-color: #ffffff;
+    border-color: darker(#ffffff);
+
+    border-width: 1 1;
+}
+
+.menu:active {
+    color: #ffffff;
+    background-color: #0055ef;
+    border-color: darker(#0055ef);
+}
+
+.menu:insensitive {
+    background-color: #ffffff;
+    border-color: darker(#ffffff);
+}
+
+.menu:hover {
+    color: #ffffff;
+    background-color: #0055ef;
+    border-color: darker(#0055ef);
+}
+
+.menu:selected {
+    background-color: @bg_selected;
+    border-color: darker(@bg_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)));
+    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);
+}
+
+.button:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#ffcb39, 0.9)), to(shade(#ffcb39, 1.1)));
+    border-color: darker(#ffcb39);
+}
+
+.button:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#fafaf2, 1.1)), to(shade(#fafaf2, 0.9)));
+    border-color: darker(#fafaf2);
+}
+
+.button:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#fafaf2, 1.1)), to(shade(#fafaf2, 0.9)));
+    border-color: darker(#fafaf2);
+}
+
+.button:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.9)), to(shade(@bg_selected, 1.1)));
+    border-color: darker(@bg_selected);
+}
+
+.button.horizontal, .scrollbar.slider.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#c6d3ff, 1.1)), to(shade(#c6d3ff, 0.9)));
+    border-color: darker(#c6d3ff);
+}
+
+.button.horizontal:active, .scrollbar.slider.horizontal:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 0.9)), to(shade(@bg_active, 1.1)));
+    border-color: darker(@bg_active);
+}
+
+.button.horizontal:insensitive, .scrollbar.slider.horizontal:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.9)));
+    border-color: darker(@bg_insensitive);
+}
+
+.button.horizontal:hover, .scrollbar.slider.horizontal:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#c6d3ff, 1.1)), to(shade(#c6d3ff, 0.9)));
+    border-color: darker(#c6d3ff);
+}
+
+.button.horizontal:selected, .scrollbar.slider.horizontal:selected {
+    color: #000000;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#efebdf, 0.9)), to(shade(#efebdf, 1.1)));
+    border-color: darker(#efebdf);
+}
+
+.button.vertical, .scrollbar.slider.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#c6d3ff, 1.1)), to(shade(#c6d3ff, 0.9)));
+    border-color: darker(#c6d3ff);
+}
+
+.button.vertical:active, .scrollbar.slider.vertical:active {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 0.9)), to(shade(@bg_active, 1.1)));
+    border-color: darker(@bg_active);
+}
+
+.button.vertical:insensitive, .scrollbar.slider.vertical:insensitive {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.9)));
+    border-color: darker(@bg_insensitive);
+}
+
+.button.vertical:hover, .scrollbar.slider.vertical:hover {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#c6d3ff, 1.1)), to(shade(#c6d3ff, 0.9)));
+    border-color: darker(#c6d3ff);
+}
+
+.button.vertical:selected, .scrollbar.slider.vertical:selected {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#efebdf, 0.9)), to(shade(#efebdf, 1.1)));
+    border-color: darker(#efebdf);
+}
+
+.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);
+}
+
+.scale.slider.horizontal:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#efebdf, 1.1)), to(shade(#efebdf, 0.9)));
+    border-color: darker(#efebdf);
+}
+
+.scale.slider.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#efebdf, 1.1)), to(shade(#efebdf, 0.9)));
+    border-color: darker(#efebdf);
+}
+
+.scale.slider.vertical:insensitive {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#efebdf, 1.1)), to(shade(#efebdf, 0.9)));
+    border-color: darker(#efebdf);
+}
diff --git a/themes/saltlake/Makefile.am b/themes/saltlake/Makefile.am
index 5740d80..574c715 100644
--- a/themes/saltlake/Makefile.am
+++ b/themes/saltlake/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-saltlake
 
diff --git a/themes/saltlake/gtk-3.0/Makefile.am b/themes/saltlake/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..5002c1e
--- /dev/null
+++ b/themes/saltlake/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-saltlake/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/saltlake/gtk-3.0/gtk.css b/themes/saltlake/gtk-3.0/gtk.css
new file mode 100644
index 0000000..a8b726d
--- /dev/null
+++ b/themes/saltlake/gtk-3.0/gtk.css
@@ -0,0 +1,277 @@
+
+ at define-color fg_active #000000;
+ at define-color fg_insensitive #717170;
+ at define-color fg_normal #000000;
+ at define-color fg_prelight #000000;
+ at define-color fg_selected #ffffff;
+
+ at define-color bg_active #cdcdc9;
+ at define-color bg_insensitive #e4e4e0;
+ at define-color bg_normal #e4e4e0;
+ at define-color bg_prelight #ccc9c5;
+ at define-color bg_selected #3f993f;
+
+ at define-color base_active #e5e5e5;
+ at define-color base_insensitive #e4e4e0;
+ at define-color base_normal #ffffff;
+ at define-color base_prelight #ccc9c5;
+ at define-color base_selected #ccc9c5;
+
+ at define-color text_active #000000;
+ at define-color text_insensitive #000000;
+ at define-color text_normal #000000;
+ at define-color text_prelight #000000;
+ at define-color text_selected #000000;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: false;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkButton-child-displacement-x  : 1;
+    -GtkButton-child-displacement-y  : 1;
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 0;
+    -GtkCheckButton-indicator-size   : 14;
+    -GtkMenuBar-shadow-type          : etched-in;
+    -GtkRange-slider-width           : 15;
+    -GtkRange-stepper-size           : 15;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkWidget-interior-focus        : true;
+
+    border-width: 2 2;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.button, .header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.scale.trough, .scrollbar.trough {
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+.menuitem {
+    border-width: 1 1;
+}
+
diff --git a/themes/smooth/Makefile.am b/themes/smooth/Makefile.am
index c1f126f..c1ffd2d 100644
--- a/themes/smooth/Makefile.am
+++ b/themes/smooth/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-smooth
 
diff --git a/themes/smooth/gtk-3.0/Makefile.am b/themes/smooth/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..b40191e
--- /dev/null
+++ b/themes/smooth/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-smooth/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/smooth/gtk-3.0/gtk.css b/themes/smooth/gtk-3.0/gtk.css
new file mode 100644
index 0000000..064bcf2
--- /dev/null
+++ b/themes/smooth/gtk-3.0/gtk.css
@@ -0,0 +1,272 @@
+
+ at define-color fg_active #000000;
+ at define-color fg_insensitive #969696;
+ at define-color fg_normal #000000;
+ at define-color fg_prelight #000000;
+ at define-color fg_selected #000000;
+
+ at define-color bg_active #c2c2be;
+ at define-color bg_insensitive #e2e2de;
+ at define-color bg_normal #e2e2de;
+ at define-color bg_prelight #f2f2ee;
+ at define-color bg_selected #a5abba;
+
+ at define-color base_active #a5abba;
+ at define-color base_insensitive #ffffff;
+ at define-color base_normal #ffffff;
+ at define-color base_prelight #eaeaea;
+ at define-color base_selected #a5abba;
+
+ at define-color text_active #000000;
+ at define-color text_insensitive #000000;
+ at define-color text_normal #000000;
+ at define-color text_prelight #000000;
+ at define-color text_selected #000000;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 0;
+    -GtkCheckButton-indicator-size   : 14;
+    -GtkMenuItem-selected-shadow-type: out;
+    -GtkRange-slider-width           : 15;
+    -GtkRange-stepper-size           : 15;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkWidget-interior-focus        : true;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.button, .header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+
+    border-width: 1 1;
+}
+
+.scale.trough, .scrollbar.trough {
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
diff --git a/themes/stellar/Makefile.am b/themes/stellar/Makefile.am
index edcdf64..bba10a1 100644
--- a/themes/stellar/Makefile.am
+++ b/themes/stellar/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-stellar
 
diff --git a/themes/stellar/gtk-3.0/Makefile.am b/themes/stellar/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..7dbdf59
--- /dev/null
+++ b/themes/stellar/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-stellar/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/stellar/gtk-3.0/gtk.css b/themes/stellar/gtk-3.0/gtk.css
new file mode 100644
index 0000000..619ca9a
--- /dev/null
+++ b/themes/stellar/gtk-3.0/gtk.css
@@ -0,0 +1,281 @@
+
+ at define-color fg_active #000000;
+ at define-color fg_insensitive #4e4f56;
+ at define-color fg_normal #000000;
+ at define-color fg_prelight #000000;
+ at define-color fg_selected #ffffff;
+
+ at define-color bg_active #9ba0b0;
+ at define-color bg_insensitive #9ba0b0;
+ at define-color bg_normal #aeb2c3;
+ at define-color bg_prelight #aeb2c3;
+ at define-color bg_selected #b24d7a;
+
+ at define-color base_active #888ca0;
+ at define-color base_insensitive #969bb4;
+ at define-color base_normal #fcfcf0;
+ at define-color base_prelight #b24d7a;
+ at define-color base_selected #b24d7a;
+
+ at define-color text_active #000000;
+ at define-color text_insensitive #747474;
+ at define-color text_normal #000000;
+ at define-color text_prelight #000000;
+ at define-color text_selected #ffffff;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+    -xfce-grip-style: disabled;
+
+    -GtkButton-default-border        : 5;
+    -GtkButton-default-outside-border: 6;
+    -GtkWidget-focus-padding         : 0;
+    -GtkCheckButton-indicator-size   : 14;
+    -GtkMenuItem-selected-shadow-type: in;
+    -GtkRange-slider-width           : 12;
+    -GtkRange-stepper-size           : 12;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkToolbar-shadow-type          : out;
+    -GtkWidget-focus-line-pattern    : "\0";
+    -GtkWidget-focus-line-width      : 2;
+    -GtkWidget-interior-focus        : false;
+
+    border-width: 1 1;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.button, .header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.scale.trough, .scrollbar.trough {
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+.menu:hover {
+    color: #FFFFFF;
+    background-color: #9BA0B0;
+    border-color: darker(#9BA0B0);
+}
+
diff --git a/themes/winter/Makefile.am b/themes/winter/Makefile.am
index bbdaa7f..a33498e 100644
--- a/themes/winter/Makefile.am
+++ b/themes/winter/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-winter
 
diff --git a/themes/winter/gtk-3.0/Makefile.am b/themes/winter/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..f541a99
--- /dev/null
+++ b/themes/winter/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-winter/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/winter/gtk-3.0/gtk.css b/themes/winter/gtk-3.0/gtk.css
new file mode 100644
index 0000000..4875acf
--- /dev/null
+++ b/themes/winter/gtk-3.0/gtk.css
@@ -0,0 +1,395 @@
+
+ at define-color fg_active #000000;
+ at define-color fg_insensitive #808080;
+ at define-color fg_normal #000000;
+ at define-color fg_prelight #000000;
+ at define-color fg_selected #224466;
+
+ at define-color bg_active #d8d8d6;
+ at define-color bg_insensitive #e8e8e6;
+ at define-color bg_normal #e8e8e6;
+ at define-color bg_prelight #e8e8e6;
+ at define-color bg_selected #a5abba;
+
+ at define-color base_active #d8d8d6;
+ at define-color base_insensitive #e8e8e6;
+ at define-color base_normal #f0f0f0;
+ at define-color base_prelight #a5abba;
+ at define-color base_selected #b3c8dd;
+
+ at define-color text_active #000000;
+ at define-color text_insensitive #000000;
+ at define-color text_normal #000000;
+ at define-color text_prelight #000000;
+ at define-color text_selected #224466;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+    -xfce-grip-style: slide;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkCheckButton-indicator-size   : 14;
+    -GtkMenuBar-shadow-type          : out;
+    -GtkMenuItem-selected-shadow-type: out;
+    -GtkPaned-handle-size            : 8;
+    -GtkRange-slider-width           : 15;
+    -GtkRange-stepper-size           : 15;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkToolbar-shadow-type          : none;
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 2;
+    -GtkWidget-interior-focus        : true;
+
+    border-width: 2 2;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: #224466;
+    background-color: @base_active;
+    border-color: darker(#A4B8CB);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: #224466;
+    background-color: @base_prelight;
+    border-color: darker(#B3C8DD);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_prelight, 0.8)), to(shade(@bg_prelight, 1.8)));
+    border-color: darker(@bg_prelight);
+
+    border-width: 1 1;
+}
+
+.progressbar.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_prelight, 0.8)), to(shade(@bg_prelight, 1.8)));
+    border-color: darker(@bg_prelight);
+
+    border-width: 1 1;
+}
+
+.trough {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 0.8)), to(shade(@bg_normal, 1.8)));
+}
+
+.trough.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_normal, 0.8)), to(shade(@bg_normal, 1.8)));
+}
+
+.scrollbar.trough {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 0.8)), to(shade(@bg_active, 1.8)));
+    border-color: darker(@bg_active);
+}
+
+.scrollbar.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 0.8)), to(shade(@bg_active, 1.8)));
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+.dock, .menubar, .toolbar {
+    border-width: 1 2;
+}
+
+.dock:active, .menubar:active, .toolbar:active {
+    color: #224466;
+    background-color: #A4B8CB;
+    border-color: darker(#A4B8CB);
+}
+
+.dock:hover, .menubar:hover, .toolbar:hover {
+    color: #224466;
+    background-color: #B3C8DD;
+    border-color: darker(#B3C8DD);
+}
+
+.menuitem {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 0.8)), to(shade(@bg_normal, 1.8)));
+
+    border-width: 2 2;
+}
+
+.button {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 0.8)), to(shade(@bg_normal, 1.8)));
+
+    border-width: 3 3;
+
+    -GtkWidget-focus-padding: 0;
+}
+
+.button:active, .menuitem:active {
+    color: #224466;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#A4B8CB, 0.8)), to(shade(#A4B8CB, 1.8)));
+    border-color: darker(#A4B8CB);
+}
+
+.button:insensitive, .menuitem:insensitive {
+    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 {
+    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);
+}
+
+.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)));
+}
+
+.dock {
+    color: @base_selected;
+}
+
+.slider {
+    color: @base_selected;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 0.8)), to(shade(@bg_normal, 1.8)));
+}
+
+.slider:active {
+    color: @base_selected;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 1.8)), to(shade(@bg_active, 0.8)));
+}
+
+.slider:insensitive {
+    color: @base_selected;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 0.8)), to(shade(@bg_insensitive, 1.8)));
+}
+
+.slider:hover {
+    color: @base_selected;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_prelight, 0.8)), to(shade(@bg_prelight, 1.8)));
+}
+
+.slider:selected {
+    color: @base_selected;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 1.8)), to(shade(@bg_selected, 0.8)));
+}
+
+.button.vertical, .scrollbar.slider.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_normal, 0.8)), to(shade(@bg_normal, 1.8)));
+}
+
+.button.vertical:active, .scrollbar.slider.vertical:active {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 1.8)), to(shade(@bg_active, 0.8)));
+}
+
+.button.vertical:insensitive, .scrollbar.slider.vertical:insensitive {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_insensitive, 0.8)), to(shade(@bg_insensitive, 1.8)));
+}
+
+.button.vertical:hover, .scrollbar.slider.vertical:hover {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_prelight, 0.8)), to(shade(@bg_prelight, 1.8)));
+}
+
+.button.vertical:selected, .scrollbar.slider.vertical:selected {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_selected, 1.8)), to(shade(@bg_selected, 0.8)));
+}
diff --git a/themes/xfce-4.0/Makefile.am b/themes/xfce-4.0/Makefile.am
index 31a87c8..2690df5 100644
--- a/themes/xfce-4.0/Makefile.am
+++ b/themes/xfce-4.0/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-4.0
 
diff --git a/themes/xfce-4.0/gtk-3.0/Makefile.am b/themes/xfce-4.0/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..db7f95d
--- /dev/null
+++ b/themes/xfce-4.0/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-4.0/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/xfce-4.0/gtk-3.0/gtk.css b/themes/xfce-4.0/gtk-3.0/gtk.css
new file mode 100644
index 0000000..2cdba7f
--- /dev/null
+++ b/themes/xfce-4.0/gtk-3.0/gtk.css
@@ -0,0 +1,420 @@
+/* Default Xfce theme
+ * Olivier Fourdan 05/2003
+ * Ported from gtk-2.0 to gtk-3.0 by Peter de Ridder <peter at xfce.org>
+ */
+
+ at define-color fg_active #000000;
+ at define-color fg_insensitive #7f7f79;
+ at define-color fg_normal #000000;
+ at define-color fg_prelight #000000;
+ at define-color fg_selected #ffffff;
+
+ at define-color bg_active #bfbdbb;
+ at define-color bg_insensitive #eae7e4;
+ at define-color bg_normal #eae7e4;
+ at define-color bg_prelight #eae7e4;
+ at define-color bg_selected #606080;
+
+ at define-color base_active #bfbdbb;
+ at define-color base_insensitive #eae7e4;
+ at define-color base_normal #ffffff;
+ at define-color base_prelight #eae7e4;
+ at define-color base_selected #606080;
+
+ at define-color text_active #000000;
+ at define-color text_insensitive #000000;
+ at define-color text_normal #000000;
+ at define-color text_prelight #000000;
+ at define-color text_selected #ffffff;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkCheckButton-indicator-size   : 14;
+    -GtkMenuBar-shadow-type          : out;
+    -GtkMenuItem-selected-shadow-type: out;
+    -GtkPaned-handle-size            : 8;
+    -GtkRange-slider-width           : 15;
+    -GtkRange-stepper-size           : 15;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkToolbar-shadow-type          : out;
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 2;
+    -GtkWidget-interior-focus        : true;
+
+    border-width: 2 2;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+
+    border-width: 3 3;
+}
+
+.view:active, .entry:active {
+    color: #000000;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: #ffffff;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    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-width: 1 1;
+}
+
+.trough {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 0.8)), to(shade(@bg_normal, 1.8)));
+}
+
+.scrollbar.trough {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 0.8)), to(shade(@bg_active, 1.8)));
+    border-color: darker(@bg_active);
+
+    border-width: 2 2;
+}
+
+.scale.trough {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 0.8)), to(shade(@bg_active, 1.8)));
+    border-color: darker(@bg_active);
+}
+
+.scrollbar.trough.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 0.8)), to(shade(@bg_active, 1.8)));
+}
+
+.scale.trough.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 0.8)), to(shade(@bg_active, 1.8)));
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+.menubar, .dock, .toolbar {
+    border-width: 1 2;
+}
+
+.menubar:active, .dock:active, .toolbar:active {
+    color: #000000;
+    background-color: #bfbdbb;
+    border-color: darker(#bfbdbb);
+}
+
+.menubar:hover, .dock:hover, .toolbar:hover {
+    color: #ffffff;
+    background-color: #606080;
+    border-color: darker(#606080);
+}
+
+.menuitem {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 0.8)), to(shade(@bg_normal, 1.8)));
+
+    border-width: 2 2;
+}
+
+.menuitem:active {
+    color: #000000;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#bfbdbb, 1.8)), to(shade(#bfbdbb, 0.8)));
+    border-color: darker(#bfbdbb);
+}
+
+.menuitem:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 0.8)), to(shade(@bg_insensitive, 1.8)));
+}
+
+.menuitem:hover {
+    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);
+}
+
+.menuitem:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 1.8)), to(shade(@bg_selected, 0.8)));
+}
+
+.button.horizontal, .scrollbar.slider.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 0.8)), to(shade(@bg_normal, 1.8)));
+
+    border-width: 2 2;
+}
+
+.button.horizontal:active, .scrollbar.slider.horizontal:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 1.8)), to(shade(@bg_active, 0.8)));
+}
+
+.button.horizontal:insensitive, .scrollbar.slider.horizontal:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 0.8)), to(shade(@bg_insensitive, 1.8)));
+}
+
+.button.horizontal:hover, .scrollbar.slider.horizontal:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_prelight, 0.8)), to(shade(@bg_prelight, 1.8)));
+}
+
+.button.horizontal:selected, .scrollbar.slider.horizontal:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 1.8)), to(shade(@bg_selected, 0.8)));
+}
+
+.button.vertical, .scrollbar.slider.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_normal, 0.8)), to(shade(@bg_normal, 1.8)));
+
+    border-width: 2 2;
+}
+
+.button.vertical:active, .scrollbar.slider.vertical:active {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_active, 1.8)), to(shade(@bg_active, 0.8)));
+}
+
+.button.vertical:insensitive, .scrollbar.slider.vertical:insensitive {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_insensitive, 0.8)), to(shade(@bg_insensitive, 1.8)));
+}
+
+.button.vertical:hover, .scrollbar.slider.vertical:hover {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_prelight, 0.8)), to(shade(@bg_prelight, 1.8)));
+}
+
+.button.vertical:selected, .scrollbar.slider.vertical:selected {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_selected, 1.8)), to(shade(@bg_selected, 0.8)));
+}
+
+.button {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 0.8)), to(shade(#fafaf2, 1.8)));
+
+    border-width: 3 3;
+
+    -GtkWidget-focus-padding: 0;
+}
+
+.scale {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_normal, 0.8)), to(shade(#fafaf2, 1.8)));
+
+    border-width: 3 3;
+}
+
+.button:active, .scale:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#bfbdbb, 1.8)), to(shade(#bfbdbb, 0.8)));
+    border-color: darker(#bfbdbb);
+}
+
+.button:insensitive, .scale:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 0.8)), to(shade(@bg_insensitive, 1.8)));
+}
+
+.button:hover, .scale:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#606080, 0.8)), to(shade(#606080, 1.8)));
+    border-color: darker(#606080);
+}
+
+.button:selected, .scale:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 1.8)), to(shade(@bg_selected, 0.8)));
+}
diff --git a/themes/xfce-4.2/Makefile.am b/themes/xfce-4.2/Makefile.am
index 68b5c84..c12c508 100644
--- a/themes/xfce-4.2/Makefile.am
+++ b/themes/xfce-4.2/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-4.2
 
diff --git a/themes/xfce-4.2/gtk-3.0/Makefile.am b/themes/xfce-4.2/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..41e48e4
--- /dev/null
+++ b/themes/xfce-4.2/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-4.2/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/xfce-4.2/gtk-3.0/gtk.css b/themes/xfce-4.2/gtk-3.0/gtk.css
new file mode 100644
index 0000000..269bf25
--- /dev/null
+++ b/themes/xfce-4.2/gtk-3.0/gtk.css
@@ -0,0 +1,454 @@
+/* Created June 2005 by Olivier Fourdan
+ * Ported from gtk-2.0 to gtk-3.0 by Peter de Ridder <peter at xfce.org>
+ * Released under the GPL license
+ */
+
+ at define-color fg_active #000000;
+ at define-color fg_insensitive #8e8e8a;
+ at define-color fg_normal #000000;
+ at define-color fg_prelight #000000;
+ at define-color fg_selected #ffffff;
+
+ at define-color bg_active #e6e8ea;
+ at define-color bg_insensitive #edeff2;
+ at define-color bg_normal #edeff2;
+ at define-color bg_prelight #f2f4f7;
+ at define-color bg_selected #5582c2;
+
+ at define-color base_active #d3d7e0;
+ at define-color base_insensitive #edeff2;
+ at define-color base_normal #ffffff;
+ at define-color base_prelight #e6e8ea;
+ at define-color base_selected #5582c2;
+
+ at define-color text_active #000000;
+ at define-color text_insensitive #000000;
+ at define-color text_normal #000000;
+ at define-color text_prelight #000000;
+ at define-color text_selected #ffffff;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+    -xfce-grip-style: disabled;
+
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -GtkButton-child-displacement-x  : 0;
+    -GtkButton-child-displacement-y  : 1;
+    -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;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-has-backward-stepper: true;
+    -GtkScrollbar-min-slider-length  : 20;
+    -GtkToolbar-shadow-type          : out;
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 4;
+    -GtkWidget-interior-focus        : true;
+
+    border-width: 2 2;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: #ffffff;
+    background-color: #5582c2;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    background-color: #5582c2;
+    border-color: darker(#5582c2);
+
+    border-width: 0 0;
+}
+
+.trough {
+    background-color: #d3d7e0;
+    border-color: darker(#d3d7e0);
+}
+
+.scale.trough, .scrollbar.trough {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#edeff2, 0.95)), to(shade(#edeff2, 1.1)));
+    border-color: darker(#edeff2);
+}
+
+.scale.trough.vertical, .scrollbar.trough.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#edeff2, 0.95)), to(shade(#edeff2, 1.1)));
+    border-color: darker(#edeff2);
+}
+
+.notebook {
+    background-color: #f5f5f5;
+    border-color: darker(#f5f5f5);
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: #d3d7e0;
+    border-color: darker(#d3d7e0);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: @fg_normal;
+    background-color: #f5f5f5;
+    border-color: darker(#f5f5f5);
+}
+
+.menu {
+    background-color: #ffffff;
+    border-color: darker(#ffffff);
+}
+
+.menu:active {
+    color: #ffffff;
+    background-color: #d3d7e0;
+    border-color: darker(#d3d7e0);
+}
+
+.menu:insensitive {
+    background-color: #ffffff;
+    border-color: darker(#ffffff);
+}
+
+.menu:hover {
+    color: #ffffff;
+    background-color: #5582c2;
+    border-color: darker(#5582c2);
+}
+
+.menu:selected {
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.menuitem {
+    background-color: #ffffff;
+    border-color: darker(#ffffff);
+
+    border-width: 1 2;
+}
+
+.menuitem:active {
+    color: #ffffff;
+    background-color: #d3d7e0;
+    border-color: darker(#d3d7e0);
+}
+
+.menuitem:insensitive {
+    background-color: #ffffff;
+    border-color: darker(#ffffff);
+}
+
+.menuitem:hover {
+    color: #ffffff;
+    background-color: #5582c2;
+    border-color: darker(#5582c2);
+}
+
+.menuitem:selected {
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.menubar:active .toolbar:active {
+    color: #ffffff;
+    background-color: #d3d7e0;
+    border-color: darker(#d3d7e0);
+}
+
+
+.menubar:hover .toolbar:hover {
+    color: #ffffff;
+    background-color: #5582c2;
+    border-color: darker(#5582c2);
+}
+
+.button {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#e6e8ea, 1.1)), to(shade(#e6e8ea, 0.95)));
+    border-color: darker(#e6e8ea);
+
+    -GtkWidget-focus-padding: 1;
+}
+
+.button:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#c2cacf, 0.95)), to(shade(#c2cacf, 1.1)));
+    border-color: darker(#c2cacf);
+}
+
+.button:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.95)));
+    border-color: darker(@bg_insensitive);
+}
+
+.button:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#f2f4f7, 1.1)), to(shade(#f2f4f7, 0.95)));
+    border-color: darker(#f2f4f7);
+}
+
+.button:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.95)), to(shade(@bg_selected, 1.1)));
+    border-color: darker(@bg_selected);
+}
+
+.button.horizontal, .slider.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#e6e8ea, 1.1)), to(shade(#e6e8ea, 0.95)));
+    border-color: darker(#e6e8ea);
+}
+
+.button.horizontal:active, .slider.horizontal:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#edeff2, 0.95)), to(shade(#edeff2, 1.1)));
+    border-color: darker(#edeff2);
+}
+
+.button.horizontal:insensitive, .slider.horizontal:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.95)));
+    border-color: darker(@bg_insensitive);
+}
+
+.button.horizontal:hover, .slider.horizontal:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#f2f4f7, 1.1)), to(shade(#f2f4f7, 0.95)));
+    border-color: darker(#f2f4f7);
+}
+
+.button.horizontal:selected, .slider.horizontal:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.95)), to(shade(@bg_selected, 1.1)));
+    border-color: darker(@bg_selected);
+}
+
+.button.vertical, .slider.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#e6e8ea, 1.1)), to(shade(#e6e8ea, 0.95)));
+    border-color: darker(#e6e8ea);
+}
+
+.button.vertical:active, .slider.vertical:active {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#edeff2, 0.95)), to(shade(#edeff2, 1.1)));
+    border-color: darker(#edeff2);
+}
+
+.button.vertical:insensitive, .slider.vertical:insensitive {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.95)));
+    border-color: darker(@bg_insensitive);
+}
+
+.button.vertical:hover, .slider.vertical:hover {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#f2f4f7, 1.1)), to(shade(#f2f4f7, 0.95)));
+    border-color: darker(#f2f4f7);
+}
+
+.button.vertical:selected, .slider.vertical:selected {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_selected, 0.95)), to(shade(@bg_selected, 1.1)));
+    border-color: darker(@bg_selected);
+}
+
+.dock {
+    border-width: 0 2;
+}
+
+.radio {
+    -GtkCheckButton-indicator-size: 14;
+}
diff --git a/themes/xfce-4.4/Makefile.am b/themes/xfce-4.4/Makefile.am
index 85df91b..de33bfb 100644
--- a/themes/xfce-4.4/Makefile.am
+++ b/themes/xfce-4.4/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-4.4
 
diff --git a/themes/xfce-4.4/gtk-3.0/Makefile.am b/themes/xfce-4.4/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..12416e9
--- /dev/null
+++ b/themes/xfce-4.4/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-4.4/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/xfce-4.4/gtk-3.0/gtk.css b/themes/xfce-4.4/gtk-3.0/gtk.css
new file mode 100644
index 0000000..ad965c9
--- /dev/null
+++ b/themes/xfce-4.4/gtk-3.0/gtk.css
@@ -0,0 +1,476 @@
+/* Created July 2006
+ * Modified Dec. 2006
+ * Modified Jan. 2007
+ * Olivier Fourdan <fourdan at xfce.org>
+ * Based on Tango color scheme http://tango-project.org 
+ * Ported from gtk-2.0 to gtk-3.0 by Peter de Ridder <peter at xfce.org>
+ * Released under the GPL license
+ */
+
+ at define-color fg_active #000000;
+ at define-color fg_insensitive #888a85;
+ at define-color fg_normal #101010;
+ at define-color fg_prelight #101010;
+ at define-color fg_selected #000000;
+
+ at define-color bg_active #d3d7cf;
+ at define-color bg_insensitive #eeeeec;
+ at define-color bg_normal #eeeeec;
+ at define-color bg_prelight #eeeeec;
+ at define-color bg_selected #d3d7cf;
+
+ at define-color base_active #d3d7cf;
+ at define-color base_insensitive #eeeeec;
+ at define-color base_normal #ffffff;
+ at define-color base_prelight #eeeeec;
+ at define-color base_selected #3465a4;
+
+ at define-color text_active #101010;
+ at define-color text_insensitive #101010;
+ at define-color text_normal #101010;
+ at define-color text_prelight #101010;
+ at define-color text_selected #ffffff;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+    -xfce-grip-style: disabled;
+
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 4;
+    -GtkWidget-interior-focus        : true;
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+    -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;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+    -GtkScrollbar-has-backward-stepper: true;
+    -GtkScrollbar-min-slider-length  : 20;
+
+    border-width: 2 2;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    color: #4e9a06;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#8ae234, 1.1)), to(shade(#8ae234, 0.95)));
+    border-color: darker(#8ae234);
+
+    border-width: 0 0;
+}
+
+.progressbar.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#8ae234, 1.1)), to(shade(#8ae234, 0.95)));
+}
+
+.trough {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#e8e8e6, 0.95)), to(shade(#e8e8e6, 1.1)));
+    border-color: darker(#e8e8e6);
+}
+
+.trough.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#e8e8e6, 0.95)), to(shade(#e8e8e6, 1.1)));
+}
+
+.notebook {
+    color: #101010;
+    background-color: #ffffff;
+    border-color: darker(#ffffff);
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: #e8e8e6;
+    border-color: darker(#e8e8e6);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: #101010;
+    background-color: #ffffff;
+    border-color: darker(#ffffff);
+}
+
+.menu {
+    background-color: #ffffff;
+    border-color: darker(#ffffff);
+}
+
+.menu:active {
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.menu:insensitive {
+    background-color: #ffffff;
+    border-color: darker(#ffffff);
+}
+
+.menu:hover {
+    background-color: #d3d7cf;
+    border-color: darker(#d3d7cf);
+}
+
+.menu:selected {
+    color: #000000;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.menuitem {
+    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;
+}
+
+.menuitem:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 0.95)), to(shade(@bg_active, 1.1)));
+    border-color: darker(@bg_active);
+}
+
+.menuitem:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#ffffff, 1.1)), to(shade(#ffffff, 0.95)));
+    border-color: darker(#ffffff);
+}
+
+.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);
+}
+
+.menuitem:selected {
+    color: #000000;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.95)), to(shade(@bg_selected, 1.1)));
+    border-color: darker(@bg_selected);
+}
+
+.menubar {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#eeeeec, 1.2)), to(shade(#eeeeec, 0.9)));
+    border-color: darker(#eeeeec);
+
+    border-width: 1 3;
+}
+
+.menubar:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 0.9)), to(shade(@bg_active, 1.2)));
+    border-color: darker(@bg_active);
+}
+
+.menubar:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#eeeeec, 1.2)), to(shade(#eeeeec, 0.9)));
+    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)));
+    border-color: darker(@bg_selected);
+}
+
+.button {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#eeeeec, 1.1)), to(shade(#eeeeec, 0.95)));
+    border-color: darker(#eeeeec);
+
+    -GtkWidget-focus-padding: 1;
+}
+
+.button:active {
+    color: #000000;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#d3d7cf, 0.95)), to(shade(#d3d7cf, 1.1)));
+    border-color: darker(#d3d7cf);
+}
+
+.button:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.95)));
+    border-color: darker(@bg_insensitive);
+}
+
+.button:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#d3d7cf, 0.95)), to(shade(#d3d7cf, 1.1)));
+    border-color: darker(#d3d7cf);
+}
+
+.button:selected {
+    color: #ffffff;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#3465a4, 1.1)), to(shade(#3465a4, 0.95)));
+    border-color: darker(#3465a4);
+}
+
+.tooltip {
+    color: #101010;
+    background-color: #ffffdf;
+    border-color: darker(#ffffdf);
+}
+
+.scrollbar {
+    -xfce-grip-style: rough;
+}
+
+.button.horizontal, .slider.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#d3d7cf, 1.1)), to(shade(#d3d7cf, 0.95)));
+    border-color: darker(#d3d7cf);
+}
+
+.button.horizontal:active, .slider.horizontal:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#e8e8e6, 0.95)), to(shade(#e8e8e6, 1.1)));
+    border-color: darker(#e8e8e6);
+}
+
+.button.horizontal:insensitive, .slider.horizontal:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.95)));
+    border-color: darker(@bg_insensitive);
+}
+
+.button.horizontal:hover, .slider.horizontal:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#d3d7cf, 1.1)), to(shade(#d3d7cf, 0.95)));
+    border-color: darker(#d3d7cf);
+}
+
+.button.horizontal:selected, .slider.horizontal:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.95)), to(shade(@bg_selected, 1.1)));
+    border-color: darker(@bg_selected);
+}
+
+.button.vertical, .slider.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#d3d7cf, 1.1)), to(shade(#d3d7cf, 0.95)));
+    border-color: darker(#d3d7cf);
+}
+
+.button.vertical:active, .slider.vertical:active {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#e8e8e6, 0.95)), to(shade(#e8e8e6, 1.1)));
+    border-color: darker(#e8e8e6);
+}
+
+.button.vertical:insensitive, .slider.vertical:insensitive {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.95)));
+    border-color: darker(@bg_insensitive);
+}
+
+.button.vertical:hover, .slider.vertical:hover {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#d3d7cf, 1.1)), to(shade(#d3d7cf, 0.95)));
+    border-color: darker(#d3d7cf);
+}
+
+.button.vertical:selected, .slider.vertical:selected {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_selected, 0.95)), to(shade(@bg_selected, 1.1)));
+    border-color: darker(@bg_selected);
+}
+
+.radio {
+    -GtkCheckButton-indicator-size: 14;
+}
diff --git a/themes/xfce-4.6/Makefile.am b/themes/xfce-4.6/Makefile.am
index 7b4ab13..fde6903 100644
--- a/themes/xfce-4.6/Makefile.am
+++ b/themes/xfce-4.6/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce-4.6
 
diff --git a/themes/xfce-4.6/gtk-3.0/Makefile.am b/themes/xfce-4.6/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..9d6d9b8
--- /dev/null
+++ b/themes/xfce-4.6/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce-4.6/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/xfce-4.6/gtk-3.0/gtk.css b/themes/xfce-4.6/gtk-3.0/gtk.css
new file mode 100644
index 0000000..1f84a2f
--- /dev/null
+++ b/themes/xfce-4.6/gtk-3.0/gtk.css
@@ -0,0 +1,494 @@
+/* Created July 2006
+ * Modified Dec. 2006
+ * Modified Jan. 2007
+ * Modified Jul. 2008 for xfce 4.6
+ * Modified Feb. 2009 for xfce 4.6
+ * Olivier Fourdan <fourdan at xfce.org>
+ * Ported from gtk-2.0 to gtk-3.0 by Peter de Ridder <peter at xfce.org>
+ * Released under the GPL license
+ */
+
+ at define-color fg_active #000000;
+ at define-color fg_insensitive #888a85;
+ at define-color fg_normal #101010;
+ at define-color fg_prelight #101010;
+ at define-color fg_selected #000000;
+
+ at define-color bg_active #d9d7d6;
+ at define-color bg_insensitive #eeeeec;
+ at define-color bg_normal #eeeeec;
+ at define-color bg_prelight #eeeeec;
+ at define-color bg_selected #d9d7d6;
+
+ at define-color base_active #d9d7d6;
+ at define-color base_insensitive #eeeeec;
+ at define-color base_normal #ffffff;
+ at define-color base_prelight #eeeeec;
+ at define-color base_selected #bad8ff;
+
+ at define-color text_active #101010;
+ at define-color text_insensitive #101010;
+ at define-color text_normal #101010;
+ at define-color text_prelight #101010;
+ at define-color text_selected #101010;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+    -xfce-grip-style: disabled;
+
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 0;
+    -GtkWidget-interior-focus        : false;
+
+    -GtkButton-child-displacement-x  : 0;
+    -GtkButton-child-displacement-y  : 1;
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+
+    -GtkButtonBox-child-internal-pad-x: 0;
+    -GtkButtonBox-child-internal-pad-y: 0;
+    -GtkButtonBox-child-min-height   : 0;
+    -GtkButtonBox-child-min-width    : 0;
+
+    -GtkCheckButton-indicator-size   : 12;
+
+    -GtkExpander-expander-size       : 11;
+    -GtkExpander-expander-spacing    : 0;
+
+    -GtkMenuBar-internal-padding     : 0;
+
+    -GtkMenu-horizontal-padding      : 0;
+    -GtkMenu-vertical-padding        : 0;
+
+    -GtkMenuItem-selected-shadow-type: etched-in;
+
+    -GtkPaned-handle-size            : 3;
+
+    -GtkRange-slider-width           : 15;
+    -GtkRange-stepper-size           : 15;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+
+    -GtkScale-value-spacing          : 0;
+
+    -GtkScrollbar-has-backward-stepper: true;
+    -GtkScrollbar-min-slider-length  : 20;
+
+    -GtkToolbar-internal-padding     : 0;
+    -GtkToolbar-space-size           : 10;
+
+    -GtkTreeView-expander-size       : 11;
+    -GtkTreeView-horizontal-separator: 0;
+    -GtkTreeView-vertical-separator  : 0;
+
+    border-width: 2 2;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+
+    -GtkEntry-focus-line-pattern: "\0";
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+
+    -GtkWidget-focus-line-pattern: "\1\1";
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    color: #4e9a06;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#cce2ff, 1.1)), to(shade(#cce2ff, 0.9)));
+    border-color: darker(#cce2ff);
+
+    border-width: 0 0;
+}
+
+.progressbar.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#cce2ff, 1.1)), to(shade(#cce2ff, 0.9)));
+}
+
+.trough {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#e8e8e6, 0.9)), to(shade(#e8e8e6, 1.1)));
+    border-color: darker(#e8e8e6);
+}
+
+.trough.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#e8e8e6, 0.9)), to(shade(#e8e8e6, 1.1)));
+}
+
+.notebook {
+    color: #101010;
+    background-color: #ffffff;
+    border-color: darker(#ffffff);
+
+    border-width: 1 1;
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: #e8e8e6;
+    border-color: darker(#e8e8e6);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: #101010;
+    background-color: #ffffff;
+    border-color: darker(#ffffff);
+}
+
+.menu {
+    background-color: #fafaf7;
+    border-color: darker(#fafaf7);
+}
+
+.menuitem {
+    background-color: #fafaf7;
+    border-color: darker(#fafaf7);
+
+    border-width: 1 2;
+}
+
+.menu:active, .memuitem:active {
+    color: #101010;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.menu:insensitive, .menuitem:insensitive {
+    background-color: #fafaf7;
+    border-color: darker(#fafaf7);
+}
+
+.menu:hover, .menuitem:hover {
+    color: #101010;
+    background-color: #cce2ff;
+    border-color: darker(#cce2ff);
+}
+
+.menu:selected, .menuitem:selected {
+    color: #101010;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.menubar {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#eeeeec, 1.0)), to(shade(#eeeeec, 0.9)));
+    border-color: darker(#eeeeec);
+
+    border-width: 1 2;
+}
+
+.menubar:active {
+    color: #101010;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 0.9)), to(shade(@bg_active, 1.0)));
+    border-color: darker(@bg_active);
+}
+
+.menubar:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#eeeeec, 1.0)), to(shade(#eeeeec, 0.9)));
+    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)));
+    border-color: darker(@bg_selected);
+}
+
+.button {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#eeeeec, 1.1)), to(shade(#eeeeec, 0.95)));
+    border-color: darker(#eeeeec);
+
+    -GtkWidget-focus-line-pattern: "\0";
+}
+
+.button:active {
+    color: #000000;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#d3d7cf, 0.95)), to(shade(#d3d7cf, 1.1)));
+    border-color: darker(#d3d7cf);
+}
+
+.button:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.95)));
+    border-color: darker(@bg_insensitive);
+}
+
+.button:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#d3d7cf, 0.95)), to(shade(#d3d7cf, 1.1)));
+    border-color: darker(#d3d7cf);
+}
+
+.button:selected {
+    color: #ffffff;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#3465a4, 1.1)), to(shade(#3465a4, 0.95)));
+    border-color: darker(#3465a4);
+}
+
+.tooltip {
+    color: #101010;
+    background-color: #ffffdf;
+    border-color: darker(#ffffdf);
+}
+
+.scrollbar {
+    -xfce-grip-style: rough;
+}
+
+.button.horizontal, .slider.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#d9d7d6, 1.1)), to(shade(#d9d7d6, 0.9)));
+    border-color: darker(#d9d7d6);
+}
+
+.button.horizontal:active, .slider.horizontal:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#e8e8e6, 0.9)), to(shade(#e8e8e6, 1.1)));
+    border-color: darker(#e8e8e6);
+}
+
+.button.horizontal:insensitive, .slider.horizontal:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.9)));
+    border-color: darker(@bg_insensitive);
+}
+
+.button.horizontal:hover, .slider.horizontal:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#cce2ff, 1.1)), to(shade(#cce2ff, 0.9)));
+    border-color: darker(#cce2ff);
+}
+
+.button.horizontal:selected, .slider.horizontal:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.9)), to(shade(@bg_selected, 1.1)));
+    border-color: darker(@bg_selected);
+}
+
+.button.vertical, .slider.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#d9d7d6, 1.1)), to(shade(#d9d7d6, 0.9)));
+    border-color: darker(#d9d7d6);
+}
+
+.button.vertical:active, .slider.vertical:active {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#e8e8e6, 0.9)), to(shade(#e8e8e6, 1.1)));
+    border-color: darker(#e8e8e6);
+}
+
+.button.vertical:insensitive, .slider.vertical:insensitive {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.9)));
+    border-color: darker(@bg_insensitive);
+}
+
+.button.vertical:hover, .slider.vertical:hover {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#cce2ff, 1.1)), to(shade(#cce2ff, 0.9)));
+    border-color: darker(#cce2ff);
+}
+
+.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)));
+    border-color: darker(@bg_selected);
+}
+
+.radio {
+    -GtkCheckButton-indicator-size: 14;
+}
diff --git a/themes/xfce/Makefile.am b/themes/xfce/Makefile.am
index ec524ef..655896d 100644
--- a/themes/xfce/Makefile.am
+++ b/themes/xfce/Makefile.am
@@ -1,3 +1,4 @@
-SUBDIRS = gtk-2.0
+SUBDIRS = $(GTK_SUBDIRS)
+DIST_SUBDIRS = gtk-2.0 gtk-3.0
 themedir = $(datadir)/themes/Xfce
 
diff --git a/themes/xfce/gtk-3.0/Makefile.am b/themes/xfce/gtk-3.0/Makefile.am
new file mode 100644
index 0000000..51d5846
--- /dev/null
+++ b/themes/xfce/gtk-3.0/Makefile.am
@@ -0,0 +1,5 @@
+themedir = $(datadir)/themes/Xfce/gtk-3.0
+theme_DATA = gtk.css
+
+EXTRA_DIST = $(theme_DATA)
+
diff --git a/themes/xfce/gtk-3.0/gtk.css b/themes/xfce/gtk-3.0/gtk.css
new file mode 100644
index 0000000..1f84a2f
--- /dev/null
+++ b/themes/xfce/gtk-3.0/gtk.css
@@ -0,0 +1,494 @@
+/* Created July 2006
+ * Modified Dec. 2006
+ * Modified Jan. 2007
+ * Modified Jul. 2008 for xfce 4.6
+ * Modified Feb. 2009 for xfce 4.6
+ * Olivier Fourdan <fourdan at xfce.org>
+ * Ported from gtk-2.0 to gtk-3.0 by Peter de Ridder <peter at xfce.org>
+ * Released under the GPL license
+ */
+
+ at define-color fg_active #000000;
+ at define-color fg_insensitive #888a85;
+ at define-color fg_normal #101010;
+ at define-color fg_prelight #101010;
+ at define-color fg_selected #000000;
+
+ at define-color bg_active #d9d7d6;
+ at define-color bg_insensitive #eeeeec;
+ at define-color bg_normal #eeeeec;
+ at define-color bg_prelight #eeeeec;
+ at define-color bg_selected #d9d7d6;
+
+ at define-color base_active #d9d7d6;
+ at define-color base_insensitive #eeeeec;
+ at define-color base_normal #ffffff;
+ at define-color base_prelight #eeeeec;
+ at define-color base_selected #bad8ff;
+
+ at define-color text_active #101010;
+ at define-color text_insensitive #101010;
+ at define-color text_normal #101010;
+ at define-color text_prelight #101010;
+ at define-color text_selected #101010;
+
+* {
+    engine: xfce;
+
+    -xfce-smooth-edge: true;
+    -xfce-grip-style: disabled;
+
+    -GtkWidget-focus-line-width      : 1;
+    -GtkWidget-focus-padding         : 0;
+    -GtkWidget-interior-focus        : false;
+
+    -GtkButton-child-displacement-x  : 0;
+    -GtkButton-child-displacement-y  : 1;
+    -GtkButton-default-border        : 0;
+    -GtkButton-default-outside-border: 0;
+
+    -GtkButtonBox-child-internal-pad-x: 0;
+    -GtkButtonBox-child-internal-pad-y: 0;
+    -GtkButtonBox-child-min-height   : 0;
+    -GtkButtonBox-child-min-width    : 0;
+
+    -GtkCheckButton-indicator-size   : 12;
+
+    -GtkExpander-expander-size       : 11;
+    -GtkExpander-expander-spacing    : 0;
+
+    -GtkMenuBar-internal-padding     : 0;
+
+    -GtkMenu-horizontal-padding      : 0;
+    -GtkMenu-vertical-padding        : 0;
+
+    -GtkMenuItem-selected-shadow-type: etched-in;
+
+    -GtkPaned-handle-size            : 3;
+
+    -GtkRange-slider-width           : 15;
+    -GtkRange-stepper-size           : 15;
+    -GtkRange-stepper-spacing        : 0;
+    -GtkRange-trough-border          : 0;
+
+    -GtkScale-value-spacing          : 0;
+
+    -GtkScrollbar-has-backward-stepper: true;
+    -GtkScrollbar-min-slider-length  : 20;
+
+    -GtkToolbar-internal-padding     : 0;
+    -GtkToolbar-space-size           : 10;
+
+    -GtkTreeView-expander-size       : 11;
+    -GtkTreeView-horizontal-separator: 0;
+    -GtkTreeView-vertical-separator  : 0;
+
+    border-width: 2 2;
+
+    color: @fg_normal;
+    background-color: @bg_normal;
+    border-color: darker(@bg_normal);
+}
+
+*:active {
+    color: @fg_active;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+*:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+    border-color: darker(@bg_insensitive);
+    text-shadow: 1 1 white;
+}
+
+*:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+*:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.view, .entry {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+
+    -GtkEntry-focus-line-pattern: "\0";
+}
+
+.view:active, .entry:active {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_normal);
+}
+
+.view:insensitive, .entry:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_normal);
+}
+
+.view:hover, .entry:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_normal);
+}
+
+.view:selected, .entry:selected {
+    color: @text_selected;
+    background-color: @base_selected;
+    border-color: darker(@bg_normal);
+}
+
+.view row:nth-child(odd) {
+    background-color: shade(@base_normal, 0.93);
+}
+
+.view row:nth-child(odd):active {
+    background-color: shade(@base_active, 0.93);
+}
+
+.view row:nth-child(odd):insensitive {
+    background-color: shade(@base_insensitive, 0.93);
+}
+
+.view row:nth-child(odd):hover {
+    background-color: shade(@base_prelight, 0.93);
+}
+
+.view row:nth-child(odd):selected {
+    background-color: shade(@base_selected, 0.93);
+}
+
+GtkCalendar {
+    color: @text_normal;
+}
+
+.header {
+    color: @fg_normal;
+}
+
+GtkCalendar:active {
+    color: @text_active;
+}
+
+GtkCalendar:insensitive {
+    color: @text_insensitive;
+}
+
+GtkCalendar:hover {
+    color: @text_prelight;
+}
+
+GtkCalendar:selected {
+    color: @text_selected;
+}
+
+.highlight {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+GtkCalendar:inconsistent {
+    color: mix(lighter(@bg_normal), darker(@bg_normal), 0.5);
+}
+
+GtkCalendar:selected {
+    color: @text_active;
+    background-color: @base_active;
+}
+
+.check, .radio {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+
+    -GtkWidget-focus-line-pattern: "\1\1";
+}
+
+.check:active, .radio:active {
+    color: @text_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive, .radio:insensitive {
+    color: @text_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.check:hover, .radio:hover {
+    color: @text_prelight;
+    background-color: @base_prelight;
+    border-color: darker(@bg_prelight);
+}
+
+.check:selected, .radio:selected {
+    color: @text_active;
+    background-color: @base_active;
+    border-color: darker(@bg_active);
+}
+
+.check:inconsistent, .radio:inconsistent {
+    color: @fg_normal;
+    background-color: @base_normal;
+    border-color: darker(@bg_normal);
+}
+
+.check:insensitive:inconsistent, .radio:insensitive:inconsistent {
+    color: @fg_insensitive;
+    background-color: @base_insensitive;
+    border-color: darker(@bg_insensitive);
+}
+
+.cell {
+    color: @text_normal;
+}
+
+.cell:active {
+    color: @text_active;
+}
+
+.cell:insensitive {
+    color: @text_insensitive;
+}
+
+.cell:hover {
+    color: @text_prelight;
+}
+
+.cell:selected {
+    color: @text_selected;
+}
+
+.spinbutton.button {
+    color: @fg_normal;
+    background-color: @bg_normal;
+}
+
+.spinbutton.button:active {
+    color: @fg_active;
+    background-color: @bg_active;
+}
+
+.spinbutton.button:insensitive {
+    color: @fg_insensitive;
+    background-color: @bg_insensitive;
+}
+
+.spinbutton.button:hover {
+    color: @fg_prelight;
+    background-color: @bg_prelight;
+}
+
+.spinbutton.button:selected {
+    color: @fg_selected;
+    background-color: @bg_selected;
+}
+
+.progressbar {
+    color: #4e9a06;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#cce2ff, 1.1)), to(shade(#cce2ff, 0.9)));
+    border-color: darker(#cce2ff);
+
+    border-width: 0 0;
+}
+
+.progressbar.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#cce2ff, 1.1)), to(shade(#cce2ff, 0.9)));
+}
+
+.trough {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#e8e8e6, 0.9)), to(shade(#e8e8e6, 1.1)));
+    border-color: darker(#e8e8e6);
+}
+
+.trough.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#e8e8e6, 0.9)), to(shade(#e8e8e6, 1.1)));
+}
+
+.notebook {
+    color: #101010;
+    background-color: #ffffff;
+    border-color: darker(#ffffff);
+
+    border-width: 1 1;
+}
+
+.notebook tab, .notebook tab * {
+    color: @fg_active;
+    background-color: #e8e8e6;
+    border-color: darker(#e8e8e6);
+}
+
+.notebook tab:active, .notebook tab *:active {
+    color: #101010;
+    background-color: #ffffff;
+    border-color: darker(#ffffff);
+}
+
+.menu {
+    background-color: #fafaf7;
+    border-color: darker(#fafaf7);
+}
+
+.menuitem {
+    background-color: #fafaf7;
+    border-color: darker(#fafaf7);
+
+    border-width: 1 2;
+}
+
+.menu:active, .memuitem:active {
+    color: #101010;
+    background-color: @bg_active;
+    border-color: darker(@bg_active);
+}
+
+.menu:insensitive, .menuitem:insensitive {
+    background-color: #fafaf7;
+    border-color: darker(#fafaf7);
+}
+
+.menu:hover, .menuitem:hover {
+    color: #101010;
+    background-color: #cce2ff;
+    border-color: darker(#cce2ff);
+}
+
+.menu:selected, .menuitem:selected {
+    color: #101010;
+    background-color: @bg_selected;
+    border-color: darker(@bg_selected);
+}
+
+.menubar {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#eeeeec, 1.0)), to(shade(#eeeeec, 0.9)));
+    border-color: darker(#eeeeec);
+
+    border-width: 1 2;
+}
+
+.menubar:active {
+    color: #101010;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_active, 0.9)), to(shade(@bg_active, 1.0)));
+    border-color: darker(@bg_active);
+}
+
+.menubar:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#eeeeec, 1.0)), to(shade(#eeeeec, 0.9)));
+    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)));
+    border-color: darker(@bg_selected);
+}
+
+.button {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#eeeeec, 1.1)), to(shade(#eeeeec, 0.95)));
+    border-color: darker(#eeeeec);
+
+    -GtkWidget-focus-line-pattern: "\0";
+}
+
+.button:active {
+    color: #000000;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#d3d7cf, 0.95)), to(shade(#d3d7cf, 1.1)));
+    border-color: darker(#d3d7cf);
+}
+
+.button:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.95)));
+    border-color: darker(@bg_insensitive);
+}
+
+.button:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#d3d7cf, 0.95)), to(shade(#d3d7cf, 1.1)));
+    border-color: darker(#d3d7cf);
+}
+
+.button:selected {
+    color: #ffffff;
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#3465a4, 1.1)), to(shade(#3465a4, 0.95)));
+    border-color: darker(#3465a4);
+}
+
+.tooltip {
+    color: #101010;
+    background-color: #ffffdf;
+    border-color: darker(#ffffdf);
+}
+
+.scrollbar {
+    -xfce-grip-style: rough;
+}
+
+.button.horizontal, .slider.horizontal {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#d9d7d6, 1.1)), to(shade(#d9d7d6, 0.9)));
+    border-color: darker(#d9d7d6);
+}
+
+.button.horizontal:active, .slider.horizontal:active {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#e8e8e6, 0.9)), to(shade(#e8e8e6, 1.1)));
+    border-color: darker(#e8e8e6);
+}
+
+.button.horizontal:insensitive, .slider.horizontal:insensitive {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.9)));
+    border-color: darker(@bg_insensitive);
+}
+
+.button.horizontal:hover, .slider.horizontal:hover {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(#cce2ff, 1.1)), to(shade(#cce2ff, 0.9)));
+    border-color: darker(#cce2ff);
+}
+
+.button.horizontal:selected, .slider.horizontal:selected {
+    background-image: -gtk-gradient(linear, left top, left bottom, from(shade(@bg_selected, 0.9)), to(shade(@bg_selected, 1.1)));
+    border-color: darker(@bg_selected);
+}
+
+.button.vertical, .slider.vertical {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#d9d7d6, 1.1)), to(shade(#d9d7d6, 0.9)));
+    border-color: darker(#d9d7d6);
+}
+
+.button.vertical:active, .slider.vertical:active {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#e8e8e6, 0.9)), to(shade(#e8e8e6, 1.1)));
+    border-color: darker(#e8e8e6);
+}
+
+.button.vertical:insensitive, .slider.vertical:insensitive {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(@bg_insensitive, 1.1)), to(shade(@bg_insensitive, 0.9)));
+    border-color: darker(@bg_insensitive);
+}
+
+.button.vertical:hover, .slider.vertical:hover {
+    background-image: -gtk-gradient(linear, left top, right top, from(shade(#cce2ff, 1.1)), to(shade(#cce2ff, 0.9)));
+    border-color: darker(#cce2ff);
+}
+
+.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)));
+    border-color: darker(@bg_selected);
+}
+
+.radio {
+    -GtkCheckButton-indicator-size: 14;
+}


More information about the Xfce4-commits mailing list