[Xfce4-commits] [apps/xfdashboard] 12/19: Remove unneeded files for GDK backend

noreply at xfce.org noreply at xfce.org
Fri Jun 16 10:56:43 CEST 2017


This is an automated email from the git hooks/post-receive script.

n   o   m   a   d       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/xfdashboard.

commit efeb27f754841161060e1b475ec99393b2aea023
Author: Stephan Haller <nomad at froevel.de>
Date:   Tue Jun 13 17:51:09 2017 +0200

    Remove unneeded files for GDK backend
    
    Enhancement for issue GH #129
---
 libxfdashboard/Makefile.am                        |   14 +-
 libxfdashboard/gdk/window-content-gdk.c           | 2612 ---------------------
 libxfdashboard/gdk/window-content-gdk.h           |  111 -
 libxfdashboard/gdk/window-tracker-gdk.c           | 2069 ----------------
 libxfdashboard/gdk/window-tracker-gdk.h           |   90 -
 libxfdashboard/gdk/window-tracker-monitor-gdk.c   |  425 ----
 libxfdashboard/gdk/window-tracker-monitor-gdk.h   |   76 -
 libxfdashboard/gdk/window-tracker-window-gdk.c    | 1367 -----------
 libxfdashboard/gdk/window-tracker-window-gdk.h    |   82 -
 libxfdashboard/gdk/window-tracker-workspace-gdk.c |  442 ----
 libxfdashboard/gdk/window-tracker-workspace-gdk.h |   82 -
 libxfdashboard/window-tracker-window.c            |    4 +-
 12 files changed, 4 insertions(+), 7370 deletions(-)

diff --git a/libxfdashboard/Makefile.am b/libxfdashboard/Makefile.am
index 3c6197d..6100dde 100644
--- a/libxfdashboard/Makefile.am
+++ b/libxfdashboard/Makefile.am
@@ -251,20 +251,10 @@ libxfdashboard_la_LIBADD += \
 endif
 
 gdk_headers = \
-	gdk/window-content-gdk.h \
-	gdk/window-tracker-gdk.h \
-	gdk/window-tracker-backend-gdk.h \
-	gdk/window-tracker-monitor-gdk.h \
-	gdk/window-tracker-window-gdk.h \
-	gdk/window-tracker-workspace-gdk.h
+	gdk/window-tracker-backend-gdk.h
 
 gdk_sources = \
-	gdk/window-content-gdk.c \
-	gdk/window-tracker-gdk.c \
-	gdk/window-tracker-backend-gdk.c \
-	gdk/window-tracker-monitor-gdk.c \
-	gdk/window-tracker-window-gdk.c \
-	gdk/window-tracker-workspace-gdk.c
+	gdk/window-tracker-backend-gdk.c
 
 libxfdashboard_la_headers += $(gdk_headers)
 libxfdashboard_la_SOURCES += $(gdk_sources)
diff --git a/libxfdashboard/gdk/window-content-gdk.c b/libxfdashboard/gdk/window-content-gdk.c
deleted file mode 100644
index 55da077..0000000
--- a/libxfdashboard/gdk/window-content-gdk.c
+++ /dev/null
@@ -1,2612 +0,0 @@
-/*
- * window: A managed window of window manager
- * 
- * Copyright 2012-2017 Stephan Haller <nomad at froevel.de>
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- * 
- * 
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#define COGL_ENABLE_EXPERIMENTAL_API
-#define CLUTTER_ENABLE_EXPERIMENTAL_API
-
-#include <libxfdashboard/gdk/window-content-gdk.h>
-
-#include <glib/gi18n-lib.h>
-#include <clutter/gdk/clutter-gdk.h>
-#include <clutter/x11/clutter-x11.h>
-#include <cogl/cogl-texture-pixmap-x11.h>
-#ifdef HAVE_XCOMPOSITE
-#include <X11/extensions/Xcomposite.h>
-#endif
-#ifdef HAVE_XDAMAGE
-#include <X11/extensions/Xdamage.h>
-#endif
-#include <gdk/gdkx.h>
-
-#include <libxfdashboard/window-content.h>
-#include <libxfdashboard/gdk/window-tracker-window-gdk.h>
-#include <libxfdashboard/application.h>
-#include <libxfdashboard/marshal.h>
-#include <libxfdashboard/stylable.h>
-#include <libxfdashboard/window-tracker.h>
-#include <libxfdashboard/enums.h>
-#include <libxfdashboard/compat.h>
-#include <libxfdashboard/debug.h>
-
-
-/* Definitions */
-typedef enum /*< skip,prefix=XFDASHBOARD_WINDOW_CONTENT_GDK_WORKAROUND_MODE >*/
-{
-	XFDASHBOARD_WINDOW_CONTENT_GDK_WORKAROUND_MODE_NONE=0,
-	XFDASHBOARD_WINDOW_CONTENT_GDK_WORKAROUND_MODE_UNMINIMIZING,
-	XFDASHBOARD_WINDOW_CONTENT_GDK_WORKAROUND_MODE_REMINIMIZING,
-	XFDASHBOARD_WINDOW_CONTENT_GDK_WORKAROUND_MODE_DONE
-} XfdashboardWindowContentGDKWorkaroundMode;
-
-/* Define this class in GObject system */
-static void _xfdashboard_window_content_clutter_content_iface_init(ClutterContentIface *iface);
-static void _xfdashboard_window_content_gdk_stylable_iface_init(XfdashboardStylableInterface *iface);
-
-G_DEFINE_TYPE_WITH_CODE(XfdashboardWindowContentGDK,
-						xfdashboard_window_content_gdk,
-						XFDASHBOARD_TYPE_WINDOW_CONTENT,
-						G_IMPLEMENT_INTERFACE(CLUTTER_TYPE_CONTENT, _xfdashboard_window_content_clutter_content_iface_init)
-						G_IMPLEMENT_INTERFACE(XFDASHBOARD_TYPE_STYLABLE, _xfdashboard_window_content_gdk_stylable_iface_init))
-
-/* Private structure - access only by public API if needed */
-#define XFDASHBOARD_WINDOW_CONTENT_GDK_GET_PRIVATE(obj)                        \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), XFDASHBOARD_TYPE_WINDOW_CONTENT_GDK, XfdashboardWindowContentGDKPrivate))
-
-struct _XfdashboardWindowContentGDKPrivate
-{
-	/* Properties related */
-	XfdashboardWindowTrackerWindowGDK			*window;
-	ClutterColor								*outlineColor;
-	gfloat										outlineWidth;
-	gboolean									isSuspended;
-	gboolean									includeWindowFrame;
-
-	gboolean									unmappedWindowIconXFill;
-	gboolean									unmappedWindowIconYFill;
-	gfloat										unmappedWindowIconXAlign;
-	gfloat										unmappedWindowIconYAlign;
-	gfloat										unmappedWindowIconXScale;
-	gfloat										unmappedWindowIconYScale;
-	XfdashboardAnchorPoint						unmappedWindowIconAnchorPoint;
-
-	gchar										*styleClasses;
-	gchar										*stylePseudoClasses;
-
-	/* Instance related */
-	gboolean									isFallback;
-	CoglTexture									*texture;
-	Window										xWindowID;
-	Pixmap										pixmap;
-#ifdef HAVE_XDAMAGE
-	Damage										damage;
-#endif
-
-	guint										suspendSignalID;
-	gboolean									isMapped;
-	gboolean									isAppSuspended;
-
-	XfdashboardWindowTracker					*windowTracker;
-	XfdashboardWindowContentGDKWorkaroundMode	workaroundMode;
-	guint										workaroundStateSignalID;
-
-	gboolean									suspendAfterResumeOnIdle;
-};
-
-/* Properties */
-enum
-{
-	PROP_0,
-
-	PROP_WINDOW,
-
-	PROP_SUSPENDED,
-
-	PROP_OUTLINE_COLOR,
-	PROP_OUTLINE_WIDTH,
-
-	PROP_INCLUDE_WINDOW_FRAME,
-
-	PROP_UNMAPPED_WINDOW_ICON_X_FILL,
-	PROP_UNMAPPED_WINDOW_ICON_Y_FILL,
-	PROP_UNMAPPED_WINDOW_ICON_X_ALIGN,
-	PROP_UNMAPPED_WINDOW_ICON_Y_ALIGN,
-	PROP_UNMAPPED_WINDOW_ICON_X_SCALE,
-	PROP_UNMAPPED_WINDOW_ICON_Y_SCALE,
-	PROP_UNMAPPED_WINDOW_ICON_ANCHOR_POINT,
-
-	/* From interface: XfdashboardStylable */
-	PROP_STYLE_CLASSES,
-	PROP_STYLE_PSEUDO_CLASSES,
-
-	PROP_LAST
-};
-
-static GParamSpec* XfdashboardWindowContentGDKProperties[PROP_LAST]={ 0, };
-
-/* IMPLEMENTATION: Private variables and methods */
-#define COMPOSITE_VERSION_MIN_MAJOR		0
-#define COMPOSITE_VERSION_MIN_MINOR		2
-
-#define WORKAROUND_UNMAPPED_WINDOW_XFCONF_PROP				"/enable-unmapped-window-workaround"
-#define DEFAULT_WORKAROUND_UNMAPPED_WINDOW					FALSE
-
-#define WINDOW_CONTENT_CREATION_PRIORITY_XFCONF_PROP		"/window-content-creation-priority"
-#define DEFAULT_WINDOW_CONTENT_GDK_CREATION_PRIORITY		"immediate"
-
-struct _XfdashboardWindowContentGDKPriorityMap
-{
-	const gchar		*name;
-	gint			priority;
-};
-typedef struct _XfdashboardWindowContentGDKPriorityMap		XfdashboardWindowContentGDKPriorityMap;
-
-static gboolean									_xfdashboard_window_content_gdk_have_checked_extensions=FALSE;
-static gboolean									_xfdashboard_window_content_gdk_have_composite_extension=FALSE;
-static gboolean									_xfdashboard_window_content_gdk_have_damage_extension=FALSE;
-static int										_xfdashboard_window_content_gdk_damage_event_base=0;
-
-static GList*									_xfdashboard_window_content_gdk_resume_idle_queue=NULL;
-static guint									_xfdashboard_window_content_gdk_resume_idle_id=0;
-static guint									_xfdashboard_window_content_gdk_resume_shutdown_signal_id=0;
-
-static guint									_xfdashboard_window_content_gdk_xfconf_priority_notify_id=0;
-static gint										_xfdashboard_window_content_gdk_window_creation_priority=-1;
-static XfdashboardWindowContentGDKPriorityMap	_xfdashboard_window_content_gdk_window_creation_priority_map[]=
-												{
-													{ "immediate", -1 }, /* First entry is default value */
-													{ "high", G_PRIORITY_HIGH_IDLE },
-													{ "normal", G_PRIORITY_DEFAULT_IDLE },
-													{ "low", G_PRIORITY_LOW },
-													{ NULL, 0 },
-												};
-static guint									_xfdashboard_window_content_gdk_window_creation_shutdown_signal_id=0;
-
-/* Forward declarations */
-static void _xfdashboard_window_content_gdk_suspend(XfdashboardWindowContentGDK *self);
-static void _xfdashboard_window_content_gdk_resume(XfdashboardWindowContentGDK *self);
-static gboolean _xfdashboard_window_content_gdk_resume_on_idle(gpointer inUserData);
-
-/* Remove all entries from resume queue and release all allocated resources */
-static void _xfdashboard_window_content_gdk_destroy_resume_queue(void)
-{
-	XfdashboardApplication					*application;
-	gint									queueSize;
-
-	/* Disconnect application "shutdown" signal handler */
-	if(_xfdashboard_window_content_gdk_resume_shutdown_signal_id)
-	{
-		XFDASHBOARD_DEBUG(NULL, WINDOWS,
-							"Disconnecting shutdown signal handler %u because of resume queue destruction",
-							_xfdashboard_window_content_gdk_resume_shutdown_signal_id);
-
-		application=xfdashboard_application_get_default();
-		g_signal_handler_disconnect(application, _xfdashboard_window_content_gdk_resume_shutdown_signal_id);
-		_xfdashboard_window_content_gdk_resume_shutdown_signal_id=0;
-	}
-
-	/* Remove idle source if available */
-	if(_xfdashboard_window_content_gdk_resume_idle_id)
-	{
-		XFDASHBOARD_DEBUG(NULL, WINDOWS,
-							"Removing resume window content idle source with ID %u",
-							_xfdashboard_window_content_gdk_resume_idle_id);
-
-		g_source_remove(_xfdashboard_window_content_gdk_resume_idle_id);
-		_xfdashboard_window_content_gdk_resume_idle_id=0;
-	}
-
-	/* Destroy resume-on-idle queue if available*/
-	if(_xfdashboard_window_content_gdk_resume_idle_queue)
-	{
-		queueSize=g_list_length(_xfdashboard_window_content_gdk_resume_idle_queue);
-		if(queueSize>0) g_warning(_("Destroying window content resume queue containing %d windows."), queueSize);
-#ifdef DEBUG
-		if(queueSize>0)
-		{
-			GList								*iter;
-			XfdashboardWindowContentGDK			*content;
-			XfdashboardWindowTrackerWindow		*window;
-
-			for(iter=_xfdashboard_window_content_gdk_resume_idle_queue; iter; iter=g_list_next(iter))
-			{
-				content=XFDASHBOARD_WINDOW_CONTENT_GDK(iter->data);
-				window=xfdashboard_window_content_gdk_get_window(content);
-				g_print("Window content in resume queue: Item %s@%p for window '%s'\n",
-							G_OBJECT_TYPE_NAME(content), content,
-							xfdashboard_window_tracker_window_get_name(window));
-			}
-		}
-#endif
-
-		XFDASHBOARD_DEBUG(NULL, WINDOWS, "Destroying window content resume queue");
-		g_list_free(_xfdashboard_window_content_gdk_resume_idle_queue);
-		_xfdashboard_window_content_gdk_resume_idle_queue=NULL;
-	}
-}
-
-/* Remove window content from resume on idle queue */
-static void _xfdashboard_window_content_gdk_resume_on_idle_remove(XfdashboardWindowContentGDK *self)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-
-	priv=self->priv;
-
-	/* Remove window content from queue */
-	if(_xfdashboard_window_content_gdk_resume_idle_queue)
-	{
-		GList								*queueEntry;
-
-		/* Lookup window content in queue and remove it from queue. If queue is empty
-		 * after removal, remove idle source also.
-		 */
-		queueEntry=g_list_find(_xfdashboard_window_content_gdk_resume_idle_queue, self);
-		if(queueEntry)
-		{
-			/* Remove window content from queue */
-			_xfdashboard_window_content_gdk_resume_idle_queue=g_list_delete_link(_xfdashboard_window_content_gdk_resume_idle_queue, queueEntry);
-			XFDASHBOARD_DEBUG(self, WINDOWS,
-								"Removed queue entry %p for window '%s' because of releasing resources",
-								queueEntry,
-								xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-		}
-	}
-
-	/* If queue is empty remove idle source as well */
-	if(!_xfdashboard_window_content_gdk_resume_idle_queue &&
-		_xfdashboard_window_content_gdk_resume_idle_id)
-	{
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"Removing idle source with ID %u because queue is empty",
-							_xfdashboard_window_content_gdk_resume_idle_id);
-
-		g_source_remove(_xfdashboard_window_content_gdk_resume_idle_id);
-		_xfdashboard_window_content_gdk_resume_idle_id=0;
-	}
-}
-
-/* Add window content to resume on idle queue */
-static void _xfdashboard_window_content_gdk_resume_on_idle_add(XfdashboardWindowContentGDK *self)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-
-	priv=self->priv;
-
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Using resume on idle for window '%s'",
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-
-	/* Only add callback to resume window content if no one was added */
-	if(!g_list_find(_xfdashboard_window_content_gdk_resume_idle_queue, self))
-	{
-		/* Queue window content for resume */
-		_xfdashboard_window_content_gdk_resume_idle_queue=g_list_append(_xfdashboard_window_content_gdk_resume_idle_queue, self);
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"Queued window resume of '%s'",
-							xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-	}
-
-	/* Create idle source for resuming queued window contents but with
-	 * high priority to get window content created as soon as possible.
-	 */
-	if(_xfdashboard_window_content_gdk_resume_idle_queue &&
-		!_xfdashboard_window_content_gdk_resume_idle_id)
-	{
-		_xfdashboard_window_content_gdk_resume_idle_id=clutter_threads_add_idle_full(_xfdashboard_window_content_gdk_window_creation_priority,
-																				_xfdashboard_window_content_gdk_resume_on_idle,
-																				NULL,
-																				NULL);
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"Created idle source with ID %u with priority of %d because of new resume queue created for window resume of '%s'",
-							_xfdashboard_window_content_gdk_resume_idle_id,
-							_xfdashboard_window_content_gdk_window_creation_priority,
-							xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-	}
-
-	/* Connect to "shutdown" signal of application to clean up resume queue */
-	if(!_xfdashboard_window_content_gdk_resume_shutdown_signal_id)
-	{
-		XfdashboardApplication			*application;
-
-		application=xfdashboard_application_get_default();
-		_xfdashboard_window_content_gdk_resume_shutdown_signal_id=g_signal_connect(application,
-																				"shutdown-final",
-																				G_CALLBACK(_xfdashboard_window_content_gdk_destroy_resume_queue),
-																				NULL);
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"Connected to shutdown signal with handler ID %u for resume queue destruction",
-							_xfdashboard_window_content_gdk_resume_shutdown_signal_id);
-	}
-}
-
-/* Value for window creation priority in xfconf has changed */
-static void _xfdashboard_window_content_gdk_on_window_creation_priority_value_changed(XfconfChannel *inChannel,
-																					const gchar *inProperty,
-																					const GValue *inValue,
-																					gpointer inUserData)
-{
-	const gchar									*priorityValue;
-	XfdashboardWindowContentGDKPriorityMap		*found;
-
-	g_return_if_fail(g_strcmp0(inProperty, WINDOW_CONTENT_CREATION_PRIORITY_XFCONF_PROP)==0);
-	g_return_if_fail(inValue && G_VALUE_HOLDS_STRING(inValue));
-
-	/* Determine priority from new value */
-	priorityValue=g_value_get_string(inValue);
-	found=_xfdashboard_window_content_gdk_window_creation_priority_map;
-	while(found->name && g_strcmp0(priorityValue, found->name)!=0) found++;
-
-	/* Set default value if no match was found in priority map was found */
-	if(!found || !found->name)
-	{
-		/* Default value is the first one in mapping */
-		found=_xfdashboard_window_content_gdk_window_creation_priority_map;
-
-		g_warning(_("Unknown value '%s' for property '%s' - defaulting to '%s' with priority of %d"),
-					priorityValue,
-					inProperty,
-					found->name,
-					found->priority);
-	}
-
-	/* Set priority */
-	if(found)
-	{
-		_xfdashboard_window_content_gdk_window_creation_priority=found->priority;
-		XFDASHBOARD_DEBUG(NULL, WINDOWS,
-							"Setting window creation priority to '%s' with priority of %d",
-							found->name,
-							found->priority);
-	}
-}
-
-/* Disconnect signal handler for xfconf value change notification on window priority */
-static void _xfdashboard_window_content_gdk_on_window_creation_priority_shutdown(void)
-{
-	XfdashboardApplication					*application;
-
-	/* Disconnect application "shutdown" signal handler */
-	if(_xfdashboard_window_content_gdk_window_creation_shutdown_signal_id)
-	{
-		XFDASHBOARD_DEBUG(NULL, WINDOWS,
-							"Disconnecting shutdown signal handler %u for window creation priority value change notifications",
-							_xfdashboard_window_content_gdk_window_creation_shutdown_signal_id);
-
-		application=xfdashboard_application_get_default();
-		g_signal_handler_disconnect(application, _xfdashboard_window_content_gdk_window_creation_shutdown_signal_id);
-		_xfdashboard_window_content_gdk_window_creation_shutdown_signal_id=0;
-	}
-
-	/* Disconnect property changed signal handler */
-	if(_xfdashboard_window_content_gdk_xfconf_priority_notify_id)
-	{
-		XfconfChannel					*xfconfChannel;
-
-		XFDASHBOARD_DEBUG(NULL, WINDOWS,
-							"Disconnecting property changed signal handler %u for window creation priority value change notifications",
-							_xfdashboard_window_content_gdk_xfconf_priority_notify_id);
-
-		xfconfChannel=xfdashboard_application_get_xfconf_channel(NULL);
-		g_signal_handler_disconnect(xfconfChannel, _xfdashboard_window_content_gdk_xfconf_priority_notify_id);
-		_xfdashboard_window_content_gdk_xfconf_priority_notify_id=0;
-	}
-}
-
-/* Check if we should workaround unmapped window for requested window and set up workaround */
-static void _xfdashboard_window_content_gdk_on_workaround_state_changed(XfdashboardWindowContentGDK *self,
-																	gpointer inUserData)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-	XfdashboardWindowTrackerWindowState		windowState;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inUserData));
-
-	priv=self->priv;
-
-	/* Handle state change of window */
-	windowState=xfdashboard_window_tracker_window_get_state(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window));
-
-	switch(priv->workaroundMode)
-	{
-		case XFDASHBOARD_WINDOW_CONTENT_GDK_WORKAROUND_MODE_UNMINIMIZING:
-			/* Check if window is unminized now, then update content texture and
-			 * minimize window again.
-			 */
-			if(!(windowState & XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_MINIMIZED))
-			{
-				if(priv->texture &&
-					priv->workaroundMode!=XFDASHBOARD_WINDOW_CONTENT_GDK_WORKAROUND_MODE_NONE &&
-					priv->isMapped==TRUE)
-				{
-					/* Copy current texture as it might get inaccessible. If we copy it now
-					 * when can draw the last image known. If we can copy it successfully
-					 * replace current texture with the copied one.
-					 */
-					CoglPixelFormat			textureFormat;
-					guint					textureWidth;
-					guint					textureHeight;
-					gint					textureSize;
-					guint8					*textureData;
-
-					textureFormat=cogl_texture_get_format(priv->texture);
-					textureSize=cogl_texture_get_data(priv->texture, textureFormat, 0, NULL);
-					textureWidth=cogl_texture_get_width(priv->texture);
-					textureHeight=cogl_texture_get_height(priv->texture);
-					textureData=g_malloc(textureSize);
-					if(textureData)
-					{
-						CoglTexture			*copyTexture;
-						gint				copyTextureSize;
-#if COGL_VERSION_CHECK(1, 18, 0)
-						ClutterBackend		*backend;
-						CoglContext			*context;
-						CoglError			*error;
-#endif
-
-						/* Get texture data to copy */
-						copyTextureSize=cogl_texture_get_data(priv->texture, textureFormat, 0, textureData);
-						if(copyTextureSize)
-						{
-#if COGL_VERSION_CHECK(1, 18, 0)
-							error=NULL;
-
-							backend=clutter_get_default_backend();
-							context=clutter_backend_get_cogl_context(backend);
-							copyTexture=cogl_texture_2d_new_from_data(context,
-																		textureWidth,
-																		textureHeight,
-																		textureFormat,
-																		0,
-																		textureData,
-																		&error);
-
-							if(!copyTexture || error)
-							{
-								/* Show warning */
-								g_warning(_("Could not create copy of texture of mininized window '%s': %s"),
-											xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)),
-											(error && error->message) ? error->message : _("Unknown error"));
-
-								/* Release allocated resources */
-								if(copyTexture)
-								{
-									cogl_object_unref(copyTexture);
-									copyTexture=NULL;
-								}
-
-								if(error)
-								{
-									cogl_error_free(error);
-									error=NULL;
-								}
-							}
-#else
-							copyTexture=cogl_texture_new_from_data(textureWidth,
-																	textureHeight,
-																	COGL_TEXTURE_NONE,
-																	textureFormat,
-																	textureFormat,
-																	0,
-																	textureData);
-							if(!copyTexture)
-							{
-								/* Show warning */
-								g_warning(_("Could not create copy of texture of mininized window '%s'"),
-											xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-							}
-#endif
-
-							if(copyTexture)
-							{
-								cogl_object_unref(priv->texture);
-								priv->texture=copyTexture;
-							}
-						}
-							else g_warning(_("Could not determine size of texture of minimized window '%s'"),
-											xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-					}
-						else
-						{
-							g_warning(_("Could not allocate memory for copy of texture of mininized window '%s'"),
-										xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-						}
-				}
-
-				xfdashboard_window_tracker_window_hide(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window));
-				priv->workaroundMode=XFDASHBOARD_WINDOW_CONTENT_GDK_WORKAROUND_MODE_REMINIMIZING;
-			}
-			break;
-
-		case XFDASHBOARD_WINDOW_CONTENT_GDK_WORKAROUND_MODE_REMINIMIZING:
-			/* Check if window is now minized again, so stop workaround and
-			 * disconnecting signals.
-			 */
-			if(windowState & XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_MINIMIZED)
-			{
-				priv->workaroundMode=XFDASHBOARD_WINDOW_CONTENT_GDK_WORKAROUND_MODE_DONE;
-				if(priv->workaroundStateSignalID)
-				{
-					g_signal_handler_disconnect(priv->windowTracker, priv->workaroundStateSignalID);
-					priv->workaroundStateSignalID=0;
-				}
-			}
-			break;
-
-		default:
-			/* We should never get here but if we do it is more or less
-			 * a critical error. Ensure that window is minimized (again)
-			 * and stop xfdashboard.
-			 */
-			xfdashboard_window_tracker_window_hide(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window));
-			g_assert_not_reached();
-			break;
-	}
-}
-
-static void _xfdashboard_window_content_gdk_setup_workaround(XfdashboardWindowContentGDK *self, XfdashboardWindowTrackerWindowGDK *inWindow)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-	gboolean								doWorkaround;
-	XfdashboardWindowTrackerWindowState		windowState;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-	g_return_if_fail(inWindow!=NULL && XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow));
-
-	priv=self->priv;
-
-	/* Check if should workaround unmapped windows at all */
-	doWorkaround=xfconf_channel_get_bool(xfdashboard_application_get_xfconf_channel(NULL),
-											WORKAROUND_UNMAPPED_WINDOW_XFCONF_PROP,
-											DEFAULT_WORKAROUND_UNMAPPED_WINDOW);
-	if(!doWorkaround) return;
-
-	/* Only workaround unmapped windows */
-	windowState=xfdashboard_window_tracker_window_get_state(XFDASHBOARD_WINDOW_TRACKER_WINDOW(inWindow));
-	if(!(windowState & XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_MINIMIZED)) return;
-
-	/* Check if workaround is already set up */
-	if(priv->workaroundMode!=XFDASHBOARD_WINDOW_CONTENT_GDK_WORKAROUND_MODE_NONE) return;
-
-	/* Set flag that workaround is (going to be) set up */
-	priv->workaroundMode=XFDASHBOARD_WINDOW_CONTENT_GDK_WORKAROUND_MODE_UNMINIMIZING;
-
-	/* The workaround is as follows:
-	 *
-	 * 1.) Set up signal handlers to get notified about changes of window
-	 * 2.) Unminimize window
-	 * 3.) If window is visible it will be activated by design, so reactivate
-	 *     last active window
-	 * 4.) Minimize window again
-	 * 5.) Stop watching for changes of window by disconnecting signal handlers
-	 */
-	priv->workaroundStateSignalID=g_signal_connect_swapped(priv->windowTracker,
-															"window-state-changed",
-															G_CALLBACK(_xfdashboard_window_content_gdk_on_workaround_state_changed),
-															self);
-	xfdashboard_window_tracker_window_show(XFDASHBOARD_WINDOW_TRACKER_WINDOW(inWindow));
-}
-
-/* Check extension and set up basics */
-static void _xfdashboard_window_content_gdk_check_extension(void)
-{
-	Display		*display G_GNUC_UNUSED;
-#ifdef HAVE_XDAMAGE
-	int			damageError=0;
-#endif
-#ifdef HAVE_XCOMPOSITE
-	int			compositeEventBase=0;
-	int			compositeError=0;
-	int			compositeMajor, compositeMinor;
-#endif
-
-	/* Check if we have already checked extensions */
-	if(_xfdashboard_window_content_gdk_have_checked_extensions!=FALSE) return;
-
-	/* Mark that we have check for extensions regardless of any error*/
-	_xfdashboard_window_content_gdk_have_checked_extensions=TRUE;
-
-	/* Get display */
-	display=gdk_x11_display_get_xdisplay(clutter_gdk_get_default_display());
-
-	/* Check for composite extenstion */
-	_xfdashboard_window_content_gdk_have_composite_extension=FALSE;
-#ifdef HAVE_XCOMPOSITE
-	if(XCompositeQueryExtension(display, &compositeEventBase, &compositeError))
-	{
-		compositeMajor=compositeMinor=0;
-		if(XCompositeQueryVersion(display, &compositeMajor, &compositeMinor))
-		{
-			if(compositeMajor>=COMPOSITE_VERSION_MIN_MAJOR && compositeMinor>=COMPOSITE_VERSION_MIN_MINOR)
-			{
-				_xfdashboard_window_content_gdk_have_composite_extension=TRUE;
-			}
-				else
-				{
-					g_warning(_("Need at least version %d.%d of composite extension but found %d.%d - using only fallback images"),
-								COMPOSITE_VERSION_MIN_MAJOR, COMPOSITE_VERSION_MIN_MINOR, compositeMajor, compositeMinor);
-				}
-		}
-			else g_warning(_("Query for X composite extension failed - using only fallback imagess"));
-	}
-		else g_warning(_("X does not support composite extension - using only fallback images"));
-#endif
-
-	/* Get base of damage event in X */
-	_xfdashboard_window_content_gdk_have_damage_extension=FALSE;
-	_xfdashboard_window_content_gdk_damage_event_base=0;
-
-#ifdef HAVE_XDAMAGE
-	if(XDamageQueryExtension(display, &_xfdashboard_window_content_gdk_damage_event_base, &damageError))
-	{
-		_xfdashboard_window_content_gdk_have_damage_extension=TRUE;
-	}
-		else
-		{
-			g_warning(_("Query for X damage extension resulted in error code %d - using only still images of windows"),
-						damageError);
-		}
-#endif
-}
-
-/* Suspension state of application changed */
-static void _xfdashboard_window_content_gdk_on_application_suspended_changed(XfdashboardWindowContentGDK *self,
-																			GParamSpec *inSpec,
-																			gpointer inUserData)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-	XfdashboardApplication					*app;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-	g_return_if_fail(XFDASHBOARD_IS_APPLICATION(inUserData));
-
-	priv=self->priv;
-	app=XFDASHBOARD_APPLICATION(inUserData);
-
-	/* Get application suspend state */
-	priv->isAppSuspended=xfdashboard_application_is_suspended(app);
-
-	/* If application is suspended then suspend this window too ... */
-	if(priv->isAppSuspended)
-	{
-		_xfdashboard_window_content_gdk_suspend(self);
-	}
-		/* ... otherwise resume window if it is mapped */
-		else
-		{
-			if(priv->isMapped) _xfdashboard_window_content_gdk_resume(self);
-		}
-}
-
-/* Filter X events for damages */
-static GdkFilterReturn _xfdashboard_window_content_gdk_on_gdk_event(GdkXEvent *inXEvent,
-																	GdkEvent *inEvent,
-																	gpointer inUserData)
-{
-	XfdashboardWindowContentGDK				*self;
-	XfdashboardWindowContentGDKPrivate		*priv;
-	XEvent									*xEvent;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(inUserData), GDK_FILTER_CONTINUE);
-
-	self=XFDASHBOARD_WINDOW_CONTENT_GDK(inUserData);
-	priv=self->priv;
-	xEvent=(XEvent*)inXEvent;
-
-	/* Check for mapped, unmapped related X events as pixmap, damage, texture etc.
-	 * needs to get resumed (acquired) or suspended (released)
-	 */
-	if(xEvent->xany.window==priv->xWindowID)
-	{
-		switch(xEvent->type)
-		{
-			case MapNotify:
-			case ConfigureNotify:
-				priv->isMapped=TRUE;
-				if(!priv->isAppSuspended) _xfdashboard_window_content_gdk_resume(self);
-				break;
-
-			case UnmapNotify:
-			case DestroyNotify:
-				priv->isMapped=FALSE;
-				_xfdashboard_window_content_gdk_suspend(self);
-				break;
-
-			default:
-				/* We do not handle this type of X event, drop through ... */
-				break;
-		}
-	}
-
-	/* Check for damage event */
-#ifdef HAVE_XDAMAGE
-	if(_xfdashboard_window_content_gdk_have_damage_extension &&
-		_xfdashboard_window_content_gdk_damage_event_base &&
-		xEvent->type==(_xfdashboard_window_content_gdk_damage_event_base + XDamageNotify) &&
-		((XDamageNotifyEvent*)xEvent)->damage==priv->damage &&
-		priv->workaroundMode==XFDASHBOARD_WINDOW_CONTENT_GDK_WORKAROUND_MODE_NONE)
-	{
-		/* Update texture for live window content */
-		clutter_content_invalidate(CLUTTER_CONTENT(self));
-	}
-#endif
-
-	return(GDK_FILTER_CONTINUE);
-}
-
-/* Release all resources used by this instance */
-static void _xfdashboard_window_content_gdk_release_resources(XfdashboardWindowContentGDK *self)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-	Display									*display;
-	gint									trapError;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-
-	priv=self->priv;
-
-	/* This live update will be suspended so remove it from queue */
-	_xfdashboard_window_content_gdk_resume_on_idle_remove(self);
-
-	/* Get display as it used more than once ;) */
-	display=gdk_x11_display_get_xdisplay(clutter_gdk_get_default_display());
-
-	/* Release resources. It might be important to release them
-	 * in reverse order as they were created.
-	 */
-	clutter_x11_trap_x_errors();
-	{
-		if(priv->texture)
-		{
-			cogl_object_unref(priv->texture);
-			priv->texture=NULL;
-		}
-
-#ifdef HAVE_XDAMAGE
-		if(priv->damage!=None)
-		{
-			XDamageDestroy(display, priv->damage);
-			XSync(display, False);
-			priv->damage=None;
-		}
-#endif
-		if(priv->pixmap!=None)
-		{
-			XFreePixmap(display, priv->pixmap);
-			priv->pixmap=None;
-		}
-
-		if(priv->xWindowID!=None)
-		{
-#ifdef HAVE_XCOMPOSITE
-			if(_xfdashboard_window_content_gdk_have_composite_extension)
-			{
-				XCompositeUnredirectWindow(display, priv->xWindowID, CompositeRedirectAutomatic);
-				XSync(display, False);
-			}
-#endif
-			priv->xWindowID=None;
-		}
-
-		/* Window is suspended now */
-		if(priv->isSuspended!=TRUE)
-		{
-			priv->isSuspended=TRUE;
-
-			/* Notify about property change */
-			g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_SUSPENDED]);
-		}
-	}
-
-	/* Check if everything went well */
-	trapError=clutter_x11_untrap_x_errors();
-	if(trapError!=0)
-	{
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"X error %d occured while releasing resources for window '%s'",
-							trapError,
-							xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-		return;
-	}
-
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Released resources for window '%s' to handle live texture updates",
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-}
-
-/* Suspend from handling live updates */
-static void _xfdashboard_window_content_gdk_suspend(XfdashboardWindowContentGDK *self)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-	Display									*display;
-	gint									trapError;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-
-	priv=self->priv;
-
-	/* This live update will be suspended so remove it from queue */
-	_xfdashboard_window_content_gdk_resume_on_idle_remove(self);
-
-	/* Get display as it used more than once ;) */
-	display=gdk_x11_display_get_xdisplay(clutter_gdk_get_default_display());
-
-	/* Release resources */
-	clutter_x11_trap_x_errors();
-	{
-		/* Suspend live updates from texture */
-		if(priv->texture && !priv->isFallback)
-		{
-#ifdef HAVE_XDAMAGE
-			cogl_texture_pixmap_x11_set_damage_object(COGL_TEXTURE_PIXMAP_X11(priv->texture), 0, 0);
-#endif
-		}
-
-		/* Release damage */
-#ifdef HAVE_XDAMAGE
-		if(priv->damage!=None)
-		{
-			XDamageDestroy(display, priv->damage);
-			XSync(display, False);
-			priv->damage=None;
-		}
-#endif
-
-		/* Release pixmap */
-		if(priv->pixmap!=None)
-		{
-			XFreePixmap(display, priv->pixmap);
-			priv->pixmap=None;
-		}
-
-		/* Window is suspended now */
-		if(priv->isSuspended!=TRUE)
-		{
-			priv->isSuspended=TRUE;
-
-			/* Notify about property change */
-			g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_SUSPENDED]);
-		}
-	}
-
-	/* Check if everything went well */
-	trapError=clutter_x11_untrap_x_errors();
-	if(trapError!=0)
-	{
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"X error %d occured while suspending '%s",
-							trapError,
-							xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-		return;
-	}
-
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Successfully suspended live texture updates for window '%s'",
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-}
-
-/* Resume to handle live window updates */
-static gboolean _xfdashboard_window_content_gdk_resume_on_idle(gpointer inUserData)
-{
-	XfdashboardWindowContentGDK				*self;
-	XfdashboardWindowContentGDKPrivate		*priv;
-	GList									*queueEntry;
-	Display									*display;
-	CoglContext								*context;
-	GError									*error;
-	gint									trapError;
-	CoglTexture								*windowTexture;
-	gboolean								doContinueSource;
-
-	error=NULL;
-	windowTexture=NULL;
-
-	/* Get window content object from first entry in queue and remove it from queue */
-	queueEntry=g_list_first(_xfdashboard_window_content_gdk_resume_idle_queue);
-	if(!queueEntry)
-	{
-		g_warning(_("Resume handler called for empty queue."));
-
-		/* Queue must be empty but ensure it will */
-		if(_xfdashboard_window_content_gdk_resume_idle_queue)
-		{
-			XFDASHBOARD_DEBUG(NULL, WINDOWS, "Ensuring that window content resume queue is empty");
-			g_list_free(_xfdashboard_window_content_gdk_resume_idle_queue);
-			_xfdashboard_window_content_gdk_resume_idle_queue=NULL;
-		}
-
-		/* Queue must be empty so remove idle source */
-		_xfdashboard_window_content_gdk_resume_idle_id=0;
-		return(G_SOURCE_REMOVE);
-	}
-
-	self=XFDASHBOARD_WINDOW_CONTENT_GDK(queueEntry->data);
-	priv=self->priv;
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Entering idle source with ID %u for window resume of '%s'",
-						_xfdashboard_window_content_gdk_resume_idle_id,
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Removing queued entry %p for window resume of '%s'",
-						queueEntry,
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-	_xfdashboard_window_content_gdk_resume_idle_queue=g_list_delete_link(_xfdashboard_window_content_gdk_resume_idle_queue, queueEntry);
-	if(_xfdashboard_window_content_gdk_resume_idle_queue)
-	{
-		doContinueSource=G_SOURCE_CONTINUE;
-	}
-		else
-		{
-			XFDASHBOARD_DEBUG(self, WINDOWS,
-								"Resume idle source with ID %u will be remove because queue is empty",
-								_xfdashboard_window_content_gdk_resume_idle_id);
-
-			doContinueSource=G_SOURCE_REMOVE;
-			_xfdashboard_window_content_gdk_resume_idle_id=0;
-		}
-
-
-	/* We need at least the X composite extension to display images of windows
-	 * if still images or live updated ones
-	 */
-	if(!_xfdashboard_window_content_gdk_have_composite_extension)
-	{
-		return(doContinueSource);
-	}
-
-	/* Get display as it used more than once ;) */
-	display=gdk_x11_display_get_xdisplay(clutter_gdk_get_default_display());
-
-	/* Set up resources */
-	clutter_x11_trap_x_errors();
-	while(1)
-	{
-#ifdef HAVE_XCOMPOSITE
-		/* Get pixmap to render texture for */
-		priv->pixmap=XCompositeNameWindowPixmap(display, priv->xWindowID);
-		XSync(display, False);
-		if(priv->pixmap==None)
-		{
-			g_warning(_("Could not get pixmap for window '%s"), xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-
-			/* Set flag to suspend window content after resuming because of error */
-			priv->suspendAfterResumeOnIdle=TRUE;
-			break;
-		}
-#else
-		/* We should never get here as existance of composite extension was checked before */
-		g_critical(_("Cannot resume window '%s' as composite extension is not available"),
-					xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-		break;
-#endif
-
-		/* Create cogl X11 texture for live updates */
-		context=clutter_backend_get_cogl_context(clutter_get_default_backend());
-		windowTexture=COGL_TEXTURE(cogl_texture_pixmap_x11_new(context, priv->pixmap, FALSE, &error));
-		if(!windowTexture || error)
-		{
-			/* Creating texture may fail if window is _NOT_ on active workspace
-			 * so display error message just as debug message (this time)
-			 */
-			XFDASHBOARD_DEBUG(self, WINDOWS,
-								"Could not create texture for window '%s': %s",
-								xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)),
-								error ? error->message : _("Unknown error"));
-			if(error)
-			{
-				g_error_free(error);
-				error=NULL;
-			}
-
-			if(windowTexture)
-			{
-				cogl_object_unref(windowTexture);
-				windowTexture=NULL;
-			}
-
-			/* Set flag to suspend window content after resuming because of error */
-			priv->suspendAfterResumeOnIdle=TRUE;
-
-			break;
-		}
-
-		/* Set up damage to get notified about changed in pixmap */
-#ifdef HAVE_XDAMAGE
-		if(_xfdashboard_window_content_gdk_have_damage_extension)
-		{
-			priv->damage=XDamageCreate(display, priv->pixmap, XDamageReportBoundingBox);
-			XSync(display, False);
-			if(priv->damage==None)
-			{
-				g_warning(_("Could not create damage for window '%s' - using still image of window"), xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-			}
-		}
-#endif
-
-		/* Release old texture (should be the fallback texture) and set new texture */
-		if(priv->texture)
-		{
-			cogl_object_unref(priv->texture);
-			priv->texture=windowTexture;
-		}
-
-		/* Set damage to new window texture */
-#ifdef HAVE_XDAMAGE
-		if(_xfdashboard_window_content_gdk_have_damage_extension &&
-			priv->damage!=None)
-		{
-			cogl_texture_pixmap_x11_set_damage_object(COGL_TEXTURE_PIXMAP_X11(priv->texture), priv->damage, COGL_TEXTURE_PIXMAP_X11_DAMAGE_BOUNDING_BOX);
-		}
-#endif
-
-		/* Now we use the window as texture and not the fallback texture anymore */
-		priv->isFallback=FALSE;
-
-		/* Window is not suspended anymore */
-		if(priv->isSuspended!=FALSE)
-		{
-			priv->isSuspended=FALSE;
-
-			/* Notify about property change */
-			g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_SUSPENDED]);
-		}
-
-		/* Invalidate content to get it redrawn as soon as possible */
-		clutter_content_invalidate(CLUTTER_CONTENT(self));
-
-		/* We were able to set up window content so this window is definitely mapped */
-		priv->isMapped=TRUE;
-
-		/* End reached so break to get out of while loop */
-		break;
-	}
-
-	/* Check if window content should be suspended again after resume was done,
-	 * e.g. initial window content creation in suspended daemon mode.
-	 */
-	if(priv->suspendAfterResumeOnIdle)
-	{
-		_xfdashboard_window_content_gdk_suspend(self);
-		priv->suspendAfterResumeOnIdle=FALSE;
-	}
-
-	/* Check if everything went well */
-	trapError=clutter_x11_untrap_x_errors();
-	if(trapError!=0)
-	{
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"X error %d occured while resuming window '%s",
-							trapError,
-							xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-		return(doContinueSource);
-	}
-
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Resuming live texture updates for window '%s'",
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-	return(doContinueSource);
-}
-
-static void _xfdashboard_window_content_gdk_resume(XfdashboardWindowContentGDK *self)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-	Display									*display;
-	CoglContext								*context;
-	GError									*error;
-	gint									trapError;
-	CoglTexture								*windowTexture;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-	g_return_if_fail(self->priv->window);
-
-	priv=self->priv;
-	error=NULL;
-	windowTexture=NULL;
-
-	/* Check if to use new experimental code to resume window content
-	 * in an idle source.
-	 */
-	if(_xfdashboard_window_content_gdk_window_creation_priority>0)
-	{
-		_xfdashboard_window_content_gdk_resume_on_idle_add(self);
-		return;
-	}
-
-	/* We need at least the X composite extension to display images of windows
-	 * if still images or live updated ones
-	 */
-	if(!_xfdashboard_window_content_gdk_have_composite_extension) return;
-
-	/* Get display as it used more than once ;) */
-	display=gdk_x11_display_get_xdisplay(clutter_gdk_get_default_display());
-
-	/* Set up resources */
-	clutter_x11_trap_x_errors();
-	while(1)
-	{
-#ifdef HAVE_XCOMPOSITE
-		/* Get pixmap to render texture for */
-		priv->pixmap=XCompositeNameWindowPixmap(display, priv->xWindowID);
-		XSync(display, False);
-		if(priv->pixmap==None)
-		{
-			g_warning(_("Could not get pixmap for window '%s"), xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-			_xfdashboard_window_content_gdk_suspend(self);
-			break;
-		}
-#else
-		/* We should never get here as existance of composite extension was checked before */
-		g_critical(_("Cannot resume window '%s' as composite extension is not available"),
-					xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-		break;
-#endif
-
-		/* Create cogl X11 texture for live updates */
-		context=clutter_backend_get_cogl_context(clutter_get_default_backend());
-		windowTexture=COGL_TEXTURE(cogl_texture_pixmap_x11_new(context, priv->pixmap, FALSE, &error));
-		if(!windowTexture || error)
-		{
-			/* Creating texture may fail if window is _NOT_ on active workspace
-			 * so display error message just as debug message (this time)
-			 */
-			XFDASHBOARD_DEBUG(self, WINDOWS,
-								"Could not create texture for window '%s': %s",
-								xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)),
-								error ? error->message : _("Unknown error"));
-			if(error)
-			{
-				g_error_free(error);
-				error=NULL;
-			}
-
-			if(windowTexture)
-			{
-				cogl_object_unref(windowTexture);
-				windowTexture=NULL;
-			}
-
-			_xfdashboard_window_content_gdk_suspend(self);
-
-			break;
-		}
-
-		/* Set up damage to get notified about changed in pixmap */
-#ifdef HAVE_XDAMAGE
-		if(_xfdashboard_window_content_gdk_have_damage_extension)
-		{
-			priv->damage=XDamageCreate(display, priv->pixmap, XDamageReportBoundingBox);
-			XSync(display, False);
-			if(priv->damage==None)
-			{
-				g_warning(_("Could not create damage for window '%s' - using still image of window"), xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-			}
-		}
-#endif
-
-		/* Release old texture (should be the fallback texture) and set new texture */
-		if(priv->texture)
-		{
-			cogl_object_unref(priv->texture);
-			priv->texture=windowTexture;
-		}
-
-		/* Set damage to new window texture */
-#ifdef HAVE_XDAMAGE
-		if(_xfdashboard_window_content_gdk_have_damage_extension &&
-			priv->damage!=None)
-		{
-			cogl_texture_pixmap_x11_set_damage_object(COGL_TEXTURE_PIXMAP_X11(priv->texture), priv->damage, COGL_TEXTURE_PIXMAP_X11_DAMAGE_BOUNDING_BOX);
-		}
-#endif
-
-		/* Now we use the window as texture and not the fallback texture anymore */
-		priv->isFallback=FALSE;
-
-		/* Window is not suspended anymore */
-		if(priv->isSuspended!=FALSE)
-		{
-			priv->isSuspended=FALSE;
-
-			/* Notify about property change */
-			g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_SUSPENDED]);
-		}
-
-		/* Invalidate content to get it redrawn as soon as possible */
-		clutter_content_invalidate(CLUTTER_CONTENT(self));
-
-		/* We were able to set up window content so this window is definitely mapped */
-		priv->isMapped=TRUE;
-
-		/* End reached so break to get out of while loop */
-		break;
-	}
-
-	/* Check if everything went well */
-	trapError=clutter_x11_untrap_x_errors();
-	if(trapError!=0)
-	{
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"X error %d occured while resuming window '%s",
-							trapError,
-							xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-		return;
-	}
-
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Resuming live texture updates for window '%s'",
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-}
-
-/* Find X window for window frame of given X window content */
-static Window _xfdashboard_window_content_gdk_get_window_frame_xid(Display *inDisplay,
-																	XfdashboardWindowTrackerWindowGDK *inWindow)
-{
-	Window				xWindowID;
-	Window				iterXWindowID;
-	Window				rootXWindowID;
-	Window				foundXWindowID;
-	GdkWindow			*gdkWindow;
-	GdkWMDecoration		gdkWindowDecoration;
-
-	g_return_val_if_fail(inDisplay, 0);
-	g_return_val_if_fail(inWindow, 0);
-
-	/* Get X window */
-	xWindowID=xfdashboard_window_tracker_window_gdk_get_xid(inWindow);
-	g_return_val_if_fail(xWindowID!=0, 0);
-
-	/* Check if window is client side decorated and if it has no decorations
-	 * so skip finding window frame and behave like we did not found it.
-	 */
-	XSync(inDisplay, False);
-	gdkWindow=gdk_x11_window_foreign_new_for_display(gdk_x11_lookup_xdisplay(inDisplay), xWindowID);
-	if(gdkWindow)
-	{
-		if(!gdk_window_get_decorations(gdkWindow, &gdkWindowDecoration) ||
-			gdkWindowDecoration==0)
-		{
-			XFDASHBOARD_DEBUG(inWindow, WINDOWS,
-								"Window '%s' has either CSD not enabled or no decorations applied so skip finding window frame",
-								xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(inWindow)));
-
-			/* Release allocated resources */
-			g_object_unref(gdkWindow);
-
-			/* Skip finding window frame and return "not-found" result */
-			return(0);
-		}
-		g_object_unref(gdkWindow);
-	}
-		else
-		{
-			XFDASHBOARD_DEBUG(inWindow, WINDOWS,
-								"Could not get window decoration from window '%s'",
-								xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(inWindow)));
-		}
-
-	/* Iterate through X window tree list upwards until root window reached.
-	 * The last X window before root window is the one we are looking for.
-	 */
-	rootXWindowID=0;
-	foundXWindowID=0;
-	for(iterXWindowID=xWindowID; iterXWindowID && iterXWindowID!=rootXWindowID; )
-	{
-		Window	*children;
-		guint	numberChildren;
-
-		children=NULL;
-		numberChildren=0;
-		foundXWindowID=iterXWindowID;
-		if(!XQueryTree(inDisplay, iterXWindowID, &rootXWindowID, &iterXWindowID, &children, &numberChildren))
-		{
-			iterXWindowID=0;
-		}
-		if(children) XFree(children);
-	}
-
-	/* Return found X window ID */
-	return(foundXWindowID);
-}
-
-/* Set window to handle and to display */
-static void _xfdashboard_window_content_gdk_set_window(XfdashboardWindowContentGDK *self, XfdashboardWindowTrackerWindowGDK *inWindow)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-	XfdashboardApplication					*application;
-	Display									*display;
-	GdkPixbuf								*windowIcon;
-	XWindowAttributes						windowAttrs;
-#if COGL_VERSION_CHECK(1, 18, 0)
-	ClutterBackend							*backend;
-	CoglContext								*context;
-	CoglError								*error;
-#endif
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-	g_return_if_fail(inWindow!=NULL && XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow));
-	g_return_if_fail(self->priv->window==NULL);
-	g_return_if_fail(self->priv->xWindowID==0);
-
-	priv=self->priv;
-
-	/* Freeze notifications and collect them */
-	g_object_freeze_notify(G_OBJECT(self));
-
-	/* Get display as it used more than once ;) */
-	display=gdk_x11_display_get_xdisplay(clutter_gdk_get_default_display());
-
-	/* Set new value */
-	priv->window=inWindow;
-
-	/* Create fallback texture first in case we cannot create
-	 * a live updated texture for window in the next steps
-	 */
-	windowIcon=xfdashboard_window_tracker_window_get_icon(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window));
-#if COGL_VERSION_CHECK(1, 18, 0)
-	error=NULL;
-
-	backend=clutter_get_default_backend();
-	context=clutter_backend_get_cogl_context(backend);
-	priv->texture=cogl_texture_2d_new_from_data(context,
-												gdk_pixbuf_get_width(windowIcon),
-												gdk_pixbuf_get_height(windowIcon),
-												gdk_pixbuf_get_has_alpha(windowIcon) ? COGL_PIXEL_FORMAT_RGBA_8888 : COGL_PIXEL_FORMAT_RGB_888,
-												gdk_pixbuf_get_rowstride(windowIcon),
-												gdk_pixbuf_get_pixels(windowIcon),
-												&error);
-
-	if(!priv->texture || error)
-	{
-		/* Show warning */
-		g_warning(_("Could not create fallback texture for window '%s': %s"),
-					xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)),
-					(error && error->message) ? error->message : _("Unknown error"));
-
-		/* Release allocated resources */
-		if(priv->texture)
-		{
-			cogl_object_unref(priv->texture);
-			priv->texture=NULL;
-		}
-
-		if(error)
-		{
-			cogl_error_free(error);
-			error=NULL;
-		}
-	}
-#else
-	priv->texture=cogl_texture_new_from_data(gdk_pixbuf_get_width(windowIcon),
-												gdk_pixbuf_get_height(windowIcon),
-												COGL_TEXTURE_NONE,
-												gdk_pixbuf_get_has_alpha(windowIcon) ? COGL_PIXEL_FORMAT_RGBA_8888 : COGL_PIXEL_FORMAT_RGB_888,
-												COGL_PIXEL_FORMAT_ANY,
-												gdk_pixbuf_get_rowstride(windowIcon),
-												gdk_pixbuf_get_pixels(windowIcon));
-#endif
-
-	priv->isFallback=TRUE;
-
-	/* Get X window and its attributes */
-	if(priv->includeWindowFrame)
-	{
-		priv->xWindowID=_xfdashboard_window_content_gdk_get_window_frame_xid(display, priv->window);
-	}
-
-	if(!priv->xWindowID)
-	{
-		priv->xWindowID=xfdashboard_window_tracker_window_gdk_get_xid(priv->window);
-	}
-
-	if(!XGetWindowAttributes(display, priv->xWindowID, &windowAttrs))
-	{
-		g_warning(_("Could not get attributes of window '%s'"), xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window)));
-		XSync(display, False);
-	}
-
-	/* We need at least the X composite extension to display images of windows
-	 * if still images or live updated ones by redirecting window
-	 */
-#ifdef HAVE_XCOMPOSITE
-	if(_xfdashboard_window_content_gdk_have_composite_extension)
-	{
-		/* Redirect window */
-		XCompositeRedirectWindow(display, priv->xWindowID, CompositeRedirectAutomatic);
-		XSync(display, False);
-	}
-#endif
-
-	/* We are interested in receiving mapping events of windows */
-	XSelectInput(display, priv->xWindowID, windowAttrs.your_event_mask | StructureNotifyMask);
-
-	/* Acquire new window and handle live updates */
-	_xfdashboard_window_content_gdk_resume(self);
-	priv->isMapped=!priv->isSuspended;
-
-	/* But suspend window immediately again if application is suspended
-	 * (xfdashboard runs in daemon mode and is not active currently)
-	 */
-	application=xfdashboard_application_get_default();
-	if(xfdashboard_application_is_suspended(application))
-	{
-		if(_xfdashboard_window_content_gdk_window_creation_priority>0)
-		{
-			priv->suspendAfterResumeOnIdle=TRUE;
-		}
-			else
-			{
-				_xfdashboard_window_content_gdk_suspend(self);
-			}
-	}
-
-	/* Notify about property change */
-	g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_WINDOW]);
-
-	/* Thaw notifications and send them now */
-	g_object_thaw_notify(G_OBJECT(self));
-
-	/* Set up workaround mechanism for unmapped windows if wanted and needed */
-	_xfdashboard_window_content_gdk_setup_workaround(self, inWindow);
-}
-
-
-/* IMPLEMENTATION: ClutterContent */
-
-/* Paint texture */
-static void _xdashboard_window_content_clutter_content_iface_paint_content(ClutterContent *inContent,
-																			ClutterActor *inActor,
-																			ClutterPaintNode *inRootNode)
-{
-	XfdashboardWindowContentGDK				*self=XFDASHBOARD_WINDOW_CONTENT_GDK(inContent);
-	XfdashboardWindowContentGDKPrivate		*priv=self->priv;
-	ClutterScalingFilter					minFilter, magFilter;
-	ClutterPaintNode						*node;
-	ClutterActorBox							textureAllocationBox;
-	ClutterActorBox							textureCoordBox;
-	ClutterActorBox							outlineBox;
-	ClutterColor							color;
-	guint8									opacity;
-	ClutterColor							outlineColor;
-	ClutterActorBox							outlinePath;
-
-	/* Check if we have a texture to paint */
-	if(priv->texture==NULL) return;
-
-	/* Get needed data for painting */
-	clutter_actor_box_init(&textureCoordBox, 0.0f, 0.0f, 1.0f, 1.0f);
-	clutter_actor_get_content_box(inActor, &textureAllocationBox);
-	clutter_actor_get_content_box(inActor, &outlineBox);
-	clutter_actor_get_content_scaling_filters(inActor, &minFilter, &magFilter);
-	opacity=clutter_actor_get_paint_opacity(inActor);
-
-	color.red=opacity;
-	color.green=opacity;
-	color.blue=opacity;
-	color.alpha=opacity;
-
-	/* Draw background if texture is a fallback */
-	if(priv->isFallback)
-	{
-		ClutterColor					backgroundColor;
-
-		/* Set up background color */
-		backgroundColor.red=0;
-		backgroundColor.green=0;
-		backgroundColor.blue=0;
-		backgroundColor.alpha=opacity;
-
-		/* Draw background */
-		node=clutter_color_node_new(&backgroundColor);
-		clutter_paint_node_set_name(node, "fallback-background");
-		clutter_paint_node_add_rectangle(node, &outlineBox);
-		clutter_paint_node_add_child(inRootNode, node);
-		clutter_paint_node_unref(node);
-	}
-
-	/* Determine actor box allocation to draw texture into when unmapped window
-	 * icon (fallback) will be drawn. We can skip calculation if unmapped window
-	 * icon should be expanded in both (x and y) direction.
-	 */
-	if(priv->isFallback &&
-		(!priv->unmappedWindowIconXFill || !priv->unmappedWindowIconYFill))
-	{
-		gfloat							allocationWidth;
-		gfloat							allocationHeight;
-
-		/* Get width and height of allocation */
-		allocationWidth=(outlineBox.x2-outlineBox.x1);
-		allocationHeight=(outlineBox.y2-outlineBox.y1);
-
-		/* Determine left and right boundary of unmapped window icon
-		 * if unmapped window icon should not expand in X axis.
-		 */
-		if(!priv->unmappedWindowIconXFill)
-		{
-			gfloat						offset;
-			gfloat						textureWidth;
-			gfloat						oversize;
-
-			/* Get scaled width of unmapped window icon */
-			textureWidth=cogl_texture_get_width(priv->texture);
-			textureWidth*=priv->unmappedWindowIconXScale;
-
-			/* Get boundary in X axis depending on gravity and scaled width */
-			offset=(priv->unmappedWindowIconXAlign*allocationWidth);
-			switch(priv->unmappedWindowIconAnchorPoint)
-			{
-				/* Align to left boundary.
-				 * This is also the default if gravity is none or undefined.
-				 */
-				default:
-				case XFDASHBOARD_ANCHOR_POINT_NONE:
-				case XFDASHBOARD_ANCHOR_POINT_WEST:
-				case XFDASHBOARD_ANCHOR_POINT_NORTH_WEST:
-				case XFDASHBOARD_ANCHOR_POINT_SOUTH_WEST:
-					break;
-
-				/* Align to center of X axis */
-				case XFDASHBOARD_ANCHOR_POINT_CENTER:
-				case XFDASHBOARD_ANCHOR_POINT_NORTH:
-				case XFDASHBOARD_ANCHOR_POINT_SOUTH:
-					offset-=(textureWidth/2.0f);
-					break;
-
-				/* Align to right boundary */
-				case XFDASHBOARD_ANCHOR_POINT_EAST:
-				case XFDASHBOARD_ANCHOR_POINT_NORTH_EAST:
-				case XFDASHBOARD_ANCHOR_POINT_SOUTH_EAST:
-					offset-=textureWidth;
-					break;
-			}
-
-			/* Set boundary in X axis */
-			textureAllocationBox.x1=outlineBox.x1+offset;
-			textureAllocationBox.x2=textureAllocationBox.x1+textureWidth;
-
-			/* Clip texture in X axis if it does not fit into allocation */
-			if(textureAllocationBox.x1<outlineBox.x1)
-			{
-				oversize=outlineBox.x1-textureAllocationBox.x1;
-				textureCoordBox.x1=oversize/textureWidth;
-				textureAllocationBox.x1=outlineBox.x1;
-			}
-
-			if(textureAllocationBox.x2>outlineBox.x2)
-			{
-				oversize=textureAllocationBox.x2-outlineBox.x2;
-				textureCoordBox.x2=1.0f-(oversize/textureWidth);
-				textureAllocationBox.x2=outlineBox.x2;
-			}
-		}
-
-		/* Determine left and right boundary of unmapped window icon
-		 * if unmapped window icon should not expand in X axis.
-		 */
-		if(!priv->unmappedWindowIconYFill)
-		{
-			gfloat						offset;
-			gfloat						textureHeight;
-			gfloat						oversize;
-
-			/* Get scaled width of unmapped window icon */
-			textureHeight=cogl_texture_get_height(priv->texture);
-			textureHeight*=priv->unmappedWindowIconYScale;
-
-			/* Get boundary in Y axis depending on gravity and scaled width */
-			offset=(priv->unmappedWindowIconYAlign*allocationHeight);
-			switch(priv->unmappedWindowIconAnchorPoint)
-			{
-				/* Align to upper boundary.
-				 * This is also the default if gravity is none or undefined.
-				 */
-				default:
-				case XFDASHBOARD_ANCHOR_POINT_NONE:
-				case XFDASHBOARD_ANCHOR_POINT_NORTH:
-				case XFDASHBOARD_ANCHOR_POINT_NORTH_WEST:
-				case XFDASHBOARD_ANCHOR_POINT_NORTH_EAST:
-					break;
-
-				/* Align to center of Y axis */
-				case XFDASHBOARD_ANCHOR_POINT_CENTER:
-				case XFDASHBOARD_ANCHOR_POINT_WEST:
-				case XFDASHBOARD_ANCHOR_POINT_EAST:
-					offset-=(textureHeight/2.0f);
-					break;
-
-				/* Align to lower boundary */
-				case XFDASHBOARD_ANCHOR_POINT_SOUTH:
-				case XFDASHBOARD_ANCHOR_POINT_SOUTH_WEST:
-				case XFDASHBOARD_ANCHOR_POINT_SOUTH_EAST:
-					offset-=textureHeight;
-					break;
-			}
-
-			/* Set boundary in Y axis */
-			textureAllocationBox.y1=outlineBox.y1+offset;
-			textureAllocationBox.y2=textureAllocationBox.y1+textureHeight;
-
-			/* Clip texture in Y axis if it does not fit into allocation */
-			if(textureAllocationBox.y1<outlineBox.y1)
-			{
-				oversize=outlineBox.y1-textureAllocationBox.y1;
-				textureCoordBox.y1=oversize/textureHeight;
-				textureAllocationBox.y1=outlineBox.y1;
-			}
-
-			if(textureAllocationBox.y2>outlineBox.y2)
-			{
-				oversize=textureAllocationBox.y2-outlineBox.y2;
-				textureCoordBox.y2=1.0f-(oversize/textureHeight);
-				textureAllocationBox.y2=outlineBox.y2;
-			}
-		}
-	}
-
-	/* Set up paint nodes for texture */
-	node=clutter_texture_node_new(priv->texture, &color, minFilter, magFilter);
-	clutter_paint_node_set_name(node, G_OBJECT_TYPE_NAME(self));
-	clutter_paint_node_add_texture_rectangle(node,
-												&textureAllocationBox,
-												textureCoordBox.x1,
-												textureCoordBox.y1,
-												textureCoordBox.x2,
-												textureCoordBox.y2);
-	clutter_paint_node_add_child(inRootNode, node);
-	clutter_paint_node_unref(node);
-
-	/* Draw outline (color is depending is texture is fallback or not.
-	 * That should be done last to get outline always visible
-	 */
-	if(priv->isFallback || priv->outlineColor==NULL)
-	{
-		outlineColor.red=0xff;
-		outlineColor.green=0xff;
-		outlineColor.blue=0xff;
-		outlineColor.alpha=opacity;
-	}
-		else
-		{
-			outlineColor.red=priv->outlineColor->red;
-			outlineColor.green=priv->outlineColor->green;
-			outlineColor.blue=priv->outlineColor->blue;
-			outlineColor.alpha=opacity;
-		}
-
-	node=clutter_color_node_new(&outlineColor);
-	clutter_paint_node_set_name(node, "outline-top");
-	clutter_actor_box_init_rect(&outlinePath, outlineBox.x1, 0.0f, outlineBox.x2-outlineBox.x1, priv->outlineWidth);
-	clutter_paint_node_add_rectangle(node, &outlinePath);
-	clutter_paint_node_add_child(inRootNode, node);
-	clutter_paint_node_unref(node);
-
-	node=clutter_color_node_new(&outlineColor);
-	clutter_paint_node_set_name(node, "outline-bottom");
-	clutter_actor_box_init_rect(&outlinePath, outlineBox.x1, outlineBox.y2-priv->outlineWidth, outlineBox.x2-outlineBox.x1, priv->outlineWidth);
-	clutter_paint_node_add_rectangle(node, &outlinePath);
-	clutter_paint_node_add_child(inRootNode, node);
-	clutter_paint_node_unref(node);
-
-	node=clutter_color_node_new(&outlineColor);
-	clutter_paint_node_set_name(node, "outline-left");
-	clutter_actor_box_init_rect(&outlinePath, outlineBox.x1, outlineBox.y1, priv->outlineWidth, outlineBox.y2-outlineBox.y1);
-	clutter_paint_node_add_rectangle(node, &outlinePath);
-	clutter_paint_node_add_child(inRootNode, node);
-	clutter_paint_node_unref(node);
-
-	node=clutter_color_node_new(&outlineColor);
-	clutter_paint_node_set_name(node, "outline-right");
-	clutter_actor_box_init_rect(&outlinePath, outlineBox.x2-priv->outlineWidth, outlineBox.y1, priv->outlineWidth, outlineBox.y2-outlineBox.y1);
-	clutter_paint_node_add_rectangle(node, &outlinePath);
-	clutter_paint_node_add_child(inRootNode, node);
-	clutter_paint_node_unref(node);
-}
-
-/* Get preferred size of texture */
-static gboolean _xdashboard_window_content_clutter_content_iface_get_preferred_size(ClutterContent *inContent,
-																					gfloat *outWidth,
-																					gfloat *outHeight)
-{
-	XfdashboardWindowContentGDKPrivate		*priv=XFDASHBOARD_WINDOW_CONTENT_GDK(inContent)->priv;
-	gfloat									w, h;
-
-	/* No texture - no size to retrieve */
-	if(priv->texture==NULL) return(FALSE);
-
-	/* If window is suspended or if we use the fallback image
-	 * get real window size ...
-	 */
-	if(priv->isFallback || priv->isSuspended)
-	{
-		/* Is a fallback texture so get real window size */
-		gint							windowW, windowH;
-
-		xfdashboard_window_tracker_window_get_geometry(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window), NULL, NULL, &windowW, &windowH);
-		w=windowW;
-		h=windowH;
-	}
-		else
-		{
-			/* ... otherwise get size of texture */
-			w=cogl_texture_get_width(priv->texture);
-			h=cogl_texture_get_height(priv->texture);
-		}
-
-	/* Set result values */
-	if(outWidth) *outWidth=w;
-	if(outHeight) *outHeight=h;
-
-	return(TRUE);
-}
-
-/* Initialize interface of type ClutterContent */
-static void _xfdashboard_window_content_clutter_content_iface_init(ClutterContentIface *iface)
-{
-	iface->get_preferred_size=_xdashboard_window_content_clutter_content_iface_get_preferred_size;
-	iface->paint_content=_xdashboard_window_content_clutter_content_iface_paint_content;
-}
-
-/* IMPLEMENTATION: Interface XfdashboardStylable */
-
-/* Get stylable properties of stage */
-static void _xfdashboard_window_content_gdk_stylable_get_stylable_properties(XfdashboardStylable *self,
-																			GHashTable *ioStylableProperties)
-{
-	g_return_if_fail(XFDASHBOARD_IS_STYLABLE(self));
-
-	/* Add stylable properties to hashtable */
-	xfdashboard_stylable_add_stylable_property(self, ioStylableProperties, "include-window-frame");
-	xfdashboard_stylable_add_stylable_property(self, ioStylableProperties, "unmapped-window-icon-x-fill");
-	xfdashboard_stylable_add_stylable_property(self, ioStylableProperties, "unmapped-window-icon-y-fill");
-	xfdashboard_stylable_add_stylable_property(self, ioStylableProperties, "unmapped-window-icon-x-align");
-	xfdashboard_stylable_add_stylable_property(self, ioStylableProperties, "unmapped-window-icon-y-align");
-	xfdashboard_stylable_add_stylable_property(self, ioStylableProperties, "unmapped-window-icon-x-scale");
-	xfdashboard_stylable_add_stylable_property(self, ioStylableProperties, "unmapped-window-icon-y-scale");
-	xfdashboard_stylable_add_stylable_property(self, ioStylableProperties, "unmapped-window-icon-anchor-point");
-}
-
-/* Get/set style classes of stage */
-static const gchar* _xfdashboard_window_content_gdk_stylable_get_classes(XfdashboardStylable *inStylable)
-{
-	/* Not implemented */
-	return(NULL);
-}
-
-static void _xfdashboard_window_content_gdk_stylable_set_classes(XfdashboardStylable *inStylable, const gchar *inStyleClasses)
-{
-	/* Not implemented */
-}
-
-/* Get/set style pseudo-classes of stage */
-static const gchar* _xfdashboard_window_content_gdk_stylable_get_pseudo_classes(XfdashboardStylable *inStylable)
-{
-	/* Not implemented */
-	return(NULL);
-}
-
-static void _xfdashboard_window_content_gdk_stylable_set_pseudo_classes(XfdashboardStylable *inStylable, const gchar *inStylePseudoClasses)
-{
-	/* Not implemented */
-}
-
-/* Interface initialization
- * Set up default functions
- */
-void _xfdashboard_window_content_gdk_stylable_iface_init(XfdashboardStylableInterface *iface)
-{
-	iface->get_stylable_properties=_xfdashboard_window_content_gdk_stylable_get_stylable_properties;
-	iface->get_classes=_xfdashboard_window_content_gdk_stylable_get_classes;
-	iface->set_classes=_xfdashboard_window_content_gdk_stylable_set_classes;
-	iface->get_pseudo_classes=_xfdashboard_window_content_gdk_stylable_get_pseudo_classes;
-	iface->set_pseudo_classes=_xfdashboard_window_content_gdk_stylable_set_pseudo_classes;
-}
-
-/* IMPLEMENTATION: GObject */
-
-/* Dispose this object */
-static void _xfdashboard_window_content_gdk_dispose(GObject *inObject)
-{
-	XfdashboardWindowContentGDK				*self=XFDASHBOARD_WINDOW_CONTENT_GDK(inObject);
-	XfdashboardWindowContentGDKPrivate		*priv=self->priv;
-
-	/* Dispose allocated resources */
-	gdk_window_remove_filter(NULL, _xfdashboard_window_content_gdk_on_gdk_event, self);
-
-	_xfdashboard_window_content_gdk_release_resources(self);
-
-	if(priv->workaroundStateSignalID)
-	{
-		g_signal_handler_disconnect(priv->windowTracker, priv->workaroundStateSignalID);
-		priv->workaroundStateSignalID=0;
-
-		/* This signal was still connected to the window tracker so the window may be unminized
-		 * and need to ensure it is minimized again. We need to do this now, before we release
-		 * our handle to the window (priv->window).
-		 */
-		xfdashboard_window_tracker_window_hide(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->window));
-	}
-
-	if(priv->windowTracker)
-	{
-		g_signal_handlers_disconnect_by_data(priv->windowTracker, self);
-		g_object_unref(priv->windowTracker);
-		priv->windowTracker=NULL;
-	}
-
-	if(priv->window)
-	{
-		/* Disconnect signals */
-		g_signal_handlers_disconnect_by_data(priv->window, self);
-
-		/* libwnck resources should never be freed. Just set to NULL */
-		priv->window=NULL;
-	}
-
-	if(priv->suspendSignalID)
-	{
-		g_signal_handler_disconnect(xfdashboard_application_get_default(), priv->suspendSignalID);
-		priv->suspendSignalID=0;
-	}
-
-	if(priv->outlineColor)
-	{
-		clutter_color_free(priv->outlineColor);
-		priv->outlineColor=NULL;
-	}
-
-	if(priv->styleClasses)
-	{
-		g_free(priv->styleClasses);
-		priv->styleClasses=NULL;
-	}
-
-	if(priv->stylePseudoClasses)
-	{
-		g_free(priv->stylePseudoClasses);
-		priv->stylePseudoClasses=NULL;
-	}
-
-	/* Call parent's class dispose method */
-	G_OBJECT_CLASS(xfdashboard_window_content_gdk_parent_class)->dispose(inObject);
-}
-
-/* Set/get properties */
-static void _xfdashboard_window_content_gdk_set_property(GObject *inObject,
-												guint inPropID,
-												const GValue *inValue,
-												GParamSpec *inSpec)
-{
-	XfdashboardWindowContentGDK		*self=XFDASHBOARD_WINDOW_CONTENT_GDK(inObject);
-
-	switch(inPropID)
-	{
-		case PROP_WINDOW:
-			_xfdashboard_window_content_gdk_set_window(self, XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(g_value_get_object(inValue)));
-			break;
-
-		case PROP_OUTLINE_COLOR:
-			xfdashboard_window_content_gdk_set_outline_color(self, clutter_value_get_color(inValue));
-			break;
-
-		case PROP_OUTLINE_WIDTH:
-			xfdashboard_window_content_gdk_set_outline_width(self, g_value_get_float(inValue));
-			break;
-
-		case PROP_INCLUDE_WINDOW_FRAME:
-			xfdashboard_window_content_gdk_set_include_window_frame(self, g_value_get_boolean(inValue));
-			break;
-
-		case PROP_UNMAPPED_WINDOW_ICON_X_FILL:
-			xfdashboard_window_content_gdk_set_unmapped_window_icon_x_fill(self, g_value_get_boolean(inValue));
-			break;
-
-		case PROP_UNMAPPED_WINDOW_ICON_Y_FILL:
-			xfdashboard_window_content_gdk_set_unmapped_window_icon_y_fill(self, g_value_get_boolean(inValue));
-			break;
-
-		case PROP_UNMAPPED_WINDOW_ICON_X_ALIGN:
-			xfdashboard_window_content_gdk_set_unmapped_window_icon_x_align(self, g_value_get_float(inValue));
-			break;
-
-		case PROP_UNMAPPED_WINDOW_ICON_Y_ALIGN:
-			xfdashboard_window_content_gdk_set_unmapped_window_icon_y_align(self, g_value_get_float(inValue));
-			break;
-
-		case PROP_UNMAPPED_WINDOW_ICON_X_SCALE:
-			xfdashboard_window_content_gdk_set_unmapped_window_icon_x_scale(self, g_value_get_float(inValue));
-			break;
-
-		case PROP_UNMAPPED_WINDOW_ICON_Y_SCALE:
-			xfdashboard_window_content_gdk_set_unmapped_window_icon_y_scale(self, g_value_get_float(inValue));
-			break;
-
-		case PROP_UNMAPPED_WINDOW_ICON_ANCHOR_POINT:
-			xfdashboard_window_content_gdk_set_unmapped_window_icon_anchor_point(self, g_value_get_enum(inValue));
-			break;
-
-		case PROP_STYLE_CLASSES:
-			_xfdashboard_window_content_gdk_stylable_set_classes(XFDASHBOARD_STYLABLE(self), g_value_get_string(inValue));
-			break;
-
-		case PROP_STYLE_PSEUDO_CLASSES:
-			_xfdashboard_window_content_gdk_stylable_set_pseudo_classes(XFDASHBOARD_STYLABLE(self), g_value_get_string(inValue));
-			break;
-
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
-			break;
-	}
-}
-
-static void _xfdashboard_window_content_gdk_get_property(GObject *inObject,
-												guint inPropID,
-												GValue *outValue,
-												GParamSpec *inSpec)
-{
-	XfdashboardWindowContentGDK				*self=XFDASHBOARD_WINDOW_CONTENT_GDK(inObject);
-	XfdashboardWindowContentGDKPrivate		*priv=self->priv;
-
-	switch(inPropID)
-	{
-		case PROP_WINDOW:
-			g_value_set_object(outValue, priv->window);
-			break;
-
-		case PROP_SUSPENDED:
-			g_value_set_boolean(outValue, priv->isSuspended);
-			break;
-
-		case PROP_OUTLINE_COLOR:
-			clutter_value_set_color(outValue, priv->outlineColor);
-			break;
-
-		case PROP_OUTLINE_WIDTH:
-			g_value_set_float(outValue, priv->outlineWidth);
-			break;
-
-		case PROP_INCLUDE_WINDOW_FRAME:
-			g_value_set_boolean(outValue, priv->includeWindowFrame);
-			break;
-
-		case PROP_UNMAPPED_WINDOW_ICON_X_FILL:
-			g_value_set_boolean(outValue, priv->unmappedWindowIconXFill);
-			break;
-
-		case PROP_UNMAPPED_WINDOW_ICON_Y_FILL:
-			g_value_set_boolean(outValue, priv->unmappedWindowIconYFill);
-			break;
-
-		case PROP_UNMAPPED_WINDOW_ICON_X_ALIGN:
-			g_value_set_float(outValue, priv->unmappedWindowIconXAlign);
-			break;
-
-		case PROP_UNMAPPED_WINDOW_ICON_Y_ALIGN:
-			g_value_set_float(outValue, priv->unmappedWindowIconYAlign);
-			break;
-
-		case PROP_UNMAPPED_WINDOW_ICON_X_SCALE:
-			g_value_set_float(outValue, priv->unmappedWindowIconXScale);
-			break;
-
-		case PROP_UNMAPPED_WINDOW_ICON_Y_SCALE:
-			g_value_set_float(outValue, priv->unmappedWindowIconYScale);
-			break;
-
-		case PROP_UNMAPPED_WINDOW_ICON_ANCHOR_POINT:
-			g_value_set_enum(outValue, priv->unmappedWindowIconAnchorPoint);
-			break;
-
-		case PROP_STYLE_CLASSES:
-			g_value_set_string(outValue, priv->styleClasses);
-			break;
-
-		case PROP_STYLE_PSEUDO_CLASSES:
-			g_value_set_string(outValue, priv->stylePseudoClasses);
-			break;
-
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
-			break;
-	}
-}
-
-/* Class initialization
- * Override functions in parent classes and define properties
- * and signals
- */
-void xfdashboard_window_content_gdk_class_init(XfdashboardWindowContentGDKClass *klass)
-{
-	GObjectClass					*gobjectClass=G_OBJECT_CLASS(klass);
-	XfdashboardStylableInterface	*stylableIface;
-	GParamSpec						*paramSpec;
-
-	/* Override functions */
-	gobjectClass->dispose=_xfdashboard_window_content_gdk_dispose;
-	gobjectClass->set_property=_xfdashboard_window_content_gdk_set_property;
-	gobjectClass->get_property=_xfdashboard_window_content_gdk_get_property;
-
-	stylableIface=g_type_default_interface_ref(XFDASHBOARD_TYPE_STYLABLE);
-
-	/* Set up private structure */
-	g_type_class_add_private(klass, sizeof(XfdashboardWindowContentGDKPrivate));
-
-	/* Define properties */
-	XfdashboardWindowContentGDKProperties[PROP_WINDOW]=
-		g_param_spec_object("window",
-							_("Window"),
-							_("The window to handle and display"),
-							XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW,
-							G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
-
-	XfdashboardWindowContentGDKProperties[PROP_SUSPENDED]=
-		g_param_spec_boolean("suspended",
-							_("Suspended"),
-							_("Is this window suspended"),
-							TRUE,
-							G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
-
-	XfdashboardWindowContentGDKProperties[PROP_OUTLINE_COLOR]=
-		clutter_param_spec_color("outline-color",
-									_("Outline color"),
-									_("Color to draw outline of mapped windows with"),
-									CLUTTER_COLOR_Black,
-									G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	XfdashboardWindowContentGDKProperties[PROP_OUTLINE_WIDTH]=
-		g_param_spec_float("outline-width",
-							_("Outline width"),
-							_("Width of line used to draw outline of mapped windows"),
-							0.0f, G_MAXFLOAT,
-							1.0f,
-							G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	XfdashboardWindowContentGDKProperties[PROP_INCLUDE_WINDOW_FRAME]=
-		g_param_spec_boolean("include-window-frame",
-							_("Include window frame"),
-							_("Whether the window frame should be included or only the window content should be shown"),
-							FALSE,
-							G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	XfdashboardWindowContentGDKProperties[PROP_UNMAPPED_WINDOW_ICON_X_FILL]=
-		g_param_spec_boolean("unmapped-window-icon-x-fill",
-							_("Unmapped window icon X fill"),
-							_("Whether the unmapped window icon should fill up horizontal space"),
-							TRUE,
-							G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	XfdashboardWindowContentGDKProperties[PROP_UNMAPPED_WINDOW_ICON_Y_FILL]=
-		g_param_spec_boolean("unmapped-window-icon-y-fill",
-							_("Unmapped window icon y fill"),
-							_("Whether the unmapped window icon should fill up vertical space"),
-							TRUE,
-							G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	XfdashboardWindowContentGDKProperties[PROP_UNMAPPED_WINDOW_ICON_X_ALIGN]=
-		g_param_spec_float("unmapped-window-icon-x-align",
-							_("Unmapped window icon X align"),
-							_("The alignment of the unmapped window icon on the X axis within the allocation in normalized coordinate between 0 and 1"),
-							0.0f, 1.0f,
-							0.0f,
-							G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	XfdashboardWindowContentGDKProperties[PROP_UNMAPPED_WINDOW_ICON_Y_ALIGN]=
-		g_param_spec_float("unmapped-window-icon-y-align",
-							_("Unmapped window icon Y align"),
-							_("The alignment of the unmapped window icon on the Y axis within the allocation in normalized coordinate between 0 and 1"),
-							0.0f, 1.0f,
-							0.0f,
-							G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	XfdashboardWindowContentGDKProperties[PROP_UNMAPPED_WINDOW_ICON_X_SCALE]=
-		g_param_spec_float("unmapped-window-icon-x-scale",
-							_("Unmapped window icon X scale"),
-							_("Scale factor of unmapped window icon on the X axis"),
-							0.0f, G_MAXFLOAT,
-							1.0f,
-							G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	XfdashboardWindowContentGDKProperties[PROP_UNMAPPED_WINDOW_ICON_Y_SCALE]=
-		g_param_spec_float("unmapped-window-icon-y-scale",
-							_("Unmapped window icon Y scale"),
-							_("Scale factor of unmapped window icon on the Y axis"),
-							0.0f, G_MAXFLOAT,
-							1.0f,
-							G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	XfdashboardWindowContentGDKProperties[PROP_UNMAPPED_WINDOW_ICON_ANCHOR_POINT]=
-		g_param_spec_enum("unmapped-window-icon-anchor-point",
-							_("Unmapped window icon anchor point"),
-							_("The anchor point of unmapped window icon"),
-							XFDASHBOARD_TYPE_ANCHOR_POINT,
-							XFDASHBOARD_ANCHOR_POINT_NONE,
-							G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	paramSpec=g_object_interface_find_property(stylableIface, "style-classes");
-	XfdashboardWindowContentGDKProperties[PROP_STYLE_CLASSES]=
-		g_param_spec_override("style-classes", paramSpec);
-
-	paramSpec=g_object_interface_find_property(stylableIface, "style-pseudo-classes");
-	XfdashboardWindowContentGDKProperties[PROP_STYLE_PSEUDO_CLASSES]=
-		g_param_spec_override("style-pseudo-classes", paramSpec);
-
-	g_object_class_install_properties(gobjectClass, PROP_LAST, XfdashboardWindowContentGDKProperties);
-
-	/* Release allocated resources */
-	g_type_default_interface_unref(stylableIface);
-}
-
-/* Object initialization
- * Create private structure and set up default values
- */
-void xfdashboard_window_content_gdk_init(XfdashboardWindowContentGDK *self)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-	XfdashboardApplication				*app;
-
-	priv=self->priv=XFDASHBOARD_WINDOW_CONTENT_GDK_GET_PRIVATE(self);
-
-	/* Set default values */
-	priv->window=NULL;
-	priv->texture=NULL;
-	priv->xWindowID=None;
-	priv->pixmap=None;
-#ifdef HAVE_XDAMAGE
-	priv->damage=None;
-#endif
-	priv->isFallback=FALSE;
-	priv->outlineColor=clutter_color_copy(CLUTTER_COLOR_Black);
-	priv->outlineWidth=1.0f;
-	priv->isSuspended=TRUE;
-	priv->suspendSignalID=0;
-	priv->isMapped=FALSE;
-	priv->includeWindowFrame=FALSE;
-	priv->styleClasses=NULL;
-	priv->stylePseudoClasses=NULL;
-	priv->windowTracker=xfdashboard_window_tracker_get_default();
-	priv->workaroundMode=XFDASHBOARD_WINDOW_CONTENT_GDK_WORKAROUND_MODE_NONE;
-	priv->workaroundStateSignalID=0;
-	priv->unmappedWindowIconXFill=FALSE;
-	priv->unmappedWindowIconYFill=FALSE;
-	priv->unmappedWindowIconXAlign=0.0f;
-	priv->unmappedWindowIconYAlign=0.0f;
-	priv->unmappedWindowIconXScale=1.0f;
-	priv->unmappedWindowIconYScale=1.0f;
-	priv->unmappedWindowIconAnchorPoint=XFDASHBOARD_ANCHOR_POINT_NONE;
-	priv->suspendAfterResumeOnIdle=FALSE;
-
-	/* Check extensions (will only be done once) */
-	_xfdashboard_window_content_gdk_check_extension();
-
-	/* Add event filter for this instance */
-	gdk_window_add_filter(NULL, _xfdashboard_window_content_gdk_on_gdk_event, self);
-
-	/* Style content */
-	xfdashboard_stylable_invalidate(XFDASHBOARD_STYLABLE(self));
-
-	/* Handle suspension signals from application */
-	app=xfdashboard_application_get_default();
-	priv->suspendSignalID=g_signal_connect_swapped(app,
-													"notify::is-suspended",
-													G_CALLBACK(_xfdashboard_window_content_gdk_on_application_suspended_changed),
-													self);
-	priv->isAppSuspended=xfdashboard_application_is_suspended(app);
-
-	/* Register global signal handler for xfconf value change notification
-	 * if not done already.
-	 */
-	if(!_xfdashboard_window_content_gdk_xfconf_priority_notify_id)
-	{
-		XfconfChannel					*xfconfChannel;
-		gchar							*detailedSignal;
-
-		/* Connect to property changed signal in xfconf */
-		xfconfChannel=xfdashboard_application_get_xfconf_channel(NULL);
-		detailedSignal=g_strconcat("property-changed::", WINDOW_CONTENT_CREATION_PRIORITY_XFCONF_PROP, NULL);
-		_xfdashboard_window_content_gdk_xfconf_priority_notify_id=g_signal_connect(xfconfChannel,
-																				detailedSignal,
-																				G_CALLBACK(_xfdashboard_window_content_gdk_on_window_creation_priority_value_changed),
-																				NULL);
-		if(detailedSignal) g_free(detailedSignal);
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"Connected to property changed signal with handler ID %u for xfconf value change notifications",
-							_xfdashboard_window_content_gdk_xfconf_priority_notify_id);
-
-		/* Connect to application shutdown signal for xfconf value change notification */
-		_xfdashboard_window_content_gdk_window_creation_shutdown_signal_id=g_signal_connect(app,
-																				"shutdown-final",
-																				G_CALLBACK(_xfdashboard_window_content_gdk_on_window_creation_priority_shutdown),
-																				NULL);
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"Connected to shutdown signal with handler ID %u for xfconf value change notifications",
-							_xfdashboard_window_content_gdk_window_creation_shutdown_signal_id);
-	}
-}
-
-/* IMPLEMENTATION: Public API */
-
-/* Create new instance */
-ClutterContent* xfdashboard_window_content_gdk_new_for_window(XfdashboardWindowTrackerWindowGDK *inWindow)
-{
-	ClutterContent		*content;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow), NULL);
-
-	/* Create window content */
-	content=CLUTTER_CONTENT(g_object_new(XFDASHBOARD_TYPE_WINDOW_CONTENT_GDK,
-											"window", inWindow,
-											NULL));
-
-	return(content);
-}
-
-/* Get window to handle and to display */
-XfdashboardWindowTrackerWindow* xfdashboard_window_content_gdk_get_window(XfdashboardWindowContentGDK *self)
-{
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self), NULL);
-
-	return(XFDASHBOARD_WINDOW_TRACKER_WINDOW(self->priv->window));
-}
-
-/* Get state of suspension */
-gboolean xfdashboard_window_content_gdk_is_suspended(XfdashboardWindowContentGDK *self)
-{
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self), TRUE);
-
-	return(self->priv->isSuspended);
-}
-
-/* Get/set color to draw outline with */
-const ClutterColor* xfdashboard_window_content_gdk_get_outline_color(XfdashboardWindowContentGDK *self)
-{
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self), NULL);
-
-	return(self->priv->outlineColor);
-}
-
-void xfdashboard_window_content_gdk_set_outline_color(XfdashboardWindowContentGDK *self, const ClutterColor *inColor)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-	g_return_if_fail(inColor);
-
-	priv=self->priv;
-
-	/* Set value if changed */
-	if(priv->outlineColor==NULL || clutter_color_equal(inColor, priv->outlineColor)==FALSE)
-	{
-		/* Set value */
-		if(priv->outlineColor) clutter_color_free(priv->outlineColor);
-		priv->outlineColor=clutter_color_copy(inColor);
-
-		/* Invalidate ourselve to get us redrawn */
-		clutter_content_invalidate(CLUTTER_CONTENT(self));
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_OUTLINE_COLOR]);
-	}
-}
-
-/* Get/set line width for outline */
-gfloat xfdashboard_window_content_gdk_get_outline_width(XfdashboardWindowContentGDK *self)
-{
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self), 0.0f);
-
-	return(self->priv->outlineWidth);
-}
-
-void xfdashboard_window_content_gdk_set_outline_width(XfdashboardWindowContentGDK *self, const gfloat inWidth)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-	g_return_if_fail(inWidth>=0.0f);
-
-	priv=self->priv;
-
-	/* Set value if changed */
-	if(priv->outlineWidth!=inWidth)
-	{
-		/* Set value */
-		priv->outlineWidth=inWidth;
-
-		/* Invalidate ourselve to get us redrawn */
-		clutter_content_invalidate(CLUTTER_CONTENT(self));
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_OUTLINE_WIDTH]);
-	}
-}
-
-/* Get/set flag to indicate whether to include the window frame or not */
-gboolean xfdashboard_window_content_gdk_get_include_window_frame(XfdashboardWindowContentGDK *self)
-{
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self), TRUE);
-
-	return(self->priv->includeWindowFrame);
-}
-
-void xfdashboard_window_content_gdk_set_include_window_frame(XfdashboardWindowContentGDK *self, const gboolean inIncludeFrame)
-{
-	XfdashboardWindowContentGDKPrivate				*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-
-	priv=self->priv;
-
-	/* Set value if changed */
-	if(priv->includeWindowFrame!=inIncludeFrame)
-	{
-		/* Set value */
-		priv->includeWindowFrame=inIncludeFrame;
-
-		/* (Re-)Setup window content */
-		if(priv->window)
-		{
-			XfdashboardWindowTrackerWindowGDK		*window;
-
-			/* Re-setup window by releasing all resources first and unsetting window
-			 * but remember window to set it again.
-			 */
-			_xfdashboard_window_content_gdk_release_resources(self);
-
-			/* libwnck resources should never be freed. Just set to NULL */
-			window=priv->window;
-			priv->window=NULL;
-
-			/* Now set same window again which causes this object to set up all
-			 * needed X resources again.
-			 */
-			_xfdashboard_window_content_gdk_set_window(self, window);
-		}
-
-		/* Invalidate ourselve to get us redrawn */
-		clutter_content_invalidate(CLUTTER_CONTENT(self));
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_INCLUDE_WINDOW_FRAME]);
-	}
-}
-
-/* Get/set x fill of unmapped window icon */
-gboolean xfdashboard_window_content_gdk_get_unmapped_window_icon_x_fill(XfdashboardWindowContentGDK *self)
-{
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self), FALSE);
-
-	return(self->priv->unmappedWindowIconXFill);
-}
-
-void xfdashboard_window_content_gdk_set_unmapped_window_icon_x_fill(XfdashboardWindowContentGDK *self, const gboolean inFill)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-
-	priv=self->priv;
-
-	/* Set value if changed */
-	if(priv->unmappedWindowIconXFill!=inFill)
-	{
-		/* Set value */
-		priv->unmappedWindowIconXFill=inFill;
-
-		/* Invalidate ourselve to get us redrawn */
-		clutter_content_invalidate(CLUTTER_CONTENT(self));
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_UNMAPPED_WINDOW_ICON_X_FILL]);
-	}
-}
-
-/* Get/set y fill of unmapped window icon */
-gboolean xfdashboard_window_content_gdk_get_unmapped_window_icon_y_fill(XfdashboardWindowContentGDK *self)
-{
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self), FALSE);
-
-	return(self->priv->unmappedWindowIconYFill);
-}
-
-void xfdashboard_window_content_gdk_set_unmapped_window_icon_y_fill(XfdashboardWindowContentGDK *self, const gboolean inFill)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-
-	priv=self->priv;
-
-	/* Set value if changed */
-	if(priv->unmappedWindowIconYFill!=inFill)
-	{
-		/* Set value */
-		priv->unmappedWindowIconYFill=inFill;
-
-		/* Invalidate ourselve to get us redrawn */
-		clutter_content_invalidate(CLUTTER_CONTENT(self));
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_UNMAPPED_WINDOW_ICON_Y_FILL]);
-	}
-}
-
-/* Get/set x align of unmapped window icon */
-gfloat xfdashboard_window_content_gdk_get_unmapped_window_icon_x_align(XfdashboardWindowContentGDK *self)
-{
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self), 0.0f);
-
-	return(self->priv->unmappedWindowIconXAlign);
-}
-
-void xfdashboard_window_content_gdk_set_unmapped_window_icon_x_align(XfdashboardWindowContentGDK *self, const gfloat inAlign)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-	g_return_if_fail(inAlign>=0.0f && inAlign<=1.0f);
-
-	priv=self->priv;
-
-	/* Set value if changed */
-	if(priv->unmappedWindowIconXAlign!=inAlign)
-	{
-		/* Set value */
-		priv->unmappedWindowIconXAlign=inAlign;
-
-		/* Invalidate ourselve to get us redrawn */
-		clutter_content_invalidate(CLUTTER_CONTENT(self));
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_UNMAPPED_WINDOW_ICON_X_ALIGN]);
-	}
-}
-
-/* Get/set y align of unmapped window icon */
-gfloat xfdashboard_window_content_gdk_get_unmapped_window_icon_y_align(XfdashboardWindowContentGDK *self)
-{
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self), 0.0f);
-
-	return(self->priv->unmappedWindowIconYAlign);
-}
-
-void xfdashboard_window_content_gdk_set_unmapped_window_icon_y_align(XfdashboardWindowContentGDK *self, const gfloat inAlign)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-	g_return_if_fail(inAlign>=0.0f && inAlign<=1.0f);
-
-	priv=self->priv;
-
-	/* Set value if changed */
-	if(priv->unmappedWindowIconYAlign!=inAlign)
-	{
-		/* Set value */
-		priv->unmappedWindowIconYAlign=inAlign;
-
-		/* Invalidate ourselve to get us redrawn */
-		clutter_content_invalidate(CLUTTER_CONTENT(self));
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_UNMAPPED_WINDOW_ICON_Y_ALIGN]);
-	}
-}
-
-/* Get/set x scale of unmapped window icon */
-gfloat xfdashboard_window_content_gdk_get_unmapped_window_icon_x_scale(XfdashboardWindowContentGDK *self)
-{
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self), 0.0f);
-
-	return(self->priv->unmappedWindowIconXScale);
-}
-
-void xfdashboard_window_content_gdk_set_unmapped_window_icon_x_scale(XfdashboardWindowContentGDK *self, const gfloat inScale)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-	g_return_if_fail(inScale>=0.0f);
-
-	priv=self->priv;
-
-	/* Set value if changed */
-	if(priv->unmappedWindowIconXScale!=inScale)
-	{
-		/* Set value */
-		priv->unmappedWindowIconXScale=inScale;
-
-		/* Invalidate ourselve to get us redrawn */
-		clutter_content_invalidate(CLUTTER_CONTENT(self));
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_UNMAPPED_WINDOW_ICON_X_SCALE]);
-	}
-}
-
-/* Get/set y scale of unmapped window icon */
-gfloat xfdashboard_window_content_gdk_get_unmapped_window_icon_y_scale(XfdashboardWindowContentGDK *self)
-{
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self), 0.0f);
-
-	return(self->priv->unmappedWindowIconYScale);
-}
-
-void xfdashboard_window_content_gdk_set_unmapped_window_icon_y_scale(XfdashboardWindowContentGDK *self, const gfloat inScale)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-	g_return_if_fail(inScale>=0.0f);
-
-	priv=self->priv;
-
-	/* Set value if changed */
-	if(priv->unmappedWindowIconYScale!=inScale)
-	{
-		/* Set value */
-		priv->unmappedWindowIconYScale=inScale;
-
-		/* Invalidate ourselve to get us redrawn */
-		clutter_content_invalidate(CLUTTER_CONTENT(self));
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_UNMAPPED_WINDOW_ICON_Y_SCALE]);
-	}
-}
-
-/* Get/set gravity (anchor point) of unmapped window icon */
-XfdashboardAnchorPoint xfdashboard_window_content_gdk_get_unmapped_window_icon_anchor_point(XfdashboardWindowContentGDK *self)
-{
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self), XFDASHBOARD_ANCHOR_POINT_NONE);
-
-	return(self->priv->unmappedWindowIconAnchorPoint);
-}
-
-void xfdashboard_window_content_gdk_set_unmapped_window_icon_anchor_point(XfdashboardWindowContentGDK *self, const XfdashboardAnchorPoint inAnchorPoint)
-{
-	XfdashboardWindowContentGDKPrivate		*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_CONTENT_GDK(self));
-	g_return_if_fail(inAnchorPoint>=XFDASHBOARD_ANCHOR_POINT_NONE);
-	g_return_if_fail(inAnchorPoint<=XFDASHBOARD_ANCHOR_POINT_CENTER);
-
-	priv=self->priv;
-
-	/* Set value if changed */
-	if(priv->unmappedWindowIconAnchorPoint!=inAnchorPoint)
-	{
-		/* Set value */
-		priv->unmappedWindowIconAnchorPoint=inAnchorPoint;
-
-		/* Invalidate ourselve to get us redrawn */
-		clutter_content_invalidate(CLUTTER_CONTENT(self));
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowContentGDKProperties[PROP_UNMAPPED_WINDOW_ICON_ANCHOR_POINT]);
-	}
-}
diff --git a/libxfdashboard/gdk/window-content-gdk.h b/libxfdashboard/gdk/window-content-gdk.h
deleted file mode 100644
index 985cb00..0000000
--- a/libxfdashboard/gdk/window-content-gdk.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * window-content: A content to share texture of a window
- *
- * Copyright 2012-2017 Stephan Haller <nomad at froevel.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- *
- *
- */
-
-#ifndef __LIBXFDASHBOARD_WINDOW_CONTENT_GDK__
-#define __LIBXFDASHBOARD_WINDOW_CONTENT_GDK__
-
-#if !defined(__LIBXFDASHBOARD_H_INSIDE__) && !defined(LIBXFDASHBOARD_COMPILATION)
-#error "Only <libxfdashboard/libxfdashboard.h> can be included directly."
-#endif
-
-#include <clutter/clutter.h>
-
-#include <libxfdashboard/gdk/window-tracker-window-gdk.h>
-#include <libxfdashboard/window-tracker-window.h>
-#include <libxfdashboard/types.h>
-
-G_BEGIN_DECLS
-
-#define XFDASHBOARD_TYPE_WINDOW_CONTENT_GDK				(xfdashboard_window_content_gdk_get_type())
-#define XFDASHBOARD_WINDOW_CONTENT_GDK(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), XFDASHBOARD_TYPE_WINDOW_CONTENT_GDK, XfdashboardWindowContentGDK))
-#define XFDASHBOARD_IS_WINDOW_CONTENT_GDK(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), XFDASHBOARD_TYPE_WINDOW_CONTENT_GDK))
-#define XFDASHBOARD_WINDOW_CONTENT_GDK_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass), XFDASHBOARD_TYPE_WINDOW_CONTENT_GDK, XfdashboardWindowContentGDKClass))
-#define XFDASHBOARD_IS_WINDOW_CONTENT_GDK_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), XFDASHBOARD_TYPE_WINDOW_CONTENT_GDK))
-#define XFDASHBOARD_WINDOW_CONTENT_GDK_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), XFDASHBOARD_TYPE_WINDOW_CONTENT_GDK, XfdashboardWindowContentGDKClass))
-
-typedef struct _XfdashboardWindowContentGDK				XfdashboardWindowContentGDK;
-typedef struct _XfdashboardWindowContentGDKClass		XfdashboardWindowContentGDKClass;
-typedef struct _XfdashboardWindowContentGDKPrivate		XfdashboardWindowContentGDKPrivate;
-
-struct _XfdashboardWindowContentGDK
-{
-	/*< private >*/
-	/* Parent instance */
-	GObject										parent_instance;
-
-	/* Private structure */
-	XfdashboardWindowContentGDKPrivate			*priv;
-};
-
-struct _XfdashboardWindowContentGDKClass
-{
-	/*< private >*/
-	/* Parent class */
-	GObjectClass								parent_class;
-
-	/*< public >*/
-	/* Virtual functions */
-};
-
-/* Public API */
-GType xfdashboard_window_content_gdk_get_type(void) G_GNUC_CONST;
-
-ClutterContent* xfdashboard_window_content_gdk_new_for_window(XfdashboardWindowTrackerWindowGDK *inWindow);
-
-XfdashboardWindowTrackerWindow* xfdashboard_window_content_gdk_get_window(XfdashboardWindowContentGDK *self);
-
-gboolean xfdashboard_window_content_gdk_is_suspended(XfdashboardWindowContentGDK *self);
-
-const ClutterColor* xfdashboard_window_content_gdk_get_outline_color(XfdashboardWindowContentGDK *self);
-void xfdashboard_window_content_gdk_set_outline_color(XfdashboardWindowContentGDK *self, const ClutterColor *inColor);
-
-gfloat xfdashboard_window_content_gdk_get_outline_width(XfdashboardWindowContentGDK *self);
-void xfdashboard_window_content_gdk_set_outline_width(XfdashboardWindowContentGDK *self, const gfloat inWidth);
-
-gboolean xfdashboard_window_content_gdk_get_include_window_frame(XfdashboardWindowContentGDK *self);
-void xfdashboard_window_content_gdk_set_include_window_frame(XfdashboardWindowContentGDK *self, const gboolean inIncludeFrame);
-
-gboolean xfdashboard_window_content_gdk_get_unmapped_window_icon_x_fill(XfdashboardWindowContentGDK *self);
-void xfdashboard_window_content_gdk_set_unmapped_window_icon_x_fill(XfdashboardWindowContentGDK *self, const gboolean inFill);
-
-gboolean xfdashboard_window_content_gdk_get_unmapped_window_icon_y_fill(XfdashboardWindowContentGDK *self);
-void xfdashboard_window_content_gdk_set_unmapped_window_icon_y_fill(XfdashboardWindowContentGDK *self, const gboolean inFill);
-
-gfloat xfdashboard_window_content_gdk_get_unmapped_window_icon_x_align(XfdashboardWindowContentGDK *self);
-void xfdashboard_window_content_gdk_set_unmapped_window_icon_x_align(XfdashboardWindowContentGDK *self, const gfloat inAlign);
-
-gfloat xfdashboard_window_content_gdk_get_unmapped_window_icon_y_align(XfdashboardWindowContentGDK *self);
-void xfdashboard_window_content_gdk_set_unmapped_window_icon_y_align(XfdashboardWindowContentGDK *self, const gfloat inAlign);
-
-gfloat xfdashboard_window_content_gdk_get_unmapped_window_icon_x_scale(XfdashboardWindowContentGDK *self);
-void xfdashboard_window_content_gdk_set_unmapped_window_icon_x_scale(XfdashboardWindowContentGDK *self, const gfloat inScale);
-
-gfloat xfdashboard_window_content_gdk_get_unmapped_window_icon_y_scale(XfdashboardWindowContentGDK *self);
-void xfdashboard_window_content_gdk_set_unmapped_window_icon_y_scale(XfdashboardWindowContentGDK *self, const gfloat inScale);
-
-XfdashboardAnchorPoint xfdashboard_window_content_gdk_get_unmapped_window_icon_anchor_point(XfdashboardWindowContentGDK *self);
-void xfdashboard_window_content_gdk_set_unmapped_window_icon_anchor_point(XfdashboardWindowContentGDK *self, const XfdashboardAnchorPoint inAnchorPoint);
-
-G_END_DECLS
-
-#endif
diff --git a/libxfdashboard/gdk/window-tracker-gdk.c b/libxfdashboard/gdk/window-tracker-gdk.c
deleted file mode 100644
index 8d07875..0000000
--- a/libxfdashboard/gdk/window-tracker-gdk.c
+++ /dev/null
@@ -1,2069 +0,0 @@
-/*
- * window-tracker: Tracks windows, workspaces, monitors and
- *                 listens for changes. It also bundles libwnck into one
- *                 class.
- *                 By wrapping libwnck objects we can use a virtual
- *                 stable API while the API in libwnck changes within versions.
- *                 We only need to use #ifdefs in window tracker object
- *                 and nowhere else in the code.
- * 
- * Copyright 2012-2017 Stephan Haller <nomad at froevel.de>
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- * 
- * 
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <libxfdashboard/gdk/window-tracker-gdk.h>
-
-#define WNCK_I_KNOW_THIS_IS_UNSTABLE
-#include <libwnck/libwnck.h>
-
-#include <glib/gi18n-lib.h>
-#include <clutter/clutter.h>
-#include <clutter/gdk/clutter-gdk.h>
-#include <clutter/x11/clutter-x11.h>
-#include <gdk/gdkx.h>
-#ifdef HAVE_XINERAMA
-#include <X11/extensions/Xinerama.h>
-#endif
-
-#include <libxfdashboard/window-tracker.h>
-#include <libxfdashboard/gdk/window-tracker-monitor-gdk.h>
-#include <libxfdashboard/gdk/window-tracker-window-gdk.h>
-#include <libxfdashboard/gdk/window-tracker-workspace-gdk.h>
-#include <libxfdashboard/marshal.h>
-#include <libxfdashboard/application.h>
-#include <libxfdashboard/compat.h>
-#include <libxfdashboard/debug.h>
-
-
-/* Define this class in GObject system */
-static void _xfdashboard_window_tracker_gdk_window_tracker_iface_init(XfdashboardWindowTrackerInterface *iface);
-
-G_DEFINE_TYPE_WITH_CODE(XfdashboardWindowTrackerGDK,
-						xfdashboard_window_tracker_gdk,
-						G_TYPE_OBJECT,
-						G_IMPLEMENT_INTERFACE(XFDASHBOARD_TYPE_WINDOW_TRACKER, _xfdashboard_window_tracker_gdk_window_tracker_iface_init))
-
-/* Private structure - access only by public API if needed */
-#define XFDASHBOARD_WINDOW_TRACKER_GDK_GET_PRIVATE(obj)                        \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_GDK, XfdashboardWindowTrackerGDKPrivate))
-
-struct _XfdashboardWindowTrackerGDKPrivate
-{
-	/* Properties related */
-	XfdashboardWindowTrackerWindowGDK		*activeWindow;
-	XfdashboardWindowTrackerWorkspaceGDK	*activeWorkspace;
-	XfdashboardWindowTrackerMonitorGDK		*primaryMonitor;
-
-	/* Instance related */
-	GList									*windows;
-	GList									*windowsStacked;
-	GList									*workspaces;
-	GList									*monitors;
-
-	XfdashboardApplication					*application;
-	gboolean								isAppSuspended;
-	guint									suspendSignalID;
-
-	WnckScreen								*screen;
-
-	gboolean								supportsMultipleMonitors;
-	GdkScreen								*gdkScreen;
-#if GTK_CHECK_VERSION(3, 22, 0)
-	GdkDisplay								*gdkDisplay;
-	gboolean								needScreenSizeUpdate;
-	gint									screenWidth, screenHeight;
-#endif
-};
-
-/* Properties */
-enum
-{
-	PROP_0,
-
-	/* Overriden properties of interface: XfdashboardWindowTracker */
-	PROP_ACTIVE_WINDOW,
-	PROP_ACTIVE_WORKSPACE,
-	PROP_PRIMARY_MONITOR,
-
-	PROP_LAST
-};
-
-static GParamSpec* XfdashboardWindowTrackerGDKProperties[PROP_LAST]={ 0, };
-
-
-/* IMPLEMENTATION: Private variables and methods */
-
-/* Free workspace object */
-static void _xfdashboard_window_tracker_gdk_free_workspace(XfdashboardWindowTrackerGDK *self,
-															XfdashboardWindowTrackerWorkspaceGDK *inWorkspace)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	GList									*iter;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(self));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace));
-
-	priv=self->priv;
-
-#if DEBUG
-	/* There must be only one reference on that workspace object */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Freeing workspace %s@%p named '%s' with ref-count=%d",
-						G_OBJECT_TYPE_NAME(inWorkspace), inWorkspace,
-						xfdashboard_window_tracker_workspace_get_name(XFDASHBOARD_WINDOW_TRACKER_WORKSPACE(inWorkspace)),
-						G_OBJECT(inWorkspace)->ref_count);
-	g_assert(G_OBJECT(inWorkspace)->ref_count==1);
-#endif
-
-	/* Find entry in workspace list and remove it if found */
-	iter=g_list_find(priv->workspaces, inWorkspace);
-	if(iter)
-	{
-		priv->workspaces=g_list_delete_link(priv->workspaces, iter);
-	}
-
-	/* Free workspace object */
-	g_object_unref(inWorkspace);
-}
-
-/* Get workspace object for requested wnck workspace */
-static XfdashboardWindowTrackerWorkspaceGDK* _xfdashboard_window_tracker_gdk_get_workspace_for_wnck(XfdashboardWindowTrackerGDK *self,
-																									WnckWorkspace *inWorkspace)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	GList									*iter;
-	XfdashboardWindowTrackerWorkspaceGDK	*workspace;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(self), NULL);
-	g_return_val_if_fail(WNCK_IS_WORKSPACE(inWorkspace), NULL);
-
-	priv=self->priv;
-
-	/* Iterate through list of workspace object and check if an object for the
-	 * request wnck workspace exist. If one is found then return this existing
-	 * workspace object.
-	 */
-	for(iter=priv->workspaces; iter; iter=g_list_next(iter))
-	{
-		/* Get currently iterated workspace object */
-		workspace=XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(iter->data);
-		if(!workspace) continue;
-
-		/* Check if this workspace object wraps the requested wnck workspace */
-		if(xfdashboard_window_tracker_workspace_gdk_get_workspace(workspace)==inWorkspace)
-		{
-			/* Return existing workspace object */
-			return(workspace);
-		}
-	}
-
-	/* If we get here, return NULL as we have not found a matching workspace
-	 * object for the requested wnck workspace.
-	 */
-	return(NULL);
-}
-
-/* Create workspace object which must not exist yet */
-static XfdashboardWindowTrackerWorkspaceGDK* _xfdashboard_window_tracker_gdk_create_workspace_for_wnck(XfdashboardWindowTrackerGDK *self,
-																										WnckWorkspace *inWorkspace)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	XfdashboardWindowTrackerWorkspaceGDK	*workspace;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(self), NULL);
-	g_return_val_if_fail(WNCK_IS_WORKSPACE(inWorkspace), NULL);
-
-	priv=self->priv;
-
-	/* Iterate through list of workspace object and check if an object for the
-	 * request wnck workspace exist. If one is found then the existing workspace object.
-	 */
-	workspace=_xfdashboard_window_tracker_gdk_get_workspace_for_wnck(self, inWorkspace);
-	if(workspace)
-	{
-		/* Return existing workspace object */
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"A workspace object %s@%p for wnck workspace %s@%p named '%s' exists already",
-							G_OBJECT_TYPE_NAME(workspace), workspace,
-							G_OBJECT_TYPE_NAME(inWorkspace), inWorkspace, wnck_workspace_get_name(inWorkspace));
-
-		return(workspace);
-	}
-
-	/* Create workspace object */
-	workspace=XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(g_object_new(XFDASHBOARD_TYPE_WINDOW_TRACKER_WORKSPACE_GDK,
-														"workspace", inWorkspace,
-														NULL));
-	if(!workspace)
-	{
-		g_critical(_("Could not create workspace object of type %s for workspace '%s'"),
-					g_type_name(XFDASHBOARD_TYPE_WINDOW_TRACKER_WORKSPACE_GDK),
-					wnck_workspace_get_name(inWorkspace));
-		return(NULL);
-	}
-
-	/* Add new workspace object to list of workspace objects */
-	priv->workspaces=g_list_prepend(priv->workspaces, workspace);
-
-	/* Return new workspace object */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Created workspace object %s@%p for wnck workspace %s@%p named '%s'",
-						G_OBJECT_TYPE_NAME(workspace), workspace,
-						G_OBJECT_TYPE_NAME(inWorkspace), inWorkspace, wnck_workspace_get_name(inWorkspace));
-	return(workspace);
-}
-
-/* Free window object */
-static void _xfdashboard_window_tracker_gdk_free_window(XfdashboardWindowTrackerGDK *self,
-														XfdashboardWindowTrackerWindowGDK *inWindow)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	GList									*iter;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(self));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow));
-
-	priv=self->priv;
-
-#if DEBUG
-	/* There must be only one reference on that window object */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Freeing window %s@%p named '%s' with ref-count=%d",
-						G_OBJECT_TYPE_NAME(inWindow), inWindow,
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(inWindow)),
-						G_OBJECT(inWindow)->ref_count);
-	g_assert(G_OBJECT(inWindow)->ref_count==1);
-#endif
-
-	/* Find entry in window lists and remove it if found */
-	iter=g_list_find(priv->windows, inWindow);
-	if(iter)
-	{
-		priv->windows=g_list_delete_link(priv->windows, iter);
-	}
-
-	iter=g_list_find(priv->windowsStacked, inWindow);
-	if(iter)
-	{
-		priv->windowsStacked=g_list_delete_link(priv->windowsStacked, iter);
-	}
-
-	/* Free window object */
-	g_object_unref(inWindow);
-}
-
-/* Get window object for requested wnck window */
-static XfdashboardWindowTrackerWindowGDK* _xfdashboard_window_tracker_gdk_get_window_for_wnck(XfdashboardWindowTrackerGDK *self,
-																								WnckWindow *inWindow)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	GList									*iter;
-	XfdashboardWindowTrackerWindowGDK		*window;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(self), NULL);
-	g_return_val_if_fail(WNCK_IS_WINDOW(inWindow), NULL);
-
-	priv=self->priv;
-
-	/* Iterate through list of window object and check if an object for the
-	 * request wnck window exist. If one is found then return this existing
-	 * window object.
-	 */
-	for(iter=priv->windows; iter; iter=g_list_next(iter))
-	{
-		/* Get currently iterated window object */
-		if(!XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(iter->data)) continue;
-
-		window=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(iter->data);
-		if(!window) continue;
-
-		/* Check if this window object wraps the requested wnck window */
-		if(xfdashboard_window_tracker_window_gdk_get_window(window)==inWindow)
-		{
-			/* Return existing window object */
-			return(window);
-		}
-	}
-
-	/* If we get here, return NULL as we have not found a matching window
-	 * object for the requested wnck window.
-	 */
-	return(NULL);
-}
-
-/* Build correctly ordered list of windows in stacked order. The list will not
- * take a reference at the window object and must not be unreffed if list is
- * freed.
- */
-static void _xfdashboard_window_tracker_gdk_build_stacked_windows_list(XfdashboardWindowTrackerGDK *self)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	GList									*wnckWindowsStacked;
-	GList									*newWindowsStacked;
-	GList									*iter;
-	WnckWindow								*wnckWindow;
-	XfdashboardWindowTrackerWindowGDK		*window;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-
-	priv=self->priv;
-
-	/* Get list of stacked windows from wnck */
-	wnckWindowsStacked=wnck_screen_get_windows_stacked(priv->screen);
-
-	/* Build new list of stacked windows containing window objects */
-	newWindowsStacked=NULL;
-	for(iter=wnckWindowsStacked; iter; iter=g_list_next(iter))
-	{
-		/* Get wnck window iterated */
-		wnckWindow=WNCK_WINDOW(iter->data);
-		if(!wnckWindow) continue;
-
-		/* Lookup window object from wnck window iterated */
-		window=_xfdashboard_window_tracker_gdk_get_window_for_wnck(self, wnckWindow);
-		if(window)
-		{
-			newWindowsStacked=g_list_prepend(newWindowsStacked, window);
-		}
-	}
-	newWindowsStacked=g_list_reverse(newWindowsStacked);
-
-	/* Release old stacked windows list */
-	g_list_free(priv->windowsStacked);
-	priv->windowsStacked=newWindowsStacked;
-}
-
-/* Create window object which must not exist yet */
-static XfdashboardWindowTrackerWindowGDK* _xfdashboard_window_tracker_gdk_create_window_for_wnck(XfdashboardWindowTrackerGDK *self,
-																									WnckWindow *inWindow)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	XfdashboardWindowTrackerWindowGDK		*window;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(self), NULL);
-	g_return_val_if_fail(WNCK_IS_WINDOW(inWindow), NULL);
-
-	priv=self->priv;
-
-	/* Iterate through list of window object and check if an object for the
-	 * request wnck window exist. If one is found then the existing window object.
-	 */
-	window=_xfdashboard_window_tracker_gdk_get_window_for_wnck(self, inWindow);
-	if(window)
-	{
-		/* Return existing window object */
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"A window object %s@%p for wnck window %s@%p named '%s' exists already",
-							G_OBJECT_TYPE_NAME(window), window,
-							G_OBJECT_TYPE_NAME(inWindow), inWindow, wnck_window_get_name(inWindow));
-
-		return(window);
-	}
-
-	/* Create window object */
-	window=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(g_object_new(XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW_GDK,
-																"window", inWindow,
-																NULL));
-	if(!window)
-	{
-		g_critical(_("Could not create window object of type %s for window '%s'"),
-					g_type_name(XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW_GDK),
-					wnck_window_get_name(inWindow));
-		return(NULL);
-	}
-
-	/* Add new window object to list of window objects */
-	priv->windows=g_list_prepend(priv->windows, window);
-
-	/* Assume window stacking changed to get correctly ordered list of windows */
-	_xfdashboard_window_tracker_gdk_build_stacked_windows_list(self);
-
-	/* Return new window object */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Created window object %s@%p for wnck window %s@%p named '%s'",
-						G_OBJECT_TYPE_NAME(window), window,
-						G_OBJECT_TYPE_NAME(inWindow), inWindow, wnck_window_get_name(inWindow));
-	return(window);
-}
-
-/* Position and/or size of window has changed */
-static void _xfdashboard_window_tracker_gdk_on_window_geometry_changed(XfdashboardWindowTrackerGDK *self,
-																		gpointer inUserData)
-{
-	XfdashboardWindowTrackerWindowGDK		*window;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inUserData));
-
-	window=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inUserData);
-
-	/* Emit signal */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Window '%s' changed position and/or size",
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(window)));
-	g_signal_emit_by_name(self, "window-geometry-changed", window);
-}
-
-/* Action items of window has changed */
-static void _xfdashboard_window_tracker_gdk_on_window_actions_changed(XfdashboardWindowTrackerGDK *self,
-																		XfdashboardWindowTrackerWindowAction inChangedMask,
-																		XfdashboardWindowTrackerWindowAction inNewValue,
-																		gpointer inUserData)
-{
-	XfdashboardWindowTrackerWindowGDK	*window;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inUserData));
-
-	window=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inUserData);
-
-	/* Emit signal */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Window '%s' changed actions to %u with mask %u",
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(window)),
-						inNewValue, inChangedMask);
-	g_signal_emit_by_name(self, "window-actions-changed", window);
-}
-
-/* State of window has changed */
-static void _xfdashboard_window_tracker_gdk_on_window_state_changed(XfdashboardWindowTrackerGDK *self,
-																	XfdashboardWindowTrackerWindowState inChangedMask,
-																	XfdashboardWindowTrackerWindowState inNewValue,
-																	gpointer inUserData)
-{
-	XfdashboardWindowTrackerWindowGDK	*window;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inUserData));
-
-	window=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inUserData);
-
-	/* Emit signal */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Window '%s' changed state to %u with mask %u",
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(window)),
-						inNewValue, inChangedMask);
-	g_signal_emit_by_name(self, "window-state-changed", window);
-}
-
-/* Icon of window has changed */
-static void _xfdashboard_window_tracker_gdk_on_window_icon_changed(XfdashboardWindowTrackerGDK *self,
-																	gpointer inUserData)
-{
-	XfdashboardWindowTrackerWindowGDK	*window;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inUserData));
-
-	window=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inUserData);
-
-	/* Emit signal */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Window '%s' changed its icon",
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(window)));
-	g_signal_emit_by_name(self, "window-icon-changed", window);
-}
-
-/* Name of window has changed */
-static void _xfdashboard_window_tracker_gdk_on_window_name_changed(XfdashboardWindowTrackerGDK *self,
-																	gpointer inUserData)
-{
-	XfdashboardWindowTrackerWindowGDK	*window;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inUserData));
-
-	window=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inUserData);
-
-	/* Emit signal */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Window changed its name to '%s'",
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(window)));
-	g_signal_emit_by_name(self, "window-name-changed", window);
-}
-
-/* A window has moved to another monitor */
-static void _xfdashboard_window_tracker_gdk_on_window_monitor_changed(XfdashboardWindowTrackerGDK *self,
-																		XfdashboardWindowTrackerMonitor *inOldMonitor,
-																		gpointer inUserData)
-{
-	XfdashboardWindowTrackerWindowGDK		*window;
-	XfdashboardWindowTrackerMonitor			*newMonitor;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(!inOldMonitor || XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_GDK(inOldMonitor));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inUserData));
-
-	window=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inUserData);
-
-	/* Get monitor window resides on. */
-	newMonitor=xfdashboard_window_tracker_window_get_monitor(XFDASHBOARD_WINDOW_TRACKER_WINDOW(window));
-
-	/* Emit signal */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Window '%s' moved from monitor %d (%s) to %d (%s)",
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(window)),
-						inOldMonitor ? xfdashboard_window_tracker_monitor_get_number(inOldMonitor) : -1,
-						(inOldMonitor && xfdashboard_window_tracker_monitor_is_primary(inOldMonitor)) ? "primary" : "non-primary",
-						newMonitor ? xfdashboard_window_tracker_monitor_get_number(newMonitor) : -1,
-						(newMonitor && xfdashboard_window_tracker_monitor_is_primary(newMonitor)) ? "primary" : "non-primary");
-	g_signal_emit_by_name(self, "window-monitor-changed", window, inOldMonitor, newMonitor);
-}
-
-/* A window has moved to another workspace */
-static void _xfdashboard_window_tracker_gdk_on_window_workspace_changed(XfdashboardWindowTrackerGDK *self,
-																		XfdashboardWindowTrackerWorkspace *inOldWorkspace,
-																		gpointer inUserData)
-{
-	XfdashboardWindowTrackerWindowGDK		*window;
-	XfdashboardWindowTrackerWorkspace		*newWorkspace;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(!inOldWorkspace || XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(inOldWorkspace));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inUserData));
-
-	window=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inUserData);
-
-	/* Get workspace window resides on. */
-	newWorkspace=xfdashboard_window_tracker_window_get_workspace(XFDASHBOARD_WINDOW_TRACKER_WINDOW(window));
-
-	/* Emit signal */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Window '%s' moved to workspace %d (%s)",
-						xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(window)),
-						newWorkspace ? xfdashboard_window_tracker_workspace_get_number(newWorkspace) : -1,
-						newWorkspace ? xfdashboard_window_tracker_workspace_get_name(newWorkspace) : "<nil>");
-	g_signal_emit_by_name(self, "window-workspace-changed", window, newWorkspace);
-}
-
-/* A window was activated */
-static void _xfdashboard_window_tracker_gdk_on_active_window_changed(XfdashboardWindowTrackerGDK *self,
-																		WnckWindow *inPreviousWindow,
-																		gpointer inUserData)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	WnckScreen								*screen;
-	XfdashboardWindowTrackerWindowGDK		*oldActiveWindow;
-	XfdashboardWindowTrackerWindowGDK		*newActiveWindow;
-	WnckWindow								*activeWindow;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(inPreviousWindow==NULL || WNCK_IS_WINDOW(inPreviousWindow));
-	g_return_if_fail(WNCK_IS_SCREEN(inUserData));
-
-	priv=self->priv;
-	screen=WNCK_SCREEN(inUserData);
-
-	/* Get and remember new active window */
-	oldActiveWindow=priv->activeWindow;
-
-	newActiveWindow=NULL;
-	activeWindow=wnck_screen_get_active_window(screen);
-	if(activeWindow)
-	{
-		newActiveWindow=_xfdashboard_window_tracker_gdk_get_window_for_wnck(self, activeWindow);
-		if(!newActiveWindow)
-		{
-			XFDASHBOARD_DEBUG(self, WINDOWS,
-								"No window object of type %s found for new active wnck window %s@%p named '%s'",
-								g_type_name(XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW_GDK),
-								G_OBJECT_TYPE_NAME(activeWindow), activeWindow, wnck_window_get_name(activeWindow));
-
-			return;
-		}
-	}
-
-	priv->activeWindow=newActiveWindow;
-
-	/* Emit signal */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Active window changed from '%s' to '%s'",
-						oldActiveWindow ? xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(oldActiveWindow)) : "<nil>",
-						newActiveWindow ? xfdashboard_window_tracker_window_get_name(XFDASHBOARD_WINDOW_TRACKER_WINDOW(newActiveWindow)) : "<nil>");
-	g_signal_emit_by_name(self, "active-window-changed", oldActiveWindow, priv->activeWindow);
-}
-
-/* A window was closed */
-static void _xfdashboard_window_tracker_gdk_on_window_closed(XfdashboardWindowTrackerGDK *self,
-																WnckWindow *inWindow,
-																gpointer inUserData)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	XfdashboardWindowTrackerWindowGDK		*window;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(WNCK_IS_WINDOW(inWindow));
-	g_return_if_fail(WNCK_IS_SCREEN(inUserData));
-
-	priv=self->priv;
-
-	/* Should not happen but if closed window is the last active known one, then
-	 * reset to NULL
-	 */
-	if(xfdashboard_window_tracker_window_gdk_get_window(priv->activeWindow)==inWindow)
-	{
-		priv->activeWindow=NULL;
-	}
-
-	/* Get window object for closed wnck window */
-	window=_xfdashboard_window_tracker_gdk_get_window_for_wnck(self, inWindow);
-	if(!window)
-	{
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"No window object of type %s found for wnck window %s@%p named '%s'",
-							g_type_name(XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW_GDK),
-							G_OBJECT_TYPE_NAME(inWindow), inWindow, wnck_window_get_name(inWindow));
-
-		return;
-	}
-
-	/* Remove all signal handlers for closed window */
-	g_signal_handlers_disconnect_by_data(window, self);
-
-	/* Emit signals */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Window '%s' closed",
-						wnck_window_get_name(inWindow));
-	g_signal_emit_by_name(self, "window-closed", window);
-
-	/* Remove window from window list */
-	_xfdashboard_window_tracker_gdk_free_window(self, window);
-}
-
-/* A new window was opened */
-static void _xfdashboard_window_tracker_gdk_on_window_opened(XfdashboardWindowTrackerGDK *self,
-																WnckWindow *inWindow,
-																gpointer inUserData)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	XfdashboardWindowTrackerWindowGDK		*window;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(WNCK_IS_WINDOW(inWindow));
-	g_return_if_fail(WNCK_IS_SCREEN(inUserData));
-
-	priv=self->priv;
-
-	/* Create window object */
-	window=_xfdashboard_window_tracker_gdk_create_window_for_wnck(self, inWindow);
-	if(!window) return;
-
-	/* Connect signals on newly opened window */
-	g_signal_connect_swapped(window, "actions-changed", G_CALLBACK(_xfdashboard_window_tracker_gdk_on_window_actions_changed), self);
-	g_signal_connect_swapped(window, "state-changed", G_CALLBACK(_xfdashboard_window_tracker_gdk_on_window_state_changed), self);
-	g_signal_connect_swapped(window, "icon-changed", G_CALLBACK(_xfdashboard_window_tracker_gdk_on_window_icon_changed), self);
-	g_signal_connect_swapped(window, "name-changed", G_CALLBACK(_xfdashboard_window_tracker_gdk_on_window_name_changed), self);
-	g_signal_connect_swapped(window, "monitor-changed", G_CALLBACK(_xfdashboard_window_tracker_gdk_on_window_monitor_changed), self);
-	g_signal_connect_swapped(window, "workspace-changed", G_CALLBACK(_xfdashboard_window_tracker_gdk_on_window_workspace_changed), self);
-	g_signal_connect_swapped(window, "geometry-changed", G_CALLBACK(_xfdashboard_window_tracker_gdk_on_window_geometry_changed), self);
-
-	/* Block signal handler for 'geometry-changed' at window if application is suspended */
-	if(priv->isAppSuspended)
-	{
-		g_signal_handlers_block_by_func(window, _xfdashboard_window_tracker_gdk_on_window_geometry_changed, self);
-	}
-
-	/* Emit signal */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Window '%s' created",
-						wnck_window_get_name(inWindow));
-	g_signal_emit_by_name(self, "window-opened", window);
-}
-
-/* Window stacking has changed */
-static void _xfdashboard_window_tracker_gdk_on_window_stacking_changed(XfdashboardWindowTrackerGDK *self,
-																		gpointer inUserData)
-{
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-
-	/* Before emitting the signal, build a correctly ordered list of windows */
-	_xfdashboard_window_tracker_gdk_build_stacked_windows_list(self);
-
-	/* Emit signal */
-	XFDASHBOARD_DEBUG(self, WINDOWS, "Window stacking has changed");
-	g_signal_emit_by_name(self, "window-stacking-changed");
-}
-
-/* A workspace changed its name */
-static void _xfdashboard_window_tracker_gdk_on_workspace_name_changed(XfdashboardWindowTrackerGDK *self,
-																		gpointer inUserData)
-{
-	XfdashboardWindowTrackerWorkspaceGDK	*workspace;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(inUserData));
-
-	workspace=XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(inUserData);
-
-	/* Emit signal */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Workspace #%d changed name to '%s'",
-						xfdashboard_window_tracker_workspace_get_number(XFDASHBOARD_WINDOW_TRACKER_WORKSPACE(workspace)),
-						xfdashboard_window_tracker_workspace_get_name(XFDASHBOARD_WINDOW_TRACKER_WORKSPACE(workspace)));
-	g_signal_emit_by_name(self, "workspace-name-changed", workspace);
-
-}
-
-/* A workspace was activated */
-static void _xfdashboard_window_tracker_gdk_on_active_workspace_changed(XfdashboardWindowTrackerGDK *self,
-																		WnckWorkspace *inPreviousWorkspace,
-																		gpointer inUserData)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	WnckScreen								*screen;
-	XfdashboardWindowTrackerWorkspaceGDK	*oldActiveWorkspace;
-	XfdashboardWindowTrackerWorkspaceGDK	*newActiveWorkspace;
-	WnckWorkspace							*activeWorkspace;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(inPreviousWorkspace==NULL || WNCK_IS_WORKSPACE(inPreviousWorkspace));
-	g_return_if_fail(WNCK_IS_SCREEN(inUserData));
-
-	priv=self->priv;
-	screen=WNCK_SCREEN(inUserData);
-
-	/* Get and remember new active workspace */
-	oldActiveWorkspace=priv->activeWorkspace;
-
-	newActiveWorkspace=NULL;
-	activeWorkspace=wnck_screen_get_active_workspace(screen);
-	if(activeWorkspace)
-	{
-		newActiveWorkspace=_xfdashboard_window_tracker_gdk_get_workspace_for_wnck(self, activeWorkspace);
-		if(!newActiveWorkspace)
-		{
-			XFDASHBOARD_DEBUG(self, WINDOWS,
-						"No workspace object of type %s found for new active wnck workspace %s@%p named '%s'",
-						g_type_name(XFDASHBOARD_TYPE_WINDOW_TRACKER_WORKSPACE_GDK),
-						G_OBJECT_TYPE_NAME(activeWorkspace), activeWorkspace, wnck_workspace_get_name(activeWorkspace));
-
-			return;
-		}
-	}
-
-	priv->activeWorkspace=newActiveWorkspace;
-
-	/* Emit signal */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Active workspace changed from #%d (%s) to #%d (%s)",
-						oldActiveWorkspace ? wnck_workspace_get_number(inPreviousWorkspace) : -1,
-						oldActiveWorkspace ? wnck_workspace_get_name(inPreviousWorkspace) : "<nil>",
-						priv->activeWorkspace ? wnck_workspace_get_number(activeWorkspace) : -1,
-						priv->activeWorkspace ? wnck_workspace_get_name(activeWorkspace) : "<nil>");
-	g_signal_emit_by_name(self, "active-workspace-changed", oldActiveWorkspace, priv->activeWorkspace);
-}
-
-/* A workspace was destroyed */
-static void _xfdashboard_window_tracker_gdk_on_workspace_destroyed(XfdashboardWindowTrackerGDK *self,
-																	WnckWorkspace *inWorkspace,
-																	gpointer inUserData)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	XfdashboardWindowTrackerWorkspaceGDK	*workspace;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(WNCK_IS_WORKSPACE(inWorkspace));
-	g_return_if_fail(WNCK_IS_SCREEN(inUserData));
-
-	priv=self->priv;
-
-	/* Should not happen but if destroyed workspace is the last active known one,
-	 * then reset to NULL
-	 */
-	if(xfdashboard_window_tracker_workspace_gdk_get_workspace(priv->activeWorkspace)==inWorkspace)
-	{
-		priv->activeWorkspace=NULL;
-	}
-
-	/* Get workspace object for wnck workspace */
-	workspace=_xfdashboard_window_tracker_gdk_get_workspace_for_wnck(self, inWorkspace);
-	if(!workspace)
-	{
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"No workspace object of type %s found for wnck workspace %s@%p named '%s'",
-							g_type_name(XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW_GDK),
-							G_OBJECT_TYPE_NAME(inWorkspace), inWorkspace, wnck_workspace_get_name(inWorkspace));
-
-		return;
-	}
-
-	/* Remove all signal handlers for closed window */
-	g_signal_handlers_disconnect_by_data(workspace, self);
-
-	/* Emit signal */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Workspace #%d (%s) destroyed",
-						wnck_workspace_get_number(inWorkspace),
-						wnck_workspace_get_name(inWorkspace));
-	g_signal_emit_by_name(self, "workspace-removed", workspace);
-
-	/* Remove workspace from workspace list */
-	_xfdashboard_window_tracker_gdk_free_workspace(self, workspace);
-}
-
-/* A new workspace was created */
-static void _xfdashboard_window_tracker_gdk_on_workspace_created(XfdashboardWindowTrackerGDK *self,
-																	WnckWorkspace *inWorkspace,
-																	gpointer inUserData)
-{
-	XfdashboardWindowTrackerWorkspaceGDK		*workspace;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(WNCK_IS_WORKSPACE(inWorkspace));
-	g_return_if_fail(WNCK_IS_SCREEN(inUserData));
-
-	/* Create workspace object */
-	workspace=_xfdashboard_window_tracker_gdk_create_workspace_for_wnck(self, inWorkspace);
-	if(!workspace) return;
-
-	/* Connect signals on newly created workspace */
-	g_signal_connect_swapped(workspace, "name-changed", G_CALLBACK(_xfdashboard_window_tracker_gdk_on_workspace_name_changed), self);
-
-	/* Emit signal */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"New workspace #%d (%s) created",
-						wnck_workspace_get_number(inWorkspace),
-						wnck_workspace_get_name(inWorkspace));
-	g_signal_emit_by_name(self, "workspace-added", workspace);
-}
-
-/* Primary monitor has changed */
-static void _xfdashboard_window_tracker_gdk_on_primary_monitor_changed(XfdashboardWindowTrackerGDK *self,
-																		gpointer inUserData)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	XfdashboardWindowTrackerMonitorGDK		*monitor;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_GDK(inUserData));
-
-	priv=self->priv;
-	monitor=XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK(inUserData);
-
-	/* If monitor emitting this signal is the (new) primary one
-	 * then update primary monitor value of this instance.
-	 */
-	if(xfdashboard_window_tracker_monitor_is_primary(XFDASHBOARD_WINDOW_TRACKER_MONITOR(monitor)) &&
-		priv->primaryMonitor!=monitor)
-	{
-		XfdashboardWindowTrackerMonitorGDK	*oldMonitor;
-
-		/* Remember old monitor for signal emission */
-		oldMonitor=priv->primaryMonitor;
-
-		/* Set value */
-		priv->primaryMonitor=monitor;
-
-		/* Emit signal */
-		g_signal_emit_by_name(self, "primary-monitor-changed", oldMonitor, priv->primaryMonitor);
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowTrackerGDKProperties[PROP_PRIMARY_MONITOR]);
-
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"Primary monitor changed from %d to %d",
-							oldMonitor ? xfdashboard_window_tracker_monitor_get_number(XFDASHBOARD_WINDOW_TRACKER_MONITOR(oldMonitor)) : -1,
-							xfdashboard_window_tracker_monitor_get_number(XFDASHBOARD_WINDOW_TRACKER_MONITOR(monitor)));
-	}
-}
-
-/* A monitor has changed its position and/or size */
-static void _xfdashboard_window_tracker_gdk_on_monitor_geometry_changed(XfdashboardWindowTrackerGDK *self,
-																		gpointer inUserData)
-{
-	XfdashboardWindowTrackerMonitorGDK			*monitor;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_GDK(inUserData));
-
-	monitor=XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK(inUserData);
-
-	/* A monitor changed its position and/or size so re-emit the signal */
-	g_signal_emit_by_name(self, "monitor-geometry-changed", monitor);
-}
-
-/* Create a monitor object */
-static XfdashboardWindowTrackerMonitorGDK* _xfdashboard_window_tracker_gdk_monitor_new(XfdashboardWindowTrackerGDK *self,
-																						guint inMonitorIndex)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	XfdashboardWindowTrackerMonitorGDK		*monitor;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self), NULL);
-	g_return_val_if_fail(inMonitorIndex>=g_list_length(self->priv->monitors), NULL);
-
-	priv=self->priv;
-
-	/* Create monitor object */
-	monitor=XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK(g_object_new(XFDASHBOARD_TYPE_WINDOW_TRACKER_MONITOR_GDK,
-															"monitor-index", inMonitorIndex,
-															NULL));
-	priv->monitors=g_list_append(priv->monitors, monitor);
-
-	/* Connect signals */
-	g_signal_connect_swapped(monitor,
-								"primary-changed",
-								G_CALLBACK(_xfdashboard_window_tracker_gdk_on_primary_monitor_changed),
-								self);
-	g_signal_connect_swapped(monitor,
-								"geometry-changed",
-								G_CALLBACK(_xfdashboard_window_tracker_gdk_on_monitor_geometry_changed),
-								self);
-
-	/* Emit signal */
-	g_signal_emit_by_name(self, "monitor-added", monitor);
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Monitor %d added",
-						inMonitorIndex);
-
-	/* If we newly added monitor is the primary one then emit signal. We could not
-	 * have done it yet because the signals were connect to new monitor object
-	 * after its creation.
-	 */
-	if(xfdashboard_window_tracker_monitor_is_primary(XFDASHBOARD_WINDOW_TRACKER_MONITOR(monitor)))
-	{
-		_xfdashboard_window_tracker_gdk_on_primary_monitor_changed(self, monitor);
-	}
-
-	/* Return newly created monitor */
-	return(monitor);
-}
-
-/* Free a monitor object */
-static void _xfdashboard_window_tracker_gdk_monitor_free(XfdashboardWindowTrackerGDK *self,
-															XfdashboardWindowTrackerMonitorGDK *inMonitor)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	GList									*iter;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(self));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_GDK(inMonitor));
-
-	priv=self->priv;
-
-	/* Find monitor to free */
-	iter=g_list_find(priv->monitors,  inMonitor);
-	if(!iter)
-	{
-		g_critical(_("Cannot release unknown monitor %d"),
-					xfdashboard_window_tracker_monitor_get_number(XFDASHBOARD_WINDOW_TRACKER_MONITOR(inMonitor)));
-		return;
-	}
-
-	/* Disconnect signals */
-	g_signal_handlers_disconnect_by_data(inMonitor, self);
-
-	/* Emit signal */
-	g_signal_emit_by_name(self, "monitor-removed", inMonitor);
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Monitor %d removed",
-						xfdashboard_window_tracker_monitor_get_number(XFDASHBOARD_WINDOW_TRACKER_MONITOR(inMonitor)));
-
-	/* Remove monitor object from list */
-	priv->monitors=g_list_delete_link(priv->monitors, iter);
-
-	/* Unref monitor object. Usually this is the last reference released
-	 * and the object will be destroyed.
-	 */
-	g_object_unref(inMonitor);
-}
-
-#ifdef HAVE_XINERAMA
-/* Number of monitors, primary monitor or size of any monitor changed */
-static void _xfdashboard_window_tracker_gdk_on_monitors_changed(XfdashboardWindowTrackerGDK *self,
-																gpointer inUserData)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	GdkScreen								*screen;
-	gint									currentMonitorCount;
-	gint									newMonitorCount;
-	gint									i;
-	XfdashboardWindowTrackerMonitorGDK		*monitor;
-	GList									*iter;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(GDK_IS_SCREEN(inUserData));
-
-	priv=self->priv;
-	screen=GDK_SCREEN(inUserData);
-
-	/* Get current monitor states */
-	currentMonitorCount=g_list_length(priv->monitors);
-
-	/* Get new monitor state */
-#if GTK_CHECK_VERSION(3, 22, 0)
-	newMonitorCount=gdk_display_get_n_monitors(gdk_screen_get_display(screen));
-#else
-	newMonitorCount=gdk_screen_get_n_monitors(screen);
-#endif
-	if(newMonitorCount!=currentMonitorCount)
-	{
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"Number of monitors changed from %d to %d",
-							currentMonitorCount,
-							newMonitorCount);
-	}
-
-	/* There is no need to check if size of any monitor has changed because
-	 * XfdashboardWindowTrackerMonitor instances should also be connected to
-	 * this signal and will raise a signal if their size changed. This instance
-	 * is connected to this "monitor-has-changed-signal' and will re-emit them.
-	 * The same is with primary monitor.
-	 */
-
-	/* If number of monitors has increased create newly added monitors */
-	if(newMonitorCount>currentMonitorCount)
-	{
-		for(i=currentMonitorCount; i<newMonitorCount; i++)
-		{
-			/* Create monitor object */
-			_xfdashboard_window_tracker_gdk_monitor_new(self, i);
-		}
-	}
-
-	/* If number of monitors has decreased remove all monitors beyond
-	 * the new number of monitors.
-	 */
-	if(newMonitorCount<currentMonitorCount)
-	{
-		for(i=currentMonitorCount; i>newMonitorCount; i--)
-		{
-			/* Get monitor object */
-			iter=g_list_last(priv->monitors);
-			if(!iter) continue;
-
-			monitor=XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK(iter->data);
-
-			/* Free monitor object */
-			_xfdashboard_window_tracker_gdk_monitor_free(self, monitor);
-		}
-	}
-
-#if GTK_CHECK_VERSION(3, 22, 0)
-	/* Set flag to recalculate screen size which must have changed as monitors
-	 * were added or removed.
-	 */
-	priv->needScreenSizeUpdate=TRUE;
-#endif
-}
-#endif
-
-/* Total size of screen changed */
-static void _xfdashboard_window_tracker_gdk_on_screen_size_changed(XfdashboardWindowTrackerGDK *self,
-																	gpointer inUserData)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	gint									w, h;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-
-	priv=self->priv;
-
-	/* Get new total size of screen */
-	priv->needScreenSizeUpdate=TRUE;
-	xfdashboard_window_tracker_get_screen_size(XFDASHBOARD_WINDOW_TRACKER(self), &w, &h);
-
-	/* Emit signal to tell that screen size has changed */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Screen size changed to %dx%d",
-						w,
-						h);
-	g_signal_emit_by_name(self, "screen-size-changed");
-}
-
-/* Window manager has changed */
-static void _xfdashboard_window_tracker_gdk_on_window_manager_changed(XfdashboardWindowTrackerGDK *self,
-																		gpointer inUserData)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-
-	priv=self->priv;
-
-	/* Emit signal to tell that window manager has changed */
-	XFDASHBOARD_DEBUG(self, WINDOWS,
-						"Window manager changed to %s",
-						wnck_screen_get_window_manager_name(priv->screen));
-	g_signal_emit_by_name(self, "window-manager-changed");
-}
-
-/* Suspension state of application changed */
-static void _xfdashboard_window_tracker_gdk_on_application_suspended_changed(XfdashboardWindowTrackerGDK *self,
-																				GParamSpec *inSpec,
-																				gpointer inUserData)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	XfdashboardApplication					*app;
-	GList									*iter;
-	XfdashboardWindowTrackerWindow			*window;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER(self));
-	g_return_if_fail(XFDASHBOARD_IS_APPLICATION(inUserData));
-
-	priv=self->priv;
-	app=XFDASHBOARD_APPLICATION(inUserData);
-
-	/* Get application suspend state */
-	priv->isAppSuspended=xfdashboard_application_is_suspended(app);
-
-	/* Iterate through all windows and connect handler to signal 'geometry-changed'
-	 * if application was resumed or disconnect signal handler if it was suspended.
-	 */
-	for(iter=xfdashboard_window_tracker_get_windows(XFDASHBOARD_WINDOW_TRACKER(self)); iter; iter=g_list_next(iter))
-	{
-		/* Get window */
-		window=XFDASHBOARD_WINDOW_TRACKER_WINDOW(iter->data);
-		if(!window) continue;
-
-		/* If application was suspended disconnect signal handlers ... */
-		if(priv->isAppSuspended)
-		{
-			g_signal_handlers_block_by_func(window, _xfdashboard_window_tracker_gdk_on_window_geometry_changed, self);
-		}
-			/* ... otherwise if application was resumed reconnect signals handlers
-			 * and emit 'geometry-changed' signal to reflect latest changes of
-			 * position and size of window.
-			 */
-			else
-			{
-				/* Reconnect signal handler */
-				g_signal_handlers_unblock_by_func(window, _xfdashboard_window_tracker_gdk_on_window_geometry_changed, self);
-
-				/* Call signal handler to reflect latest changes */
-				_xfdashboard_window_tracker_gdk_on_window_geometry_changed(self, window);
-			}
-	}
-}
-
-
-/* IMPLEMENTATION: Interface XfdashboardWindowTracker */
-
-/* Get list of all windows (if wanted in stack order) */
-static GList* _xfdashboard_window_tracker_gdk_window_tracker_get_windows(XfdashboardWindowTracker *inWindowTracker)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	/* Return list of window objects created */
-	return(priv->windows);
-}
-
-/* Get list of all windows in stack order */
-static GList* _xfdashboard_window_tracker_gdk_window_tracker_get_windows_stacked(XfdashboardWindowTracker *inWindowTracker)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	/* Return list of window in stack order */
-	return(priv->windowsStacked);
-}
-
-/* Get active window */
-static XfdashboardWindowTrackerWindow* _xfdashboard_window_tracker_gdk_window_tracker_get_active_window(XfdashboardWindowTracker *inWindowTracker)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	return(XFDASHBOARD_WINDOW_TRACKER_WINDOW(priv->activeWindow));
-}
-
-/* Get number of workspaces */
-static gint _xfdashboard_window_tracker_gdk_window_tracker_get_workspaces_count(XfdashboardWindowTracker *inWindowTracker)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), 0);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	/* Return number of workspaces */
-	return(wnck_screen_get_workspace_count(priv->screen));
-}
-
-/* Get list of workspaces */
-static GList* _xfdashboard_window_tracker_gdk_window_tracker_get_workspaces(XfdashboardWindowTracker *inWindowTracker)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	/* Return list of workspaces */
-	return(priv->workspaces);
-}
-
-/* Get active workspace */
-static XfdashboardWindowTrackerWorkspace* _xfdashboard_window_tracker_gdk_window_tracker_get_active_workspace(XfdashboardWindowTracker *inWindowTracker)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	return(XFDASHBOARD_WINDOW_TRACKER_WORKSPACE(priv->activeWorkspace));
-}
-
-/* Get workspace by number */
-static XfdashboardWindowTrackerWorkspace* _xfdashboard_window_tracker_gdk_window_tracker_get_workspace_by_number(XfdashboardWindowTracker *inWindowTracker,
-																													gint inNumber)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	WnckWorkspace							*wnckWorkspace;
-	XfdashboardWindowTrackerWorkspaceGDK	*workspace;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	g_return_val_if_fail(inNumber>=0 && inNumber<wnck_screen_get_workspace_count(priv->screen), NULL);
-
-	/* Get wnck workspace by number */
-	wnckWorkspace=wnck_screen_get_workspace(priv->screen, inNumber);
-
-	/* Get workspace object for wnck workspace */
-	workspace=_xfdashboard_window_tracker_gdk_get_workspace_for_wnck(self, wnckWorkspace);
-	if(!workspace)
-	{
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"No workspace object of type %s found for wnck workspace %s@%p named '%s'",
-							g_type_name(XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW_GDK),
-							G_OBJECT_TYPE_NAME(wnckWorkspace), wnckWorkspace, wnck_workspace_get_name(wnckWorkspace));
-
-		return(NULL);
-	}
-
-	/* Return workspace object */
-	return(XFDASHBOARD_WINDOW_TRACKER_WORKSPACE(workspace));
-}
-
-/* Determine if multiple monitors are supported */
-static gboolean _xfdashboard_window_tracker_gdk_window_tracker_supports_multiple_monitors(XfdashboardWindowTracker *inWindowTracker)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), FALSE);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	return(priv->supportsMultipleMonitors);
-}
-
-/* Get number of monitors */
-static gint _xfdashboard_window_tracker_gdk_window_tracker_get_monitors_count(XfdashboardWindowTracker *inWindowTracker)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), 0);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	/* Return number of monitors */
-	return(g_list_length(priv->monitors));
-}
-
-/* Get list of monitors */
-static GList* _xfdashboard_window_tracker_gdk_window_tracker_get_monitors(XfdashboardWindowTracker *inWindowTracker)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	/* Return list of workspaces */
-	return(priv->monitors);
-}
-
-/* Get primary monitor */
-static XfdashboardWindowTrackerMonitor* _xfdashboard_window_tracker_gdk_window_tracker_get_primary_monitor(XfdashboardWindowTracker *inWindowTracker)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	return(XFDASHBOARD_WINDOW_TRACKER_MONITOR(priv->primaryMonitor));
-}
-
-/* Get monitor by number */
-static XfdashboardWindowTrackerMonitor* _xfdashboard_window_tracker_gdk_window_tracker_get_monitor_by_number(XfdashboardWindowTracker *inWindowTracker,
-																												gint inNumber)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	g_return_val_if_fail(inNumber>=0, NULL);
-	g_return_val_if_fail(((guint)inNumber)<g_list_length(priv->monitors), NULL);
-
-	/* Return monitor at index */
-	return(XFDASHBOARD_WINDOW_TRACKER_MONITOR(g_list_nth_data(priv->monitors, inNumber)));
-}
-
-/* Get monitor at requested position */
-static XfdashboardWindowTrackerMonitor* _xfdashboard_window_tracker_gdk_window_tracker_get_monitor_by_position(XfdashboardWindowTracker *inWindowTracker,
-																												gint inX,
-																												gint inY)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	GList									*iter;
-	XfdashboardWindowTrackerMonitorGDK		*monitor;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	/* Iterate through monitors and return the one containing the requested position */
-	for(iter=priv->monitors; iter; iter=g_list_next(iter))
-	{
-		/* Get monitor at iterator */
-		monitor=XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK(iter->data);
-		if(!monitor) continue;
-
-		/* Check if this monitor contains the requested position. If it does
-		 * then return it.
-		 */
-		if(xfdashboard_window_tracker_monitor_contains(XFDASHBOARD_WINDOW_TRACKER_MONITOR(monitor), inX, inY))
-		{
-			return(XFDASHBOARD_WINDOW_TRACKER_MONITOR(monitor));
-		}
-	}
-
-	/* If we get here none of the monitors contains the requested position,
-	 * so return NULL here.
-	 */
-	return(NULL);
-}
-
-/* Get size of screen */
-static void _xfdashboard_window_tracker_gdk_window_tracker_get_screen_size(XfdashboardWindowTracker *inWindowTracker,
-																			gint *outWidth,
-																			gint *outHeight)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	gint									width, height;
-#if GTK_CHECK_VERSION(3, 22, 0)
-	gint									i;
-	gint									numberMonitors;
-	GdkMonitor								*monitor;
-	GdkRectangle							monitorRect;
-	gint									left, top, right, bottom;
-	gboolean								forceUpdate;
-#endif
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker));
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-#if GTK_CHECK_VERSION(3, 22, 0)
-	/* Only recalculate screen size if flag is set */
-	if(priv->needScreenSizeUpdate)
-	{
-		XFDASHBOARD_DEBUG(self, WINDOWS, "Screen size needs to be recalculated");
-
-		/* Get width and height of screen by iterating through all connected monitors
-		 * and find the most top left and most right bottom point among all these
-		 * monitors. Then calculate size of screen by these points.
-		 */
-		forceUpdate=TRUE;
-		left=top=right=bottom=0;
-		numberMonitors=gdk_display_get_n_monitors(priv->gdkDisplay);
-		for(i=0; i<numberMonitors; i++)
-		{
-			monitor=gdk_display_get_monitor(priv->gdkDisplay, i);
-			gdk_monitor_get_geometry(monitor, &monitorRect);
-
-			if(forceUpdate || monitorRect.x<left) left=monitorRect.x;
-			if(forceUpdate || monitorRect.y<top) top=monitorRect.y;
-			if(forceUpdate || (monitorRect.x+monitorRect.width)>right) right=monitorRect.x+monitorRect.width;
-			if(forceUpdate || (monitorRect.y+monitorRect.height)>bottom) bottom=monitorRect.y+monitorRect.height;
-
-			/* The first monitor in list was processed so do not enforcing updating
-			 * coordinates from now on except they are most-specific points.
-			 */
-			forceUpdate=FALSE;
-
-			/* Debug message */
-			XFDASHBOARD_DEBUG(self, WINDOWS,
-								"Iterating monitor %d of %d [%d,%dx%d,%d] for screen size calculation",
-								i, numberMonitors,
-								monitorRect.x, monitorRect.y,
-								monitorRect.width, monitorRect.height);
-		}
-
-		/* Calculate screen size */
-		priv->screenWidth=right-left;
-		priv->screenHeight=bottom-top;
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"Screen size is %dx%d over all %d monitors covering area of [%d,%dx%d,%d]",
-							priv->screenWidth, priv->screenHeight,
-							numberMonitors,
-							left, top,
-							right, bottom);
-
-		/* Reset flag to avoid recalculation of screen size again and again */
-		priv->needScreenSizeUpdate=FALSE;
-	}
-
-	/* Get width and height of screen */
-	width=priv->screenWidth;
-	height=priv->screenHeight;
-#else
-	/* Get width and height of screen */
-	width=gdk_screen_get_width(priv->gdkScreen);
-	height=gdk_screen_get_height(priv->gdkScreen);
-#endif
-
-	/* Store result */
-	if(outWidth) *outWidth=width;
-	if(outHeight) *outHeight=height;
-}
-
-/* Get window manager name managing desktop environment */
-static const gchar* _xfdashboard_window_tracker_gdk_window_tracker_get_window_manager_name(XfdashboardWindowTracker *inWindowTracker)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	/* Get window manager name from libwnck and return */
-	return(wnck_screen_get_window_manager_name(priv->screen));
-
-}
-
-/* Get root (desktop) window */
-static XfdashboardWindowTrackerWindow* _xfdashboard_window_tracker_gdk_window_tracker_get_root_window(XfdashboardWindowTracker *inWindowTracker)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-	gulong									backgroundWindowID;
-	GList									*windows;
-	XfdashboardWindowTrackerWindowGDK		*window;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inWindowTracker), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inWindowTracker);
-	priv=self->priv;
-
-	/* Find and return root window (the desktop) by known ID */
-	backgroundWindowID=wnck_screen_get_background_pixmap(priv->screen);
-	if(backgroundWindowID)
-	{
-		WnckWindow							*backgroundWindow;
-
-		backgroundWindow=wnck_window_get(backgroundWindowID);
-		if(backgroundWindow)
-		{
-			XFDASHBOARD_DEBUG(self, WINDOWS,
-								"Found desktop window %s@%p by known background pixmap ID",
-								G_OBJECT_TYPE_NAME(backgroundWindow), backgroundWindow);
-
-			/* Get or create window object for wnck background window */
-			window=_xfdashboard_window_tracker_gdk_create_window_for_wnck(self, backgroundWindow);
-			XFDASHBOARD_DEBUG(self, WINDOWS,
-								"Resolved desktop window %s@%p to window object %s@%p",
-								G_OBJECT_TYPE_NAME(backgroundWindow), backgroundWindow,
-								G_OBJECT_TYPE_NAME(window), window);
-
-			/* Return window object found or created */
-			return(XFDASHBOARD_WINDOW_TRACKER_WINDOW(window));
-		}
-	}
-
-	/* Either there was no known ID for the root window or the root window
-	 * could not be found (happened a lot when running in daemon mode).
-	 * So iterate through list of all known windows and lookup window of
-	 * type 'desktop'.
-	 */
-	for(windows=wnck_screen_get_windows(priv->screen); windows; windows=g_list_next(windows))
-	{
-		WnckWindow					*wnckWindow;
-		WnckWindowType				wnckWindowType;
-
-		wnckWindow=(WnckWindow*)windows->data;
-		wnckWindowType=wnck_window_get_window_type(wnckWindow);
-		if(wnckWindowType==WNCK_WINDOW_DESKTOP)
-		{
-			XFDASHBOARD_DEBUG(self, WINDOWS,
-								"Desktop window %s@%p found while iterating through window list",
-								G_OBJECT_TYPE_NAME(wnckWindow), wnckWindow);
-
-			/* Get or create window object for wnck background window */
-			window=_xfdashboard_window_tracker_gdk_create_window_for_wnck(self, wnckWindow);
-			XFDASHBOARD_DEBUG(self, WINDOWS,
-								"Resolved desktop window %s@%p to window object %s@%p",
-								G_OBJECT_TYPE_NAME(wnckWindow), wnckWindow,
-								G_OBJECT_TYPE_NAME(window), window);
-
-			/* Return window object found or created */
-			return(XFDASHBOARD_WINDOW_TRACKER_WINDOW(window));
-		}
-	}
-
-	/* If we get here either desktop window does not exist or is not known
-	 * in window list. So return NULL here.
-	 */
-	XFDASHBOARD_DEBUG(self, WINDOWS, "Desktop window could not be found");
-	return(NULL);
-}
-
-/* Interface initialization
- * Set up default functions
- */
-static void _xfdashboard_window_tracker_gdk_window_tracker_iface_init(XfdashboardWindowTrackerInterface *iface)
-{
-	iface->get_windows=_xfdashboard_window_tracker_gdk_window_tracker_get_windows;
-	iface->get_windows_stacked=_xfdashboard_window_tracker_gdk_window_tracker_get_windows_stacked;
-	iface->get_active_window=_xfdashboard_window_tracker_gdk_window_tracker_get_active_window;
-
-	iface->get_workspaces_count=_xfdashboard_window_tracker_gdk_window_tracker_get_workspaces_count;
-	iface->get_workspaces=_xfdashboard_window_tracker_gdk_window_tracker_get_workspaces;
-	iface->get_active_workspace=_xfdashboard_window_tracker_gdk_window_tracker_get_active_workspace;
-	iface->get_workspace_by_number=_xfdashboard_window_tracker_gdk_window_tracker_get_workspace_by_number;
-
-	iface->supports_multiple_monitors=_xfdashboard_window_tracker_gdk_window_tracker_supports_multiple_monitors;
-	iface->get_monitors_count=_xfdashboard_window_tracker_gdk_window_tracker_get_monitors_count;
-	iface->get_monitors=_xfdashboard_window_tracker_gdk_window_tracker_get_monitors;
-	iface->get_primary_monitor=_xfdashboard_window_tracker_gdk_window_tracker_get_primary_monitor;
-	iface->get_monitor_by_number=_xfdashboard_window_tracker_gdk_window_tracker_get_monitor_by_number;
-	iface->get_monitor_by_position=_xfdashboard_window_tracker_gdk_window_tracker_get_monitor_by_position;
-
-	iface->get_screen_size=_xfdashboard_window_tracker_gdk_window_tracker_get_screen_size;
-
-	iface->get_window_manager_name=_xfdashboard_window_tracker_gdk_window_tracker_get_window_manager_name;
-
-	iface->get_root_window=_xfdashboard_window_tracker_gdk_window_tracker_get_root_window;
-}
-
-
-/* IMPLEMENTATION: GObject */
-
-/* Dispose this object */
-static void _xfdashboard_window_tracker_gdk_dispose_free_window(gpointer inData,
-																gpointer inUserData)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerWindowGDK		*window;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inData));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inUserData));
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inUserData);
-	window=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inData);
-
-	/* Unreference window */
-	_xfdashboard_window_tracker_gdk_free_window(self, window);
-}
-
-static void _xfdashboard_window_tracker_gdk_dispose_free_workspace(gpointer inData,
-																	gpointer inUserData)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerWorkspaceGDK	*workspace;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(inData));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inUserData));
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inUserData);
-	workspace=XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(inData);
-
-	/* Unreference workspace */
-	_xfdashboard_window_tracker_gdk_free_workspace(self, workspace);
-}
-
-static void _xfdashboard_window_tracker_gdk_dispose_free_monitor(gpointer inData,
-																	gpointer inUserData)
-{
-	XfdashboardWindowTrackerGDK				*self;
-	XfdashboardWindowTrackerMonitorGDK		*monitor;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_GDK(inData));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(inUserData));
-
-	self=XFDASHBOARD_WINDOW_TRACKER_GDK(inUserData);
-	monitor=XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK(inData);
-
-	/* Unreference monitor */
-	_xfdashboard_window_tracker_gdk_monitor_free(self, monitor);
-}
-
-static void _xfdashboard_window_tracker_gdk_dispose(GObject *inObject)
-{
-	XfdashboardWindowTrackerGDK				*self=XFDASHBOARD_WINDOW_TRACKER_GDK(inObject);
-	XfdashboardWindowTrackerGDKPrivate		*priv=self->priv;
-
-	/* Dispose allocated resources */
-	if(priv->suspendSignalID)
-	{
-		if(priv->application)
-		{
-			g_signal_handler_disconnect(priv->application, priv->suspendSignalID);
-			priv->application=NULL;
-		}
-
-		priv->suspendSignalID=0;
-	}
-
-	if(priv->activeWindow)
-	{
-		priv->activeWindow=NULL;
-	}
-
-	if(priv->windows)
-	{
-		g_list_foreach(priv->windows, _xfdashboard_window_tracker_gdk_dispose_free_window, self);
-		g_list_free(priv->windows);
-		priv->windows=NULL;
-	}
-
-	if(priv->windowsStacked)
-	{
-		g_list_free(priv->windowsStacked);
-		priv->windowsStacked=NULL;
-	}
-
-	if(priv->activeWorkspace)
-	{
-		priv->activeWorkspace=NULL;
-	}
-
-	if(priv->workspaces)
-	{
-		g_list_foreach(priv->workspaces, _xfdashboard_window_tracker_gdk_dispose_free_workspace, self);
-		g_list_free(priv->workspaces);
-		priv->workspaces=NULL;
-	}
-
-	if(priv->primaryMonitor)
-	{
-		priv->primaryMonitor=NULL;
-	}
-
-	if(priv->monitors)
-	{
-		g_list_foreach(priv->monitors, _xfdashboard_window_tracker_gdk_dispose_free_monitor, self);
-		g_list_free(priv->monitors);
-		priv->monitors=NULL;
-	}
-
-	if(priv->gdkScreen)
-	{
-		g_signal_handlers_disconnect_by_data(priv->gdkScreen, self);
-		priv->gdkScreen=NULL;
-	}
-
-#if GTK_CHECK_VERSION(3, 22, 0)
-	if(priv->gdkDisplay)
-	{
-		g_signal_handlers_disconnect_by_data(priv->gdkDisplay, self);
-		priv->gdkDisplay=NULL;
-	}
-#endif
-
-	if(priv->screen)
-	{
-		g_signal_handlers_disconnect_by_data(priv->screen, self);
-		priv->screen=NULL;
-	}
-
-	/* Call parent's class dispose method */
-	G_OBJECT_CLASS(xfdashboard_window_tracker_gdk_parent_class)->dispose(inObject);
-}
-
-/* Set/get properties */
-static void _xfdashboard_window_tracker_gdk_set_property(GObject *inObject,
-															guint inPropID,
-															const GValue *inValue,
-															GParamSpec *inSpec)
-{
-	switch(inPropID)
-	{
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
-			break;
-	}
-}
-
-static void _xfdashboard_window_tracker_gdk_get_property(GObject *inObject,
-															guint inPropID,
-															GValue *outValue,
-															GParamSpec *inSpec)
-{
-	XfdashboardWindowTrackerGDK			*self=XFDASHBOARD_WINDOW_TRACKER_GDK(inObject);
-
-	switch(inPropID)
-	{
-		case PROP_ACTIVE_WINDOW:
-			g_value_set_object(outValue, self->priv->activeWindow);
-			break;
-
-		case PROP_ACTIVE_WORKSPACE:
-			g_value_set_object(outValue, self->priv->activeWorkspace);
-			break;
-
-		case PROP_PRIMARY_MONITOR:
-			g_value_set_object(outValue, self->priv->primaryMonitor);
-			break;
-
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
-			break;
-	}
-}
-
-/* Class initialization
- * Override functions in parent classes and define properties
- * and signals
- */
-void xfdashboard_window_tracker_gdk_class_init(XfdashboardWindowTrackerGDKClass *klass)
-{
-	GObjectClass						*gobjectClass=G_OBJECT_CLASS(klass);
-	XfdashboardWindowTracker			*trackerIface;
-	GParamSpec							*paramSpec;
-
-	/* Reference interface type to lookup properties etc. */
-	trackerIface=g_type_default_interface_ref(XFDASHBOARD_TYPE_WINDOW_TRACKER);
-
-	/* Override functions */
-	gobjectClass->dispose=_xfdashboard_window_tracker_gdk_dispose;
-	gobjectClass->set_property=_xfdashboard_window_tracker_gdk_set_property;
-	gobjectClass->get_property=_xfdashboard_window_tracker_gdk_get_property;
-
-	/* Set up private structure */
-	g_type_class_add_private(klass, sizeof(XfdashboardWindowTrackerGDKPrivate));
-
-	/* Define properties */
-	paramSpec=g_object_interface_find_property(trackerIface, "active-window");
-	XfdashboardWindowTrackerGDKProperties[PROP_ACTIVE_WINDOW]=
-		g_param_spec_override("active-window", paramSpec);
-
-	paramSpec=g_object_interface_find_property(trackerIface, "active-workspace");
-	XfdashboardWindowTrackerGDKProperties[PROP_ACTIVE_WORKSPACE]=
-		g_param_spec_override("active-workspace", paramSpec);
-
-	paramSpec=g_object_interface_find_property(trackerIface, "primary-monitor");
-	XfdashboardWindowTrackerGDKProperties[PROP_PRIMARY_MONITOR]=
-		g_param_spec_override("primary-monitor", paramSpec);
-
-	g_object_class_install_properties(gobjectClass, PROP_LAST, XfdashboardWindowTrackerGDKProperties);
-
-	/* Release allocated resources */
-	g_type_default_interface_unref(trackerIface);
-}
-
-/* Object initialization
- * Create private structure and set up default values
- */
-void xfdashboard_window_tracker_gdk_init(XfdashboardWindowTrackerGDK *self)
-{
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-
-	priv=self->priv=XFDASHBOARD_WINDOW_TRACKER_GDK_GET_PRIVATE(self);
-
-	XFDASHBOARD_DEBUG(self, WINDOWS, "Initializing GDK window tracker");
-
-	/* Set default values */
-	priv->windows=NULL;
-	priv->windowsStacked=NULL;
-	priv->workspaces=NULL;
-	priv->monitors=NULL;
-	priv->screen=wnck_screen_get_default();
-#if GTK_CHECK_VERSION(3, 22, 0)
-	priv->gdkDisplay=gdk_display_get_default();
-	priv->gdkScreen=gdk_display_get_default_screen(priv->gdkDisplay);
-	priv->needScreenSizeUpdate=TRUE;
-	priv->screenWidth=0;
-	priv->screenHeight=0;
-#else
-	priv->gdkScreen=gdk_screen_get_default();
-#endif
-	priv->activeWindow=NULL;
-	priv->activeWorkspace=NULL;
-	priv->primaryMonitor=NULL;
-	priv->supportsMultipleMonitors=FALSE;
-
-	/* The very first call to libwnck should be setting the client type */
-	wnck_set_client_type(WNCK_CLIENT_TYPE_PAGER);
-
-	/* Connect signals to screen */
-	g_signal_connect_swapped(priv->screen,
-								"window-stacking-changed",
-								G_CALLBACK(_xfdashboard_window_tracker_gdk_on_window_stacking_changed),
-								self);
-
-	g_signal_connect_swapped(priv->screen,
-								"window-closed",
-								G_CALLBACK(_xfdashboard_window_tracker_gdk_on_window_closed),
-								self);
-	g_signal_connect_swapped(priv->screen,
-								"window-opened",
-								G_CALLBACK(_xfdashboard_window_tracker_gdk_on_window_opened),
-								self);
-	g_signal_connect_swapped(priv->screen,
-								"active-window-changed",
-								G_CALLBACK(_xfdashboard_window_tracker_gdk_on_active_window_changed),
-								self);
-
-	g_signal_connect_swapped(priv->screen,
-								"workspace-destroyed",
-								G_CALLBACK(_xfdashboard_window_tracker_gdk_on_workspace_destroyed),
-								self);
-	g_signal_connect_swapped(priv->screen,
-								"workspace-created",
-								G_CALLBACK(_xfdashboard_window_tracker_gdk_on_workspace_created),
-								self);
-	g_signal_connect_swapped(priv->screen,
-								"active-workspace-changed",
-								G_CALLBACK(_xfdashboard_window_tracker_gdk_on_active_workspace_changed),
-								self);
-
-	g_signal_connect_swapped(priv->gdkScreen,
-								"size-changed",
-								G_CALLBACK(_xfdashboard_window_tracker_gdk_on_screen_size_changed),
-								self);
-
-	g_signal_connect_swapped(priv->screen,
-								"window-manager-changed",
-								G_CALLBACK(_xfdashboard_window_tracker_gdk_on_window_manager_changed),
-								self);
-
-#ifdef HAVE_XINERAMA
-	/* Check if multiple monitors are supported */
-	if(XineramaIsActive(GDK_SCREEN_XDISPLAY(priv->gdkScreen)))
-	{
-		XfdashboardWindowTrackerMonitorGDK	*monitor;
-		gint								numberMonitors;
-		gint								i;
-
-		/* Set flag that multiple monitors are supported */
-		priv->supportsMultipleMonitors=TRUE;
-
-		/* This signal must be called at least after the default signal handler - best at last.
-		 * The reason is that all other signal handler should been processed because this handler
-		 * could destroy monitor instances even the one of the primary monitor if it was not
-		 * handled before. So give the other signal handlers a chance ;)
-		 */
-		g_signal_connect_data(priv->gdkScreen,
-								"monitors-changed",
-								G_CALLBACK(_xfdashboard_window_tracker_gdk_on_monitors_changed),
-								self,
-								NULL,
-								G_CONNECT_AFTER | G_CONNECT_SWAPPED);
-
-		/* Get monitors */
-#if GTK_CHECK_VERSION(3, 22, 0)
-		numberMonitors=gdk_display_get_n_monitors(priv->gdkDisplay);
-#else
-		numberMonitors=gdk_screen_get_n_monitors(priv->gdkScreen);
-#endif
-		for(i=0; i<numberMonitors; i++)
-		{
-			/* Create monitor object */
-			monitor=_xfdashboard_window_tracker_gdk_monitor_new(self, i);
-
-			/* Remember primary monitor */
-			if(xfdashboard_window_tracker_monitor_is_primary(XFDASHBOARD_WINDOW_TRACKER_MONITOR(monitor)))
-			{
-				priv->primaryMonitor=monitor;
-			}
-		}
-	}
-#endif
-
-	/* Handle suspension signals from application */
-	priv->application=xfdashboard_application_get_default();
-	priv->suspendSignalID=g_signal_connect_swapped(priv->application,
-													"notify::is-suspended",
-													G_CALLBACK(_xfdashboard_window_tracker_gdk_on_application_suspended_changed),
-													self);
-	priv->isAppSuspended=xfdashboard_application_is_suspended(priv->application);
-}
-
-
-/* IMPLEMENTATION: Public API */
-
-/* Get last timestamp for use in libwnck */
-guint32 xfdashboard_window_tracker_gdk_get_time(void)
-{
-	const ClutterEvent		*currentClutterEvent;
-	guint32					timestamp;
-	GdkDisplay				*display;
-	GdkWindow				*window;
-	GdkEventMask			eventMask;
-	GSList					*stages, *entry;
-	ClutterStage			*stage;
-
-	/* We don't use clutter_get_current_event_time as it can return
-	 * a too old timestamp if there is no current event.
-	 */
-	currentClutterEvent=clutter_get_current_event();
-	if(currentClutterEvent!=NULL) return(clutter_event_get_time(currentClutterEvent));
-
-	/* Next we try timestamp of last GTK+ event */
-	timestamp=gtk_get_current_event_time();
-	if(timestamp>0) return(timestamp);
-
-	/* Next we try to ask GDK for a timestamp */
-	timestamp=gdk_x11_display_get_user_time(gdk_display_get_default());
-	if(timestamp>0) return(timestamp);
-
-	/* Next we try to retrieve timestamp of last X11 event in clutter */
-	XFDASHBOARD_DEBUG(NULL, WINDOWS, "No timestamp for windows - trying timestamp of last X11 event in Clutter");
-	timestamp=(guint32)clutter_x11_get_current_event_time();
-	if(timestamp!=0)
-	{
-		XFDASHBOARD_DEBUG(NULL, WINDOWS,
-							"Got timestamp %u of last X11 event in Clutter",
-							timestamp);
-		return(timestamp);
-	}
-
-	/* Last resort is to get X11 server time via stage windows */
-	XFDASHBOARD_DEBUG(NULL, WINDOWS, "No timestamp for windows - trying last resort via stage windows");
-
-	display=gdk_display_get_default();
-	if(!display)
-	{
-		XFDASHBOARD_DEBUG(NULL, WINDOWS, "No default display found in GDK to get timestamp for windows");
-		return(0);
-	}
-
-	/* Iterate through stages, get their GDK window and try to retrieve timestamp */
-	timestamp=0;
-	stages=clutter_stage_manager_list_stages(clutter_stage_manager_get_default());
-	for(entry=stages; timestamp==0 && entry; entry=g_slist_next(entry))
-	{
-		/* Get stage */
-		stage=CLUTTER_STAGE(entry->data);
-		if(stage)
-		{
-			/* Get GDK window of stage */
-			window=clutter_gdk_get_stage_window(stage);
-			if(!window)
-			{
-				XFDASHBOARD_DEBUG(NULL, WINDOWS,
-									"No GDK window found for stage %p to get timestamp for windows",
-									stage);
-				continue;
-			}
-
-			/* Check if GDK window supports GDK_PROPERTY_CHANGE_MASK event
-			 * or application (or worst X server) will hang
-			 */
-			eventMask=gdk_window_get_events(window);
-			if(!(eventMask & GDK_PROPERTY_CHANGE_MASK))
-			{
-				XFDASHBOARD_DEBUG(NULL, WINDOWS,
-									"GDK window %p for stage %p does not support GDK_PROPERTY_CHANGE_MASK to get timestamp for windows",
-									window,
-									stage);
-				continue;
-			}
-
-			timestamp=gdk_x11_get_server_time(window);
-		}
-	}
-	g_slist_free(stages);
-
-	/* Return timestamp of last resort */
-	XFDASHBOARD_DEBUG(NULL, WINDOWS,
-						"Last resort timestamp for windows %s (%u)",
-						timestamp ? "found" : "not found",
-						timestamp);
-	return(timestamp);
-}
-
-/* Find and return XfdashboardWindowTrackerWindow object for mapped wnck window */
-XfdashboardWindowTrackerWindow* xfdashboard_window_tracker_gdk_get_window_for_wnck(XfdashboardWindowTrackerGDK *self,
-																					WnckWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK		*window;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(self), NULL);
-	g_return_val_if_fail(WNCK_IS_WINDOW(inWindow), NULL);
-
-	/* Lookup window object for requested wnck window and return it */
-	window=_xfdashboard_window_tracker_gdk_get_window_for_wnck(self, inWindow);
-	return(XFDASHBOARD_WINDOW_TRACKER_WINDOW(window));
-}
-
-/* Find and return XfdashboardWindowTrackerWorkspace object for mapped wnck workspace */
-XfdashboardWindowTrackerWorkspace* xfdashboard_window_tracker_gdk_get_workspace_for_wnck(XfdashboardWindowTrackerGDK *self,
-																							WnckWorkspace *inWorkspace)
-{
-	XfdashboardWindowTrackerWorkspaceGDK	*workspace;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_GDK(self), NULL);
-	g_return_val_if_fail(WNCK_IS_WORKSPACE(inWorkspace), NULL);
-
-	/* Lookup workspace object for requested wnck workspace and return it */
-	workspace=_xfdashboard_window_tracker_gdk_get_workspace_for_wnck(self, inWorkspace);
-	return(XFDASHBOARD_WINDOW_TRACKER_WORKSPACE(workspace));
-}
diff --git a/libxfdashboard/gdk/window-tracker-gdk.h b/libxfdashboard/gdk/window-tracker-gdk.h
deleted file mode 100644
index 9e04a08..0000000
--- a/libxfdashboard/gdk/window-tracker-gdk.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * window-tracker: Tracks windows, workspaces, monitors and
- *                 listens for changes. It also bundles libwnck into one
- *                 class.
- *                 By wrapping libwnck objects we can use a virtual
- *                 stable API while the API in libwnck changes within versions.
- *                 We only need to use #ifdefs in window tracker object
- *                 and nowhere else in the code.
- * 
- * Copyright 2012-2017 Stephan Haller <nomad at froevel.de>
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- * 
- * 
- */
-
-#ifndef __LIBXFDASHBOARD_WINDOW_TRACKER_GDK__
-#define __LIBXFDASHBOARD_WINDOW_TRACKER_GDK__
-
-#if !defined(__LIBXFDASHBOARD_H_INSIDE__) && !defined(LIBXFDASHBOARD_COMPILATION)
-#error "Only <libxfdashboard/libxfdashboard.h> can be included directly."
-#endif
-
-#include <glib-object.h>
-
-#include <libxfdashboard/window-tracker-window.h>
-#include <libxfdashboard/window-tracker-workspace.h>
-
-#define WNCK_I_KNOW_THIS_IS_UNSTABLE
-#include <libwnck/libwnck.h>
-
-G_BEGIN_DECLS
-
-#define XFDASHBOARD_TYPE_WINDOW_TRACKER_GDK				(xfdashboard_window_tracker_gdk_get_type())
-#define XFDASHBOARD_WINDOW_TRACKER_GDK(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_GDK, XfdashboardWindowTrackerGDK))
-#define XFDASHBOARD_IS_WINDOW_TRACKER_GDK(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_GDK))
-#define XFDASHBOARD_WINDOW_TRACKER_GDK_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass), XFDASHBOARD_TYPE_WINDOW_TRACKER_GDK, XfdashboardWindowTrackerGDKClass))
-#define XFDASHBOARD_IS_WINDOW_TRACKER_GDK_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), XFDASHBOARD_TYPE_WINDOW_TRACKER_GDK))
-#define XFDASHBOARD_WINDOW_TRACKER_GDK_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_GDK, XfdashboardWindowTrackerGDKClass))
-
-typedef struct _XfdashboardWindowTrackerGDK				XfdashboardWindowTrackerGDK;
-typedef struct _XfdashboardWindowTrackerGDKClass		XfdashboardWindowTrackerGDKClass;
-typedef struct _XfdashboardWindowTrackerGDKPrivate		XfdashboardWindowTrackerGDKPrivate;
-
-struct _XfdashboardWindowTrackerGDK
-{
-	/*< private >*/
-	/* Parent instance */
-	GObject									parent_instance;
-
-	/* Private structure */
-	XfdashboardWindowTrackerGDKPrivate		*priv;
-};
-
-struct _XfdashboardWindowTrackerGDKClass
-{
-	/*< private >*/
-	/* Parent class */
-	GObjectClass							parent_class;
-
-	/*< public >*/
-	/* Virtual functions */
-};
-
-/* Public API */
-GType xfdashboard_window_tracker_gdk_get_type(void) G_GNUC_CONST;
-
-guint32 xfdashboard_window_tracker_gdk_get_time(void);
-
-XfdashboardWindowTrackerWindow* xfdashboard_window_tracker_gdk_get_window_for_wnck(XfdashboardWindowTrackerGDK *self,
-																					WnckWindow *inWindow);
-XfdashboardWindowTrackerWorkspace* xfdashboard_window_tracker_gdk_get_workspace_for_wnck(XfdashboardWindowTrackerGDK *self,
-																							WnckWorkspace *inWorkspace);
-
-G_END_DECLS
-
-#endif	/* __LIBXFDASHBOARD_WINDOW_TRACKER_GDK__ */
diff --git a/libxfdashboard/gdk/window-tracker-monitor-gdk.c b/libxfdashboard/gdk/window-tracker-monitor-gdk.c
deleted file mode 100644
index bee8e2a..0000000
--- a/libxfdashboard/gdk/window-tracker-monitor-gdk.c
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * window-tracker-monitor: A monitor object tracked by window tracker.
- *                         It provides information about position and
- *                         size of monitor within screen and also a flag
- *                         if this monitor is the primary one.
- * 
- * Copyright 2012-2017 Stephan Haller <nomad at froevel.de>
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- * 
- * 
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <libxfdashboard/gdk/window-tracker-monitor-gdk.h>
-
-#include <glib/gi18n-lib.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkx.h>
-
-#include <libxfdashboard/window-tracker-monitor.h>
-#include <libxfdashboard/compat.h>
-#include <libxfdashboard/debug.h>
-
-
-/* Define this class in GObject system */
-static void _xfdashboard_window_tracker_monitor_gdk_window_tracker_monitor_iface_init(XfdashboardWindowTrackerMonitorInterface *iface);
-
-G_DEFINE_TYPE_WITH_CODE(XfdashboardWindowTrackerMonitorGDK,
-						xfdashboard_window_tracker_monitor_gdk,
-						G_TYPE_OBJECT,
-						G_IMPLEMENT_INTERFACE(XFDASHBOARD_TYPE_WINDOW_TRACKER_MONITOR, _xfdashboard_window_tracker_monitor_gdk_window_tracker_monitor_iface_init))
-
-/* Private structure - access only by public API if needed */
-#define XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK_GET_PRIVATE(obj)                \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_MONITOR_GDK, XfdashboardWindowTrackerMonitorGDKPrivate))
-
-struct _XfdashboardWindowTrackerMonitorGDKPrivate
-{
-	/* Properties related */
-	gint				monitorIndex;
-	gboolean			isPrimary;
-
-	/* Instance related */
-	GdkScreen			*screen;
-	GdkRectangle		geometry;
-};
-
-/* Properties */
-enum
-{
-	PROP_0,
-
-	/* Overriden properties of interface: XfdashboardWindowTrackerMonitor */
-	PROP_MONITOR_INDEX,
-	PROP_IS_PRIMARY,
-
-	PROP_LAST
-};
-
-static GParamSpec* XfdashboardWindowTrackerMonitorGDKProperties[PROP_LAST]={ 0, };
-
-
-/* IMPLEMENTATION: Private variables and methods */
-
-/* Set primary monitor flag */
-static void _xfdashboard_window_tracker_monitor_gdk_update_primary(XfdashboardWindowTrackerMonitorGDK *self)
-{
-	XfdashboardWindowTrackerMonitorGDKPrivate	*priv;
-	gboolean									isPrimary;
-#if GTK_CHECK_VERSION(3, 22, 0)
-	GdkMonitor									*primaryMonitor;
-#else
-	gint										primaryMonitor;
-#endif
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR(self));
-	g_return_if_fail(self->priv->monitorIndex>=0);
-
-	priv=self->priv;
-
-	/* Get primary flag */
-#if GTK_CHECK_VERSION(3, 22, 0)
-	primaryMonitor=gdk_display_get_monitor(gdk_screen_get_display(priv->screen), priv->monitorIndex);
-	isPrimary=gdk_monitor_is_primary(primaryMonitor);
-#else
-	primaryMonitor=gdk_screen_get_primary_monitor(priv->screen);
-	if(primaryMonitor==priv->monitorIndex) isPrimary=TRUE;
-		else isPrimary=FALSE;
-#endif
-
-	/* Set value if changed */
-	if(priv->isPrimary!=isPrimary)
-	{
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"Monitor %d changes primary state from %s to %s",
-							priv->monitorIndex,
-							priv->isPrimary ? "yes" : "no",
-							isPrimary ? "yes" : "no");
-
-		/* Set value */
-		priv->isPrimary=isPrimary;
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowTrackerMonitorGDKProperties[PROP_IS_PRIMARY]);
-
-		/* Emit signal */
-		g_signal_emit_by_name(self, "primary-changed");
-	}
-}
-
-/* Update monitor geometry */
-static void _xfdashboard_window_tracker_monitor_gdk_update_geometry(XfdashboardWindowTrackerMonitorGDK *self)
-{
-	XfdashboardWindowTrackerMonitorGDKPrivate	*priv;
-	GdkRectangle								geometry;
-	gint										numberMonitors;
-#if GTK_CHECK_VERSION(3, 22, 0)
-	GdkDisplay									*display;
-	GdkMonitor									*monitor;
-#endif
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_GDK(self));
-	g_return_if_fail(self->priv->monitorIndex>=0);
-
-	priv=self->priv;
-
-	/* Get number of monitors */
-#if GTK_CHECK_VERSION(3, 22, 0)
-	display=gdk_screen_get_display(priv->screen);
-	numberMonitors=gdk_display_get_n_monitors(display);
-#else
-	numberMonitors=gdk_screen_get_n_monitors(priv->screen);
-#endif
-
-	/* Check if monitor is valid */
-	if(priv->monitorIndex>=numberMonitors) return;
-
-	/* Get monitor geometry */
-#if GTK_CHECK_VERSION(3, 22, 0)
-	monitor=gdk_display_get_monitor(display, priv->monitorIndex);
-	gdk_monitor_get_geometry(monitor, &geometry);
-#else
-	gdk_screen_get_monitor_geometry(priv->screen, priv->monitorIndex, &geometry);
-#endif
-
-	/* Set value if changed */
-	if(geometry.x!=priv->geometry.x ||
-		geometry.y!=priv->geometry.y ||
-		geometry.width!=priv->geometry.width ||
-		geometry.height!=priv->geometry.height)
-	{
-		/* Set value */
-		priv->geometry.x=geometry.x;
-		priv->geometry.y=geometry.y;
-		priv->geometry.width=geometry.width;
-		priv->geometry.height=geometry.height;
-
-		/* Emit signal */
-		g_signal_emit_by_name(self, "geometry-changed");
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"Monitor %d moved to %d,%d and resized to %dx%d",
-							priv->monitorIndex,
-							priv->geometry.x, priv->geometry.y,
-							priv->geometry.width, priv->geometry.height);
-	}
-}
-
-/* Number of monitors, primary monitor or size of any monitor changed */
-static void _xfdashboard_window_tracker_monitor_gdk_on_monitors_changed(XfdashboardWindowTrackerMonitorGDK *self,
-																		gpointer inUserData)
-{
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_GDK(self));
-	g_return_if_fail(GDK_IS_SCREEN(inUserData));
-
-	/* Update primary monitor flag */
-	_xfdashboard_window_tracker_monitor_gdk_update_primary(self);
-
-	/* Update geometry of monitor */
-	_xfdashboard_window_tracker_monitor_gdk_update_geometry(self);
-}
-
-/* Set monitor index this object belongs to and to monitor */
-static void _xfdashboard_window_tracker_monitor_gdk_set_index(XfdashboardWindowTrackerMonitorGDK *self,
-																gint inIndex)
-{
-	XfdashboardWindowTrackerMonitorGDKPrivate		*priv;
-	gint											numberMonitors;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_GDK(self));
-	g_return_if_fail(inIndex>=0);
-
-	priv=self->priv;
-
-	/* Get number of monitors */
-#if GTK_CHECK_VERSION(3, 22, 0)
-	numberMonitors=gdk_display_get_n_monitors(gdk_screen_get_display(priv->screen));
-#else
-	numberMonitors=gdk_screen_get_n_monitors(priv->screen);
-#endif
-	g_return_if_fail(inIndex<numberMonitors);
-
-	/* Freeze notification */
-	g_object_freeze_notify(G_OBJECT(self));
-
-	/* Set value if changed */
-	if(priv->monitorIndex!=inIndex)
-	{
-		/* Set value */
-		priv->monitorIndex=inIndex;
-
-		/* Update primary monitor flag */
-		_xfdashboard_window_tracker_monitor_gdk_update_primary(self);
-
-		/* Update geometry of monitor */
-		_xfdashboard_window_tracker_monitor_gdk_update_geometry(self);
-
-		/* Connect signals now we have a valid monitor index set */
-		g_signal_connect_swapped(priv->screen, "monitors-changed", G_CALLBACK(_xfdashboard_window_tracker_monitor_gdk_on_monitors_changed), self);
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowTrackerMonitorGDKProperties[PROP_MONITOR_INDEX]);
-	}
-
-	/* Thaw notification */
-	g_object_thaw_notify(G_OBJECT(self));
-}
-
-
-/* IMPLEMENTATION: Interface XfdashboardWindowTrackerMonitor */
-
-/* Determine if monitor is primary one */
-static gboolean _xfdashboard_window_tracker_monitor_gdk_window_tracker_monitor_is_primary(XfdashboardWindowTrackerMonitor *inMonitor)
-{
-	XfdashboardWindowTrackerMonitorGDK			*self;
-	XfdashboardWindowTrackerMonitorGDKPrivate	*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_GDK(inMonitor), FALSE);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK(inMonitor);
-	priv=self->priv;
-
-	return(priv->isPrimary);
-}
-
-/* Get monitor index */
-static gint _xfdashboard_window_tracker_monitor_gdk_window_tracker_monitor_get_number(XfdashboardWindowTrackerMonitor *inMonitor)
-{
-	XfdashboardWindowTrackerMonitorGDK			*self;
-	XfdashboardWindowTrackerMonitorGDKPrivate	*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_GDK(inMonitor), 0);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK(inMonitor);
-	priv=self->priv;
-
-	return(priv->monitorIndex);
-}
-
-/* Get geometry of monitor */
-static void _xfdashboard_window_tracker_monitor_gdk_window_tracker_monitor_get_geometry(XfdashboardWindowTrackerMonitor *inMonitor,
-																						gint *outX,
-																						gint *outY,
-																						gint *outWidth,
-																						gint *outHeight)
-{
-	XfdashboardWindowTrackerMonitorGDK			*self;
-	XfdashboardWindowTrackerMonitorGDKPrivate	*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_GDK(inMonitor));
-
-	self=XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK(inMonitor);
-	priv=self->priv;
-
-	/* Set position and size of monitor */
-	if(outX) *outX=priv->geometry.x;
-	if(outY) *outY=priv->geometry.y;
-	if(outWidth) *outWidth=priv->geometry.width;
-	if(outHeight) *outHeight=priv->geometry.height;
-}
-
-/* Interface initialization
- * Set up default functions
- */
-static void _xfdashboard_window_tracker_monitor_gdk_window_tracker_monitor_iface_init(XfdashboardWindowTrackerMonitorInterface *iface)
-{
-	iface->is_primary=_xfdashboard_window_tracker_monitor_gdk_window_tracker_monitor_is_primary;
-	iface->get_number=_xfdashboard_window_tracker_monitor_gdk_window_tracker_monitor_get_number;
-	iface->get_geometry=_xfdashboard_window_tracker_monitor_gdk_window_tracker_monitor_get_geometry;
-}
-
-
-/* IMPLEMENTATION: GObject */
-
-/* Dispose this object */
-static void _xfdashboard_window_tracker_monitor_gdk_dispose(GObject *inObject)
-{
-	XfdashboardWindowTrackerMonitorGDK			*self=XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK(inObject);
-	XfdashboardWindowTrackerMonitorGDKPrivate	*priv=self->priv;
-
-	/* Release allocated resources */
-	if(priv->screen)
-	{
-		g_signal_handlers_disconnect_by_data(priv->screen, self);
-		priv->screen=NULL;
-	}
-
-	/* Call parent's class dispose method */
-	G_OBJECT_CLASS(xfdashboard_window_tracker_monitor_gdk_parent_class)->dispose(inObject);
-}
-
-/* Set/get properties */
-static void _xfdashboard_window_tracker_monitor_gdk_set_property(GObject *inObject,
-																	guint inPropID,
-																	const GValue *inValue,
-																	GParamSpec *inSpec)
-{
-	XfdashboardWindowTrackerMonitorGDK			*self=XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK(inObject);
-
-	switch(inPropID)
-	{
-		case PROP_MONITOR_INDEX:
-			_xfdashboard_window_tracker_monitor_gdk_set_index(self, g_value_get_int(inValue));
-			break;
-
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
-			break;
-	}
-}
-
-static void _xfdashboard_window_tracker_monitor_gdk_get_property(GObject *inObject,
-																	guint inPropID,
-																	GValue *outValue,
-																	GParamSpec *inSpec)
-{
-	XfdashboardWindowTrackerMonitorGDK			*self=XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK(inObject);
-	XfdashboardWindowTrackerMonitorGDKPrivate	*priv=self->priv;
-
-	switch(inPropID)
-	{
-		case PROP_IS_PRIMARY:
-			g_value_set_boolean(outValue, priv->isPrimary);
-			break;
-
-		case PROP_MONITOR_INDEX:
-			g_value_set_uint(outValue, priv->monitorIndex);
-			break;
-
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
-			break;
-	}
-}
-
-/* Class initialization
- * Override functions in parent classes and define properties
- * and signals
- */
-static void xfdashboard_window_tracker_monitor_gdk_class_init(XfdashboardWindowTrackerMonitorGDKClass *klass)
-{
-	GObjectClass						*gobjectClass=G_OBJECT_CLASS(klass);
-	XfdashboardWindowTrackerMonitor		*monitorIface;
-	GParamSpec							*paramSpec;
-
-	/* Reference interface type to lookup properties etc. */
-	monitorIface=g_type_default_interface_ref(XFDASHBOARD_TYPE_WINDOW_TRACKER_MONITOR);
-
-	/* Override functions */
-	gobjectClass->dispose=_xfdashboard_window_tracker_monitor_gdk_dispose;
-	gobjectClass->set_property=_xfdashboard_window_tracker_monitor_gdk_set_property;
-	gobjectClass->get_property=_xfdashboard_window_tracker_monitor_gdk_get_property;
-
-	/* Set up private structure */
-	g_type_class_add_private(klass, sizeof(XfdashboardWindowTrackerMonitorGDKPrivate));
-
-	/* Define properties */
-	paramSpec=g_object_interface_find_property(monitorIface, "is-primary");
-	XfdashboardWindowTrackerMonitorGDKProperties[PROP_IS_PRIMARY]=
-		g_param_spec_override("is-primary", paramSpec);
-
-	paramSpec=g_object_interface_find_property(monitorIface, "monitor-index");
-	XfdashboardWindowTrackerMonitorGDKProperties[PROP_MONITOR_INDEX]=
-		g_param_spec_override("monitor-index", paramSpec);
-
-	g_object_class_install_properties(gobjectClass, PROP_LAST, XfdashboardWindowTrackerMonitorGDKProperties);
-
-	/* Release allocated resources */
-	g_type_default_interface_unref(monitorIface);
-}
-
-/* Object initialization
- * Create private structure and set up default values
- */
-static void xfdashboard_window_tracker_monitor_gdk_init(XfdashboardWindowTrackerMonitorGDK *self)
-{
-	XfdashboardWindowTrackerMonitorGDKPrivate		*priv;
-
-	priv=self->priv=XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK_GET_PRIVATE(self);
-
-	/* Set default values */
-	priv->monitorIndex=-1;
-	priv->isPrimary=FALSE;
-	priv->screen=gdk_screen_get_default();
-	priv->geometry.x=0;
-	priv->geometry.y=0;
-	priv->geometry.width=0;
-	priv->geometry.height=0;
-}
diff --git a/libxfdashboard/gdk/window-tracker-monitor-gdk.h b/libxfdashboard/gdk/window-tracker-monitor-gdk.h
deleted file mode 100644
index bd35add..0000000
--- a/libxfdashboard/gdk/window-tracker-monitor-gdk.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * window-tracker-monitor: A monitor object tracked by window tracker.
- *                         It provides information about position and
- *                         size of monitor within screen and also a flag
- *                         if this monitor is the primary one.
- * 
- * Copyright 2012-2017 Stephan Haller <nomad at froevel.de>
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- * 
- * 
- */
-
-#ifndef __LIBXFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK__
-#define __LIBXFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK__
-
-#if !defined(__LIBXFDASHBOARD_H_INSIDE__) && !defined(LIBXFDASHBOARD_COMPILATION)
-#error "Only <libxfdashboard/libxfdashboard.h> can be included directly."
-#endif
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#define XFDASHBOARD_TYPE_WINDOW_TRACKER_MONITOR_GDK					(xfdashboard_window_tracker_monitor_gdk_get_type())
-#define XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK(obj)					(G_TYPE_CHECK_INSTANCE_CAST((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_MONITOR_GDK, XfdashboardWindowTrackerMonitorGDK))
-#define XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_GDK(obj)				(G_TYPE_CHECK_INSTANCE_TYPE((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_MONITOR_GDK))
-#define XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK_CLASS(klass)			(G_TYPE_CHECK_CLASS_CAST((klass), XFDASHBOARD_TYPE_WINDOW_TRACKER_MONITOR_GDK, XfdashboardWindowTrackerMonitorGDKClass))
-#define XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_GDK_CLASS(klass)		(G_TYPE_CHECK_CLASS_TYPE((klass), XFDASHBOARD_TYPE_WINDOW_TRACKER_MONITOR_GDK))
-#define XFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK_GET_CLASS(obj)		(G_TYPE_INSTANCE_GET_CLASS((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_MONITOR_GDK, XfdashboardWindowTrackerMonitorGDKClass))
-
-typedef struct _XfdashboardWindowTrackerMonitorGDK					XfdashboardWindowTrackerMonitorGDK;
-typedef struct _XfdashboardWindowTrackerMonitorGDKClass				XfdashboardWindowTrackerMonitorGDKClass;
-typedef struct _XfdashboardWindowTrackerMonitorGDKPrivate			XfdashboardWindowTrackerMonitorGDKPrivate;
-
-struct _XfdashboardWindowTrackerMonitorGDK
-{
-	/*< private >*/
-	/* Parent instance */
-	GObject										parent_instance;
-
-	/* Private structure */
-	XfdashboardWindowTrackerMonitorGDKPrivate	*priv;
-};
-
-struct _XfdashboardWindowTrackerMonitorGDKClass
-{
-	/*< private >*/
-	/* Parent class */
-	GObjectClass								parent_class;
-
-	/*< public >*/
-	/* Virtual functions */
-	void (*primary_changed)(XfdashboardWindowTrackerMonitorGDK *self);
-	void (*geometry_changed)(XfdashboardWindowTrackerMonitorGDK *self);
-};
-
-/* Public API */
-GType xfdashboard_window_tracker_monitor_gdk_get_type(void) G_GNUC_CONST;
-
-G_END_DECLS
-
-#endif	/* __LIBXFDASHBOARD_WINDOW_TRACKER_MONITOR_GDK__ */
diff --git a/libxfdashboard/gdk/window-tracker-window-gdk.c b/libxfdashboard/gdk/window-tracker-window-gdk.c
deleted file mode 100644
index 23806c0..0000000
--- a/libxfdashboard/gdk/window-tracker-window-gdk.c
+++ /dev/null
@@ -1,1367 +0,0 @@
-/*
- * window-tracker-window: A window tracked by window tracker and also
- *                        a wrapper class around WnckWindow.
- *                        By wrapping libwnck objects we can use a virtual
- *                        stable API while the API in libwnck changes
- *                        within versions. We only need to use #ifdefs in
- *                        window tracker object and nowhere else in the code.
- * 
- * Copyright 2012-2017 Stephan Haller <nomad at froevel.de>
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- * 
- * 
- */
-
-/**
- * SECTION:window-tracker-window-gdk
- * @short_description: A window used by GDK window tracker
- * @include: xfdashboard/gdk/window-tracker-window-gdk.h
- *
- * This is the GDK backend of #XfdashboardWindowTrackerWindow
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <libxfdashboard/gdk/window-tracker-window-gdk.h>
-
-#define WNCK_I_KNOW_THIS_IS_UNSTABLE
-#include <libwnck/libwnck.h>
-
-#include <glib/gi18n-lib.h>
-#include <clutter/gdk/clutter-gdk.h>
-#include <clutter/x11/clutter-x11.h>
-#include <gtk/gtkx.h>
-#include <gdk/gdkx.h>
-#ifdef HAVE_XINERAMA
-#include <X11/extensions/Xinerama.h>
-#endif
-
-#include <libxfdashboard/gdk/window-content-gdk.h>
-#include <libxfdashboard/gdk/window-tracker-workspace-gdk.h>
-#include <libxfdashboard/gdk/window-tracker-gdk.h>
-#include <libxfdashboard/window-tracker.h>
-#include <libxfdashboard/marshal.h>
-#include <libxfdashboard/compat.h>
-#include <libxfdashboard/debug.h>
-
-
-/* Define this class in GObject system */
-static void _xfdashboard_window_tracker_window_gdk_window_tracker_window_iface_init(XfdashboardWindowTrackerWindowInterface *iface);
-
-G_DEFINE_TYPE_WITH_CODE(XfdashboardWindowTrackerWindowGDK,
-						xfdashboard_window_tracker_window_gdk,
-						G_TYPE_OBJECT,
-						G_IMPLEMENT_INTERFACE(XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW, _xfdashboard_window_tracker_window_gdk_window_tracker_window_iface_init))
-
-/* Private structure - access only by public API if needed */
-#define XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_GET_PRIVATE(obj)                 \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW_GDK, XfdashboardWindowTrackerWindowGDKPrivate))
-
-struct _XfdashboardWindowTrackerWindowGDKPrivate
-{
-	/* Properties related */
-	WnckWindow								*window;
-	XfdashboardWindowTrackerWindowState		state;
-	XfdashboardWindowTrackerWindowAction	actions;
-
-	/* Instance related */
-	WnckWorkspace							*workspace;
-
-	gint									lastGeometryX;
-	gint									lastGeometryY;
-	gint									lastGeometryWidth;
-	gint									lastGeometryHeight;
-
-	ClutterContent							*content;
-};
-
-
-/* Properties */
-enum
-{
-	PROP_0,
-
-	PROP_WINDOW,
-
-	/* Overriden properties of interface: XfdashboardWindowTrackerWindow */
-	PROP_STATE,
-	PROP_ACTIONS,
-
-	PROP_LAST
-};
-
-static GParamSpec* XfdashboardWindowTrackerWindowGDKProperties[PROP_LAST]={ 0, };
-
-
-/* IMPLEMENTATION: Private variables and methods */
-#define XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self)             \
-	g_critical(_("No wnck window wrapped at %s in called function %s"),        \
-				G_OBJECT_TYPE_NAME(self),                                      \
-				__func__);
-
-#define XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_WRONG_WINDOW(self)          \
-	g_critical(_("Got signal from wrong wnck window wrapped at %s in called function %s"),\
-				G_OBJECT_TYPE_NAME(self),                                      \
-				__func__);
-
-/* Get state of window */
-static void _xfdashboard_window_tracker_window_gdk_update_state(XfdashboardWindowTrackerWindowGDK *self)
-{
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	XfdashboardWindowTrackerWindowState			newState;
-	WnckWindowState								wnckState;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(self));
-
-	priv=self->priv;
-	newState=0;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-	}
-		else
-		{
-			/* Get state of wnck window to determine state */
-			wnckState=wnck_window_get_state(priv->window);
-
-			/* Determine window state */
-			if(wnckState & WNCK_WINDOW_STATE_HIDDEN) newState|=XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_HIDDEN;
-
-			if(wnckState & WNCK_WINDOW_STATE_MINIMIZED)
-			{
-				newState|=XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_MINIMIZED;
-			}
-				else
-				{
-					if((wnckState & WNCK_WINDOW_STATE_MAXIMIZED_HORIZONTALLY) &&
-						(wnckState & WNCK_WINDOW_STATE_MAXIMIZED_VERTICALLY))
-					{
-						newState|=XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_MAXIMIZED;
-					}
-				}
-
-			if(wnckState & WNCK_WINDOW_STATE_FULLSCREEN) newState|=XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_FULLSCREEN;
-			if(wnckState & WNCK_WINDOW_STATE_SKIP_PAGER) newState|=XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_SKIP_PAGER;
-			if(wnckState & WNCK_WINDOW_STATE_SKIP_TASKLIST) newState|=XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_SKIP_TASKLIST;
-			if(wnckState & WNCK_WINDOW_STATE_DEMANDS_ATTENTION) newState|=XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_URGENT;
-			if(wnckState & WNCK_WINDOW_STATE_URGENT) newState|=XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_URGENT;
-
-			/* "Pin" is not a wnck window state and do not get confused with the
-			 * "sticky" state as it refers only to the window's stickyness on
-			 * the viewport. So we have to ask wnck if it is pinned.
-			 */
-			if(wnck_window_is_pinned(priv->window)) newState|=XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_PINNED;
-		}
-
-	/* Set value if changed */
-	if(priv->state!=newState)
-	{
-		/* Set value */
-		priv->state=newState;
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowTrackerWindowGDKProperties[PROP_STATE]);
-	}
-}
-
-/* Get actions of window */
-static void _xfdashboard_window_tracker_window_gdk_update_actions(XfdashboardWindowTrackerWindowGDK *self)
-{
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	XfdashboardWindowTrackerWindowAction		newActions;
-	WnckWindowActions							wnckActions;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(self));
-
-	priv=self->priv;
-	newActions=0;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-	}
-		else
-		{
-			/* Get actions of wnck window to determine state */
-			wnckActions=wnck_window_get_actions(priv->window);
-
-			/* Determine window actions */
-			if(wnckActions & WNCK_WINDOW_ACTION_CLOSE) newActions|=XFDASHBOARD_WINDOW_TRACKER_WINDOW_ACTION_CLOSE;
-		}
-
-	/* Set value if changed */
-	if(priv->actions!=newActions)
-	{
-		/* Set value */
-		priv->actions=newActions;
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowTrackerWindowGDKProperties[PROP_ACTIONS]);
-	}
-}
-
-/* Proxy signal for mapped wnck window which changed name */
-static void _xfdashboard_window_tracker_window_gdk_on_wnck_name_changed(XfdashboardWindowTrackerWindowGDK *self,
-																		gpointer inUserData)
-{
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	WnckWindow									*window;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(self));
-	g_return_if_fail(WNCK_IS_WINDOW(inUserData));
-
-	priv=self->priv;
-	window=WNCK_WINDOW(inUserData);
-
-	/* Check that window emitting this signal is the mapped window of this object */
-	if(priv->window!=window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_WRONG_WINDOW(self);
-		return;
-	}
-
-	/* Proxy signal */
-	g_signal_emit_by_name(self, "name-changed");
-}
-
-/* Proxy signal for mapped wnck window which changed states */
-static void _xfdashboard_window_tracker_window_gdk_on_wnck_state_changed(XfdashboardWindowTrackerWindowGDK *self,
-																			WnckWindowState inChangedStates,
-																			WnckWindowState inNewState,
-																			gpointer inUserData)
-{
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	WnckWindow									*window;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(self));
-	g_return_if_fail(WNCK_IS_WINDOW(inUserData));
-
-	priv=self->priv;
-	window=WNCK_WINDOW(inUserData);
-
-	/* Check that window emitting this signal is the mapped window of this object */
-	if(priv->window!=window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_WRONG_WINDOW(self);
-		return;
-	}
-
-	/* Update state before emitting signal */
-	_xfdashboard_window_tracker_window_gdk_update_state(self);
-
-	/* Proxy signal */
-	g_signal_emit_by_name(self, "state-changed", inChangedStates, inNewState);
-}
-
-/* Proxy signal for mapped wnck window which changed actions */
-static void _xfdashboard_window_tracker_window_gdk_on_wnck_actions_changed(XfdashboardWindowTrackerWindowGDK *self,
-																			WnckWindowActions inChangedActions,
-																			WnckWindowActions inNewActions,
-																			gpointer inUserData)
-{
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	WnckWindow									*window;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(self));
-	g_return_if_fail(WNCK_IS_WINDOW(inUserData));
-
-	priv=self->priv;
-	window=WNCK_WINDOW(inUserData);
-
-	/* Check that window emitting this signal is the mapped window of this object */
-	if(priv->window!=window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_WRONG_WINDOW(self);
-		return;
-	}
-
-	/* Update actions before emitting signal */
-	_xfdashboard_window_tracker_window_gdk_update_actions(self);
-
-	/* Proxy signal */
-	g_signal_emit_by_name(self, "actions-changed", inChangedActions, inNewActions);
-}
-
-/* Proxy signal for mapped wnck window which changed icon */
-static void _xfdashboard_window_tracker_window_gdk_on_wnck_icon_changed(XfdashboardWindowTrackerWindowGDK *self,
-																		gpointer inUserData)
-{
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	WnckWindow									*window;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(self));
-	g_return_if_fail(WNCK_IS_WINDOW(inUserData));
-
-	priv=self->priv;
-	window=WNCK_WINDOW(inUserData);
-
-	/* Check that window emitting this signal is the mapped window of this object */
-	if(priv->window!=window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_WRONG_WINDOW(self);
-		return;
-	}
-
-	/* Proxy signal */
-	g_signal_emit_by_name(self, "icon-changed");
-}
-
-/* Proxy signal for mapped wnck window which changed workspace */
-static void _xfdashboard_window_tracker_window_gdk_on_wnck_workspace_changed(XfdashboardWindowTrackerWindowGDK *self,
-																				gpointer inUserData)
-{
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	WnckWindow									*window;
-	XfdashboardWindowTrackerWorkspace			*oldWorkspace;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(self));
-	g_return_if_fail(WNCK_IS_WINDOW(inUserData));
-
-	priv=self->priv;
-	window=WNCK_WINDOW(inUserData);
-
-	/* Check that window emitting this signal is the mapped window of this object */
-	if(priv->window!=window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_WRONG_WINDOW(self);
-		return;
-	}
-
-	/* Get mapped workspace object for last known workspace of this window */
-	oldWorkspace=NULL;
-	if(priv->workspace)
-	{
-		XfdashboardWindowTracker				*windowTracker;
-
-		windowTracker=xfdashboard_window_tracker_get_default();
-		oldWorkspace=xfdashboard_window_tracker_gdk_get_workspace_for_wnck(XFDASHBOARD_WINDOW_TRACKER_GDK(windowTracker), priv->workspace);
-		g_object_unref(windowTracker);
-	}
-
-	/* Proxy signal */
-	g_signal_emit_by_name(self, "workspace-changed", oldWorkspace);
-
-	/* Remember new workspace as last known workspace */
-	priv->workspace=wnck_window_get_workspace(window);
-}
-
-/* Proxy signal for mapped wnck window which changed geometry */
-static void _xfdashboard_window_tracker_window_gdk_on_wnck_geometry_changed(XfdashboardWindowTrackerWindowGDK *self,
-																			gpointer inUserData)
-{
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	WnckWindow									*window;
-	gint										x, y, width, height;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(self));
-	g_return_if_fail(WNCK_IS_WINDOW(inUserData));
-
-	priv=self->priv;
-	window=WNCK_WINDOW(inUserData);
-
-	/* Check that window emitting this signal is the mapped window of this object */
-	if(priv->window!=window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_WRONG_WINDOW(self);
-		return;
-	}
-
-	/* Get current position and size of window and check against last known
-	 * position and size of window to determine if window has moved or resized.
-	 */
-	wnck_window_get_geometry(priv->window, &x, &y, &width, &height);
-	if(priv->lastGeometryX!=x ||
-		priv->lastGeometryY!=y ||
-		priv->lastGeometryWidth!=width ||
-		priv->lastGeometryHeight!=height)
-	{
-		XfdashboardWindowTracker				*windowTracker;
-		gint									screenWidth, screenHeight;
-		XfdashboardWindowTrackerMonitor			*oldMonitor;
-		XfdashboardWindowTrackerMonitor			*currentMonitor;
-		gint									windowMiddleX, windowMiddleY;
-
-		/* Get window tracker */
-		windowTracker=xfdashboard_window_tracker_get_default();
-
-		/* Get monitor at old position of window and the monitor at current.
-		 * If they differ emit signal for window changed monitor.
-		 */
-		xfdashboard_window_tracker_get_screen_size(windowTracker, &screenWidth, &screenHeight);
-
-		windowMiddleX=priv->lastGeometryX+(priv->lastGeometryWidth/2);
-		if(windowMiddleX>screenWidth) windowMiddleX=screenWidth-1;
-
-		windowMiddleY=priv->lastGeometryY+(priv->lastGeometryHeight/2);
-		if(windowMiddleY>screenHeight) windowMiddleY=screenHeight-1;
-
-		oldMonitor=xfdashboard_window_tracker_get_monitor_by_position(windowTracker, windowMiddleX, windowMiddleY);
-
-		currentMonitor=xfdashboard_window_tracker_window_get_monitor(XFDASHBOARD_WINDOW_TRACKER_WINDOW(self));
-
-		if(currentMonitor!=oldMonitor)
-		{
-			/* Emit signal */
-			XFDASHBOARD_DEBUG(self, WINDOWS,
-								"Window '%s' moved from monitor %d (%s) to %d (%s)",
-								wnck_window_get_name(priv->window),
-								oldMonitor ? xfdashboard_window_tracker_monitor_get_number(oldMonitor) : -1,
-								(oldMonitor && xfdashboard_window_tracker_monitor_is_primary(oldMonitor)) ? "primary" : "non-primary",
-								currentMonitor ? xfdashboard_window_tracker_monitor_get_number(currentMonitor) : -1,
-								(currentMonitor && xfdashboard_window_tracker_monitor_is_primary(currentMonitor)) ? "primary" : "non-primary");
-			g_signal_emit_by_name(self, "monitor-changed", oldMonitor);
-		}
-
-		/* Remember current position and size as last known ones */
-		priv->lastGeometryX=x;
-		priv->lastGeometryY=y;
-		priv->lastGeometryWidth=width;
-		priv->lastGeometryHeight=height;
-
-		/* Release allocated resources */
-		g_object_unref(windowTracker);
-	}
-
-	/* Proxy signal */
-	g_signal_emit_by_name(self, "geometry-changed");
-}
-
-/* Set wnck window to map in this window object */
-static void _xfdashboard_window_tracker_window_gdk_set_window(XfdashboardWindowTrackerWindowGDK *self,
-																WnckWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(self));
-	g_return_if_fail(!inWindow || WNCK_IS_WINDOW(inWindow));
-
-	priv=self->priv;
-
-	/* Set value if changed */
-	if(priv->window!=inWindow)
-	{
-		/* If we have created a content for this window then remove weak reference
-		 * and reset content variable to NULL. First call to get window content
-		 * will recreate it. Already used contents will not be affected.
-		 */
-		if(priv->content)
-		{
-			XFDASHBOARD_DEBUG(self, WINDOWS,
-								"Removing cached content with ref-count %d from %s@%p for wnck-window %p because wnck-window will change to %p",
-								G_OBJECT(priv->content)->ref_count,
-								G_OBJECT_TYPE_NAME(self), self,
-								priv->window,
-								inWindow);
-			g_object_remove_weak_pointer(G_OBJECT(priv->content), (gpointer*)&priv->content);
-			priv->content=NULL;
-		}
-
-		/* Disconnect signals to old window (if available) and reset states */
-		if(priv->window)
-		{
-			/* Remove weak reference at old window */
-			g_object_remove_weak_pointer(G_OBJECT(priv->window), (gpointer*)&priv->window);
-
-			/* Disconnect signal handlers */
-			g_signal_handlers_disconnect_by_data(priv->window, self);
-			priv->window=NULL;
-		}
-		priv->state=0;
-		priv->actions=0;
-		priv->workspace=NULL;
-
-		/* Set new value */
-		priv->window=inWindow;
-
-		/* Initialize states and connect signals if window is set */
-		if(priv->window)
-		{
-			/* Add weak reference at new window */
-			g_object_add_weak_pointer(G_OBJECT(priv->window), (gpointer*)&priv->window);
-
-			/* Initialize states */
-			_xfdashboard_window_tracker_window_gdk_update_state(self);
-			_xfdashboard_window_tracker_window_gdk_update_actions(self);
-			priv->workspace=wnck_window_get_workspace(priv->window);
-			wnck_window_get_geometry(priv->window,
-										&priv->lastGeometryX,
-										&priv->lastGeometryY,
-										&priv->lastGeometryWidth,
-										&priv->lastGeometryHeight);
-
-			/* Connect signals */
-			g_signal_connect_swapped(priv->window,
-										"name-changed",
-										G_CALLBACK(_xfdashboard_window_tracker_window_gdk_on_wnck_name_changed),
-										self);
-			g_signal_connect_swapped(priv->window,
-										"state-changed",
-										G_CALLBACK(_xfdashboard_window_tracker_window_gdk_on_wnck_state_changed),
-										self);
-			g_signal_connect_swapped(priv->window,
-										"actions-changed",
-										G_CALLBACK(_xfdashboard_window_tracker_window_gdk_on_wnck_actions_changed),
-										self);
-			g_signal_connect_swapped(priv->window,
-										"icon-changed",
-										G_CALLBACK(_xfdashboard_window_tracker_window_gdk_on_wnck_icon_changed),
-										self);
-			g_signal_connect_swapped(priv->window,
-										"workspace-changed",
-										G_CALLBACK(_xfdashboard_window_tracker_window_gdk_on_wnck_workspace_changed),
-										self);
-			g_signal_connect_swapped(priv->window,
-										"geometry-changed",
-										G_CALLBACK(_xfdashboard_window_tracker_window_gdk_on_wnck_geometry_changed),
-										self);
-		}
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowTrackerWindowGDKProperties[PROP_WINDOW]);
-	}
-}
-
-
-/* IMPLEMENTATION: Interface XfdashboardWindowTrackerWindow */
-
-/* Determine if window is visible */
-static gboolean _xfdashboard_window_tracker_window_gdk_window_tracker_window_is_visible(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow), FALSE);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* Windows are invisible if hidden but not minimized */
-	if((priv->state & XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_HIDDEN) &&
-		!(priv->state & XFDASHBOARD_WINDOW_TRACKER_WINDOW_STATE_MINIMIZED))
-	{
-		return(FALSE);
-	}
-
-	/* If we get here the window is visible */
-	return(TRUE);
-}
-
-/* Show window */
-static void _xfdashboard_window_tracker_window_gdk_window_tracker_window_show(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow));
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return;
-	}
-
-	/* Show (unminize) window */
-	wnck_window_unminimize(priv->window, xfdashboard_window_tracker_gdk_get_time());
-}
-
-/* Show window */
-static void _xfdashboard_window_tracker_window_gdk_window_tracker_window_hide(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow));
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return;
-	}
-
-	/* Hide (minimize) window */
-	wnck_window_minimize(priv->window);
-}
-
-/* Get parent window if this window is a child window */
-static XfdashboardWindowTrackerWindow* _xfdashboard_window_tracker_window_gdk_window_tracker_window_get_parent(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	WnckWindow									*parentWindow;
-	XfdashboardWindowTracker					*windowTracker;
-	XfdashboardWindowTrackerWindow				*foundWindow;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return(NULL);
-	}
-
-	/* Get parent window */
-	parentWindow=wnck_window_get_transient(priv->window);
-	if(!parentWindow) return(NULL);
-
-	/* Get window tracker and lookup the mapped and matching XfdashboardWindowTrackerWindow
-	 * for wnck window.
-	 */
-	windowTracker=xfdashboard_window_tracker_get_default();
-	foundWindow=xfdashboard_window_tracker_gdk_get_window_for_wnck(XFDASHBOARD_WINDOW_TRACKER_GDK(windowTracker), parentWindow);
-	g_object_unref(windowTracker);
-
-	/* Return found window object */
-	return(foundWindow);
-}
-
-/* Get window state */
-static XfdashboardWindowTrackerWindowState _xfdashboard_window_tracker_window_gdk_window_tracker_window_get_state(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow), 0);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* Return state of window */
-	return(priv->state);
-}
-
-/* Get window actions */
-static XfdashboardWindowTrackerWindowAction _xfdashboard_window_tracker_window_gdk_window_tracker_window_get_actions(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow), 0);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* Return actions of window */
-	return(priv->actions);
-}
-
-/* Get name (title) of window */
-static const gchar* _xfdashboard_window_tracker_window_gdk_window_tracker_window_get_name(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return(NULL);
-	}
-
-	/* Check if window has a name to return and return name or NULL */
-	if(!wnck_window_has_name(priv->window)) return(NULL);
-
-	return(wnck_window_get_name(priv->window));
-}
-
-/* Get icon of window */
-static GdkPixbuf* _xfdashboard_window_tracker_window_gdk_window_tracker_window_get_icon(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return(NULL);
-	}
-
-	/* Return icon as pixbuf of window */
-	return(wnck_window_get_icon(priv->window));
-}
-
-static const gchar* _xfdashboard_window_tracker_window_gdk_window_tracker_window_get_icon_name(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return(NULL);
-	}
-
-	/* Check if window has an icon name to return and return icon name or NULL */
-	if(!wnck_window_has_icon_name(priv->window)) return(NULL);
-
-	return(wnck_window_get_icon_name(priv->window));
-}
-
-/* Get workspace where window is on */
-static XfdashboardWindowTrackerWorkspace* _xfdashboard_window_tracker_window_gdk_window_tracker_window_get_workspace(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	WnckWorkspace								*wantedWorkspace;
-	XfdashboardWindowTracker					*windowTracker;
-	XfdashboardWindowTrackerWorkspace			*foundWorkspace;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return(NULL);
-	}
-
-	/* Get real wnck workspace of window to lookup a mapped and matching
-	 * XfdashboardWindowTrackerWorkspace object.
-	 * NOTE: Workspace may be NULL. In this case return NULL immediately and
-	 *       do not lookup a matching workspace object.
-	 */
-	wantedWorkspace=wnck_window_get_workspace(priv->window);
-	if(!wantedWorkspace) return(NULL);
-
-	/* Get window tracker and lookup the mapped and matching XfdashboardWindowTrackerWorkspace
-	 * for wnck workspace.
-	 */
-	windowTracker=xfdashboard_window_tracker_get_default();
-	foundWorkspace=xfdashboard_window_tracker_gdk_get_workspace_for_wnck(XFDASHBOARD_WINDOW_TRACKER_GDK(windowTracker), wantedWorkspace);
-	g_object_unref(windowTracker);
-
-	/* Return found workspace */
-	return(foundWorkspace);
-}
-
-/* Determine if window is on requested workspace */
-static gboolean _xfdashboard_window_tracker_window_gdk_window_tracker_window_is_on_workspace(XfdashboardWindowTrackerWindow *inWindow,
-																								XfdashboardWindowTrackerWorkspace *inWorkspace)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	WnckWorkspace								*workspace;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow), FALSE);
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace), FALSE);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return(FALSE);
-	}
-
-	/* Get wnck workspace to check if window is on this one */
-	workspace=xfdashboard_window_tracker_workspace_gdk_get_workspace(XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace));
-	if(!workspace)
-	{
-		g_critical(_("Either no wnck workspace is wrapped at %s or workspace is not available anymore when called at function %s"),
-					G_OBJECT_TYPE_NAME(inWorkspace),
-					__func__);
-		return(FALSE);
-	}
-
-	/* Check if window is on that workspace */
-	return(wnck_window_is_on_workspace(priv->window, workspace));
-}
-
-/* Get geometry (position and size) of window */
-static void _xfdashboard_window_tracker_window_gdk_window_tracker_window_get_geometry(XfdashboardWindowTrackerWindow *inWindow,
-																				gint *outX,
-																				gint *outY,
-																				gint *outWidth,
-																				gint *outHeight)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	gint										x, y, width, height;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow));
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return;
-	}
-
-	/* Get window geometry */
-	wnck_window_get_client_window_geometry(priv->window, &x, &y, &width, &height);
-
-	/* Set result */
-	if(outX) *outX=x;
-	if(outX) *outY=y;
-	if(outWidth) *outWidth=width;
-	if(outHeight) *outHeight=height;
-}
-
-/* Set geometry (position and size) of window */
-static void _xfdashboard_window_tracker_window_gdk_window_tracker_window_set_geometry(XfdashboardWindowTrackerWindow *inWindow,
-																				gint inX,
-																				gint inY,
-																				gint inWidth,
-																				gint inHeight)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	WnckWindowMoveResizeMask					flags;
-	gint										contentX, contentY;
-	gint										contentWidth, contentHeight;
-	gint										borderX, borderY;
-	gint										borderWidth, borderHeight;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow));
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return;
-	}
-
-	/* Get window border size to respect it when moving window */
-	wnck_window_get_client_window_geometry(priv->window, &contentX, &contentY, &contentWidth, &contentHeight);
-	wnck_window_get_geometry(priv->window, &borderX, &borderY, &borderWidth, &borderHeight);
-
-	/* Get modification flags */
-	flags=0;
-	if(inX>=0)
-	{
-		flags|=WNCK_WINDOW_CHANGE_X;
-		inX-=(contentX-borderX);
-	}
-
-	if(inY>=0)
-	{
-		flags|=WNCK_WINDOW_CHANGE_Y;
-		inY-=(contentY-borderY);
-	}
-
-	if(inWidth>=0)
-	{
-		flags|=WNCK_WINDOW_CHANGE_WIDTH;
-		inWidth+=(borderWidth-contentWidth);
-	}
-
-	if(inHeight>=0)
-	{
-		flags|=WNCK_WINDOW_CHANGE_HEIGHT;
-		inHeight+=(borderHeight-contentHeight);
-	}
-
-	/* Set geometry */
-	wnck_window_set_geometry(priv->window,
-								WNCK_WINDOW_GRAVITY_STATIC,
-								flags,
-								inX, inY, inWidth, inHeight);
-}
-
-/* Move window */
-static void _xfdashboard_window_tracker_window_gdk_window_tracker_window_move(XfdashboardWindowTrackerWindow *inWindow,
-																		gint inX,
-																		gint inY)
-{
-	_xfdashboard_window_tracker_window_gdk_window_tracker_window_set_geometry(inWindow, inX, inY, -1, -1);
-}
-
-/* Resize window */
-static void _xfdashboard_window_tracker_window_gdk_window_tracker_window_resize(XfdashboardWindowTrackerWindow *inWindow,
-																			gint inWidth,
-																			gint inHeight)
-{
-	_xfdashboard_window_tracker_window_gdk_window_tracker_window_set_geometry(inWindow, -1, -1, inWidth, inHeight);
-}
-
-/* Move a window to another workspace */
-static void _xfdashboard_window_tracker_window_gdk_window_tracker_window_move_to_workspace(XfdashboardWindowTrackerWindow *inWindow,
-																					XfdashboardWindowTrackerWorkspace *inWorkspace)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	WnckWorkspace								*workspace;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow));
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace));
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return;
-	}
-
-	/* Get wnck workspace to move window to */
-	workspace=xfdashboard_window_tracker_workspace_gdk_get_workspace(XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace));
-	if(!workspace)
-	{
-		g_critical(_("Either no wnck workspace is wrapped at %s or workspace is not available anymore when called at function %s"),
-					G_OBJECT_TYPE_NAME(inWorkspace),
-					__func__);
-		return;
-	}
-
-	/* Move window to workspace */
-	wnck_window_move_to_workspace(priv->window, workspace);
-}
-
-/* Activate window with its transient windows */
-static void _xfdashboard_window_tracker_window_gdk_window_tracker_window_activate(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow));
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return;
-	}
-
-	/* Activate window */
-	wnck_window_activate_transient(priv->window, xfdashboard_window_tracker_gdk_get_time());
-}
-
-/* Close window */
-static void _xfdashboard_window_tracker_window_gdk_window_tracker_window_close(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow));
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return;
-	}
-
-	/* Close window */
-	wnck_window_close(priv->window, xfdashboard_window_tracker_gdk_get_time());
-}
-
-/* Get process ID owning the requested window */
-static gint _xfdashboard_window_tracker_window_gdk_window_tracker_window_get_pid(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow), -1);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return(-1);
-	}
-
-	/* Return PID retrieved from wnck window */
-	return(wnck_window_get_pid(priv->window));
-}
-
-/* Get all possible instance name for window, e.g. class name, instance name.
- * Caller is responsible to free result with g_strfreev() if not NULL.
- */
-static gchar** _xfdashboard_window_tracker_window_gdk_window_tracker_window_get_instance_names(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-	GSList										*names;
-	GSList										*iter;
-	const gchar									*value;
-	guint										numberEntries;
-	gchar										**result;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-	names=NULL;
-	result=NULL;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return(NULL);
-	}
-
-	/* Add class name of window to list */
-	value=wnck_window_get_class_group_name(priv->window);
-	if(value) names=g_slist_prepend(names, g_strdup(value));
-
-	/* Add instance name of window to list */
-	value=wnck_window_get_class_instance_name(priv->window);
-	if(value) names=g_slist_prepend(names, g_strdup(value));
-
-	/* Add role of window to list */
-	value=wnck_window_get_role(priv->window);
-	if(value) names=g_slist_prepend(names, g_strdup(value));
-
-	/* If nothing was added to list of name, stop here and return */
-	if(!names) return(NULL);
-
-	/* Build result list as a NULL-terminated list of strings */
-	numberEntries=g_slist_length(names);
-
-	result=g_new(gchar*, numberEntries+1);
-	result[numberEntries]=NULL;
-	for(iter=names; iter; iter=g_slist_next(iter))
-	{
-		numberEntries--;
-		result[numberEntries]=iter->data;
-	}
-
-	/* Release allocated resources */
-	g_slist_free(names);
-
-	/* Return result list */
-	return(result);
-}
-
-/* Get content for this window for use in actors.
- * Caller is responsible to remove reference with g_object_unref().
- */
-static ClutterContent* _xfdashboard_window_tracker_window_gdk_window_tracker_window_get_content(XfdashboardWindowTrackerWindow *inWindow)
-{
-	XfdashboardWindowTrackerWindowGDK			*self;
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(inWindow), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inWindow);
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return(NULL);
-	}
-
-	/* Create content for window only if no content is already available. If it
-	 * is available just return it with taking an extra reference on it.
-	 */
-	if(!priv->content)
-	{
-		priv->content=xfdashboard_window_content_gdk_new_for_window(self);
-		g_object_add_weak_pointer(G_OBJECT(priv->content), (gpointer*)&priv->content);
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"Created content %s@%p for window %s@%p (wnck-window=%p)",
-							priv->content ? G_OBJECT_TYPE_NAME(priv->content) : "<unknown>", priv->content,
-							G_OBJECT_TYPE_NAME(self), self,
-							priv->window);
-	}
-		else
-		{
-			g_object_ref(priv->content);
-			XFDASHBOARD_DEBUG(self, WINDOWS,
-								"Using cached content %s@%p (ref-count=%d) for window %s@%p (wnck-window=%p)",
-								priv->content ? G_OBJECT_TYPE_NAME(priv->content) : "<unknown>", priv->content,
-								priv->content ? G_OBJECT(priv->content)->ref_count : 0,
-								G_OBJECT_TYPE_NAME(self), self,
-								priv->window);
-		}
-
-	/* Return content */
-	return(priv->content);
-}
-
-/* Interface initialization
- * Set up default functions
- */
-static void _xfdashboard_window_tracker_window_gdk_window_tracker_window_iface_init(XfdashboardWindowTrackerWindowInterface *iface)
-{
-	iface->is_visible=_xfdashboard_window_tracker_window_gdk_window_tracker_window_is_visible;
-	iface->show=_xfdashboard_window_tracker_window_gdk_window_tracker_window_show;
-	iface->hide=_xfdashboard_window_tracker_window_gdk_window_tracker_window_hide;
-
-	iface->get_parent=_xfdashboard_window_tracker_window_gdk_window_tracker_window_get_parent;
-
-	iface->get_state=_xfdashboard_window_tracker_window_gdk_window_tracker_window_get_state;
-	iface->get_actions=_xfdashboard_window_tracker_window_gdk_window_tracker_window_get_actions;
-
-	iface->get_name=_xfdashboard_window_tracker_window_gdk_window_tracker_window_get_name;
-
-	iface->get_icon=_xfdashboard_window_tracker_window_gdk_window_tracker_window_get_icon;
-	iface->get_icon_name=_xfdashboard_window_tracker_window_gdk_window_tracker_window_get_icon_name;
-
-	iface->get_workspace=_xfdashboard_window_tracker_window_gdk_window_tracker_window_get_workspace;
-	iface->is_on_workspace=_xfdashboard_window_tracker_window_gdk_window_tracker_window_is_on_workspace;
-
-	iface->get_geometry=_xfdashboard_window_tracker_window_gdk_window_tracker_window_get_geometry;
-	iface->set_geometry=_xfdashboard_window_tracker_window_gdk_window_tracker_window_set_geometry;
-	iface->move=_xfdashboard_window_tracker_window_gdk_window_tracker_window_move;
-	iface->resize=_xfdashboard_window_tracker_window_gdk_window_tracker_window_resize;
-	iface->move_to_workspace=_xfdashboard_window_tracker_window_gdk_window_tracker_window_move_to_workspace;
-	iface->activate=_xfdashboard_window_tracker_window_gdk_window_tracker_window_activate;
-	iface->close=_xfdashboard_window_tracker_window_gdk_window_tracker_window_close;
-
-	iface->get_pid=_xfdashboard_window_tracker_window_gdk_window_tracker_window_get_pid;
-	iface->get_instance_names=_xfdashboard_window_tracker_window_gdk_window_tracker_window_get_instance_names;
-
-	iface->get_content=_xfdashboard_window_tracker_window_gdk_window_tracker_window_get_content;
-}
-
-
-/* IMPLEMENTATION: GObject */
-
-/* Dispose this object */
-static void _xfdashboard_window_tracker_window_gdk_dispose(GObject *inObject)
-{
-	XfdashboardWindowTrackerWindowGDK			*self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inObject);
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv=self->priv;
-
-	/* Dispose allocated resources */
-	if(priv->content)
-	{
-		XFDASHBOARD_DEBUG(self, WINDOWS,
-							"Removing cached content with ref-count %d from %s@%p for wnck-window %p",
-							G_OBJECT(priv->content)->ref_count,
-							G_OBJECT_TYPE_NAME(self), self,
-							priv->window);
-		g_object_remove_weak_pointer(G_OBJECT(priv->content), (gpointer*)&priv->content);
-		priv->content=NULL;
-	}
-
-	if(priv->window)
-	{
-		/* Remove weak reference at current window */
-		g_object_remove_weak_pointer(G_OBJECT(priv->window), (gpointer*)&priv->window);
-
-		/* Disconnect signal handlers */
-		g_signal_handlers_disconnect_by_data(priv->window, self);
-		priv->window=NULL;
-	}
-
-	/* Call parent's class dispose method */
-	G_OBJECT_CLASS(xfdashboard_window_tracker_window_gdk_parent_class)->dispose(inObject);
-}
-
-/* Set/get properties */
-static void _xfdashboard_window_tracker_window_gdk_set_property(GObject *inObject,
-																guint inPropID,
-																const GValue *inValue,
-																GParamSpec *inSpec)
-{
-	XfdashboardWindowTrackerWindowGDK		*self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inObject);
-
-	switch(inPropID)
-	{
-		case PROP_WINDOW:
-			_xfdashboard_window_tracker_window_gdk_set_window(self, WNCK_WINDOW(g_value_get_object(inValue)));
-			break;
-
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
-			break;
-	}
-}
-
-static void _xfdashboard_window_tracker_window_gdk_get_property(GObject *inObject,
-																guint inPropID,
-																GValue *outValue,
-																GParamSpec *inSpec)
-{
-	XfdashboardWindowTrackerWindowGDK		*self=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(inObject);
-
-	switch(inPropID)
-	{
-		case PROP_WINDOW:
-			g_value_set_object(outValue, self->priv->window);
-			break;
-
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
-			break;
-	}
-}
-
-/* Class initialization
- * Override functions in parent classes and define properties
- * and signals
- */
-void xfdashboard_window_tracker_window_gdk_class_init(XfdashboardWindowTrackerWindowGDKClass *klass)
-{
-	GObjectClass						*gobjectClass=G_OBJECT_CLASS(klass);
-	XfdashboardWindowTracker			*windowIface;
-	GParamSpec							*paramSpec;
-
-	/* Reference interface type to lookup properties etc. */
-	windowIface=g_type_default_interface_ref(XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW);
-
-	/* Override functions */
-	gobjectClass->dispose=_xfdashboard_window_tracker_window_gdk_dispose;
-	gobjectClass->set_property=_xfdashboard_window_tracker_window_gdk_set_property;
-	gobjectClass->get_property=_xfdashboard_window_tracker_window_gdk_get_property;
-
-	/* Set up private structure */
-	g_type_class_add_private(klass, sizeof(XfdashboardWindowTrackerWindowGDKPrivate));
-
-	/* Define properties */
-	XfdashboardWindowTrackerWindowGDKProperties[PROP_WINDOW]=
-		g_param_spec_object("window",
-							_("Window"),
-							_("The mapped wnck window"),
-							WNCK_TYPE_WINDOW,
-							G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
-
-	paramSpec=g_object_interface_find_property(windowIface, "state");
-	XfdashboardWindowTrackerWindowGDKProperties[PROP_STATE]=
-		g_param_spec_override("state", paramSpec);
-
-	paramSpec=g_object_interface_find_property(windowIface, "actions");
-	XfdashboardWindowTrackerWindowGDKProperties[PROP_ACTIONS]=
-		g_param_spec_override("actions", paramSpec);
-
-	g_object_class_install_properties(gobjectClass, PROP_LAST, XfdashboardWindowTrackerWindowGDKProperties);
-
-	/* Release allocated resources */
-	g_type_default_interface_unref(windowIface);
-}
-
-/* Object initialization
- * Create private structure and set up default values
- */
-void xfdashboard_window_tracker_window_gdk_init(XfdashboardWindowTrackerWindowGDK *self)
-{
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	priv=self->priv=XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_GET_PRIVATE(self);
-
-	/* Set default values */
-	priv->window=NULL;
-	priv->content=NULL;
-}
-
-
-/* IMPLEMENTATION: Public API */
-
-/**
- * xfdashboard_window_tracker_window_gdk_get_window:
- * @self: A #XfdashboardWindowTrackerWindowGDK
- *
- * Returns the wrapped window of libwnck.
- *
- * Return value: (transfer none): the #WnckWindow wrapped by @self. The returned
- *   #WnckWindow is owned by libwnck and must not be referenced or unreferenced.
- */
-WnckWindow* xfdashboard_window_tracker_window_gdk_get_window(XfdashboardWindowTrackerWindowGDK *self)
-{
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(self), NULL);
-
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return(NULL);
-	}
-
-	/* Return wrapped libwnck window */
-	return(priv->window);
-}
-
-/**
- * xfdashboard_window_tracker_window_gdk_get_xid:
- * @self: A #XfdashboardWindowTrackerWindowGDK
- *
- * Gets the X window ID of the wrapped libwnck's window at @self.
- *
- * Return value: the X window ID of @self.
- **/
-gulong xfdashboard_window_tracker_window_gdk_get_xid(XfdashboardWindowTrackerWindowGDK *self)
-{
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(self), None);
-
-	priv=self->priv;
-
-	/* A wnck window must be wrapped by this object */
-	if(!priv->window)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_WARN_NO_WINDOW(self);
-		return(None);
-	}
-
-	/* Return X window ID */
-	return(wnck_window_get_xid(priv->window));
-}
diff --git a/libxfdashboard/gdk/window-tracker-window-gdk.h b/libxfdashboard/gdk/window-tracker-window-gdk.h
deleted file mode 100644
index 38cba99..0000000
--- a/libxfdashboard/gdk/window-tracker-window-gdk.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * window-tracker-window: A window tracked by window tracker and also
- *                        a wrapper class around WnckWindow.
- *                        By wrapping libwnck objects we can use a virtual
- *                        stable API while the API in libwnck changes
- *                        within versions. We only need to use #ifdefs in
- *                        window tracker object and nowhere else in the code.
- * 
- * Copyright 2012-2017 Stephan Haller <nomad at froevel.de>
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- * 
- * 
- */
-
-#ifndef __LIBXFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK__
-#define __LIBXFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK__
-
-#if !defined(__LIBXFDASHBOARD_H_INSIDE__) && !defined(LIBXFDASHBOARD_COMPILATION)
-#error "Only <libxfdashboard/libxfdashboard.h> can be included directly."
-#endif
-
-#include <glib-object.h>
-
-#define WNCK_I_KNOW_THIS_IS_UNSTABLE
-#include <libwnck/libwnck.h>
-
-G_BEGIN_DECLS
-
-#define XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW_GDK				(xfdashboard_window_tracker_window_gdk_get_type())
-#define XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW_GDK, XfdashboardWindowTrackerWindowGDK))
-#define XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW_GDK))
-#define XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass), XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW_GDK, XfdashboardWindowTrackerWindowGDKClass))
-#define XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW_GDK_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW_GDK))
-#define XFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW_GDK, XfdashboardWindowTrackerWindowGDKClass))
-
-typedef struct _XfdashboardWindowTrackerWindowGDK				XfdashboardWindowTrackerWindowGDK;
-typedef struct _XfdashboardWindowTrackerWindowGDKClass			XfdashboardWindowTrackerWindowGDKClass;
-typedef struct _XfdashboardWindowTrackerWindowGDKPrivate		XfdashboardWindowTrackerWindowGDKPrivate;
-
-struct _XfdashboardWindowTrackerWindowGDK
-{
-	/*< private >*/
-	/* Parent instance */
-	GObject										parent_instance;
-
-	/* Private structure */
-	XfdashboardWindowTrackerWindowGDKPrivate	*priv;
-};
-
-struct _XfdashboardWindowTrackerWindowGDKClass
-{
-	/*< private >*/
-	/* Parent class */
-	GObjectClass								parent_class;
-
-	/*< public >*/
-	/* Virtual functions */
-};
-
-/* Public API */
-GType xfdashboard_window_tracker_window_gdk_get_type(void) G_GNUC_CONST;
-
-WnckWindow* xfdashboard_window_tracker_window_gdk_get_window(XfdashboardWindowTrackerWindowGDK *self);
-gulong xfdashboard_window_tracker_window_gdk_get_xid(XfdashboardWindowTrackerWindowGDK *self);
-
-G_END_DECLS
-
-#endif	/* __LIBXFDASHBOARD_WINDOW_TRACKER_WINDOW_GDK__ */
diff --git a/libxfdashboard/gdk/window-tracker-workspace-gdk.c b/libxfdashboard/gdk/window-tracker-workspace-gdk.c
deleted file mode 100644
index 489f449..0000000
--- a/libxfdashboard/gdk/window-tracker-workspace-gdk.c
+++ /dev/null
@@ -1,442 +0,0 @@
-/*
- * window-tracker-workspace: A workspace tracked by window tracker and
- *                           also a wrapper class around WnckWorkspace.
- *                           By wrapping libwnck objects we can use a 
- *                           virtual stable API while the API in libwnck
- *                           changes within versions. We only need to
- *                           use #ifdefs in window tracker object and
- *                           nowhere else in the code.
- * 
- * Copyright 2012-2017 Stephan Haller <nomad at froevel.de>
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- * 
- * 
- */
-
-/**
- * SECTION:window-tracker-workspace-gdk
- * @short_description: A workspace used by GDK window tracker
- * @include: xfdashboard/gdk/window-tracker-workspace-gdk.h
- *
- * This is the GDK backend of #XfdashboardWindowTrackerWorkspace
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <libxfdashboard/gdk/window-tracker-workspace-gdk.h>
-
-#define WNCK_I_KNOW_THIS_IS_UNSTABLE
-#include <libwnck/libwnck.h>
-
-#include <glib/gi18n-lib.h>
-
-#include <libxfdashboard/gdk/window-tracker-gdk.h>
-#include <libxfdashboard/window-tracker.h>
-#include <libxfdashboard/marshal.h>
-#include <libxfdashboard/compat.h>
-
-
-/* Define this class in GObject system */
-static void _xfdashboard_window_tracker_workspace_gdk_window_tracker_workspace_iface_init(XfdashboardWindowTrackerWorkspaceInterface *iface);
-
-G_DEFINE_TYPE_WITH_CODE(XfdashboardWindowTrackerWorkspaceGDK,
-						xfdashboard_window_tracker_workspace_gdk,
-						G_TYPE_OBJECT,
-						G_IMPLEMENT_INTERFACE(XFDASHBOARD_TYPE_WINDOW_TRACKER_WORKSPACE, _xfdashboard_window_tracker_workspace_gdk_window_tracker_workspace_iface_init))
-
-/* Private structure - access only by public API if needed */
-#define XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK_GET_PRIVATE(obj)              \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_WORKSPACE_GDK, XfdashboardWindowTrackerWorkspaceGDKPrivate))
-
-struct _XfdashboardWindowTrackerWorkspaceGDKPrivate
-{
-	/* Properties related */
-	WnckWorkspace							*workspace;
-};
-
-
-/* Properties */
-enum
-{
-	PROP_0,
-
-	PROP_WORKSPACE,
-
-	PROP_LAST
-};
-
-static GParamSpec* XfdashboardWindowTrackerWorkspaceGDKProperties[PROP_LAST]={ 0, };
-
-
-/* IMPLEMENTATION: Private variables and methods */
-#define XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK_WARN_NO_WORKSPACE(self)       \
-	g_critical(_("No wnck workspace wrapped at %s in called function %s"),     \
-				G_OBJECT_TYPE_NAME(self),                                      \
-				__func__);
-
-#define XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK_WARN_WRONG_WORKSPACE(self)    \
-	g_critical(_("Got signal from wrong wnck workspace wrapped at %s in called function %s"),\
-				G_OBJECT_TYPE_NAME(self),                                      \
-				__func__);
-
-/* Proxy signal for mapped wnck window which changed name */
-static void _xfdashboard_window_tracker_workspace_gdk_on_wnck_name_changed(XfdashboardWindowTrackerWorkspaceGDK *self,
-																			gpointer inUserData)
-{
-	XfdashboardWindowTrackerWorkspaceGDKPrivate		*priv;
-	WnckWorkspace									*workspace;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(self));
-	g_return_if_fail(WNCK_IS_WORKSPACE(inUserData));
-
-	priv=self->priv;
-	workspace=WNCK_WORKSPACE(inUserData);
-
-	/* Check that workspace emitting this signal is the mapped workspace of this object */
-	if(priv->workspace!=workspace)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK_WARN_WRONG_WORKSPACE(self);
-		return;
-	}
-
-	/* Proxy signal */
-	g_signal_emit_by_name(self, "name-changed");
-}
-
-/* Set wnck workspace to map in this workspace object */
-static void _xfdashboard_window_tracker_workspace_gdk_set_workspace(XfdashboardWindowTrackerWorkspaceGDK *self,
-																	WnckWorkspace *inWorkspace)
-{
-	XfdashboardWindowTrackerWorkspaceGDKPrivate		*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(self));
-	g_return_if_fail(!inWorkspace || WNCK_IS_WORKSPACE(inWorkspace));
-
-	priv=self->priv;
-
-	/* Set value if changed */
-	if(priv->workspace!=inWorkspace)
-	{
-		/* Disconnect signals to old window (if available) and reset states */
-		if(priv->workspace)
-		{
-			/* Remove weak reference at old workspace */
-			g_object_remove_weak_pointer(G_OBJECT(priv->workspace), (gpointer*)&priv->workspace);
-
-			/* Disconnect signal handlers */
-			g_signal_handlers_disconnect_by_data(priv->workspace, self);
-			priv->workspace=NULL;
-		}
-
-		/* Set new value */
-		priv->workspace=inWorkspace;
-
-		/* Initialize states and connect signals if window is set */
-		if(priv->workspace)
-		{
-			/* Add weak reference at new workspace */
-			g_object_add_weak_pointer(G_OBJECT(priv->workspace), (gpointer*)&priv->workspace);
-
-			/* Connect signals */
-			g_signal_connect_swapped(priv->workspace,
-										"name-changed",
-										G_CALLBACK(_xfdashboard_window_tracker_workspace_gdk_on_wnck_name_changed),
-										self);
-		}
-
-		/* Notify about property change */
-		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowTrackerWorkspaceGDKProperties[PROP_WORKSPACE]);
-	}
-}
-
-
-/* IMPLEMENTATION: Interface XfdashboardWindowTrackerWorkspace */
-
-/* Get number of workspace */
-static gint _xfdashboard_window_tracker_workspace_gdk_window_tracker_workspace_get_number(XfdashboardWindowTrackerWorkspace *inWorkspace)
-{
-	XfdashboardWindowTrackerWorkspaceGDK			*self;
-	XfdashboardWindowTrackerWorkspaceGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace), -1);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace);
-	priv=self->priv;
-
-	/* A wnck workspace must be wrapped by this object */
-	if(!priv->workspace)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK_WARN_NO_WORKSPACE(self);
-		return(-1);
-	}
-
-	/* Return number of workspace */
-	return(wnck_workspace_get_number(priv->workspace));
-}
-
-/* Get name of workspace */
-static const gchar* _xfdashboard_window_tracker_workspace_gdk_window_tracker_workspace_get_name(XfdashboardWindowTrackerWorkspace *inWorkspace)
-{
-	XfdashboardWindowTrackerWorkspaceGDK			*self;
-	XfdashboardWindowTrackerWorkspaceGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace), NULL);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace);
-	priv=self->priv;
-
-	/* A wnck workspace must be wrapped by this object */
-	if(!priv->workspace)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK_WARN_NO_WORKSPACE(self);
-		return(NULL);
-	}
-
-	/* Return name of workspace */
-	return(wnck_workspace_get_name(priv->workspace));
-}
-
-/* Get size of workspace */
-static void _xfdashboard_window_tracker_workspace_gdk_window_tracker_workspace_get_size(XfdashboardWindowTrackerWorkspace *inWorkspace,
-																						gint *outWidth,
-																						gint *outHeight)
-{
-	XfdashboardWindowTrackerWorkspaceGDK			*self;
-	XfdashboardWindowTrackerWorkspaceGDKPrivate		*priv;
-	gint											width, height;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace));
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace);
-	priv=self->priv;
-
-	/* A wnck workspace must be wrapped by this object */
-	if(!priv->workspace)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK_WARN_NO_WORKSPACE(self);
-		return;
-	}
-
-	/* Get width and height of workspace */
-	width=wnck_workspace_get_width(priv->workspace);
-	height=wnck_workspace_get_height(priv->workspace);
-
-	/* Set values */
-	if(outWidth) *outWidth=width;
-	if(outHeight) *outHeight=height;
-}
-
-/* Determine if this workspace is the active one */
-static gboolean _xfdashboard_window_tracker_workspace_gdk_window_tracker_workspace_is_active(XfdashboardWindowTrackerWorkspace *inWorkspace)
-{
-	XfdashboardWindowTrackerWorkspaceGDK			*self;
-	XfdashboardWindowTrackerWorkspaceGDKPrivate		*priv;
-	XfdashboardWindowTracker						*windowTracker;
-	XfdashboardWindowTrackerWorkspace				*activeWorkspace;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace), FALSE);
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace);
-	priv=self->priv;
-
-	/* A wnck workspace must be wrapped by this object */
-	if(!priv->workspace)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK_WARN_NO_WORKSPACE(self);
-		return(FALSE);
-	}
-
-	/* Get current active workspace */
-	windowTracker=xfdashboard_window_tracker_get_default();
-	activeWorkspace=xfdashboard_window_tracker_get_active_workspace(windowTracker);
-	g_object_unref(windowTracker);
-
-	/* Return TRUE if current active workspace is this workspace */
-	return(xfdashboard_window_tracker_workspace_is_equal(inWorkspace, activeWorkspace));
-}
-
-/* Activate workspace */
-static void _xfdashboard_window_tracker_workspace_gdk_window_tracker_workspace_activate(XfdashboardWindowTrackerWorkspace *inWorkspace)
-{
-	XfdashboardWindowTrackerWorkspaceGDK			*self;
-	XfdashboardWindowTrackerWorkspaceGDKPrivate		*priv;
-
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace));
-
-	self=XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(inWorkspace);
-	priv=self->priv;
-
-	/* A wnck workspace must be wrapped by this object */
-	if(!priv->workspace)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK_WARN_NO_WORKSPACE(self);
-		return;
-	}
-
-	/* Activate workspace */
-	wnck_workspace_activate(priv->workspace, xfdashboard_window_tracker_gdk_get_time());
-}
-
-/* Interface initialization
- * Set up default functions
- */
-static void _xfdashboard_window_tracker_workspace_gdk_window_tracker_workspace_iface_init(XfdashboardWindowTrackerWorkspaceInterface *iface)
-{
-	iface->get_number=_xfdashboard_window_tracker_workspace_gdk_window_tracker_workspace_get_number;
-	iface->get_name=_xfdashboard_window_tracker_workspace_gdk_window_tracker_workspace_get_name;
-
-	iface->get_size=_xfdashboard_window_tracker_workspace_gdk_window_tracker_workspace_get_size;
-
-	iface->is_active=_xfdashboard_window_tracker_workspace_gdk_window_tracker_workspace_is_active;
-	iface->activate=_xfdashboard_window_tracker_workspace_gdk_window_tracker_workspace_activate;
-}
-
-
-/* IMPLEMENTATION: GObject */
-
-/* Dispose this object */
-static void _xfdashboard_window_tracker_workspace_gdk_dispose(GObject *inObject)
-{
-	XfdashboardWindowTrackerWorkspaceGDK			*self=XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(inObject);
-	XfdashboardWindowTrackerWorkspaceGDKPrivate		*priv=self->priv;
-
-	/* Dispose allocated resources */
-	if(priv->workspace)
-	{
-		/* Remove weak reference at current workspace */
-		g_object_remove_weak_pointer(G_OBJECT(priv->workspace), (gpointer*)&priv->workspace);
-
-		/* Disconnect signal handlers */
-		g_signal_handlers_disconnect_by_data(priv->workspace, self);
-		priv->workspace=NULL;
-	}
-
-	/* Call parent's class dispose method */
-	G_OBJECT_CLASS(xfdashboard_window_tracker_workspace_gdk_parent_class)->dispose(inObject);
-}
-
-/* Set/get properties */
-static void _xfdashboard_window_tracker_workspace_gdk_set_property(GObject *inObject,
-																	guint inPropID,
-																	const GValue *inValue,
-																	GParamSpec *inSpec)
-{
-	XfdashboardWindowTrackerWorkspaceGDK		*self=XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(inObject);
-
-	switch(inPropID)
-	{
-		case PROP_WORKSPACE:
-			_xfdashboard_window_tracker_workspace_gdk_set_workspace(self, WNCK_WORKSPACE(g_value_get_object(inValue)));
-			break;
-
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
-			break;
-	}
-}
-
-static void _xfdashboard_window_tracker_workspace_gdk_get_property(GObject *inObject,
-																	guint inPropID,
-																	GValue *outValue,
-																	GParamSpec *inSpec)
-{
-	XfdashboardWindowTrackerWorkspaceGDK		*self=XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(inObject);
-
-	switch(inPropID)
-	{
-		case PROP_WORKSPACE:
-			g_value_set_object(outValue, self->priv->workspace);
-			break;
-
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
-			break;
-	}
-}
-
-/* Class initialization
- * Override functions in parent classes and define properties
- * and signals
- */
-void xfdashboard_window_tracker_workspace_gdk_class_init(XfdashboardWindowTrackerWorkspaceGDKClass *klass)
-{
-	GObjectClass		*gobjectClass=G_OBJECT_CLASS(klass);
-
-	/* Override functions */
-	gobjectClass->dispose=_xfdashboard_window_tracker_workspace_gdk_dispose;
-	gobjectClass->set_property=_xfdashboard_window_tracker_workspace_gdk_set_property;
-	gobjectClass->get_property=_xfdashboard_window_tracker_workspace_gdk_get_property;
-
-	/* Set up private structure */
-	g_type_class_add_private(klass, sizeof(XfdashboardWindowTrackerWorkspaceGDKPrivate));
-
-	/* Define properties */
-	XfdashboardWindowTrackerWorkspaceGDKProperties[PROP_WORKSPACE]=
-		g_param_spec_object("workspace",
-							_("Window"),
-							_("The mapped wnck workspace"),
-							WNCK_TYPE_WORKSPACE,
-							G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
-
-	g_object_class_install_properties(gobjectClass, PROP_LAST, XfdashboardWindowTrackerWorkspaceGDKProperties);
-}
-
-/* Object initialization
- * Create private structure and set up default values
- */
-void xfdashboard_window_tracker_workspace_gdk_init(XfdashboardWindowTrackerWorkspaceGDK *self)
-{
-	XfdashboardWindowTrackerWorkspaceGDKPrivate	*priv;
-
-	priv=self->priv=XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK_GET_PRIVATE(self);
-
-	/* Set default values */
-	priv->workspace=NULL;
-}
-
-
-/* IMPLEMENTATION: Public API */
-
-/**
- * xfdashboard_window_tracker_workspace_gdk_get_workspace:
- * @self: A #XfdashboardWindowTrackerWorkspaceGDK
- *
- * Returns the wrapped workspace of libwnck.
- *
- * Return value: (transfer none): the #WnckWorkspace wrapped by @self. The returned
- *   #WnckWorkspace is owned by libwnck and must not be referenced or unreferenced.
- */
-WnckWorkspace* xfdashboard_window_tracker_workspace_gdk_get_workspace(XfdashboardWindowTrackerWorkspaceGDK *self)
-{
-	XfdashboardWindowTrackerWorkspaceGDKPrivate		*priv;
-
-	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(self), NULL);
-
-	priv=self->priv;
-
-	/* A wnck workspace must be wrapped by this object */
-	if(!priv->workspace)
-	{
-		XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK_WARN_NO_WORKSPACE(self);
-		return(NULL);
-	}
-
-	/* Return wrapped libwnck workspace */
-	return(priv->workspace);
-}
diff --git a/libxfdashboard/gdk/window-tracker-workspace-gdk.h b/libxfdashboard/gdk/window-tracker-workspace-gdk.h
deleted file mode 100644
index 2d93c31..0000000
--- a/libxfdashboard/gdk/window-tracker-workspace-gdk.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * window-tracker-workspace: A workspace tracked by window tracker and
- *                           also a wrapper class around WnckWorkspace.
- *                           By wrapping libwnck objects we can use a 
- *                           virtual stable API while the API in libwnck
- *                           changes within versions. We only need to
- *                           use #ifdefs in window tracker object and
- *                           nowhere else in the code.
- * 
- * Copyright 2012-2017 Stephan Haller <nomad at froevel.de>
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- * 
- * 
- */
-
-#ifndef __LIBXFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK__
-#define __LIBXFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK__
-
-#if !defined(__LIBXFDASHBOARD_H_INSIDE__) && !defined(LIBXFDASHBOARD_COMPILATION)
-#error "Only <libxfdashboard/libxfdashboard.h> can be included directly."
-#endif
-
-#include <glib-object.h>
-
-#define WNCK_I_KNOW_THIS_IS_UNSTABLE
-#include <libwnck/libwnck.h>
-
-G_BEGIN_DECLS
-
-#define XFDASHBOARD_TYPE_WINDOW_TRACKER_WORKSPACE_GDK				(xfdashboard_window_tracker_workspace_gdk_get_type())
-#define XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_WORKSPACE_GDK, XfdashboardWindowTrackerWorkspaceGDK))
-#define XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_WORKSPACE_GDK))
-#define XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass), XFDASHBOARD_TYPE_WINDOW_TRACKER_WORKSPACE_GDK, XfdashboardWindowTrackerWorkspaceGDKClass))
-#define XFDASHBOARD_IS_WINDOW_TRACKER_WORKSPACE_GDK_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), XFDASHBOARD_TYPE_WINDOW_TRACKER_WORKSPACE_GDK))
-#define XFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK_GET_CLASS(obj)		(G_TYPE_INSTANCE_GET_CLASS((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_WORKSPACE_GDK, XfdashboardWindowTrackerWorkspaceGDKClass))
-
-typedef struct _XfdashboardWindowTrackerWorkspaceGDK				XfdashboardWindowTrackerWorkspaceGDK;
-typedef struct _XfdashboardWindowTrackerWorkspaceGDKClass			XfdashboardWindowTrackerWorkspaceGDKClass;
-typedef struct _XfdashboardWindowTrackerWorkspaceGDKPrivate			XfdashboardWindowTrackerWorkspaceGDKPrivate;
-
-struct _XfdashboardWindowTrackerWorkspaceGDK
-{
-	/*< private >*/
-	/* Parent instance */
-	GObject											parent_instance;
-
-	/* Private structure */
-	XfdashboardWindowTrackerWorkspaceGDKPrivate		*priv;
-};
-
-struct _XfdashboardWindowTrackerWorkspaceGDKClass
-{
-	/*< private >*/
-	/* Parent class */
-	GObjectClass									parent_class;
-
-	/*< public >*/
-	/* Virtual functions */
-};
-
-/* Public API */
-GType xfdashboard_window_tracker_workspace_gdk_get_type(void) G_GNUC_CONST;
-
-WnckWorkspace* xfdashboard_window_tracker_workspace_gdk_get_workspace(XfdashboardWindowTrackerWorkspaceGDK *self);
-
-G_END_DECLS
-
-#endif	/* __LIBXFDASHBOARD_WINDOW_TRACKER_WORKSPACE_GDK__ */
diff --git a/libxfdashboard/window-tracker-window.c b/libxfdashboard/window-tracker-window.c
index b5ece1e..01eaab3 100644
--- a/libxfdashboard/window-tracker-window.c
+++ b/libxfdashboard/window-tracker-window.c
@@ -767,14 +767,14 @@ ClutterStage* xfdashboard_window_tracker_window_get_stage(XfdashboardWindowTrack
 	XfdashboardWindowTrackerBackend		*backend;
 	ClutterStage						*stage;
 
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW(self));
+	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW(self), NULL);
 
 	/* Get default window tracker backend */
 	backend=xfdashboard_window_tracker_backend_get_default();
 	if(!backend)
 	{
 		g_critical(_("Could not get default window tracker backend"));
-		return;
+		return(NULL);
 	}
 
 	/* Redirect function to window tracker backend */

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list