Blob Blame History Raw
diff -uprN compiz-0.8.8-orig/compiz-gconf.pc.in compiz-0.8.8/compiz-gconf.pc.in
--- compiz-0.8.8-orig/compiz-gconf.pc.in	2013-04-19 13:37:07.022678000 +0200
+++ compiz-0.8.8/compiz-gconf.pc.in	1970-01-01 01:00:00.000000000 +0100
@@ -1,6 +0,0 @@
-prefix=@prefix@
-xsltdir=@datarootdir@/compiz
-
-Name: compiz-gconf
-Description: GConf plugin for compiz
-Version: @VERSION@
diff -uprN compiz-0.8.8-orig/configure.ac compiz-0.8.8/configure.ac
--- compiz-0.8.8-orig/configure.ac	2013-04-19 13:37:07.140680000 +0200
+++ compiz-0.8.8/configure.ac	2013-04-19 13:47:13.444800160 +0200
@@ -170,67 +170,6 @@ fi
 
 PKG_CHECK_MODULES(LIBPNG, libpng)
 
-AC_ARG_ENABLE(glib,
-  [  --disable-glib          Disable glib plugin],
-  [use_glib=$enableval], [use_glib=yes])
-
-if test "x$use_glib" = "xyes"; then
-  PKG_CHECK_MODULES(GLIB, glib-2.0)
-fi
-
-AM_CONDITIONAL(USE_GLIB, test "x$use_glib" = "xyes")
-if test "$use_glib" = yes; then
-  AC_DEFINE(USE_GLIB, 1, [Build glib plugin])
-fi
-
-AC_ARG_ENABLE(mateconf,
-  [  --disable-mateconf         Disable mateconf plugin],
-  [use_mateconf=$enableval], [use_mateconf=yes])
-
-if test "x$use_mateconf" = "xyes"; then
-  PKG_CHECK_MODULES(MATECONF, mateconf-2.0)
-
-  AC_PATH_PROG(MATECONFTOOL, mateconftool-2, no)
-  if test x"$MATECONFTOOL" = xno; then
-    AC_MSG_ERROR([mateconftool-2 executable not found in your path - should be installed with MateConf])
-  fi
-fi
-
-AM_MATECONF_SOURCE_2
-
-AM_CONDITIONAL(USE_MATECONF, test "x$use_mateconf" = "xyes")
-if test "$use_mateconf" = yes; then
-  AC_DEFINE(USE_MATECONF, 1, [Build mateconf plugin])
-fi
-
-stylesheetdir=$datadir/compiz
-AC_SUBST(stylesheetdir)
-
-AC_ARG_ENABLE(dbus,
-  [  --disable-dbus          Disable dbus plugin],
-  [use_dbus=$enableval], [use_dbus=yes])
-
-if test "x$use_dbus" = "xyes"; then
-  PKG_CHECK_MODULES(DBUS, dbus-1 libxml-2.0, [use_dbus=yes], [use_dbus=no])
-fi
-
-AM_CONDITIONAL(DBUS_PLUGIN, test "x$use_dbus" = "xyes")
-if test "$use_dbus" = yes; then
-  AC_DEFINE(USE_DBUS, 1, [Build dbus plugin])
-fi
-
-AC_ARG_ENABLE(dbus-glib,
-  [  --disable-dbus-glib     Disable dbus-glib support],
-  [use_dbus_glib=$enableval], [use_dbus_glib=yes])
-
-if test "x$use_dbus_glib" = "xyes"; then
-  PKG_CHECK_MODULES(DBUS_GLIB, dbus-glib-1, [use_dbus_glib=yes], [use_dbus_glib=no])
-fi
-
-if test "$use_dbus" = yes; then
-  AC_DEFINE(USE_DBUS_GLIB, 1, [Build dbus glib support])
-fi
-
 AC_ARG_ENABLE(inotify,
   [  --disable-inotify       Disable inotify plugin],
   [use_inotify=$enableval], [use_inotify=yes])
@@ -295,10 +234,6 @@ AC_ARG_ENABLE(mate,
   [  --disable-mate         Disable mate settings module],
   [use_mate=$enableval], [use_mate=yes])
 
-AC_ARG_ENABLE(mate-keybindings,
-  [  --disable-mate-keybindings Disable mate keybindings],
-  [use_mate_keybindings=$enableval], [use_mate_keybindings=yes])
-
 if test "x$use_gtk" = "xyes"; then
   PKG_CHECK_MODULES(GTK_WINDOW_DECORATOR,
 		    xrender >= 0.8.4  \
@@ -332,21 +267,6 @@ if test "x$use_gtk" = "xyes"; then
       PKG_CHECK_EXISTS(libmarco-private >= 2.23.2,
 		       [have_marco_2_23_2=yes], [have_marco_2_23_2=no])
     fi
-
-    if test "x$use_mate" = "xyes"; then
-      PKG_CHECK_MODULES(MATE_WINDOW_SETTINGS,
-			mate-window-settings-2.0 mate-desktop-2.0 mateconf-2.0,
-			[use_mate=yes], [use_mate=no])
-    fi
-
-    if test "x$use_mate_keybindings" = "xyes"; then
-      PKG_CHECK_MODULES(MATE_KEY_BINDINGS,
-			mate-keybindings,
-			[use_mate_keybindings=yes], [use_mate_keybindings=no])
-    fi
-
-    windowsettingsdatadir=`pkg-config --variable=prefix mate-window-settings-2.0`/share
-    windowsettingslibdir=`pkg-config --variable=libdir mate-window-settings-2.0`    keybindingsdir=`pkg-config --variable=keysdir mate-keybindings`
   else
     use_marco="no"
     use_mate="no"
@@ -356,10 +276,6 @@ else
   use_mate="no"
 fi
 
-AC_SUBST(windowsettingsdatadir)
-AC_SUBST(windowsettingslibdir)
-AC_SUBST(keybindingsdir)
-
 AM_CONDITIONAL(USE_GTK, test "x$use_gtk" = "xyes")
 if test "$use_gtk" = yes; then
   AC_DEFINE(USE_GTK, 1, [Build gtk window decorator])
@@ -392,12 +308,7 @@ fi
 
 AM_CONDITIONAL(USE_MATE, test "x$use_mate" = "xyes")
 if test "$use_mate" = yes; then
-  AC_DEFINE(USE_MATE, 1, [Build mate settings module])
-fi
-
-AM_CONDITIONAL(USE_MATE_KEYBINDINGS, test "x$use_mate_keybindings" = "xyes")
-if test "$use_mate_keybindings" = yes; then
-  AC_DEFINE(USE_MATE_KEYBINDINGS, 1, [Install custom keybindings])
+  AC_DEFINE(USE_MATE, 1, [Build mate compatibility plugin])
 fi
 
 AC_ARG_WITH(max-desktops,
@@ -451,7 +362,6 @@ AC_OUTPUT([
 compiz.pc
 compiz-cube.pc
 compiz-scale.pc
-compiz-mateconf.pc
 Makefile
 src/Makefile
 libdecoration/Makefile
@@ -468,9 +378,6 @@ metadata/Makefile
 
 echo ""
 echo "the following optional plugins will be compiled:"
-echo "  glib:     $use_glib"
-echo "  mateconf:    $use_mateconf"
-echo "  dbus:     $use_dbus"
 echo "  annotate: $use_annotate"
 echo "  svg:      $use_librsvg"
 echo "  inotify:  $use_inotify"
diff -uprN compiz-0.8.8-orig/gtk/window-decorator/gtk-window-decorator.c compiz-0.8.8/gtk/window-decorator/gtk-window-decorator.c
--- compiz-0.8.8-orig/gtk/window-decorator/gtk-window-decorator.c	2013-04-19 13:37:07.112679000 +0200
+++ compiz-0.8.8/gtk/window-decorator/gtk-window-decorator.c	2013-04-19 13:53:42.817735921 +0200
@@ -36,16 +36,6 @@
 #include <gdk/gdkx.h>
 #include <glib/gi18n.h>
 
-#ifdef USE_MATECONF
-#include <mateconf/mateconf-client.h>
-#endif
-
-#ifdef USE_DBUS_GLIB
-#define DBUS_API_SUBJECT_TO_CHANGE
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib-lowlevel.h>
-#endif
-
 #define WNCK_I_KNOW_THIS_IS_UNSTABLE
 #include <libwnck/libwnck.h>
 #include <libwnck/window-action-menu.h>
@@ -84,81 +74,6 @@
 #define MATE_CURSOR_SIZE_KEY		\
     MATE_MOUSE_DIR "/cursor_size"
 
-#define MARCO_MATECONF_DIR "/apps/marco/general"
-
-#define COMPIZ_USE_SYSTEM_FONT_KEY		    \
-    MARCO_MATECONF_DIR "/titlebar_uses_system_font"
-
-#define COMPIZ_TITLEBAR_FONT_KEY	\
-    MARCO_MATECONF_DIR "/titlebar_font"
-
-#define COMPIZ_DOUBLE_CLICK_TITLEBAR_KEY	       \
-    MARCO_MATECONF_DIR "/action_double_click_titlebar"
-
-#define COMPIZ_MIDDLE_CLICK_TITLEBAR_KEY	       \
-    MARCO_MATECONF_DIR "/action_middle_click_titlebar"
-
-#define COMPIZ_RIGHT_CLICK_TITLEBAR_KEY	       \
-    MARCO_MATECONF_DIR "/action_right_click_titlebar"
-
-#define COMPIZ_MATECONF_DIR1 "/apps/compiz/plugins/decoration/allscreens/options"
-
-#define COMPIZ_SHADOW_RADIUS_KEY \
-    COMPIZ_MATECONF_DIR1 "/shadow_radius"
-
-#define COMPIZ_SHADOW_OPACITY_KEY \
-    COMPIZ_MATECONF_DIR1 "/shadow_opacity"
-
-#define COMPIZ_SHADOW_COLOR_KEY \
-    COMPIZ_MATECONF_DIR1 "/shadow_color"
-
-#define COMPIZ_SHADOW_OFFSET_X_KEY \
-    COMPIZ_MATECONF_DIR1 "/shadow_x_offset"
-
-#define COMPIZ_SHADOW_OFFSET_Y_KEY \
-    COMPIZ_MATECONF_DIR1 "/shadow_y_offset"
-
-#define META_THEME_KEY		\
-    MARCO_MATECONF_DIR "/theme"
-
-#define META_BUTTON_LAYOUT_KEY		\
-    MARCO_MATECONF_DIR "/button_layout"
-
-#define MATECONF_DIR "/apps/gwd"
-
-#define USE_META_THEME_KEY	    \
-    MATECONF_DIR "/use_marco_theme"
-
-#define META_THEME_OPACITY_KEY	        \
-    MATECONF_DIR "/marco_theme_opacity"
-
-#define META_THEME_SHADE_OPACITY_KEY	      \
-    MATECONF_DIR "/marco_theme_shade_opacity"
-
-#define META_THEME_ACTIVE_OPACITY_KEY	       \
-    MATECONF_DIR "/marco_theme_active_opacity"
-
-#define META_THEME_ACTIVE_SHADE_OPACITY_KEY          \
-    MATECONF_DIR "/marco_theme_active_shade_opacity"
-
-#define BLUR_TYPE_KEY	   \
-    MATECONF_DIR "/blur_type"
-
-#define WHEEL_ACTION_KEY   \
-    MATECONF_DIR "/mouse_wheel_action"
-
-#define COMPIZ_MATECONF_DIR2 "/apps/compiz/general/allscreens/options"
-#define COMPIZ_CURSOR_THEME_KEY          \
-    COMPIZ_MATECONF_DIR2 "/cursor_theme"
-
-#define COMPIZ_CURSOR_SIZE_KEY           \
-    COMPIZ_MATECONF_DIR2 "/cursor_size"
-
-#define DBUS_DEST       "org.freedesktop.compiz"
-#define DBUS_PATH       "/org/freedesktop/compiz/decoration/allscreens"
-#define DBUS_INTERFACE  "org.freedesktop.compiz"
-#define DBUS_METHOD_GET "get"
-
 #define STROKE_ALPHA 0.6
 
 #define ICON_SPACE 20
diff -uprN compiz-0.8.8-orig/gtk/window-decorator/gwd.schemas.in compiz-0.8.8/gtk/window-decorator/gwd.schemas.in
--- compiz-0.8.8-orig/gtk/window-decorator/gwd.schemas.in	2013-04-19 13:37:07.035679000 +0200
+++ compiz-0.8.8/gtk/window-decorator/gwd.schemas.in	1970-01-01 01:00:00.000000000 +0100
@@ -1,81 +0,0 @@
-<mateconfschemafile>
-    <schemalist>
-        <schema>
-            <key>/schemas/apps/gwd/blur_type</key>
-            <applyto>/apps/gwd/blur_type</applyto>
-            <owner>gwd</owner>
-            <type>string</type>
-            <default>none</default>
-            <locale name="C">
-                <short>Blur type</short>
-                <long>Type of blur used for window decorations</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/gwd/use_marco_theme</key>
-            <applyto>/apps/gwd/use_marco_theme</applyto>
-            <owner>gwd</owner>
-            <type>bool</type>
-            <default>true</default>
-            <locale name="C">
-                <short>Use marco theme</short>
-                <long>Use marco theme when drawing window decorations</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/gwd/mouse_wheel_action</key>
-            <applyto>/apps/gwd/mouse_wheel_action</applyto>
-            <owner>gwd</owner>
-            <type>string</type>
-            <default>none</default>
-            <locale name="C">
-                <short>Title bar mouse wheel action</short>
-                <long>Action to take when scrolling the mouse wheel on a window title bar.</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/gwd/marco_theme_opacity</key>
-            <applyto>/apps/gwd/marco_theme_opacity</applyto>
-            <owner>gwd</owner>
-            <type>float</type>
-            <default>0.75</default>
-            <locale name="C">
-                <short>Marco theme opacity</short>
-                <long>Opacity to use for marco theme decorations</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/gwd/marco_theme_shade_opacity</key>
-            <applyto>/apps/gwd/marco_theme_shade_opacity</applyto>
-            <owner>gwd</owner>
-            <type>bool</type>
-            <default>true</default>
-            <locale name="C">
-                <short>Marco theme opacity shade</short>
-                <long>Shade windows with marco theme decorations from opaque to translucent</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/gwd/marco_theme_active_opacity</key>
-            <applyto>/apps/gwd/marco_theme_active_opacity</applyto>
-            <owner>gwd</owner>
-            <type>float</type>
-            <default>1.0</default>
-            <locale name="C">
-                <short>Marco theme active window opacity</short>
-                <long>Opacity to use for active windows with marco theme decorations</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/gwd/marco_theme_active_shade_opacity</key>
-            <applyto>/apps/gwd/marco_theme_active_shade_opacity</applyto>
-            <owner>gwd</owner>
-            <type>bool</type>
-            <default>true</default>
-            <locale name="C">
-                <short>Marco theme active window opacity shade</short>
-                <long>Shade active windows with marco theme decorations from opaque to translucent</long>
-            </locale>
-        </schema>
-    </schemalist>  
-</mateconfschemafile>
diff -uprN compiz-0.8.8-orig/gtk/window-decorator/Makefile.am compiz-0.8.8/gtk/window-decorator/Makefile.am
--- compiz-0.8.8-orig/gtk/window-decorator/Makefile.am	2013-04-19 13:37:07.035679000 +0200
+++ compiz-0.8.8/gtk/window-decorator/Makefile.am	2013-04-19 13:56:15.257276948 +0200
@@ -9,8 +9,6 @@ gtk_window_decorator_DEPENDENCIES = \
 gtk_window_decorator_LDADD	  =		       \
 	$(top_builddir)/libdecoration/libdecoration.la \
 	@GTK_WINDOW_DECORATOR_LIBS@		       \
-	@MATECONF_LIBS@				       \
-	@DBUS_GLIB_LIBS@			       \
 	$(marcolibs)
 
 gtk_window_decorator_SOURCES	  = \
@@ -18,33 +16,11 @@ gtk_window_decorator_SOURCES	  = \
 gtk_window_decorator_program = gtk-window-decorator
 endif
 
-if USE_MATECONF
-schemadir       = $(MATECONF_SCHEMA_FILE_DIR)
-schema_in_files = gwd.schemas.in
-schema_files    = $(schema_in_files:.schemas.in=.schemas)
-schema_DATA     = $(schema_files)
-
-@INTLTOOL_SCHEMAS_RULE@
-
-install-data-local:
-	if test -z "$(DESTDIR)" ; then \
-		MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(schema_DATA); \
-	fi
-endif
-
 INCLUDES = \
 	-I$(top_srcdir)/include            \
 	@GTK_WINDOW_DECORATOR_CFLAGS@      \
 	@MARCO_CFLAGS@                  \
-	@MATECONF_CFLAGS@                     \
-	@DBUS_GLIB_CFLAGS@                 \
 	-DALL_LINGUAS="\"@ALL_LINGUAS@\""  \
 	-DLOCALEDIR="\"@datadir@/locale"\"
 
 bin_PROGRAMS = $(gtk_window_decorator_program)
-
-EXTRA_DIST =		\
-	$(schema_in_files)
-
-DISTCLEANFILES = \
-	$(schema_files)
diff -uprN compiz-0.8.8-orig/Makefile.am compiz-0.8.8/Makefile.am
--- compiz-0.8.8-orig/Makefile.am	2013-04-19 13:37:07.152680000 +0200
+++ compiz-0.8.8/Makefile.am	2013-04-19 13:48:17.452445199 +0200
@@ -7,23 +7,17 @@ EXTRA_DIST =		    \
 	COPYING.MIT	    \
 	compiz.pc.in	    \
 	compiz-cube.pc.in   \
-	compiz-scale.pc.in  \
-	compiz-mateconf.pc.in
+	compiz-scale.pc.in
 
 DISTCLEANFILES =	 \
 	po/stamp-it	 \
 	po/.intltool-merge-cache
 
-if USE_MATECONF
-mateconfdata = compiz-mateconf.pc
-endif
-
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA =	\
 	compiz.pc	\
 	compiz-cube.pc	\
-	compiz-scale.pc \
-	$(mateconfdata)
+	compiz-scale.pc
 
 # Some custom targets to make it easier to release things.
 # Use either:
diff -uprN compiz-0.8.8-orig/metadata/dbus.xml.in compiz-0.8.8/metadata/dbus.xml.in
--- compiz-0.8.8-orig/metadata/dbus.xml.in	2010-05-21 13:18:14.000000000 +0200
+++ compiz-0.8.8/metadata/dbus.xml.in	1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-<compiz>
-    <plugin name="dbus">
-	<_short>Dbus</_short>
-	<_long>Dbus Control Backend</_long>
-	<category>Utility</category>
-    </plugin>
-</compiz>
diff -uprN compiz-0.8.8-orig/metadata/glib.xml.in compiz-0.8.8/metadata/glib.xml.in
--- compiz-0.8.8-orig/metadata/glib.xml.in	2010-05-21 13:18:14.000000000 +0200
+++ compiz-0.8.8/metadata/glib.xml.in	1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-<compiz>
-    <plugin name="glib">
-	<_short>GLib</_short>
-	<_long>GLib main loop support</_long>
-	<category>Utility</category>
-    </plugin>
-</compiz>
diff -uprN compiz-0.8.8-orig/metadata/Makefile.am compiz-0.8.8/metadata/Makefile.am
--- compiz-0.8.8-orig/metadata/Makefile.am	2013-04-19 13:37:07.153680000 +0200
+++ compiz-0.8.8/metadata/Makefile.am	2013-04-19 13:59:03.272973769 +0200
@@ -6,12 +6,9 @@ xml_in_files =		   \
 	clone.xml.in	   \
 	commands.xml.in	   \
 	cube.xml.in	   \
-	dbus.xml.in	   \
 	decoration.xml.in  \
 	fade.xml.in	   \
 	fs.xml.in	   \
-	mateconf.xml.in	   \
-	glib.xml.in	   \
 	matecompat.xml.in \
 	ini.xml.in	   \
 	inotify.xml.in	   \
@@ -43,40 +40,8 @@ core.xml.in: core.xml.in.in Makefile
 
 @INTLTOOL_XML_RULE@
 
-if USE_MATECONF
-schemadir    = $(MATECONF_SCHEMA_FILE_DIR)
-schema_files = $(patsubst %.xml.in,compiz-%.schemas,$(xml_in_files))
-schema_DATA  = $(schema_files)
-
-%.schemas: $(xml_files)
-	xsltproc -o $@ --param defaultPlugins "'$(default_plugins)'" \
-		$(srcdir)/schemas.xslt $(subst compiz-,,$*).xml
-
-schemas_stylesheets = schemas.xslt
-
-endif
-
-install-data-local:
-if USE_MATECONF
-if MATECONF_SCHEMAS_INSTALL
-	if test -z "$(DESTDIR)" ; then \
-		MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(schema_DATA); \
-        fi
-endif
-endif
-
-xsltdir    = $(stylesheetdir)
-xslt_files =		       	  \
-	$(schemas_stylesheets)
-
-xslt_DATA  = $(xslt_files)
-
 EXTRA_DIST =		    \
-	$(xml_in_files)     \
-	core.xml.in.in      \
-	$(xslt_files)
+	core.xml.in.in
 
 DISTCLEANFILES =	    \
-	$(xml_files)        \
-	core.xml.in         \
-	$(schema_files)
+	core.xml.in
diff -uprN compiz-0.8.8-orig/metadata/mateconf.xml.in compiz-0.8.8/metadata/mateconf.xml.in
--- compiz-0.8.8-orig/metadata/mateconf.xml.in	2013-04-19 13:37:07.039679000 +0200
+++ compiz-0.8.8/metadata/mateconf.xml.in	1970-01-01 01:00:00.000000000 +0100
@@ -1,18 +0,0 @@
-<compiz>
-    <plugin name="mateconf">
-	<_short>MateConf</_short>
-	<_long>MateConf Control Backend</_long>
-	<deps>
-	    <relation type="after">
-		<plugin>glib</plugin>
-	    </relation>
-	    <relation type="before">
-		<plugin>decoration</plugin>
-		<plugin>wobbly</plugin>
-		<plugin>fade</plugin>
-		<plugin>cube</plugin>
-		<plugin>scale</plugin>
-	    </relation>
-	</deps>
-    </plugin>
-</compiz>
diff -uprN compiz-0.8.8-orig/metadata/schemas.xslt compiz-0.8.8/metadata/schemas.xslt
--- compiz-0.8.8-orig/metadata/schemas.xslt	2013-04-19 13:37:07.039679000 +0200
+++ compiz-0.8.8/metadata/schemas.xslt	1970-01-01 01:00:00.000000000 +0100
@@ -1,419 +0,0 @@
-<!--
-  Copyright © 2007 Dennis Kasprzyk
-
-  Permission to use, copy, modify, distribute, and sell this software
-  and its documentation for any purpose is hereby granted without
-  fee, provided that the above copyright notice appear in all copies
-  and that both that copyright notice and this permission notice
-  appear in supporting documentation, and that the name of
-  Dennis Kasprzyk not be used in advertising or publicity pertaining to
-  distribution of the software without specific, written prior permission.
-  Dennis Kasprzyk makes no representations about the suitability of this
-  software for any purpose. It is provided "as is" without express or
-  implied warranty.
-
-  DENNIS KASPRZYK DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-  NO EVENT SHALL DENNIS KASPRZYK BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-  CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-  OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-  NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-  WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-  Authors: Dennis Kasprzyk <onestone@deltatauchi.de>
--->
-
-<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
-  <xsl:output method="xml" indent="yes"/>
-
-  <xsl:param name="appName">/apps/compiz</xsl:param>
-
-  <xsl:template  match="/compiz">
-    <mateconfschemafile>
-      <schemalist>
-        <xsl:for-each select="/compiz//option[not(@read_only='true') and not(@type='action')]">
-          <xsl:call-template name="dumpOption"/>
-        </xsl:for-each>
-      </schemalist>
-    </mateconfschemafile>
-  </xsl:template>
-
-  <!-- generates the schema for an option -->
-  <xsl:template name="dumpOption">
-    <schema>
-      <key>/schemas<xsl:call-template name="printKey"/></key>
-      <applyto><xsl:call-template name="printKey"/></applyto>
-      <owner>compiz</owner>
-      <type><xsl:call-template name="printType"/></type>
-      <xsl:choose>
-        <!-- color values need a special handling -->
-        <xsl:when test="@type = 'color'">
-          <default>
-            <xsl:choose>
-              <xsl:when test="default">
-                <xsl:for-each select="default[1]">
-                  <xsl:call-template name="printColor"/>
-                </xsl:for-each>
-              </xsl:when>
-              <xsl:otherwise>
-                <xsl:text>#000000ff</xsl:text>
-              </xsl:otherwise>
-            </xsl:choose>
-          </default>
-        </xsl:when>
-        <xsl:when test="@type = 'edge'">
-          <default>
-            <xsl:call-template name="printEdgeList"/>
-          </default>
-        </xsl:when>
-        <xsl:when test="@type = 'list'">
-          <list_type>
-            <xsl:call-template name="printType">
-              <xsl:with-param name="type" select="type/text()"/>
-            </xsl:call-template>
-          </list_type>
-          <xsl:choose>
-            <xsl:when test="type/text() = 'color'">
-              <default>[<xsl:call-template name="printColorList"/>]</default>
-            </xsl:when>
-            <xsl:when test="@name = 'active_plugins'">
-              <default>[<xsl:value-of select="$defaultPlugins"/>]</default>
-	    </xsl:when>
-            <xsl:otherwise>
-              <default>[<xsl:call-template name="printValueList"/>]</default>
-            </xsl:otherwise>
-          </xsl:choose>
-        </xsl:when>
-        <!-- for most option types we can use the default value directly -->
-        <xsl:otherwise>
-          <default>
-            <xsl:choose>
-              <xsl:when test="default/text()">
-                <xsl:value-of select="default/text()"/>
-              </xsl:when>
-              <xsl:otherwise>
-                <!-- if no default value was specified we need to generate one -->
-                <xsl:choose>
-		  <xsl:when test="contains('bool,bell',@type)">
-                    <xsl:text>false</xsl:text>
-                  </xsl:when>
-                  <xsl:when test="@type = 'int'">
-                    <xsl:variable name="num">
-                      <xsl:call-template name="printNumFallback"/>
-                    </xsl:variable>
-                    <xsl:value-of select="floor($num)"/>
-                  </xsl:when>
-                  <xsl:when test="@type = 'float'">
-                    <xsl:call-template name="printNumFallback"/>
-                  </xsl:when>
-		  <xsl:when test="contains('key,button',@type)">
-		    <xsl:text>Disabled</xsl:text>
-                  </xsl:when>
-                </xsl:choose>
-              </xsl:otherwise>
-            </xsl:choose>
-          </default>
-	</xsl:otherwise>
-      </xsl:choose>
-      <!-- add the short and long descriptions -->
-      <xsl:call-template name="printDescription"/>
-    </schema>
-  </xsl:template>
-
-  <!-- converts a compiz type to a mateconf type -->
-  <xsl:template name="printType">
-    <xsl:param name="type">
-      <xsl:value-of select="@type"/>
-    </xsl:param>
-    <xsl:choose>
-      <xsl:when test="$type = 'int'">
-        <xsl:text>int</xsl:text>
-      </xsl:when>
-      <xsl:when test="$type = 'float'">
-        <xsl:text>float</xsl:text>
-      </xsl:when>
-      <xsl:when test="$type = 'bool'">
-        <xsl:text>bool</xsl:text>
-      </xsl:when>
-      <xsl:when test="$type = 'list'">
-        <xsl:text>list</xsl:text>
-      </xsl:when>
-      <xsl:when test="$type = 'bell'">
-        <xsl:text>bool</xsl:text>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>string</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <!-- prints the option long and short descriptions of an option -->
-  <xsl:template name="printDescription">
-    <xsl:param name="info">
-      <xsl:call-template name="printInfo"/>
-    </xsl:param>
-    <locale name="C">
-      <short><xsl:value-of select="short[not(@xml:lang)]/text()"/></short>
-      <long>
-        <xsl:value-of select="long[not(@xml:lang)]/text()"/>
-        <xsl:value-of select="$info"/>
-      </long>
-    </locale>
-    <xsl:for-each select="short[@xml:lang]">
-      <xsl:variable name="language" select="@xml:lang"/>
-      <xsl:variable name="infoTrans">
-        <xsl:call-template name="printInfoTrans">
-          <xsl:with-param name="language" select="$language"/>
-        </xsl:call-template>
-      </xsl:variable>
-      <locale>
-        <xsl:attribute name='name'>
-          <xsl:value-of select="@xml:lang"/>
-        </xsl:attribute>
-        <short><xsl:value-of select="text()"/></short>
-        <long>
-          <xsl:choose>
-            <xsl:when test="parent::option/long[lang($language)]">
-              <xsl:value-of select="parent::option/long[lang($language)]/text()"/>
-            </xsl:when>
-            <xsl:otherwise>
-              <xsl:value-of select="parent::option/long[not(@xml:lang)]/text()"/>
-            </xsl:otherwise>
-          </xsl:choose>
-          <xsl:value-of select="$infoTrans"/>
-        </long>
-      </locale>
-    </xsl:for-each>
-  </xsl:template>
-
-  <!-- generates the additional info for the long option description -->
-  <xsl:template name="printInfo">
-    <xsl:variable name="info">
-      <xsl:text> (</xsl:text>
-      <xsl:choose>
-        <xsl:when test="contains('int,float',@type) and not(desc/value/text())">
-          <xsl:value-of select="min/text()"/> - <xsl:value-of select="max/text()"/>
-        </xsl:when>
-	<xsl:when test="@type='int' and desc/value/text()">
-          <xsl:call-template name="printIntDescList"/>
-        </xsl:when>
-        <xsl:when test="@type = 'match'">
-          <xsl:text>match</xsl:text>
-        </xsl:when>
-      </xsl:choose>
-      <xsl:text>)</xsl:text>
-    </xsl:variable>
-    <xsl:if test="not(contains($info,' ()'))">
-      <xsl:value-of select="$info"/>
-    </xsl:if>
-  </xsl:template>
-
-  <!-- generates a list of int descriptions -->
-  <xsl:template name="printIntDescList">
-    <xsl:variable name="list">
-      <xsl:for-each select="desc">
-          <xsl:value-of select="value/text()"/>
-	  <xsl:text> = </xsl:text>
-	  <xsl:value-of select="name/text()"/>
-          <xsl:text>, </xsl:text>
-      </xsl:for-each>
-    </xsl:variable>
-    <xsl:value-of select="substring($list,1,string-length($list) - 2)"/>
-  </xsl:template>
-
-   <!-- generates the additional info for the long option description -->
-  <xsl:template name="printInfoTrans">
-    <xsl:param name="language"/>
-    <xsl:variable name="info">
-      <xsl:text> (</xsl:text>
-      <xsl:choose>
-        <xsl:when test="contains('int,float',parent::option/@type) and not(parent::option/desc/value/text())">
-          <xsl:value-of select="parent::option/min/text()"/> - <xsl:value-of select="parent::option/max/text()"/>
-        </xsl:when>
-	<xsl:when test="parent::option/@type='int' and parent::option/desc/value/text()">
-          <xsl:call-template name="printIntDescListTrans">
-            <xsl:with-param name="language" select="$language"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:when test="parent::option/@type = 'match'">
-          <xsl:text>match</xsl:text>
-        </xsl:when>
-      </xsl:choose>
-      <xsl:text>)</xsl:text>
-    </xsl:variable>
-    <xsl:if test="not(contains($info,' ()'))">
-      <xsl:value-of select="$info"/>
-    </xsl:if>
-  </xsl:template>
-  
-  <!-- generates a list of int descriptions -->
-  <xsl:template name="printIntDescListTrans">
-    <xsl:param name="language"/>
-    <xsl:variable name="list">
-      <xsl:for-each select="parent::option/desc">
-          <xsl:value-of select="value/text()"/>
-          <xsl:text> = </xsl:text>
-          <xsl:choose>
-            <xsl:when test="name[lang($language)]/text()">
-              <xsl:value-of select="name[lang($language)]/text()"/>
-            </xsl:when>
-            <xsl:otherwise>
-              <xsl:value-of select="name[not(@xml:lang)]/text()"/>
-            </xsl:otherwise>
-          </xsl:choose>
-          <xsl:text>, </xsl:text>
-      </xsl:for-each>
-    </xsl:variable>
-    <xsl:value-of select="substring($list,1,string-length($list) - 2)"/>
-  </xsl:template>
-
-  <!-- generates a default number out of the min and max values -->
-  <xsl:template name="printNumFallback">
-    <xsl:choose>
-      <xsl:when test="max/text() and min/text()">
-        <xsl:value-of select="(max/text() + min/text()) div 2"/>
-      </xsl:when>
-      <xsl:when test="max/text() and not(min/text())">
-        <xsl:value-of select="max/text()"/>
-      </xsl:when>
-      <xsl:when test="not(max/text()) and min/text()">
-        <xsl:value-of select="min/text()"/>
-      </xsl:when>
-      <xsl:otherwise>0</xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <!-- generates a list of values -->
-  <xsl:template name="printValueList">
-    <xsl:variable name="list">
-      <xsl:for-each select="default/value">
-        <xsl:value-of select="text()"/>
-        <xsl:text>,</xsl:text>
-      </xsl:for-each>
-    </xsl:variable>
-    <xsl:value-of select="substring($list,1,string-length($list) - 1)"/>
-  </xsl:template>
-
-  <!-- generates a list of color string values -->
-  <xsl:template name="printColorList">
-    <xsl:variable name="list">
-      <xsl:for-each select="default/value">
-        <xsl:call-template name="printColor"/>
-        <xsl:text>,</xsl:text>
-      </xsl:for-each>
-    </xsl:variable>
-    <xsl:value-of select="substring($list,1,string-length($list) - 1)"/>
-  </xsl:template>
-
-  <!--
-    generates the #00aabbcc color value out of the compiz
-    metadata color description
-  -->
-  <xsl:template name="printColor">
-    <xsl:variable name="red">
-      <xsl:call-template name="getHexNum">
-        <xsl:with-param name="value" select="red/text()"/>
-      </xsl:call-template>
-    </xsl:variable>
-    <xsl:variable name="green">
-      <xsl:call-template name="getHexNum">
-        <xsl:with-param name="value" select="green/text()"/>
-      </xsl:call-template>
-    </xsl:variable>
-    <xsl:variable name="blue">
-      <xsl:call-template name="getHexNum">
-        <xsl:with-param name="value" select="blue/text()"/>
-      </xsl:call-template>
-    </xsl:variable>
-    <xsl:variable name="alpha">
-      <xsl:choose>
-        <xsl:when test="alpha/text()">
-	  <xsl:call-template name="getHexNum">
-            <xsl:with-param name="value" select="alpha/text()"/>
-	  </xsl:call-template>
-        </xsl:when>
-	<xsl:otherwise>
-          <xsl:text>ff</xsl:text>
-	</xsl:otherwise>
-      </xsl:choose>
-    </xsl:variable>
-    <xsl:value-of select="concat('#',concat($red,concat($green,concat($blue,$alpha))))"/>
-  </xsl:template>
-
-  <!--
-    converts a decimal number in the range of 0-65535 or
-    a hex number in the range of 0x0000 - 0xffff to a hex number in the
-    range of 00 - ff
-  -->
-  <xsl:template name="getHexNum">
-    <xsl:param name="value"/>
-    <xsl:choose>
-      <xsl:when test="starts-with($value,'0x')">
-        <xsl:variable name="number">
-          <xsl:text>0000</xsl:text>
-          <xsl:value-of select="substring-after($value,'0x')"/>
-        </xsl:variable>
-        <xsl:value-of select="substring(concat('000',$number),string-length($number),2)"/>
-      </xsl:when>
-      <xsl:when test="string-length($value)">
-        <xsl:variable name="number">
-          <xsl:call-template name="toHex">
-            <xsl:with-param name="decimalNumber" select="$value"/>
-          </xsl:call-template>
-        </xsl:variable>
-        <xsl:value-of select="substring(concat('000',$number),string-length($number),2)"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>00</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <!-- generates a list of selected edges -->
-  <xsl:template name="printEdgeList">
-    <xsl:variable name="list">
-      <xsl:for-each select="default/edge">
-        <xsl:value-of select="@name"/>
-        <xsl:text> | </xsl:text>
-      </xsl:for-each>
-    </xsl:variable>
-    <xsl:value-of select="substring($list,1,string-length($list) - 3)"/>
-  </xsl:template>
-
-  <!-- prints the key path for an option -->
-  <xsl:template name="printKey">
-    <xsl:value-of select="$appName"/>
-    <xsl:choose>
-      <xsl:when test="ancestor::plugin">
-        <xsl:text>/plugins/</xsl:text>
-        <xsl:value-of select="ancestor::plugin/@name"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>/general</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-    <xsl:choose>
-      <xsl:when test="ancestor::screen">
-        <xsl:text>/screen0/options/</xsl:text>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>/allscreens/options/</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-    <xsl:value-of select="@name"/>
-  </xsl:template>
-
-  <!-- converts a decimal number to a hex number -->
-  <xsl:variable name="hexDigits" select="'0123456789abcdef'" />
-
-  <xsl:template name="toHex">
-    <xsl:param name="decimalNumber" />
-    <xsl:if test="$decimalNumber >= 16">
-      <xsl:call-template name="toHex">
-        <xsl:with-param name="decimalNumber" select="floor($decimalNumber div 16)" />
-      </xsl:call-template>
-    </xsl:if>
-    <xsl:value-of select="substring($hexDigits, ($decimalNumber mod 16) + 1, 1)" />
-  </xsl:template>
-
-</xsl:stylesheet>
diff -uprN compiz-0.8.8-orig/plugins/dbus.c compiz-0.8.8/plugins/dbus.c
--- compiz-0.8.8-orig/plugins/dbus.c	2010-05-21 13:18:14.000000000 +0200
+++ compiz-0.8.8/plugins/dbus.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,2596 +0,0 @@
-/*
- * Copyright © 2006 Novell, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Novell, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- * Novell, Inc. makes no representations about the suitability of this
- * software for any purpose. It is provided "as is" without express or
- * implied warranty.
- *
- * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
- * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: David Reveman <davidr@novell.com>
- */
-
-#include <string.h>
-#include <stdlib.h>
-#include <poll.h>
-
-#define DBUS_API_SUBJECT_TO_CHANGE
-#include <dbus/dbus.h>
-#include <libxml/xmlwriter.h>
-
-#include <compiz-core.h>
-
-static CompMetadata dbusMetadata;
-
-#define COMPIZ_DBUS_SERVICE_NAME	            "org.freedesktop.compiz"
-#define COMPIZ_DBUS_INTERFACE			    "org.freedesktop.compiz"
-#define COMPIZ_DBUS_ROOT_PATH			    "/org/freedesktop/compiz"
-
-#define COMPIZ_DBUS_ACTIVATE_MEMBER_NAME            "activate"
-#define COMPIZ_DBUS_DEACTIVATE_MEMBER_NAME          "deactivate"
-#define COMPIZ_DBUS_SET_MEMBER_NAME                 "set"
-#define COMPIZ_DBUS_GET_MEMBER_NAME                 "get"
-#define COMPIZ_DBUS_GET_METADATA_MEMBER_NAME	    "getMetadata"
-#define COMPIZ_DBUS_LIST_MEMBER_NAME		    "list"
-#define COMPIZ_DBUS_GET_PLUGINS_MEMBER_NAME	    "getPlugins"
-#define COMPIZ_DBUS_GET_PLUGIN_METADATA_MEMBER_NAME "getPluginMetadata"
-
-#define COMPIZ_DBUS_CHANGED_SIGNAL_NAME		    "changed"
-#define COMPIZ_DBUS_PLUGINS_CHANGED_SIGNAL_NAME	    "pluginsChanged"
-
-#define DBUS_FILE_WATCH_CURRENT 0
-#define DBUS_FILE_WATCH_PLUGIN  1
-#define DBUS_FILE_WATCH_HOME    2
-#define DBUS_FILE_WATCH_NUM     3
-
-static int corePrivateIndex;
-static int displayPrivateIndex;
-
-typedef struct _DbusCore {
-    DBusConnection    *connection;
-    CompWatchFdHandle watchFdHandle;
-
-    CompFileWatchHandle fileWatch[DBUS_FILE_WATCH_NUM];
-
-    InitPluginForObjectProc initPluginForObject;
-    SetOptionForPluginProc  setOptionForPlugin;
-} DbusCore;
-
-typedef struct _DbusDisplay {
-    char         **pluginList;
-    unsigned int nPlugins;
-} DbusDisplay;
-
-static DBusHandlerResult dbusHandleMessage (DBusConnection *,
-					    DBusMessage *,
-					    void *);
-
-static DBusObjectPathVTable dbusMessagesVTable = {
-    NULL, dbusHandleMessage, /* handler function */
-    NULL, NULL, NULL, NULL
-};
-
-#define GET_DBUS_CORE(c)				    \
-    ((DbusCore *) (c)->base.privates[corePrivateIndex].ptr)
-
-#define DBUS_CORE(c)		     \
-    DbusCore *dc = GET_DBUS_CORE (c)
-
-#define GET_DBUS_DISPLAY(d)                                       \
-    ((DbusDisplay *) (d)->base.privates[displayPrivateIndex].ptr)
-
-#define DBUS_DISPLAY(d)                    \
-    DbusDisplay *dd = GET_DBUS_DISPLAY (d)
-
-static void
-dbusUpdatePluginList (CompDisplay *d)
-{
-    CompListValue *pl;
-    unsigned int  i;
-
-    DBUS_DISPLAY (d);
-
-    pl = &d->opt[COMP_DISPLAY_OPTION_ACTIVE_PLUGINS].value.list;
-
-    for (i = 0; i < dd->nPlugins; i++)
-	free (dd->pluginList[i]);
-
-    dd->pluginList = realloc (dd->pluginList, pl->nValue * sizeof (char *));
-    if (!dd->pluginList)
-    {
-	dd->nPlugins = 0;
-	return;
-    }
-
-    for (i = 0; i < pl->nValue; i++)
-	dd->pluginList[i] = strdup (pl->value[i].s);
-
-    dd->nPlugins = pl->nValue;
-}
-
-static CompOption *
-dbusGetOptionsFromPath (char	     **path,
-			CompObject   **returnObject,
-			CompMetadata **returnMetadata,
-			int	     *nOption)
-{
-    CompPlugin *p;
-    CompObject *object;
-
-    object = compObjectFind (&core.base, COMP_OBJECT_TYPE_DISPLAY, NULL);
-    if (!object)
-	return NULL;
-
-    if (strncmp (path[1], "screen", 6) == 0)
-    {
-	object = compObjectFind (object, COMP_OBJECT_TYPE_SCREEN,
-				 path[1] + 6);
-	if (!object)
-	    return NULL;
-    }
-    else if (strcmp (path[1], "allscreens") != 0)
-    {
-	return NULL;
-    }
-
-    if (returnObject)
-	*returnObject = object;
-
-    for (p = getPlugins (); p; p = p->next)
-	if (strcmp (p->vTable->name, path[0]) == 0)
-	    break;
-
-    if (returnMetadata)
-    {
-	if (p && p->vTable->getMetadata)
-	    *returnMetadata = (*p->vTable->getMetadata) (p);
-	else
-	    *returnMetadata = NULL;
-    }
-
-    if (!p)
-	return NULL;
-
-    if (!p->vTable->getObjectOptions)
-	return NULL;
-
-    return (*p->vTable->getObjectOptions) (p, object, nOption);
-}
-
-/* functions to create introspection XML */
-static void
-dbusIntrospectStartInterface (xmlTextWriterPtr writer)
-{
-    xmlTextWriterStartElement (writer, BAD_CAST "interface");
-    xmlTextWriterWriteAttribute (writer, BAD_CAST "name",
-				 BAD_CAST COMPIZ_DBUS_SERVICE_NAME);
-}
-
-static void
-dbusIntrospectEndInterface (xmlTextWriterPtr writer)
-{
-    xmlTextWriterEndElement (writer);
-}
-
-static void
-dbusIntrospectAddArgument (xmlTextWriterPtr writer,
-			   char             *type,
-			   char             *direction)
-{
-    xmlTextWriterStartElement (writer, BAD_CAST "arg");
-    xmlTextWriterWriteAttribute (writer, BAD_CAST "type", BAD_CAST type);
-    xmlTextWriterWriteAttribute (writer, BAD_CAST "direction",
-				 BAD_CAST direction);
-    xmlTextWriterEndElement (writer);
-}
-
-static void
-dbusIntrospectAddMethod (xmlTextWriterPtr writer,
-			 char             *name,
-			 int              nArgs,
-			 ...)
-{
-    va_list var_args;
-    char *type, *direction;
-
-    xmlTextWriterStartElement (writer, BAD_CAST "method");
-    xmlTextWriterWriteAttribute (writer, BAD_CAST "name", BAD_CAST name);
-
-    va_start (var_args, nArgs);
-    while (nArgs)
-    {
-	type = va_arg (var_args, char *);
-	direction = va_arg (var_args, char *);
-	dbusIntrospectAddArgument (writer, type, direction);
-	nArgs--;
-    }
-    va_end (var_args);
-
-    xmlTextWriterEndElement (writer);
-}
-
-static void
-dbusIntrospectAddSignal (xmlTextWriterPtr writer,
-			 char             *name,
-			 int              nArgs,
-			 ...)
-{
-    va_list var_args;
-    char *type;
-
-    xmlTextWriterStartElement (writer, BAD_CAST "signal");
-    xmlTextWriterWriteAttribute (writer, BAD_CAST "name", BAD_CAST name);
-
-    va_start (var_args, nArgs);
-    while (nArgs)
-    {
-	type = va_arg (var_args, char *);
-	dbusIntrospectAddArgument (writer, type, "out");
-	nArgs--;
-    }
-    va_end (var_args);
-
-    xmlTextWriterEndElement (writer);
-}
-
-static void
-dbusIntrospectAddNode (xmlTextWriterPtr writer,
-		       char             *name)
-{
-    xmlTextWriterStartElement (writer, BAD_CAST "node");
-    xmlTextWriterWriteAttribute (writer, BAD_CAST "name", BAD_CAST name);
-    xmlTextWriterEndElement (writer);
-}
-
-static void
-dbusIntrospectStartRoot (xmlTextWriterPtr writer)
-{
-    xmlTextWriterStartElement (writer, BAD_CAST "node");
-
-    xmlTextWriterStartElement (writer, BAD_CAST "interface");
-    xmlTextWriterWriteAttribute (writer, BAD_CAST "name",
-				 BAD_CAST "org.freedesktop.DBus.Introspectable");
-
-    dbusIntrospectAddMethod (writer, "Introspect", 1, "s", "out");
-
-    xmlTextWriterEndElement (writer);
-}
-
-static void
-dbusIntrospectEndRoot (xmlTextWriterPtr writer)
-{
-    xmlTextWriterEndDocument (writer);
-}
-
-/* introspection handlers */
-static Bool
-dbusHandleRootIntrospectMessage (DBusConnection *connection,
-				 DBusMessage    *message)
-{
-    char **plugins, **pluginName;
-    int nPlugins;
-
-    xmlTextWriterPtr writer;
-    xmlBufferPtr buf;
-
-    buf = xmlBufferCreate ();
-    writer = xmlNewTextWriterMemory (buf, 0);
-
-    dbusIntrospectStartRoot (writer);
-    dbusIntrospectStartInterface (writer);
-
-    dbusIntrospectAddMethod (writer, COMPIZ_DBUS_GET_PLUGINS_MEMBER_NAME, 1,
-			     "as", "out");
-    dbusIntrospectAddMethod (writer,
-			     COMPIZ_DBUS_GET_PLUGIN_METADATA_MEMBER_NAME, 7,
-			     "s", "in", "s", "out", "s", "out", "s", "out",
-			     "b", "out", "as", "out", "as", "out");
-    dbusIntrospectAddSignal (writer,
-			     COMPIZ_DBUS_PLUGINS_CHANGED_SIGNAL_NAME, 0);
-
-    dbusIntrospectEndInterface (writer);
-
-    plugins = availablePlugins (&nPlugins);
-    if (plugins)
-    {
-	pluginName = plugins;
-
-	while (nPlugins--)
-	{
-	    dbusIntrospectAddNode (writer, *pluginName);
-	    free (*pluginName);
-	    pluginName++;
-	}
-
-	free (plugins);
-    }
-    else
-    {
-	xmlFreeTextWriter (writer);
-	xmlBufferFree (buf);
-	return FALSE;
-    }
-
-    dbusIntrospectEndRoot (writer);
-
-    xmlFreeTextWriter (writer);
-
-    DBusMessage *reply = dbus_message_new_method_return (message);
-    if (!reply)
-    {
-	xmlBufferFree (buf);
-	return FALSE;
-    }
-
-    DBusMessageIter args;
-    dbus_message_iter_init_append (reply, &args);
-
-    if (!dbus_message_iter_append_basic (&args, DBUS_TYPE_STRING,
-					 &buf->content))
-    {
-	xmlBufferFree (buf);
-	return FALSE;
-    }
-
-    xmlBufferFree (buf);
-
-    if (!dbus_connection_send (connection, reply, NULL))
-    {
-	return FALSE;
-    }
-
-    dbus_connection_flush (connection);
-    dbus_message_unref (reply);
-
-    return TRUE;
-}
-
-/* MULTIDPYERROR: only works with one or less displays present */
-static Bool
-dbusHandlePluginIntrospectMessage (DBusConnection *connection,
-				   DBusMessage    *message,
-				   char           **path)
-{
-    CompDisplay *d;
-    CompScreen *s;
-    char screenName[256];
-
-    xmlTextWriterPtr writer;
-    xmlBufferPtr buf;
-
-    buf = xmlBufferCreate ();
-    writer = xmlNewTextWriterMemory (buf, 0);
-
-    dbusIntrospectStartRoot (writer);
-
-    for (d = core.displays; d; d = d->next)
-    {
-	dbusIntrospectAddNode (writer, "allscreens");
-
-	for (s = d->screens; s; s = s->next)
-	{
-	    sprintf (screenName, "screen%d", s->screenNum);
-	    dbusIntrospectAddNode (writer, screenName);
-	}
-    }
-
-    dbusIntrospectEndRoot (writer);
-
-    xmlFreeTextWriter (writer);
-
-    DBusMessage *reply = dbus_message_new_method_return (message);
-    if (!reply)
-    {
-	xmlBufferFree (buf);
-	return FALSE;
-    }
-
-    DBusMessageIter args;
-    dbus_message_iter_init_append (reply, &args);
-
-    if (!dbus_message_iter_append_basic (&args, DBUS_TYPE_STRING,
-					 &buf->content))
-    {
-	xmlBufferFree (buf);
-	return FALSE;
-    }
-
-    xmlBufferFree (buf);
-
-    if (!dbus_connection_send (connection, reply, NULL))
-    {
-	return FALSE;
-    }
-
-    dbus_connection_flush (connection);
-    dbus_message_unref (reply);
-
-    return TRUE;
-}
-
-static Bool
-dbusHandleScreenIntrospectMessage (DBusConnection *connection,
-				   DBusMessage    *message,
-				   char           **path)
-{
-    CompOption *option = NULL;
-    int nOptions;
-
-    xmlTextWriterPtr writer;
-    xmlBufferPtr buf;
-
-    buf = xmlBufferCreate ();
-    writer = xmlNewTextWriterMemory (buf, 0);
-
-    dbusIntrospectStartRoot (writer);
-    dbusIntrospectStartInterface (writer);
-
-    dbusIntrospectAddMethod (writer, COMPIZ_DBUS_LIST_MEMBER_NAME, 1,
-			     "as", "out");
-
-    dbusIntrospectEndInterface (writer);
-
-    option = dbusGetOptionsFromPath (path, NULL, NULL, &nOptions);
-    if (option)
-    {
-	while (nOptions--)
-	{
-	    dbusIntrospectAddNode (writer, option->name);
-	    option++;
-	}
-    }
-
-    dbusIntrospectEndRoot (writer);
-
-    xmlFreeTextWriter (writer);
-
-    DBusMessage *reply = dbus_message_new_method_return (message);
-    if (!reply)
-    {
-	xmlBufferFree (buf);
-	return FALSE;
-    }
-
-    DBusMessageIter args;
-    dbus_message_iter_init_append (reply, &args);
-
-    if (!dbus_message_iter_append_basic (&args, DBUS_TYPE_STRING,
-					 &buf->content))
-    {
-	xmlBufferFree (buf);
-	return FALSE;
-    }
-
-    xmlBufferFree (buf);
-
-    if (!dbus_connection_send (connection, reply, NULL))
-    {
-	return FALSE;
-    }
-
-    dbus_connection_flush (connection);
-    dbus_message_unref (reply);
-
-    return TRUE;
-}
-
-static Bool
-dbusHandleOptionIntrospectMessage (DBusConnection *connection,
-				   DBusMessage    *message,
-				   char           **path)
-{
-    CompOption       *option;
-    int              nOptions;
-    CompOptionType   restrictionType;
-    Bool             metadataHandled;
-    char             type[3];
-    xmlTextWriterPtr writer;
-    xmlBufferPtr     buf;
-    Bool             isList = FALSE;
-
-    buf = xmlBufferCreate ();
-    writer = xmlNewTextWriterMemory (buf, 0);
-
-    dbusIntrospectStartRoot (writer);
-    dbusIntrospectStartInterface (writer);
-
-    option = dbusGetOptionsFromPath (path, NULL, NULL, &nOptions);
-    if (!option)
-    {
-	xmlFreeTextWriter (writer);
-	xmlBufferFree (buf);
-	return FALSE;
-    }
-
-    while (nOptions--)
-    {
-	if (strcmp (option->name, path[2]) == 0)
-	{
-	    restrictionType = option->type;
-	    if (restrictionType == CompOptionTypeList)
-	    {
-		restrictionType = option->value.list.type;
-		isList = TRUE;
-	    }
-
-	    metadataHandled = FALSE;
-	    switch (restrictionType)
-	    {
-	    case CompOptionTypeInt:
-		if (isList)
-		    strcpy (type, "ai");
-		else
-		    strcpy (type, "i");
-
-		dbusIntrospectAddMethod (writer,
-					 COMPIZ_DBUS_GET_METADATA_MEMBER_NAME,
-					 6, "s", "out", "s", "out",
-					 "b", "out", "s", "out",
-					 "i", "out", "i", "out");
-		metadataHandled = TRUE;
-		break;
-	    case CompOptionTypeFloat:
-		if (isList)
-		    strcpy (type, "ad");
-		else
-		    strcpy (type, "d");
-
-		dbusIntrospectAddMethod (writer,
-					 COMPIZ_DBUS_GET_METADATA_MEMBER_NAME,
-					 7, "s", "out", "s", "out",
-					 "b", "out", "s", "out",
-					 "d", "out", "d", "out",
-					 "d", "out");
-		metadataHandled = TRUE;
-		break;
-	    case CompOptionTypeString:
-		if (isList)
-		    strcpy (type, "as");
-		else
-		    strcpy (type, "s");
-
-		dbusIntrospectAddMethod (writer,
-					 COMPIZ_DBUS_GET_METADATA_MEMBER_NAME,
-					 5, "s", "out", "s", "out",
-					 "b", "out", "s", "out",
-					 "as", "out");
-		metadataHandled = TRUE;
-		break;
-	    case CompOptionTypeBool:
-	    case CompOptionTypeBell:
-		if (isList)
-		    strcpy (type, "ab");
-		else
-		    strcpy (type, "b");
-
-		break;
-	    case CompOptionTypeColor:
-	    case CompOptionTypeKey:
-	    case CompOptionTypeButton:
-	    case CompOptionTypeEdge:
-	    case CompOptionTypeMatch:
-		if (isList)
-		    strcpy (type, "as");
-		else
-		    strcpy (type, "s");
-		break;
-	    default:
-		continue;
-	    }
-
-	    dbusIntrospectAddMethod (writer,
-				     COMPIZ_DBUS_GET_MEMBER_NAME, 1,
-				     type, "out");
-	    dbusIntrospectAddMethod (writer,
-				     COMPIZ_DBUS_SET_MEMBER_NAME, 1,
-				     type, "in");
-	    dbusIntrospectAddSignal (writer,
-				     COMPIZ_DBUS_CHANGED_SIGNAL_NAME, 1,
-				     type, "out");
-
-	    if (!metadataHandled)
-		dbusIntrospectAddMethod (writer,
-					 COMPIZ_DBUS_GET_METADATA_MEMBER_NAME,
-					 4, "s", "out", "s", "out",
-					 "b", "out", "s", "out");
-	    break;
-	}
-
-	option++;
-    }
-
-    dbusIntrospectEndInterface (writer);
-    dbusIntrospectEndRoot (writer);
-
-    xmlFreeTextWriter (writer);
-
-    DBusMessage *reply = dbus_message_new_method_return (message);
-    if (!reply)
-    {
-	xmlBufferFree (buf);
-	return FALSE;
-    }
-
-    DBusMessageIter args;
-    dbus_message_iter_init_append (reply, &args);
-
-    if (!dbus_message_iter_append_basic (&args, DBUS_TYPE_STRING,
-					 &buf->content))
-    {
-	xmlBufferFree (buf);
-	return FALSE;
-    }
-
-    xmlBufferFree (buf);
-
-    if (!dbus_connection_send (connection, reply, NULL))
-    {
-	return FALSE;
-    }
-
-    dbus_connection_flush (connection);
-    dbus_message_unref (reply);
-
-    return TRUE;
-}
-
-
-/*
- * Activate can be used to trigger any existing action. Arguments
- * should be a pair of { string, bool|int32|double|string }.
- *
- * Example (rotate to face 1):
- *
- * dbus-send --type=method_call --dest=org.freedesktop.compiz \
- * /org/freedesktop/compiz/rotate/allscreens/rotate_to	      \
- * org.freedesktop.compiz.activate			      \
- * string:'root'					      \
- * int32:`xwininfo -root | grep id: | awk '{ print $4 }'`     \
- * string:'face' int32:1
- *
- *
- * You can also call the terminate function
- *
- * Example unfold and refold cube:
- * dbus-send --type=method_call --dest=org.freedesktop.compiz \
- * /org/freedesktop/compiz/cube/allscreens/unfold	      \
- * org.freedesktop.compiz.activate			      \
- * string:'root'					      \
- * int32:`xwininfo -root | grep id: | awk '{ print $4 }'`
- *
- * dbus-send --type=method_call --dest=org.freedesktop.compiz \
- * /org/freedesktop/compiz/cube/allscreens/unfold	      \
- * org.freedesktop.compiz.deactivate			      \
- * string:'root'					      \
- * int32:`xwininfo -root | grep id: | awk '{ print $4 }'`
- *
- */
-static Bool
-dbusHandleActionMessage (DBusConnection *connection,
-			 DBusMessage    *message,
-			 char	        **path,
-			 Bool           activate)
-{
-    CompObject *object;
-    CompOption *option;
-    int	       nOption;
-
-    option = dbusGetOptionsFromPath (path, &object, NULL, &nOption);
-    if (!option)
-	return FALSE;
-
-    while (nOption--)
-    {
-	if (strcmp (option->name, path[2]) == 0)
-	{
-	    CompOption	    *argument = NULL;
-	    int		    i, nArgument = 0;
-	    DBusMessageIter iter;
-
-	    if (!isActionOption (option))
-		return FALSE;
-
-	    while (object && object->type != COMP_OBJECT_TYPE_DISPLAY)
-		object = object->parent;
-
-	    if (!object)
-		return FALSE;
-
-	    if (activate)
-	    {
-		if (!option->value.action.initiate)
-		    return FALSE;
-	    }
-	    else
-	    {
-		if (!option->value.action.terminate)
-		    return FALSE;
-	    }
-
-	    if (dbus_message_iter_init (message, &iter))
-	    {
-		CompOptionValue value;
-		CompOptionType  type = 0;
-		char		*name;
-		Bool		hasValue;
-
-		do
-		{
-		    name     = NULL;
-		    hasValue = FALSE;
-
-		    while (!name)
-		    {
-			switch (dbus_message_iter_get_arg_type (&iter)) {
-			case DBUS_TYPE_STRING:
-			    dbus_message_iter_get_basic (&iter, &name);
-			default:
-			    break;
-			}
-
-			if (!dbus_message_iter_next (&iter))
-			    break;
-		    }
-
-		    while (!hasValue)
-		    {
-			double tmp;
-
-			switch (dbus_message_iter_get_arg_type (&iter)) {
-			case DBUS_TYPE_BOOLEAN:
-			    hasValue = TRUE;
-			    type     = CompOptionTypeBool;
-
-			    dbus_message_iter_get_basic (&iter, &value.b);
-			    break;
-			case DBUS_TYPE_INT32:
-			    hasValue = TRUE;
-			    type     = CompOptionTypeInt;
-
-			    dbus_message_iter_get_basic (&iter, &value.i);
-			    break;
-			case DBUS_TYPE_DOUBLE:
-			    hasValue = TRUE;
-			    type     = CompOptionTypeFloat;
-
-			    dbus_message_iter_get_basic (&iter, &tmp);
-
-			    value.f = tmp;
-			    break;
-			case DBUS_TYPE_STRING:
-			    hasValue = TRUE;
-
-			    /* XXX: use match option type if name is "match" */
-			    if (name && strcmp (name, "match") == 0)
-			    {
-				char *s;
-
-				type = CompOptionTypeMatch;
-
-				dbus_message_iter_get_basic (&iter, &s);
-
-				matchInit (&value.match);
-				matchAddFromString (&value.match, s);
-			    }
-			    else
-			    {
-				type = CompOptionTypeString;
-
-				dbus_message_iter_get_basic (&iter, &value.s);
-			    }
-			default:
-			    break;
-			}
-
-			if (!dbus_message_iter_next (&iter))
-			    break;
-		    }
-
-		    if (name && hasValue)
-		    {
-			CompOption *a;
-
-			a = realloc (argument,
-				     sizeof (CompOption) * (nArgument + 1));
-			if (a)
-			{
-			    argument = a;
-
-			    argument[nArgument].name  = name;
-			    argument[nArgument].type  = type;
-			    argument[nArgument].value = value;
-
-			    nArgument++;
-			}
-		    }
-		} while (dbus_message_iter_has_next (&iter));
-	    }
-
-	    if (activate)
-	    {
-		(*option->value.action.initiate) (GET_CORE_DISPLAY (object),
-						  &option->value.action,
-						  0,
-						  argument, nArgument);
-	    }
-	    else
-	    {
-		(*option->value.action.terminate) (GET_CORE_DISPLAY (object),
-						   &option->value.action,
-						   0,
-						   argument, nArgument);
-	    }
-
-	    for (i = 0; i < nArgument; i++)
-		if (argument[i].type == CompOptionTypeMatch)
-		    matchFini (&argument[i].value.match);
-
-	    if (argument)
-		free (argument);
-
-	    if (!dbus_message_get_no_reply (message))
-	    {
-		DBusMessage *reply;
-
-		reply = dbus_message_new_method_return (message);
-
-		dbus_connection_send (connection, reply, NULL);
-		dbus_connection_flush (connection);
-
-		dbus_message_unref (reply);
-	    }
-
-	    return TRUE;
-	}
-
-	option++;
-    }
-
-    return FALSE;
-}
-
-static Bool
-dbusTryGetValueWithType (DBusMessageIter *iter,
-			 int		 type,
-			 void		 *value)
-{
-    if (dbus_message_iter_get_arg_type (iter) == type)
-    {
-	dbus_message_iter_get_basic (iter, value);
-
-	return TRUE;
-    }
-
-    return FALSE;
-}
-
-static Bool
-dbusGetOptionValue (CompObject	    *object,
-		    DBusMessageIter *iter,
-		    CompOptionType  type,
-		    CompOptionValue *value)
-{
-    double d;
-    char   *s;
-
-    switch (type) {
-    case CompOptionTypeBool:
-	return dbusTryGetValueWithType (iter,
-					DBUS_TYPE_BOOLEAN,
-					&value->b);
-	break;
-    case CompOptionTypeInt:
-	return dbusTryGetValueWithType (iter,
-					DBUS_TYPE_INT32,
-					&value->i);
-	break;
-    case CompOptionTypeFloat:
-	if (dbusTryGetValueWithType (iter,
-				     DBUS_TYPE_DOUBLE,
-				     &d))
-	{
-	    value->f = d;
-	    return TRUE;
-	}
-	break;
-    case CompOptionTypeString:
-	return dbusTryGetValueWithType (iter,
-					DBUS_TYPE_STRING,
-					&value->s);
-	break;
-    case CompOptionTypeColor:
-	if (dbusTryGetValueWithType (iter,
-				     DBUS_TYPE_STRING,
-				     &s))
-	{
-	    if (stringToColor (s, value->c))
-		return TRUE;
-	}
-	break;
-    case CompOptionTypeKey:
-	if (dbusTryGetValueWithType (iter,
-				     DBUS_TYPE_STRING,
-				     &s))
-	{
-	    while (object && object->type != COMP_OBJECT_TYPE_DISPLAY)
-		object = object->parent;
-
-	    if (!object)
-		return FALSE;
-
-	    stringToKeyAction (GET_CORE_DISPLAY (object), s, &value->action);
-	    return TRUE;
-	}
-	break;
-    case CompOptionTypeButton:
-	if (dbusTryGetValueWithType (iter,
-				     DBUS_TYPE_STRING,
-				     &s))
-	{
-	    while (object && object->type != COMP_OBJECT_TYPE_DISPLAY)
-		object = object->parent;
-
-	    if (!object)
-		return FALSE;
-
-	    stringToButtonAction (GET_CORE_DISPLAY (object),
-				  s, &value->action);
-	    return TRUE;
-	}
-	break;
-    case CompOptionTypeEdge:
-	if (dbusTryGetValueWithType (iter,
-				     DBUS_TYPE_STRING,
-				     &s))
-	{
-	    value->action.edgeMask = stringToEdgeMask (s);
-	    return TRUE;
-	}
-	break;
-    case CompOptionTypeBell:
-	return dbusTryGetValueWithType (iter,
-					DBUS_TYPE_BOOLEAN,
-					&value->action.bell);
-	break;
-    case CompOptionTypeMatch:
-	if (dbusTryGetValueWithType (iter,
-				     DBUS_TYPE_STRING,
-				     &s))
-	{
-	    matchAddFromString (&value->match, s);
-	    return TRUE;
-	}
-
-    default:
-	break;
-    }
-
-    return FALSE;
-}
-
-/*
- * 'Set' can be used to change any existing option. Argument
- * should be the new value for the option.
- *
- * Example (will set command0 option to firefox):
- *
- * dbus-send --type=method_call --dest=org.freedesktop.compiz \
- * /org/freedesktop/compiz/core/allscreens/command0	      \
- * org.freedesktop.compiz.set				      \
- * string:'firefox'
- *
- * List and action options can be changed using more than one
- * argument.
- *
- * Example (will set active_plugins option to
- * [dbus,decoration,place]):
- *
- * dbus-send --type=method_call --dest=org.freedesktop.compiz \
- * /org/freedesktop/compiz/core/allscreens/active_plugins     \
- * org.freedesktop.compiz.set				      \
- * array:string:'dbus','decoration','place'
- *
- * Example (will set run_command0 option to trigger on key
- * binding <Control><Alt>Return and not trigger on any button
- * bindings, screen edges or bell notifications):
- *
- * dbus-send --type=method_call --dest=org.freedesktop.compiz \
- * /org/freedesktop/compiz/core/allscreens/run_command0	      \
- * org.freedesktop.compiz.set				      \
- * string:'<Control><Alt>Return'			      \
- * string:'Disabled'					      \
- * boolean:'false'					      \
- * string:''						      \
- * int32:'0'
- */
-static Bool
-dbusHandleSetOptionMessage (DBusConnection *connection,
-			    DBusMessage    *message,
-			    char	   **path)
-{
-    CompObject *object;
-    CompOption *option;
-    int	       nOption;
-
-    option = dbusGetOptionsFromPath (path, &object, NULL, &nOption);
-    if (!option)
-	return FALSE;
-
-    while (nOption--)
-    {
-	if (strcmp (option->name, path[2]) == 0)
-	{
-	    DBusMessageIter iter, aiter;
-	    CompOptionValue value, tmpValue;
-	    Bool	    status = FALSE;
-
-	    memset (&value, 0, sizeof (value));
-
-	    if (option->type == CompOptionTypeList)
-	    {
-		if (dbus_message_iter_init (message, &iter) &&
-		    dbus_message_iter_get_arg_type (&iter) == DBUS_TYPE_ARRAY)
-		{
-		    dbus_message_iter_recurse (&iter, &aiter);
-
-		    do
-		    {
-			memset (&tmpValue, 0, sizeof (tmpValue));
-
-			if (dbusGetOptionValue (object,
-						&aiter,
-						option->value.list.type,
-						&tmpValue))
-			{
-			    CompOptionValue *v;
-
-			    v = realloc (value.list.value,
-					 sizeof (CompOptionValue) *
-					 (value.list.nValue + 1));
-			    if (v)
-			    {
-				v[value.list.nValue++] = tmpValue;
-				value.list.value = v;
-			    }
-			}
-		    } while (dbus_message_iter_next (&aiter));
-
-		    status = TRUE;
-		}
-	    }
-	    else if (dbus_message_iter_init (message, &iter))
-	    {
-		status = dbusGetOptionValue (object, &iter, option->type,
-					     &value);
-	    }
-
-	    if (status)
-	    {
-		(*core.setOptionForPlugin) (object,
-					    path[0],
-					    option->name,
-					    &value);
-
-		if (!dbus_message_get_no_reply (message))
-		{
-		    DBusMessage *reply;
-
-		    reply = dbus_message_new_method_return (message);
-
-		    dbus_connection_send (connection, reply, NULL);
-		    dbus_connection_flush (connection);
-
-		    dbus_message_unref (reply);
-		}
-
-		return TRUE;
-	    }
-	    else
-	    {
-		return FALSE;
-	    }
-	}
-
-	option++;
-    }
-
-    return FALSE;
-}
-
-static void
-dbusAppendSimpleOptionValue (CompObject      *object,
-			     DBusMessage     *message,
-			     CompOptionType  type,
-			     CompOptionValue *value)
-{
-    double d;
-    char   *s;
-
-    switch (type) {
-    case CompOptionTypeBool:
-	dbus_message_append_args (message,
-				  DBUS_TYPE_BOOLEAN, &value->b,
-				  DBUS_TYPE_INVALID);
-	break;
-    case CompOptionTypeInt:
-	dbus_message_append_args (message,
-				  DBUS_TYPE_INT32, &value->i,
-				  DBUS_TYPE_INVALID);
-	break;
-    case CompOptionTypeFloat:
-	d = value->f;
-
-	dbus_message_append_args (message,
-				  DBUS_TYPE_DOUBLE, &d,
-				  DBUS_TYPE_INVALID);
-	break;
-    case CompOptionTypeString:
-	dbus_message_append_args (message,
-				  DBUS_TYPE_STRING, &value->s,
-				  DBUS_TYPE_INVALID);
-	break;
-    case CompOptionTypeColor:
-	s = colorToString (value->c);
-	if (s)
-	{
-	    dbus_message_append_args (message,
-				      DBUS_TYPE_STRING, &s,
-				      DBUS_TYPE_INVALID);
-	    free (s);
-	}
-	break;
-    case CompOptionTypeKey:
-	s = keyActionToString ((CompDisplay *) object, &value->action);
-	if (s)
-	{
-	    dbus_message_append_args (message,
-				      DBUS_TYPE_STRING, &s,
-				      DBUS_TYPE_INVALID);
-	    free (s);
-	}
-	break;
-    case CompOptionTypeButton:
-	s = buttonActionToString ((CompDisplay *) object, &value->action);
-	if (s)
-	{
-	    dbus_message_append_args (message,
-				      DBUS_TYPE_STRING, &s,
-				      DBUS_TYPE_INVALID);
-	    free (s);
-	}
-	break;
-    case CompOptionTypeEdge:
-	s = edgeMaskToString (value->action.edgeMask);
-	if (s)
-	{
-	    dbus_message_append_args (message,
-				      DBUS_TYPE_STRING, &s,
-				      DBUS_TYPE_INVALID);
-	    free (s);
-	}
-	break;
-    case CompOptionTypeBell:
-	dbus_message_append_args (message,
-				  DBUS_TYPE_BOOLEAN, &value->action.bell,
-				  DBUS_TYPE_INVALID);
-	break;
-    case CompOptionTypeMatch:
-	s = matchToString (&value->match);
-	if (s)
-	{
-	    dbus_message_append_args (message,
-				      DBUS_TYPE_STRING, &s,
-				      DBUS_TYPE_INVALID);
-	    free (s);
-	}
-    default:
-	break;
-    }
-}
-
-static void
-dbusAppendListOptionValue (CompObject      *object,
-			   DBusMessage     *message,
-			   CompOptionType  type,
-			   CompOptionValue *value)
-{
-    DBusMessageIter iter;
-    DBusMessageIter listIter;
-    char	    sig[2];
-    char	    *s;
-    int		    i;
-
-    switch (value->list.type) {
-    case CompOptionTypeInt:
-	sig[0] = DBUS_TYPE_INT32;
-	break;
-    case CompOptionTypeFloat:
-	sig[0] = DBUS_TYPE_DOUBLE;
-	break;
-    case CompOptionTypeBool:
-    case CompOptionTypeBell:
-	sig[0] = DBUS_TYPE_BOOLEAN;
-	break;
-    default:
-	sig[0] = DBUS_TYPE_STRING;
-	break;
-    }
-    sig[1] = '\0';
-
-    dbus_message_iter_init_append (message, &iter);
-
-    if (!dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY,
-					   sig, &listIter))
-	return;
-
-    for (i = 0; i < value->list.nValue; i++)
-    {
-	switch (value->list.type) {
-	case CompOptionTypeInt:
-	    dbus_message_iter_append_basic (&listIter,
-					    sig[0],
-					    &value->list.value[i].i);
-	    break;
-	case CompOptionTypeFloat:
-	    dbus_message_iter_append_basic (&listIter,
-					    sig[0],
-					    &value->list.value[i].f);
-	    break;
-	case CompOptionTypeBool:
-	    dbus_message_iter_append_basic (&listIter,
-					    sig[0],
-					    &value->list.value[i].b);
-	    break;
-	case CompOptionTypeString:
-	    dbus_message_iter_append_basic (&listIter,
-					    sig[0],
-					    &value->list.value[i].s);
-	    break;
-	case CompOptionTypeKey:
-	    s = keyActionToString ((CompDisplay *) object,
-				   &value->list.value[i].action);
-	    if (s)
-	    {
-		dbus_message_iter_append_basic (&listIter, sig[0], &s);
-		free (s);
-	    }
-	    break;
-	case CompOptionTypeButton:
-	    s = buttonActionToString ((CompDisplay *) object,
-				      &value->list.value[i].action);
-	    if (s)
-	    {
-		dbus_message_iter_append_basic (&listIter, sig[0], &s);
-		free (s);
-	    }
-	    break;
-	case CompOptionTypeEdge:
-	    s = edgeMaskToString (value->list.value[i].action.edgeMask);
-	    if (s)
-	    {
-		dbus_message_iter_append_basic (&listIter, sig[0], &s);
-		free (s);
-	    }
-	    break;
-	case CompOptionTypeBell:
-	    dbus_message_iter_append_basic (&listIter,
-					    sig[0],
-					    &value->list.value[i].action.bell);
-	    break;
-	case CompOptionTypeMatch:
-	    s = matchToString (&value->list.value[i].match);
-	    if (s)
-	    {
-		dbus_message_iter_append_basic (&listIter, sig[0], &s);
-		free (s);
-	    }
-	    break;
-	case CompOptionTypeColor:
-	    s = colorToString (value->list.value[i].c);
-	    if (s)
-	    {
-		dbus_message_iter_append_basic (&listIter, sig[0], &s);
-		free (s);
-	    }
-	    break;
-	default:
-	    break;
-	}
-    }
-
-    dbus_message_iter_close_container (&iter, &listIter);
-}
-
-static void
-dbusAppendOptionValue (CompObject      *object,
-		       DBusMessage     *message,
-		       CompOptionType  type,
-		       CompOptionValue *value)
-{
-    if (type == CompOptionTypeList)
-    {
-	dbusAppendListOptionValue (object, message, type, value);
-    }
-    else
-    {
-	dbusAppendSimpleOptionValue (object, message, type, value);
-    }
-}
-
-/*
- * 'Get' can be used to retrieve the value of any existing option.
- *
- * Example (will retrieve the current value of command0 option):
- *
- * dbus-send --print-reply --type=method_call	    \
- * --dest=org.freedesktop.compiz		    \
- * /org/freedesktop/compiz/core/allscreens/command0 \
- * org.freedesktop.compiz.get
- */
-static Bool
-dbusHandleGetOptionMessage (DBusConnection *connection,
-			    DBusMessage    *message,
-			    char	   **path)
-{
-    CompObject  *object;
-    CompOption  *option;
-    int	        nOption = 0;
-    DBusMessage *reply = NULL;
-
-    option = dbusGetOptionsFromPath (path, &object, NULL, &nOption);
-
-    while (nOption--)
-    {
-	if (strcmp (option->name, path[2]) == 0)
-	{
-	    reply = dbus_message_new_method_return (message);
-	    dbusAppendOptionValue (object, reply, option->type,
-				   &option->value);
-	    break;
-	}
-
-	option++;
-    }
-
-    if (!reply)
-	reply = dbus_message_new_error (message,
-					DBUS_ERROR_FAILED,
-					"No such option");
-
-    dbus_connection_send (connection, reply, NULL);
-    dbus_connection_flush (connection);
-
-    dbus_message_unref (reply);
-
-    return TRUE;
-}
-
-/*
- * 'List' can be used to retrieve a list of available options.
- *
- * Example:
- *
- * dbus-send --print-reply --type=method_call \
- * --dest=org.freedesktop.compiz	      \
- * /org/freedesktop/compiz/core/allscreens    \
- * org.freedesktop.compiz.list
- */
-static Bool
-dbusHandleListMessage (DBusConnection *connection,
-		       DBusMessage    *message,
-		       char	      **path)
-{
-    CompObject  *object;
-    CompOption  *option;
-    int	        nOption = 0;
-    DBusMessage *reply;
-
-    option = dbusGetOptionsFromPath (path, &object, NULL, &nOption);
-
-    reply = dbus_message_new_method_return (message);
-
-    while (nOption--)
-    {
-	dbus_message_append_args (reply,
-				  DBUS_TYPE_STRING, &option->name,
-				  DBUS_TYPE_INVALID);
-	option++;
-    }
-
-    dbus_connection_send (connection, reply, NULL);
-    dbus_connection_flush (connection);
-
-    dbus_message_unref (reply);
-
-    return TRUE;
-}
-
-/*
- * 'GetMetadata' can be used to retrieve metadata for an option.
- *
- * Example:
- *
- * dbus-send --print-reply --type=method_call		\
- * --dest=org.freedesktop.compiz			\
- * /org/freedesktop/compiz/core/allscreens/run_command0 \
- * org.freedesktop.compiz.getMetadata
- */
-static Bool
-dbusHandleGetMetadataMessage (DBusConnection *connection,
-			      DBusMessage    *message,
-			      char	     **path)
-{
-    CompObject   *object;
-    CompOption   *option;
-    int	         nOption = 0;
-    DBusMessage  *reply = NULL;
-    CompMetadata *m;
-
-    option = dbusGetOptionsFromPath (path, &object, &m, &nOption);
-
-    while (nOption--)
-    {
-	if (strcmp (option->name, path[2]) == 0)
-	{
-	    CompOptionType restrictionType = option->type;
-	    const char	   *type;
-	    char	   *shortDesc = NULL;
-	    char	   *longDesc = NULL;
-	    const char     *blankStr = "";
-
-	    reply = dbus_message_new_method_return (message);
-
-	    type = optionTypeToString (option->type);
-
-	    if (m)
-	    {
-		if (object->type == COMP_OBJECT_TYPE_SCREEN)
-		{
-		    shortDesc = compGetShortScreenOptionDescription (m, option);
-		    longDesc  = compGetLongScreenOptionDescription (m, option);
-		}
-		else
-		{
-		    shortDesc =
-			compGetShortDisplayOptionDescription (m, option);
-		    longDesc  = compGetLongDisplayOptionDescription (m, option);
-		}
-	    }
-
-	    if (shortDesc)
-		dbus_message_append_args (reply,
-					  DBUS_TYPE_STRING, &shortDesc,
-					  DBUS_TYPE_INVALID);
-	    else
-		dbus_message_append_args (reply,
-					  DBUS_TYPE_STRING, &blankStr,
-					  DBUS_TYPE_INVALID);
-
-	    if (longDesc)
-		dbus_message_append_args (reply,
-					  DBUS_TYPE_STRING, &longDesc,
-					  DBUS_TYPE_INVALID);
-	    else
-		dbus_message_append_args (reply,
-					  DBUS_TYPE_STRING, &blankStr,
-					  DBUS_TYPE_INVALID);
-
-	    dbus_message_append_args (reply,
-				      DBUS_TYPE_STRING, &type,
-				      DBUS_TYPE_INVALID);
-
-	    if (shortDesc)
-		free (shortDesc);
-	    if (longDesc)
-		free (longDesc);
-
-	    if (restrictionType == CompOptionTypeList)
-	    {
-		type = optionTypeToString (option->value.list.type);
-		restrictionType = option->value.list.type;
-
-		dbus_message_append_args (reply,
-					  DBUS_TYPE_STRING, &type,
-					  DBUS_TYPE_INVALID);
-	    }
-
-	    switch (restrictionType) {
-	    case CompOptionTypeInt:
-		dbus_message_append_args (reply,
-					  DBUS_TYPE_INT32, &option->rest.i.min,
-					  DBUS_TYPE_INT32, &option->rest.i.max,
-					  DBUS_TYPE_INVALID);
-		break;
-	    case CompOptionTypeFloat: {
-		double min, max, precision;
-
-		min	  = option->rest.f.min;
-		max	  = option->rest.f.max;
-		precision = option->rest.f.precision;
-
-		dbus_message_append_args (reply,
-					  DBUS_TYPE_DOUBLE, &min,
-					  DBUS_TYPE_DOUBLE, &max,
-					  DBUS_TYPE_DOUBLE, &precision,
-					  DBUS_TYPE_INVALID);
-	    } break;
-	    default:
-		break;
-	    }
-	    break;
-	}
-
-	option++;
-    }
-
-    if (!reply)
-	reply = dbus_message_new_error (message,
-					DBUS_ERROR_FAILED,
-					"No such option");
-
-    dbus_connection_send (connection, reply, NULL);
-    dbus_connection_flush (connection);
-
-    dbus_message_unref (reply);
-
-    return TRUE;
-}
-
-/*
- * 'GetPlugins' can be used to retrieve a list of available plugins. There's
- * no guarantee that a plugin in this list can actually be loaded.
- *
- * Example:
- *
- * dbus-send --print-reply --type=method_call \
- * --dest=org.freedesktop.compiz	      \
- * /org/freedesktop/compiz		      \
- * org.freedesktop.compiz.getPlugins
- */
-static Bool
-dbusHandleGetPluginsMessage (DBusConnection *connection,
-			     DBusMessage    *message)
-{
-    DBusMessage *reply;
-    char	**plugins, **p;
-    int		n;
-
-    reply = dbus_message_new_method_return (message);
-
-    plugins = availablePlugins (&n);
-    if (plugins)
-    {
-	p = plugins;
-
-	while (n--)
-	{
-	    dbus_message_append_args (reply,
-				      DBUS_TYPE_STRING, p,
-				      DBUS_TYPE_INVALID);
-	    free (*p);
-
-	    p++;
-	}
-
-	free (plugins);
-    }
-
-    dbus_connection_send (connection, reply, NULL);
-    dbus_connection_flush (connection);
-
-    dbus_message_unref (reply);
-
-    return TRUE;
-}
-
-/*
- * 'GetPluginMetadata' can be used to retrieve metadata for a plugin.
- *
- * Example:
- *
- * dbus-send --print-reply --type=method_call \
- * --dest=org.freedesktop.compiz	      \
- * /org/freedesktop/compiz		      \
- * org.freedesktop.compiz.getPluginMetadata   \
- * string:'png'
- */
-static Bool
-dbusHandleGetPluginMetadataMessage (DBusConnection *connection,
-				    DBusMessage    *message)
-{
-    DBusMessage     *reply;
-    DBusMessageIter iter;
-    char	    *name;
-    CompPlugin	    *p, *loadedPlugin = NULL;
-
-    if (!dbus_message_iter_init (message, &iter))
-	return FALSE;
-
-    if (!dbusTryGetValueWithType (&iter,
-				  DBUS_TYPE_STRING,
-				  &name))
-	return FALSE;
-
-    p = findActivePlugin (name);
-    if (!p)
-	p = loadedPlugin = loadPlugin (name);
-
-    if (p)
-    {
-	Bool	   initializedPlugin = TRUE;
-	char	   *shortDesc = NULL;
-	char	   *longDesc = NULL;
-	const char *blankStr = "";
-
-	reply = dbus_message_new_method_return (message);
-
-	if (loadedPlugin)
-	{
-	    if (!(*p->vTable->init) (p))
-		initializedPlugin = FALSE;
-	}
-
-	if (initializedPlugin && p->vTable->getMetadata)
-	{
-	    CompMetadata *m;
-
-	    m = (*p->vTable->getMetadata) (p);
-	    if (m)
-	    {
-		shortDesc = compGetShortPluginDescription (m);
-		longDesc  = compGetLongPluginDescription (m);
-	    }
-	}
-
-	dbus_message_append_args (reply,
-				  DBUS_TYPE_STRING, &p->vTable->name,
-				  DBUS_TYPE_INVALID);
-
-	if (shortDesc)
-	    dbus_message_append_args (reply,
-				      DBUS_TYPE_STRING, &shortDesc,
-				      DBUS_TYPE_INVALID);
-	else
-	    dbus_message_append_args (reply,
-				      DBUS_TYPE_STRING, &blankStr,
-				      DBUS_TYPE_INVALID);
-
-	if (longDesc)
-	    dbus_message_append_args (reply,
-				      DBUS_TYPE_STRING, &longDesc,
-				      DBUS_TYPE_INVALID);
-	else
-	    dbus_message_append_args (reply,
-				      DBUS_TYPE_STRING, &blankStr,
-				      DBUS_TYPE_INVALID);
-
-	dbus_message_append_args (reply,
-				  DBUS_TYPE_BOOLEAN, &initializedPlugin,
-				  DBUS_TYPE_INVALID);
-
-	if (shortDesc)
-	    free (shortDesc);
-	if (longDesc)
-	    free (longDesc);
-
-	if (loadedPlugin && initializedPlugin)
-	    (*p->vTable->fini) (p);
-    }
-    else
-    {
-	char *str;
-
-	str = malloc (strlen (name) + 256);
-	if (!str)
-	    return FALSE;
-
-	sprintf (str, "Plugin '%s' could not be loaded", name);
-
-	reply = dbus_message_new_error (message,
-					DBUS_ERROR_FAILED,
-					str);
-
-	free (str);
-    }
-
-    if (loadedPlugin)
-	unloadPlugin (loadedPlugin);
-
-    dbus_connection_send (connection, reply, NULL);
-    dbus_connection_flush (connection);
-
-    dbus_message_unref (reply);
-
-    return TRUE;
-}
-
-static DBusHandlerResult
-dbusHandleMessage (DBusConnection *connection,
-		   DBusMessage    *message,
-		   void           *userData)
-{
-    Bool status = FALSE;
-    char **path;
-
-    if (!dbus_message_get_path_decomposed (message, &path))
-	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
-    if (!path[0] || !path[1] || !path[2])
-    {
-	dbus_free_string_array (path);
-	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-    }
-
-    /* root messages */
-    if (!path[3])
-    {
-	if (dbus_message_is_method_call (message,
-					 DBUS_INTERFACE_INTROSPECTABLE,
-					 "Introspect"))
-	{
-	    if (dbusHandleRootIntrospectMessage (connection, message))
-	    {
-		dbus_free_string_array (path);
-		return DBUS_HANDLER_RESULT_HANDLED;
-	    }
-	}
-	else if (dbus_message_is_method_call (message, COMPIZ_DBUS_INTERFACE,
-				 COMPIZ_DBUS_GET_PLUGIN_METADATA_MEMBER_NAME))
-	{
-	    if (dbusHandleGetPluginMetadataMessage (connection, message))
-	    {
-		dbus_free_string_array (path);
-		return DBUS_HANDLER_RESULT_HANDLED;
-	    }
-	}
-	else if (dbus_message_is_method_call (message, COMPIZ_DBUS_INTERFACE,
-					  COMPIZ_DBUS_GET_PLUGINS_MEMBER_NAME))
-	{
-	    if (dbusHandleGetPluginsMessage (connection, message))
-	    {
-		dbus_free_string_array (path);
-		return DBUS_HANDLER_RESULT_HANDLED;
-	    }
-	}
-
-	dbus_free_string_array (path);
-	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-    }
-    /* plugin message */
-    else if (!path[4])
-    {
-	if (dbus_message_is_method_call (message,
-					 DBUS_INTERFACE_INTROSPECTABLE,
-					 "Introspect"))
-	{
-	    if (dbusHandlePluginIntrospectMessage (connection, message,
-						   &path[3]))
-	    {
-		dbus_free_string_array (path);
-		return DBUS_HANDLER_RESULT_HANDLED;
-	    }
-	}
-
-	dbus_free_string_array (path);
-	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-    }
-    /* screen message */
-    else if (!path[5])
-    {
-	if (dbus_message_is_method_call (message,
-					 DBUS_INTERFACE_INTROSPECTABLE,
-					 "Introspect"))
-	{
-	    if (dbusHandleScreenIntrospectMessage (connection, message,
-						   &path[3]))
-	    {
-		dbus_free_string_array (path);
-		return DBUS_HANDLER_RESULT_HANDLED;
-	    }
-	}
-	else if (dbus_message_is_method_call (message, COMPIZ_DBUS_INTERFACE,
-					      COMPIZ_DBUS_LIST_MEMBER_NAME))
-	{
-	    if (dbusHandleListMessage (connection, message, &path[3]))
-	    {
-		dbus_free_string_array (path);
-		return DBUS_HANDLER_RESULT_HANDLED;
-	    }
-	}
-
-	dbus_free_string_array (path);
-	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-    }
-    /* option message */
-    if (dbus_message_is_method_call (message, DBUS_INTERFACE_INTROSPECTABLE,
-				     "Introspect"))
-    {
-	status = dbusHandleOptionIntrospectMessage (connection, message,
-						    &path[3]);
-    }
-    else if (dbus_message_is_method_call (message, COMPIZ_DBUS_INTERFACE,
-					  COMPIZ_DBUS_ACTIVATE_MEMBER_NAME))
-    {
-	status = dbusHandleActionMessage (connection, message, &path[3], TRUE);
-    }
-    else if (dbus_message_is_method_call (message, COMPIZ_DBUS_INTERFACE,
-					  COMPIZ_DBUS_DEACTIVATE_MEMBER_NAME))
-    {
-	status = dbusHandleActionMessage (connection, message, &path[3],
-					  FALSE);
-    }
-    else if (dbus_message_is_method_call (message, COMPIZ_DBUS_INTERFACE,
-					  COMPIZ_DBUS_SET_MEMBER_NAME))
-    {
-	status = dbusHandleSetOptionMessage (connection, message, &path[3]);
-    }
-    else if (dbus_message_is_method_call (message, COMPIZ_DBUS_INTERFACE,
-					  COMPIZ_DBUS_GET_MEMBER_NAME))
-    {
-	status = dbusHandleGetOptionMessage (connection, message, &path[3]);
-    }
-    else if (dbus_message_is_method_call (message, COMPIZ_DBUS_INTERFACE,
-					  COMPIZ_DBUS_GET_METADATA_MEMBER_NAME))
-    {
-	status = dbusHandleGetMetadataMessage (connection, message, &path[3]);
-    }
-
-    dbus_free_string_array (path);
-
-    if (status)
-	return DBUS_HANDLER_RESULT_HANDLED;
-
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-static Bool
-dbusProcessMessages (void *data)
-{
-    DBusDispatchStatus status;
-
-    DBUS_CORE (&core);
-
-    do
-    {
-	dbus_connection_read_write_dispatch (dc->connection, 0);
-	status = dbus_connection_get_dispatch_status (dc->connection);
-    }
-    while (status == DBUS_DISPATCH_DATA_REMAINS);
-
-    return TRUE;
-}
-
-static void
-dbusSendChangeSignalForOption (CompObject *object,
-			       CompOption *o,
-			       const char *plugin)
-{
-    DBusMessage *signal;
-    char	*name, path[256];
-
-    DBUS_CORE (&core);
-
-    if (!o)
-	return;
-
-    name = compObjectName (object);
-    if (name)
-    {
-	sprintf (path, "%s/%s/%s%s/%s", COMPIZ_DBUS_ROOT_PATH,
-		 plugin, compObjectTypeName (object->type), name, o->name);
-
-	free (name);
-    }
-    else
-	sprintf (path, "%s/%s/%s/%s", COMPIZ_DBUS_ROOT_PATH,
-		 plugin, compObjectTypeName (object->type), o->name);
-
-    signal = dbus_message_new_signal (path,
-				      COMPIZ_DBUS_SERVICE_NAME,
-				      COMPIZ_DBUS_CHANGED_SIGNAL_NAME);
-
-    dbusAppendOptionValue (object, signal, o->type, &o->value);
-
-    dbus_connection_send (dc->connection, signal, NULL);
-    dbus_connection_flush (dc->connection);
-
-    dbus_message_unref (signal);
-}
-
-static Bool
-dbusGetPathDecomposed (char *data,
-		       char ***path,
-		       int  *count)
-{
-    char **retval;
-    char *temp;
-    char *token;
-    int nComponents;
-    int i;
-
-    nComponents = 0;
-    if (strlen (data) > 1)
-    {
-	i = 0;
-	while (i < strlen (data))
-	{
-            if (data[i] == '/')
-		nComponents += 1;
-	    ++i;
-	}
-    }
-
-    retval = malloc (sizeof (char*) * (nComponents + 1));
-
-    if (nComponents == 0)
-    {
-	retval[0] = malloc (sizeof (char));
-	retval[0][0] = '\0';
-	*path  = retval;
-	*count = 1;
-
-	return TRUE;
-    }
-
-    temp = strdup (data);
-
-    i = 0;
-    token = strtok (temp, "/");
-    while (token != NULL)
-    {
-	retval[i] = strdup (token);
-	token = strtok (NULL, "/");
-	i++;
-    }
-    retval[i] = malloc (sizeof (char));
-    retval[i][0] = '\0';
-
-    free (temp);
-
-    *path  = retval;
-    *count = i + 1;
-
-    return TRUE;
-}
-
-static void
-dbusFreePathDecomposed (char **path,
-			int  count)
-{
-    int i;
-
-    for (i = 0; i < count; i++)
-	free (path[i]);
-
-    free (path);
-}
-
-/* dbus registration */
-
-static Bool
-dbusRegisterOptions (DBusConnection *connection,
-		     char           *screenPath)
-{
-    CompOption *option = NULL;
-    int        nOptions;
-    char       objectPath[256];
-    char       **path;
-    int        count;
-
-    dbusGetPathDecomposed (screenPath, &path, &count);
-
-    option = dbusGetOptionsFromPath (&path[3], NULL, NULL, &nOptions);
-
-    if (!option) {
-	dbusFreePathDecomposed (path, count);
-	return FALSE;
-    }
-
-    while (nOptions--)
-    {
-	snprintf (objectPath, 256, "%s/%s", screenPath, option->name);
-
-	dbus_connection_register_object_path (connection, objectPath,
-					      &dbusMessagesVTable, 0);
-	option++;
-    }
-
-    dbusFreePathDecomposed (path, count);
-
-    return TRUE;
-}
-
-static Bool
-dbusUnregisterOptions (DBusConnection *connection,
-		       char           *screenPath)
-{
-    CompOption *option = NULL;
-    int        nOptions;
-    char       objectPath[256];
-    char       **path;
-    int        count;
-
-    dbusGetPathDecomposed (screenPath, &path, &count);
-
-    option = dbusGetOptionsFromPath (&path[3], NULL, NULL, &nOptions);
-
-    dbusFreePathDecomposed (path, count);
-
-    if (!option)
-	return FALSE;
-
-    while (nOptions--)
-    {
-	snprintf (objectPath, 256, "%s/%s", screenPath, option->name);
-
-	dbus_connection_unregister_object_path (connection, objectPath);
-	option++;
-    }
-
-    return TRUE;
-}
-
-static void
-dbusRegisterPluginForDisplay (DBusConnection *connection,
-			      CompDisplay    *d,
-			      char           *pluginName)
-{
-    char       objectPath[256];
-
-    /* register plugin root path */
-    snprintf (objectPath, 256, "%s/%s", COMPIZ_DBUS_ROOT_PATH, pluginName);
-    dbus_connection_register_object_path (connection, objectPath,
-					  &dbusMessagesVTable, d);
-
-    /* register plugin/screen path */
-    snprintf (objectPath, 256, "%s/%s/%s", COMPIZ_DBUS_ROOT_PATH,
-	      pluginName, "allscreens");
-    dbus_connection_register_object_path (connection, objectPath,
-					  &dbusMessagesVTable, d);
-}
-
-static void
-dbusRegisterPluginForScreen (DBusConnection *connection,
-			     CompScreen     *s,
-			     char           *pluginName)
-{
-    char       objectPath[256];
-
-    /* register plugin/screen path */
-    snprintf (objectPath, 256, "%s/%s/screen%d", COMPIZ_DBUS_ROOT_PATH,
-	      pluginName, s->screenNum);
-    dbus_connection_register_object_path (connection, objectPath,
-					  &dbusMessagesVTable, s->display);
-}
-
-static void
-dbusRegisterPluginsForDisplay (DBusConnection *connection,
-			       CompDisplay    *d)
-{
-    unsigned int i;
-    char         path[256];
-
-    DBUS_DISPLAY (d);
-
-    for (i = 0; i < dd->nPlugins; i++)
-    {
-	snprintf (path, 256, "%s/%s/allscreens",
-		  COMPIZ_DBUS_ROOT_PATH, dd->pluginList[i]);
-
-	dbusRegisterPluginForDisplay (connection, d, dd->pluginList[i]);
-	dbusRegisterOptions (connection, path);
-    }
-}
-
-static void
-dbusRegisterPluginsForScreen (DBusConnection *connection,
-			      CompScreen    *s)
-{
-    unsigned int i;
-    char         path[256];
-
-    DBUS_DISPLAY (s->display);
-
-    for (i = 0; i < dd->nPlugins; i++)
-    {
-	snprintf (path, 256, "%s/%s/screen%d",
-		  COMPIZ_DBUS_ROOT_PATH, dd->pluginList[i], s->screenNum);
-	dbusRegisterPluginForScreen (connection, s, dd->pluginList[i]);
-	dbusRegisterOptions (connection, path);
-    }
-}
-
-static void
-dbusUnregisterPluginForDisplay (DBusConnection *connection,
-			        CompDisplay    *d,
-			        char           *pluginName)
-{
-    char objectPath[256];
-
-    snprintf (objectPath, 256, "%s/%s/%s", COMPIZ_DBUS_ROOT_PATH,
-	      pluginName, "allscreens");
-
-    dbusUnregisterOptions (connection, objectPath);
-    dbus_connection_unregister_object_path (connection, objectPath);
-
-    snprintf (objectPath, 256, "%s/%s", COMPIZ_DBUS_ROOT_PATH, pluginName);
-    dbus_connection_unregister_object_path (connection, objectPath);
-}
-
-static void
-dbusUnregisterPluginsForDisplay (DBusConnection *connection,
-			         CompDisplay    *d)
-{
-    unsigned int i;
-
-    DBUS_DISPLAY (d);
-
-    for (i = 0; i < dd->nPlugins; i++)
-	dbusUnregisterPluginForDisplay (connection, d, dd->pluginList[i]);
-}
-
-static void
-dbusUnregisterPluginForScreen (DBusConnection *connection,
-			       CompScreen     *s,
-			       char           *pluginName)
-{
-    char objectPath[256];
-
-    snprintf (objectPath, 256, "%s/%s/screen%d", COMPIZ_DBUS_ROOT_PATH,
-	      pluginName, s->screenNum);
-
-    dbusUnregisterOptions (connection, objectPath);
-    dbus_connection_unregister_object_path (connection, objectPath);
-}
-
-static void
-dbusUnregisterPluginsForScreen (DBusConnection *connection,
-			        CompScreen     *s)
-{
-    unsigned int i;
-
-    DBUS_DISPLAY (s->display);
-
-    for (i = 0; i < dd->nPlugins; i++)
-	dbusUnregisterPluginForScreen (connection, s, dd->pluginList[i]);
-}
-
-static CompBool
-dbusInitPluginForDisplay (CompPlugin  *p,
-			  CompDisplay *d)
-{
-    char objectPath[256];
-
-    DBUS_CORE (&core);
-
-    snprintf (objectPath, 256, "%s/%s/%s", COMPIZ_DBUS_ROOT_PATH,
-	      p->vTable->name, "allscreens");
-    dbusRegisterOptions (dc->connection, objectPath);
-
-    return TRUE;
-}
-
-static Bool
-dbusInitPluginForScreen (CompPlugin *p,
-			 CompScreen *s)
-{
-    char objectPath[256];
-
-    DBUS_CORE (&core);
-
-    snprintf (objectPath, 256, "%s/%s/screen%d", COMPIZ_DBUS_ROOT_PATH,
-	      p->vTable->name, s->screenNum);
-    dbusRegisterOptions (dc->connection, objectPath);
-
-    return TRUE;
-}
-
-static CompBool
-dbusInitPluginForObject (CompPlugin *p,
-			 CompObject *o)
-{
-    CompBool status;
-
-    DBUS_CORE (&core);
-
-    UNWRAP (dc, &core, initPluginForObject);
-    status = (*core.initPluginForObject) (p, o);
-    WRAP (dc, &core, initPluginForObject, dbusInitPluginForObject);
-
-    if (status && p->vTable->getObjectOptions)
-    {
-	static InitPluginForObjectProc dispTab[] = {
-	    (InitPluginForObjectProc) 0, /* InitPluginForCore */
-	    (InitPluginForObjectProc) dbusInitPluginForDisplay,
-	    (InitPluginForObjectProc) dbusInitPluginForScreen
-	};
-
-	RETURN_DISPATCH (o, dispTab, ARRAY_SIZE (dispTab), TRUE, (p, o));
-    }
-
-    return status;
-}
-
-static CompBool
-dbusSetOptionForPlugin (CompObject      *object,
-			const char      *plugin,
-			const char      *name,
-			CompOptionValue *value)
-{
-    Bool status;
-
-    DBUS_CORE (&core);
-
-    UNWRAP (dc, &core, setOptionForPlugin);
-    status = (*core.setOptionForPlugin) (object, plugin, name, value);
-    WRAP (dc, &core, setOptionForPlugin, dbusSetOptionForPlugin);
-
-    if (status)
-    {
-	CompPlugin *p;
-
-	p = findActivePlugin (plugin);
-	if (p && p->vTable->getObjectOptions)
-	{
-	    CompOption *option;
-	    int	       nOption;
-
-	    option = (*p->vTable->getObjectOptions) (p, object, &nOption);
-	    dbusSendChangeSignalForOption (object,
-					   compFindOption (option,
-							   nOption,
-							   name, 0),
-					   p->vTable->name);
-
-	    if (object->type == COMP_OBJECT_TYPE_DISPLAY &&
-		strcmp (p->vTable->name, "core") == 0 &&
-		strcmp (name, "active_plugins") == 0)
-	    {
-		CompScreen *s;
-
-		CORE_DISPLAY (object);
-
-		dbusUnregisterPluginsForDisplay (dc->connection, d);
-		for (s = d->screens; s; s = s->next)
-		    dbusUnregisterPluginsForScreen (dc->connection, s);
-
-		dbusUpdatePluginList (d);
-
-		dbusRegisterPluginsForDisplay (dc->connection, d);
-		for (s = d->screens; s; s = s->next)
-		    dbusRegisterPluginsForScreen (dc->connection, s);
-	    }
-	}
-    }
-
-    return status;
-}
-
-static void
-dbusSendPluginsChangedSignal (const char *name,
-			      void	 *closure)
-{
-    DBusMessage *signal;
-
-    DBUS_CORE (&core);
-
-    signal = dbus_message_new_signal (COMPIZ_DBUS_ROOT_PATH,
-				      COMPIZ_DBUS_SERVICE_NAME,
-				      COMPIZ_DBUS_PLUGINS_CHANGED_SIGNAL_NAME);
-
-    dbus_connection_send (dc->connection, signal, NULL);
-    dbus_connection_flush (dc->connection);
-
-    dbus_message_unref (signal);
-}
-
-static Bool
-dbusInitCore (CompPlugin *p,
-	      CompCore   *c)
-{
-    DbusCore    *dc;
-    DBusError   error;
-    dbus_bool_t status;
-    int		fd, ret, mask;
-    char        *home, *plugindir;
-
-    if (!checkPluginABI ("core", CORE_ABIVERSION))
-	return FALSE;
-
-    dc = malloc (sizeof (DbusCore));
-    if (!dc)
-	return FALSE;
-
-    displayPrivateIndex = allocateDisplayPrivateIndex ();
-    if (displayPrivateIndex < 0)
-    {
-	free (dc);
-	return FALSE;
-    }
-
-    dbus_error_init (&error);
-
-    dc->connection = dbus_bus_get (DBUS_BUS_SESSION, &error);
-    if (dbus_error_is_set (&error))
-    {
-	compLogMessage ("dbus", CompLogLevelError,
-			"dbus_bus_get error: %s", error.message);
-
-	dbus_error_free (&error);
-	free (dc);
-
-	return FALSE;
-    }
-
-    ret = dbus_bus_request_name (dc->connection,
-				 COMPIZ_DBUS_SERVICE_NAME,
-				 DBUS_NAME_FLAG_REPLACE_EXISTING |
-				 DBUS_NAME_FLAG_ALLOW_REPLACEMENT,
-				 &error);
-
-    if (dbus_error_is_set (&error))
-    {
-	compLogMessage ("dbus", CompLogLevelError,
-			"dbus_bus_request_name error: %s", error.message);
-
-	/* dbus_connection_unref (dc->connection); */
-	dbus_error_free (&error);
-	free (dc);
-
-	return FALSE;
-    }
-
-    dbus_error_free (&error);
-
-    if (ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
-    {
-	compLogMessage ("dbus", CompLogLevelError,
-			"dbus_bus_request_name reply is not primary owner");
-
-	/* dbus_connection_unref (dc->connection); */
-	free (dc);
-
-	return FALSE;
-    }
-
-    status = dbus_connection_get_unix_fd (dc->connection, &fd);
-    if (!status)
-    {
-	compLogMessage ("dbus", CompLogLevelError,
-			"dbus_connection_get_unix_fd failed");
-
-	/* dbus_connection_unref (dc->connection); */
-	free (dc);
-
-	return FALSE;
-    }
-
-    dc->watchFdHandle = compAddWatchFd (fd,
-					POLLIN | POLLPRI | POLLHUP | POLLERR,
-					dbusProcessMessages,
-					0);
-
-    mask = NOTIFY_CREATE_MASK | NOTIFY_DELETE_MASK | NOTIFY_MOVE_MASK;
-
-    dc->fileWatch[DBUS_FILE_WATCH_CURRENT] =
-	addFileWatch (".",
-		      mask,
-		      dbusSendPluginsChangedSignal,
-		      0);
-    dc->fileWatch[DBUS_FILE_WATCH_PLUGIN]  =
-	addFileWatch (PLUGINDIR,
-		      mask,
-		      dbusSendPluginsChangedSignal,
-		      0);
-    dc->fileWatch[DBUS_FILE_WATCH_HOME] = 0;
-
-    home = getenv ("HOME");
-    if (home)
-    {
-	plugindir = malloc (strlen (home) + strlen (HOME_PLUGINDIR) + 3);
-	if (plugindir)
-	{
-	    sprintf (plugindir, "%s/%s", home, HOME_PLUGINDIR);
-
-	    dc->fileWatch[DBUS_FILE_WATCH_HOME]  =
-		addFileWatch (plugindir,
-			      mask,
-			      dbusSendPluginsChangedSignal,
-			      0);
-
-	    free (plugindir);
-	}
-    }
-
-    WRAP (dc, c, initPluginForObject, dbusInitPluginForObject);
-    WRAP (dc, c, setOptionForPlugin, dbusSetOptionForPlugin);
-
-    c->base.privates[corePrivateIndex].ptr = dc;
-
-    /* register the objects */
-    dbus_connection_register_object_path (dc->connection,
-					  COMPIZ_DBUS_ROOT_PATH,
-					  &dbusMessagesVTable, 0);
-
-    return TRUE;
-}
-
-static void
-dbusFiniCore (CompPlugin *p,
-	      CompCore   *c)
-{
-    int i;
-
-    DBUS_CORE (c);
-
-    for (i = 0; i < DBUS_FILE_WATCH_NUM; i++)
-	removeFileWatch (dc->fileWatch[i]);
-
-    freeDisplayPrivateIndex (displayPrivateIndex);
-
-    compRemoveWatchFd (dc->watchFdHandle);
-
-    dbus_bus_release_name (dc->connection, COMPIZ_DBUS_SERVICE_NAME, NULL);
-
-    /*
-      can't unref the connection returned by dbus_bus_get as it's
-      shared and we can't know if it's closed or not.
-
-      dbus_connection_unref (dc->connection);
-    */
-
-    UNWRAP (dc, c, initPluginForObject);
-    UNWRAP (dc, c, setOptionForPlugin);
-
-    free (dc);
-}
-
-static Bool
-dbusInitDisplay (CompPlugin  *p,
-		 CompDisplay *d)
-{
-    DbusDisplay *dd;
-
-    DBUS_CORE (&core);
-
-    dd = malloc (sizeof (DbusDisplay));
-    if (!dd)
-	return FALSE;
-
-    dd->pluginList = NULL;
-    dd->nPlugins   = 0;
-
-    d->base.privates[displayPrivateIndex].ptr = dd;
-
-    dbusUpdatePluginList (d);
-    dbusRegisterPluginsForDisplay (dc->connection, d);
-
-    return TRUE;
-}
-
-static void
-dbusFiniDisplay (CompPlugin  *p,
-		 CompDisplay *d)
-{
-    DBUS_CORE (&core);
-    DBUS_DISPLAY (d);
-
-    dbusUnregisterPluginsForDisplay (dc->connection, d);
-
-    if (dd->pluginList)
-    {
-	unsigned int i;
-
-	for (i = 0; i < dd->nPlugins; i++)
-	    free (dd->pluginList[i]);
-	free (dd->pluginList);
-    }
-
-    free (dd);
-}
-
-static Bool
-dbusInitScreen (CompPlugin *p,
-		CompScreen *s)
-{
-    DBUS_CORE (&core);
-
-    dbusRegisterPluginsForScreen (dc->connection, s);
-
-    return TRUE;
-}
-
-static void
-dbusFiniScreen (CompPlugin *p,
-		CompScreen *s)
-{
-    DBUS_CORE (&core);
-
-    dbusUnregisterPluginsForScreen (dc->connection, s);
-}
-
-static CompBool
-dbusInitObject (CompPlugin *p,
-		CompObject *o)
-{
-    static InitPluginObjectProc dispTab[] = {
-	(InitPluginObjectProc) dbusInitCore,
-	(InitPluginObjectProc) dbusInitDisplay,
-	(InitPluginObjectProc) dbusInitScreen
-    };
-
-    RETURN_DISPATCH (o, dispTab, ARRAY_SIZE (dispTab), TRUE, (p, o));
-}
-
-static void
-dbusFiniObject (CompPlugin *p,
-		CompObject *o)
-{
-    static FiniPluginObjectProc dispTab[] = {
-	(FiniPluginObjectProc) dbusFiniCore,
-	(FiniPluginObjectProc) dbusFiniDisplay,
-	(FiniPluginObjectProc) dbusFiniScreen
-    };
-
-    DISPATCH (o, dispTab, ARRAY_SIZE (dispTab), (p, o));
-}
-
-static Bool
-dbusInit (CompPlugin *p)
-{
-    if (!compInitPluginMetadataFromInfo (&dbusMetadata, p->vTable->name,
-					 0, 0, 0, 0))
-	return FALSE;
-
-    corePrivateIndex = allocateCorePrivateIndex ();
-    if (corePrivateIndex < 0)
-    {
-	compFiniMetadata (&dbusMetadata);
-	return FALSE;
-    }
-
-    return TRUE;
-}
-
-static void
-dbusFini (CompPlugin *p)
-{
-    freeCorePrivateIndex (corePrivateIndex);
-    compFiniMetadata (&dbusMetadata);
-}
-
-static CompMetadata *
-dbusGetMetadata (CompPlugin *plugin)
-{
-    return &dbusMetadata;
-}
-
-CompPluginVTable dbusVTable = {
-    "dbus",
-    dbusGetMetadata,
-    dbusInit,
-    dbusFini,
-    dbusInitObject,
-    dbusFiniObject,
-    0, /* GetObjectOptions */
-    0  /* SetObjectOption */
-};
-
-CompPluginVTable *
-getCompPluginInfo20070830 (void)
-{
-    return &dbusVTable;
-}
diff -uprN compiz-0.8.8-orig/plugins/glib.c compiz-0.8.8/plugins/glib.c
--- compiz-0.8.8-orig/plugins/glib.c	2013-04-19 13:37:07.040679000 +0200
+++ compiz-0.8.8/plugins/glib.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,315 +0,0 @@
-/*
- * Copyright © 2007 Novell, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Novell, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- * Novell, Inc. makes no representations about the suitability of this
- * software for any purpose. It is provided "as is" without express or
- * implied warranty.
- *
- * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
- * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: David Reveman <davidr@novell.com>
- */
-
-#include <glib.h>
-
-#include <compiz-core.h>
-
-static CompMetadata glibMetadata;
-
-static int displayPrivateIndex;
-
-typedef struct _GLibWatch {
-    CompWatchFdHandle handle;
-    int		      index;
-    CompDisplay	      *display;
-} GLibWatch;
-
-typedef struct _MateConfDisplay {
-    HandleEventProc   handleEvent;
-    CompTimeoutHandle timeoutHandle;
-    CompTimeoutHandle wakeupTimeoutHandle;
-    gint	      maxPriority;
-    GPollFD	      *fds;
-    gint	      fdsSize;
-    gint	      nFds;
-    GLibWatch	      *watch;
-    Atom	      notifyAtom;
-} GLibDisplay;
-
-#define GET_GLIB_DISPLAY(d)					  \
-    ((GLibDisplay *) (d)->base.privates[displayPrivateIndex].ptr)
-
-#define GLIB_DISPLAY(d)			   \
-    GLibDisplay *gd = GET_GLIB_DISPLAY (d)
-
-static void
-glibDispatch (CompDisplay  *display,
-	      GMainContext *context)
-{
-    int i;
-
-    GLIB_DISPLAY (display);
-
-    g_main_context_check (context, gd->maxPriority, gd->fds, gd->nFds);
-    g_main_context_dispatch (context);
-
-    for (i = 0; i < gd->nFds; i++)
-	compRemoveWatchFd (gd->watch[i].handle);
-}
-
-static void
-glibPrepare (CompDisplay  *display,
-	     GMainContext *context);
-
-static Bool
-glibDispatchAndPrepare (void *closure)
-{
-    CompDisplay  *display = (CompDisplay *) closure;
-    GLIB_DISPLAY (display);
-    GMainContext *context = g_main_context_default ();
-
-    glibDispatch (display, context);
-    glibPrepare (display, context);
-
-    gd->wakeupTimeoutHandle = 0;
-
-    return FALSE;
-}
-
-static void
-glibWakeup (CompDisplay *display)
-{
-    GLIB_DISPLAY (display);
-
-    if (gd->timeoutHandle)
-    {
-	compRemoveTimeout (gd->timeoutHandle);
-	gd->timeoutHandle = 0;
-
-	gd->wakeupTimeoutHandle =
-	    compAddTimeout (0, 0, glibDispatchAndPrepare, (void *) display);
-    }
-}
-
-static Bool
-glibCollectEvents (void *closure)
-{
-    GLibWatch   *watch = (GLibWatch *) closure;
-    CompDisplay *display = watch->display;
-
-    GLIB_DISPLAY (display);
-
-    gd->fds[watch->index].revents |= compWatchFdEvents (watch->handle);
-
-    glibWakeup (display);
-
-    return TRUE;
-}
-
-static void
-glibPrepare (CompDisplay  *display,
-	     GMainContext *context)
-{
-    int nFds = 0;
-    int timeout = -1;
-    int i;
-
-    GLIB_DISPLAY (display);
-
-    g_main_context_prepare (context, &gd->maxPriority);
-
-    do
-    {
-	if (nFds > gd->fdsSize)
-	{
-	    if (gd->fds)
-		free (gd->fds);
-
-	    gd->fds = malloc ((sizeof (GPollFD) + sizeof (GLibWatch)) * nFds);
-	    if (!gd->fds)
-	    {
-		nFds = 0;
-		break;
-	    }
-
-	    gd->watch   = (GLibWatch *) (gd->fds + nFds);
-	    gd->fdsSize = nFds;
-	}
-
-	nFds = g_main_context_query (context,
-				     gd->maxPriority,
-				     &timeout,
-				     gd->fds,
-				     gd->fdsSize);
-    } while (nFds > gd->fdsSize);
-
-    if (timeout < 0)
-	timeout = INT_MAX;
-
-    for (i = 0; i < nFds; i++)
-    {
-	gd->watch[i].display = display;
-	gd->watch[i].index   = i;
-	gd->watch[i].handle  = compAddWatchFd (gd->fds[i].fd,
-					       gd->fds[i].events,
-					       glibCollectEvents,
-					       &gd->watch[i]);
-    }
-
-    gd->nFds	      = nFds;
-    gd->timeoutHandle =
-	compAddTimeout (timeout, timeout, glibDispatchAndPrepare, display);
-}
-
-static void
-glibHandleEvent (CompDisplay *d,
-		 XEvent      *event)
-{
-    GLIB_DISPLAY (d);
-
-    if (event->type == ClientMessage)
-    {
-	if (event->xclient.message_type == gd->notifyAtom)
-	    glibWakeup (d);
-    }
-
-    UNWRAP (gd, d, handleEvent);
-    (*d->handleEvent) (d, event);
-    WRAP (gd, d, handleEvent, glibHandleEvent);
-}
-
-static Bool
-glibInitDisplay (CompPlugin  *p,
-		 CompDisplay *d)
-{
-    GLibDisplay *gd;
-
-    if (!checkPluginABI ("core", CORE_ABIVERSION))
-	return FALSE;
-
-    gd = malloc (sizeof (GLibDisplay));
-    if (!gd)
-	return FALSE;
-
-    gd->fds	      = NULL;
-    gd->fdsSize	      = 0;
-    gd->timeoutHandle = 0;
-    gd->wakeupTimeoutHandle = 0;
-    gd->notifyAtom    = XInternAtom (d->display, "_COMPIZ_GLIB_NOTIFY", 0);
-
-    WRAP (gd, d, handleEvent, glibHandleEvent);
-
-    d->base.privates[displayPrivateIndex].ptr = gd;
-
-    glibPrepare (d, g_main_context_default ());
-
-    return TRUE;
-}
-
-static void
-glibFiniDisplay (CompPlugin  *p,
-		 CompDisplay *d)
-{
-    GLIB_DISPLAY (d);
-
-    if (gd->timeoutHandle)
-	compRemoveTimeout (gd->timeoutHandle);
-
-    if (gd->wakeupTimeoutHandle)
-	compRemoveTimeout (gd->wakeupTimeoutHandle);
-
-    glibDispatch (d, g_main_context_default ());
-
-    UNWRAP (gd, d, handleEvent);
-
-    if (gd->fds)
-	free (gd->fds);
-
-    free (gd);
-}
-
-static CompBool
-glibInitObject (CompPlugin *p,
-		CompObject *o)
-{
-    static InitPluginObjectProc dispTab[] = {
-	(InitPluginObjectProc) 0, /* InitCore */
-	(InitPluginObjectProc) glibInitDisplay
-    };
-
-    RETURN_DISPATCH (o, dispTab, ARRAY_SIZE (dispTab), TRUE, (p, o));
-}
-
-static void
-glibFiniObject (CompPlugin *p,
-		CompObject *o)
-{
-    static FiniPluginObjectProc dispTab[] = {
-	(FiniPluginObjectProc) 0, /* FiniCore */
-	(FiniPluginObjectProc) glibFiniDisplay
-    };
-
-    DISPATCH (o, dispTab, ARRAY_SIZE (dispTab), (p, o));
-}
-
-static Bool
-glibInit (CompPlugin *p)
-{
-    if (!compInitPluginMetadataFromInfo (&glibMetadata, p->vTable->name,
-					 0, 0, 0, 0))
-	return FALSE;
-
-    displayPrivateIndex = allocateDisplayPrivateIndex ();
-    if (displayPrivateIndex < 0)
-    {
-	compFiniMetadata (&glibMetadata);
-	return FALSE;
-    }
-
-    compAddMetadataFromFile (&glibMetadata, p->vTable->name);
-
-    return TRUE;
-}
-
-static void
-glibFini (CompPlugin *p)
-{
-    freeDisplayPrivateIndex (displayPrivateIndex);
-    compFiniMetadata (&glibMetadata);
-}
-
-static CompMetadata *
-glibGetMetadata (CompPlugin *plugin)
-{
-    return &glibMetadata;
-}
-
-CompPluginVTable glibVTable = {
-    "glib",
-    glibGetMetadata,
-    glibInit,
-    glibFini,
-    glibInitObject,
-    glibFiniObject,
-    0, /* GetObjectOptions */
-    0  /* SetObjectOption */
-};
-
-CompPluginVTable *
-getCompPluginInfo20070830 (void)
-{
-    return &glibVTable;
-}
diff -uprN compiz-0.8.8-orig/plugins/Makefile.am compiz-0.8.8/plugins/Makefile.am
--- compiz-0.8.8-orig/plugins/Makefile.am	2013-04-19 13:37:07.153680000 +0200
+++ compiz-0.8.8/plugins/Makefile.am	2013-04-19 14:03:18.471548312 +0200
@@ -94,27 +94,6 @@ libannotate_la_SOURCES = annotate.c
 libannotate_module = libannotate.la
 endif
 
-if USE_GLIB
-libglib_la_LDFLAGS = -module -avoid-version -no-undefined
-libglib_la_LIBADD = @GLIB_LIBS@
-libglib_la_SOURCES = glib.c
-libglib_module = libglib.la
-endif
-
-if USE_MATECONF
-libmateconf_la_LDFLAGS = -module -avoid-version -no-undefined
-libmateconf_la_LIBADD = @MATECONF_LIBS@
-libmateconf_la_SOURCES = mateconf.c
-libmateconf_module = libmateconf.la
-endif
-
-if DBUS_PLUGIN
-libdbus_la_LDFLAGS = -module -avoid-version -no-undefined
-libdbus_la_LIBADD = @DBUS_LIBS@
-libdbus_la_SOURCES = dbus.c
-libdbus_module = libdbus.la
-endif
-
 if INOTIFY_PLUGIN
 libinotify_la_LDFLAGS = -module -avoid-version -no-undefined
 libinotify_la_SOURCES = inotify.c
@@ -133,9 +112,6 @@ INCLUDES =					\
 	@LIBPNG_CFLAGS@				\
 	@LIBRSVG_CFLAGS@			\
 	@ANNOTATE_CFLAGS@			\
-	@MATECONF_CFLAGS@				\
-	@DBUS_CFLAGS@				\
-	@GLIB_CFLAGS@				\
 	@FUSE_CFLAGS@				\
 	-DFUSE_USE_VERSION=26			\
 	-DALL_LINGUAS="\"@ALL_LINGUAS@\""	\
@@ -150,8 +126,6 @@ INCLUDES =					\
 moduledir = $(plugindir)
 
 module_LTLIBRARIES =		\
-	$(libglib_module)	\
-	$(libmateconf_module)	\
 	libdecoration.la	\
 	libwobbly.la		\
 	libfade.la		\
@@ -163,7 +137,6 @@ module_LTLIBRARIES =		\
 	libmove.la		\
 	libresize.la		\
 	libplace.la             \
-	$(libdbus_module)	\
 	libswitcher.la		\
 	libwater.la		\
 	libscreenshot.la	\
diff -uprN compiz-0.8.8-orig/plugins/mateconf.c compiz-0.8.8/plugins/mateconf.c
--- compiz-0.8.8-orig/plugins/mateconf.c	2013-04-19 13:37:07.042679000 +0200
+++ compiz-0.8.8/plugins/mateconf.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,849 +0,0 @@
-/*
- * Copyright © 2005 Novell, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Novell, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- * Novell, Inc. makes no representations about the suitability of this
- * software for any purpose. It is provided "as is" without express or
- * implied warranty.
- *
- * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
- * NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: David Reveman <davidr@novell.com>
- */
-
-#define _GNU_SOURCE
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include <glib.h>
-#include <glib/gprintf.h>
-#include <mateconf/mateconf-client.h>
-
-#include <compiz-core.h>
-
-static CompMetadata mateconfMetadata;
-
-#define APP_NAME "compiz"
-
-/* From mateconf-internal.h. Bleah. */
-int mateconf_value_compare (const MateConfValue *value_a,
-			 const MateConfValue *value_b);
-
-static int corePrivateIndex;
-
-typedef struct _MateConfCore {
-    MateConfClient *client;
-    guint	cnxn;
-
-    CompTimeoutHandle reloadHandle;
-
-    InitPluginForObjectProc initPluginForObject;
-    SetOptionForPluginProc  setOptionForPlugin;
-} MateConfCore;
-
-#define GET_MATECONF_CORE(c)				     \
-    ((MateConfCore *) (c)->base.privates[corePrivateIndex].ptr)
-
-#define MATECONF_CORE(c)		       \
-    MateConfCore *gc = GET_MATECONF_CORE (c)
-
-
-static gchar *
-mateconfGetKey (CompObject  *object,
-	     const gchar *plugin,
-	     const gchar *option)
-{
-    const gchar *type;
-    gchar	*key, *name, *objectName;
-
-    type = compObjectTypeName (object->type);
-    if (strcmp (type, "display") == 0)
-	type = "allscreens";
-
-    name = compObjectName (object);
-    if (name)
-    {
-	objectName = g_strdup_printf ("%s%s", type, name);
-	free (name);
-    }
-    else
-	objectName = g_strdup (type);
-
-    if (strcmp (plugin, "core") == 0)
-	key = g_strjoin ("/", "/apps", APP_NAME, "general", objectName,
-			 "options", option, NULL);
-    else
-	key = g_strjoin ("/", "/apps", APP_NAME, "plugins", plugin, objectName,
-			 "options", option, NULL);
-
-    g_free (objectName);
-
-    return key;
-}
-
-static MateConfValueType
-mateconfTypeFromCompType (CompOptionType type)
-{
-    switch (type) {
-    case CompOptionTypeBool:
-    case CompOptionTypeBell:
-	return MATECONF_VALUE_BOOL;
-    case CompOptionTypeInt:
-	return MATECONF_VALUE_INT;
-    case CompOptionTypeFloat:
-	return MATECONF_VALUE_FLOAT;
-    case CompOptionTypeString:
-    case CompOptionTypeColor:
-    case CompOptionTypeKey:
-    case CompOptionTypeButton:
-    case CompOptionTypeEdge:
-    case CompOptionTypeMatch:
-	return MATECONF_VALUE_STRING;
-    case CompOptionTypeList:
-	return MATECONF_VALUE_LIST;
-    default:
-	break;
-    }
-
-    return MATECONF_VALUE_INVALID;
-}
-
-static void
-mateconfSetValue (CompObject      *object,
-	       CompOptionValue *value,
-	       CompOptionType  type,
-	       MateConfValue      *gvalue)
-{
-    switch (type) {
-    case CompOptionTypeBool:
-	mateconf_value_set_bool (gvalue, value->b);
-	break;
-    case CompOptionTypeInt:
-	mateconf_value_set_int (gvalue, value->i);
-	break;
-    case CompOptionTypeFloat:
-	mateconf_value_set_float (gvalue, value->f);
-	break;
-    case CompOptionTypeString:
-	mateconf_value_set_string (gvalue, value->s);
-	break;
-    case CompOptionTypeColor: {
-	gchar *color;
-
-	color = colorToString (value->c);
-	mateconf_value_set_string (gvalue, color);
-
-	free (color);
-    } break;
-    case CompOptionTypeKey: {
-	gchar *action;
-
-	while (object && object->type != COMP_OBJECT_TYPE_DISPLAY)
-	    object = object->parent;
-
-	if (!object)
-	    return;
-
-	action = keyActionToString (GET_CORE_DISPLAY (object), &value->action);
-	mateconf_value_set_string (gvalue, action);
-
-	free (action);
-    } break;
-    case CompOptionTypeButton: {
-	gchar *action;
-
-	while (object && object->type != COMP_OBJECT_TYPE_DISPLAY)
-	    object = object->parent;
-
-	if (!object)
-	    return;
-
-	action = buttonActionToString (GET_CORE_DISPLAY (object),
-				       &value->action);
-	mateconf_value_set_string (gvalue, action);
-
-	free (action);
-    } break;
-    case CompOptionTypeEdge: {
-	gchar *edge;
-
-	edge = edgeMaskToString (value->action.edgeMask);
-	mateconf_value_set_string (gvalue, edge);
-
-	free (edge);
-    } break;
-    case CompOptionTypeBell:
-	mateconf_value_set_bool (gvalue, value->action.bell);
-	break;
-    case CompOptionTypeMatch: {
-	gchar *match;
-
-	match = matchToString (&value->match);
-	mateconf_value_set_string (gvalue, match);
-
-	free (match);
-    } break;
-    default:
-	break;
-    }
-}
-
-static void
-mateconfSetOption (CompObject  *object,
-		CompOption  *o,
-		const gchar *plugin)
-{
-    MateConfValueType type = mateconfTypeFromCompType (o->type);
-    MateConfValue     *gvalue, *existingValue = NULL;
-    gchar          *key;
-
-    MATECONF_CORE (&core);
-
-    if (type == MATECONF_VALUE_INVALID)
-	return;
-
-    key = mateconfGetKey (object, plugin, o->name);
-
-    existingValue = mateconf_client_get (gc->client, key, NULL);
-    gvalue = mateconf_value_new (type);
-
-    if (o->type == CompOptionTypeList)
-    {
-	GSList     *node, *list = NULL;
-	MateConfValue *gv;
-	int	   i;
-
-	type = mateconfTypeFromCompType (o->value.list.type);
-
-	for (i = 0; i < o->value.list.nValue; i++)
-	{
-	    gv = mateconf_value_new (type);
-	    mateconfSetValue (object, &o->value.list.value[i],
-			   o->value.list.type, gv);
-	    list = g_slist_append (list, gv);
-	}
-
-	mateconf_value_set_list_type (gvalue, type);
-	mateconf_value_set_list (gvalue, list);
-
-	if (!existingValue || mateconf_value_compare (existingValue, gvalue))
-	    mateconf_client_set (gc->client, key, gvalue, NULL);
-
-	for (node = list; node; node = node->next)
-	    mateconf_value_free ((MateConfValue *) node->data);
-
-	g_slist_free (list);
-    }
-    else
-    {
-	mateconfSetValue (object, &o->value, o->type, gvalue);
-
-	if (!existingValue || mateconf_value_compare (existingValue, gvalue))
-	    mateconf_client_set (gc->client, key, gvalue, NULL);
-    }
-
-    mateconf_value_free (gvalue);
-
-    if (existingValue)
-	mateconf_value_free (existingValue);
-
-    g_free (key);
-}
-
-static Bool
-mateconfGetValue (CompObject      *object,
-	       CompOptionValue *value,
-	       CompOptionType  type,
-	       MateConfValue      *gvalue)
-
-{
-    if (type         == CompOptionTypeBool &&
-	gvalue->type == MATECONF_VALUE_BOOL)
-    {
-	value->b = mateconf_value_get_bool (gvalue);
-	return TRUE;
-    }
-    else if (type         == CompOptionTypeInt &&
-	     gvalue->type == MATECONF_VALUE_INT)
-    {
-	value->i = mateconf_value_get_int (gvalue);
-	return TRUE;
-    }
-    else if (type         == CompOptionTypeFloat &&
-	     gvalue->type == MATECONF_VALUE_FLOAT)
-    {
-	value->f = mateconf_value_get_float (gvalue);
-	return TRUE;
-    }
-    else if (type         == CompOptionTypeString &&
-	     gvalue->type == MATECONF_VALUE_STRING)
-    {
-	const char *str;
-
-	str = mateconf_value_get_string (gvalue);
-	if (str)
-	{
-	    value->s = strdup (str);
-	    if (value->s)
-		return TRUE;
-	}
-    }
-    else if (type         == CompOptionTypeColor &&
-	     gvalue->type == MATECONF_VALUE_STRING)
-    {
-	const gchar *color;
-
-	color = mateconf_value_get_string (gvalue);
-
-	if (stringToColor (color, value->c))
-	    return TRUE;
-    }
-    else if (type         == CompOptionTypeKey &&
-	     gvalue->type == MATECONF_VALUE_STRING)
-    {
-	const gchar *action;
-
-	action = mateconf_value_get_string (gvalue);
-
-	while (object && object->type != COMP_OBJECT_TYPE_DISPLAY)
-	    object = object->parent;
-
-	if (!object)
-	    return FALSE;
-
-	stringToKeyAction (GET_CORE_DISPLAY (object), action, &value->action);
-	return TRUE;
-    }
-    else if (type         == CompOptionTypeButton &&
-	     gvalue->type == MATECONF_VALUE_STRING)
-    {
-	const gchar *action;
-
-	action = mateconf_value_get_string (gvalue);
-
-	while (object && object->type != COMP_OBJECT_TYPE_DISPLAY)
-	    object = object->parent;
-
-	if (!object)
-	    return FALSE;
-
-	stringToButtonAction (GET_CORE_DISPLAY (object), action,
-			      &value->action);
-	return TRUE;
-    }
-    else if (type         == CompOptionTypeEdge &&
-	     gvalue->type == MATECONF_VALUE_STRING)
-    {
-	const gchar *edge;
-
-	edge = mateconf_value_get_string (gvalue);
-
-	value->action.edgeMask = stringToEdgeMask (edge);
-	return TRUE;
-    }
-    else if (type         == CompOptionTypeBell &&
-	     gvalue->type == MATECONF_VALUE_BOOL)
-    {
-	value->action.bell = mateconf_value_get_bool (gvalue);
-	return TRUE;
-    }
-    else if (type         == CompOptionTypeMatch &&
-	     gvalue->type == MATECONF_VALUE_STRING)
-    {
-	const gchar *match;
-
-	match = mateconf_value_get_string (gvalue);
-
-	matchInit (&value->match);
-	matchAddFromString (&value->match, match);
-	return TRUE;
-    }
-
-    return FALSE;
-}
-
-static Bool
-mateconfReadOptionValue (CompObject      *object,
-		      MateConfEntry      *entry,
-		      CompOption      *o,
-		      CompOptionValue *value)
-{
-    MateConfValue *gvalue;
-
-    gvalue = mateconf_entry_get_value (entry);
-    if (!gvalue)
-	return FALSE;
-
-    compInitOptionValue (value);
-
-    if (o->type      == CompOptionTypeList &&
-	gvalue->type == MATECONF_VALUE_LIST)
-    {
-	MateConfValueType type;
-	GSList	       *list;
-	int	       i, n;
-
-	type = mateconf_value_get_list_type (gvalue);
-	if (mateconfTypeFromCompType (o->value.list.type) != type)
-	    return FALSE;
-
-	list = mateconf_value_get_list (gvalue);
-	n    = g_slist_length (list);
-
-	value->list.value  = NULL;
-	value->list.nValue = 0;
-	value->list.type   = o->value.list.type;
-
-	if (n)
-	{
-	    value->list.value = malloc (sizeof (CompOptionValue) * n);
-	    if (value->list.value)
-	    {
-		for (i = 0; i < n; i++)
-		{
-		    if (!mateconfGetValue (object,
-					&value->list.value[i],
-					o->value.list.type,
-					(MateConfValue *) list->data))
-			break;
-
-		    value->list.nValue++;
-
-		    list = g_slist_next (list);
-		}
-
-		if (value->list.nValue != n)
-		{
-		    compFiniOptionValue (value, o->type);
-		    return FALSE;
-		}
-	    }
-	}
-    }
-    else
-    {
-	if (!mateconfGetValue (object, value, o->type, gvalue))
-	    return FALSE;
-    }
-
-    return TRUE;
-}
-
-static void
-mateconfGetOption (CompObject *object,
-		CompOption *o,
-		const char *plugin)
-{
-    MateConfEntry *entry;
-    gchar      *key;
-
-    MATECONF_CORE (&core);
-
-    key = mateconfGetKey (object, plugin, o->name);
-
-    entry = mateconf_client_get_entry (gc->client, key, NULL, TRUE, NULL);
-    if (entry)
-    {
-	CompOptionValue value;
-
-	if (mateconfReadOptionValue (object, entry, o, &value))
-	{
-	    (*core.setOptionForPlugin) (object, plugin, o->name, &value);
-	    compFiniOptionValue (&value, o->type);
-	}
-	else
-	{
-	    mateconfSetOption (object, o, plugin);
-	}
-
-	mateconf_entry_free (entry);
-    }
-
-    g_free (key);
-}
-
-static CompBool
-mateconfReloadObjectTree (CompObject *object,
-			 void       *closure);
-
-static CompBool
-mateconfReloadObjectsWithType (CompObjectType type,
-			      CompObject     *parent,
-			      void	     *closure)
-{
-    compObjectForEach (parent, type, mateconfReloadObjectTree, closure);
-
-    return TRUE;
-}
-
-static CompBool
-mateconfReloadObjectTree (CompObject *object,
-		       void       *closure)
-{
-    CompPlugin *p = (CompPlugin *) closure;
-    CompOption  *option;
-    int		nOption;
-
-    option = (*p->vTable->getObjectOptions) (p, object, &nOption);
-    while (nOption--)
-	mateconfGetOption (object, option++, p->vTable->name);
-
-    compObjectForEachType (object, mateconfReloadObjectsWithType, closure);
-
-    return TRUE;
-}
-
-static Bool
-mateconfReload (void *closure)
-{
-    CompPlugin  *p;
-
-    MATECONF_CORE (&core);
-
-    for (p = getPlugins (); p; p = p->next)
-    {
-	if (!p->vTable->getObjectOptions)
-	    continue;
-
-	mateconfReloadObjectTree (&core.base, (void *) p);
-    }
-
-    gc->reloadHandle = 0;
-
-    return FALSE;
-}
-
-static Bool
-mateconfSetOptionForPlugin (CompObject      *object,
-			 const char	 *plugin,
-			 const char	 *name,
-			 CompOptionValue *value)
-{
-    CompBool status;
-
-    MATECONF_CORE (&core);
-
-    UNWRAP (gc, &core, setOptionForPlugin);
-    status = (*core.setOptionForPlugin) (object, plugin, name, value);
-    WRAP (gc, &core, setOptionForPlugin, mateconfSetOptionForPlugin);
-
-    if (status && !gc->reloadHandle)
-    {
-	CompPlugin *p;
-
-	p = findActivePlugin (plugin);
-	if (p && p->vTable->getObjectOptions)
-	{
-	    CompOption *option;
-	    int	       nOption;
-
-	    option = (*p->vTable->getObjectOptions) (p, object, &nOption);
-	    option = compFindOption (option, nOption, name, 0);
-	    if (option)
-		mateconfSetOption (object, option, p->vTable->name);
-	}
-    }
-
-    return status;
-}
-
-static CompBool
-mateconfInitPluginForObject (CompPlugin *p,
-			  CompObject *o)
-{
-    CompBool status;
-
-    MATECONF_CORE (&core);
-
-    UNWRAP (gc, &core, initPluginForObject);
-    status = (*core.initPluginForObject) (p, o);
-    WRAP (gc, &core, initPluginForObject, mateconfInitPluginForObject);
-
-    if (status && p->vTable->getObjectOptions)
-    {
-	CompOption *option;
-	int	   nOption;
-
-	option = (*p->vTable->getObjectOptions) (p, o, &nOption);
-	while (nOption--)
-	    mateconfGetOption (o, option++, p->vTable->name);
-    }
-
-    return status;
-}
-
-/* MULTIDPYERROR: only works with one or less displays present */
-static void
-mateconfKeyChanged (MateConfClient *client,
-		 guint	     cnxn_id,
-		 MateConfEntry  *entry,
-		 gpointer    user_data)
-{
-    CompPlugin *plugin;
-    CompObject *object;
-    CompOption *option = NULL;
-    int	       nOption = 0;
-    gchar      **token;
-    int	       objectIndex = 4;
-
-    token = g_strsplit (entry->key, "/", 8);
-
-    if (g_strv_length (token) < 7)
-    {
-	g_strfreev (token);
-	return;
-    }
-
-    if (strcmp (token[0], "")	    != 0 ||
-	strcmp (token[1], "apps")   != 0 ||
-	strcmp (token[2], APP_NAME) != 0)
-    {
-	g_strfreev (token);
-	return;
-    }
-
-    if (strcmp (token[3], "general") == 0)
-    {
-	plugin = findActivePlugin ("core");
-    }
-    else
-    {
-	if (strcmp (token[3], "plugins") != 0 || g_strv_length (token) < 8)
-	{
-	    g_strfreev (token);
-	    return;
-	}
-
-	objectIndex = 5;
-	plugin = findActivePlugin (token[4]);
-    }
-
-    if (!plugin)
-    {
-	g_strfreev (token);
-	return;
-    }
-
-    object = compObjectFind (&core.base, COMP_OBJECT_TYPE_DISPLAY, NULL);
-    if (!object)
-    {
-	g_strfreev (token);
-	return;
-    }
-
-    if (strncmp (token[objectIndex], "screen", 6) == 0)
-    {
-	object = compObjectFind (object, COMP_OBJECT_TYPE_SCREEN,
-				 token[objectIndex] + 6);
-	if (!object)
-	{
-	    g_strfreev (token);
-	    return;
-	}
-    }
-    else if (strcmp (token[objectIndex], "allscreens") != 0)
-    {
-	g_strfreev (token);
-	return;
-    }
-
-    if (strcmp (token[objectIndex + 1], "options") != 0)
-    {
-	g_strfreev (token);
-	return;
-    }
-
-    if (plugin->vTable->getObjectOptions)
-	option = (*plugin->vTable->getObjectOptions) (plugin, object,
-						      &nOption);
-
-    option = compFindOption (option, nOption, token[objectIndex + 2], 0);
-    if (option)
-    {
-	CompOptionValue value;
-
-	if (mateconfReadOptionValue (object, entry, option, &value))
-	{
-	    (*core.setOptionForPlugin) (object,
-					plugin->vTable->name,
-					option->name,
-					&value);
-
-	    compFiniOptionValue (&value, option->type);
-	}
-    }
-
-    g_strfreev (token);
-}
-
-static void
-mateconfSendGLibNotify (CompScreen *s)
-{
-    Display *dpy = s->display->display;
-    XEvent  xev;
-
-    xev.xclient.type    = ClientMessage;
-    xev.xclient.display = dpy;
-    xev.xclient.format  = 32;
-
-    xev.xclient.message_type = XInternAtom (dpy, "_COMPIZ_GLIB_NOTIFY", 0);
-    xev.xclient.window	     = s->root;
-
-    memset (xev.xclient.data.l, 0, sizeof (xev.xclient.data.l));
-
-    XSendEvent (dpy,
-		s->root,
-		FALSE,
-		SubstructureRedirectMask | SubstructureNotifyMask,
-		&xev);
-}
-
-static Bool
-mateconfInitCore (CompPlugin *p,
-	       CompCore   *c)
-{
-    MateConfCore *gc;
-
-    if (!checkPluginABI ("core", CORE_ABIVERSION))
-	return FALSE;
-
-    gc = malloc (sizeof (MateConfCore));
-    if (!gc)
-	return FALSE;
-
-    g_type_init ();
-
-    gc->client = mateconf_client_get_default ();
-
-    mateconf_client_add_dir (gc->client, "/apps/" APP_NAME,
-			  MATECONF_CLIENT_PRELOAD_NONE, NULL);
-
-    gc->reloadHandle = compAddTimeout (0, 0, mateconfReload, 0);
-
-    gc->cnxn = mateconf_client_notify_add (gc->client, "/apps/" APP_NAME,
-					mateconfKeyChanged, c, NULL, NULL);
-
-    WRAP (gc, c, initPluginForObject, mateconfInitPluginForObject);
-    WRAP (gc, c, setOptionForPlugin, mateconfSetOptionForPlugin);
-
-    c->base.privates[corePrivateIndex].ptr = gc;
-
-    return TRUE;
-}
-
-static void
-mateconfFiniCore (CompPlugin *p,
-	       CompCore   *c)
-{
-    MATECONF_CORE (c);
-
-    UNWRAP (gc, c, initPluginForObject);
-    UNWRAP (gc, c, setOptionForPlugin);
-
-    if (gc->reloadHandle)
-	compRemoveTimeout (gc->reloadHandle);
-
-    if (gc->cnxn)
-	mateconf_client_notify_remove (gc->client, gc->cnxn);
-
-    mateconf_client_remove_dir (gc->client, "/apps/" APP_NAME, NULL);
-    mateconf_client_clear_cache (gc->client);
-
-    free (gc);
-}
-
-static Bool
-mateconfInitScreen (CompPlugin *p,
-		 CompScreen *s)
-{
-    mateconfSendGLibNotify (s);
-
-    return TRUE;
-}
-
-static CompBool
-mateconfInitObject (CompPlugin *p,
-		 CompObject *o)
-{
-    static InitPluginObjectProc dispTab[] = {
-	(InitPluginObjectProc) mateconfInitCore,
-	(InitPluginObjectProc) 0, /* InitDisplay */
-	(InitPluginObjectProc) mateconfInitScreen
-    };
-
-    RETURN_DISPATCH (o, dispTab, ARRAY_SIZE (dispTab), TRUE, (p, o));
-}
-
-static void
-mateconfFiniObject (CompPlugin *p,
-		 CompObject *o)
-{
-    static FiniPluginObjectProc dispTab[] = {
-	(FiniPluginObjectProc) mateconfFiniCore
-    };
-
-    DISPATCH (o, dispTab, ARRAY_SIZE (dispTab), (p, o));
-}
-
-static Bool
-mateconfInit (CompPlugin *p)
-{
-    if (!compInitPluginMetadataFromInfo (&mateconfMetadata, p->vTable->name,
-					 0, 0, 0, 0))
-	return FALSE;
-
-    corePrivateIndex = allocateCorePrivateIndex ();
-    if (corePrivateIndex < 0)
-    {
-	compFiniMetadata (&mateconfMetadata);
-	return FALSE;
-    }
-
-    compAddMetadataFromFile (&mateconfMetadata, p->vTable->name);
-
-    return TRUE;
-}
-
-static void
-mateconfFini (CompPlugin *p)
-{
-    freeCorePrivateIndex (corePrivateIndex);
-    compFiniMetadata (&mateconfMetadata);
-}
-
-static CompMetadata *
-mateconfGetMetadata (CompPlugin *plugin)
-{
-    return &mateconfMetadata;
-}
-
-CompPluginVTable mateconfVTable = {
-    "mateconf",
-    mateconfGetMetadata,
-    mateconfInit,
-    mateconfFini,
-    mateconfInitObject,
-    mateconfFiniObject,
-    0, /* GetObjectOptions */
-    0  /* SetObjectOption */
-};
-
-CompPluginVTable *
-getCompPluginInfo20070830 (void)
-{
-    return &mateconfVTable;
-}