[Xfce4-commits] [apps/xfdashboard] 01/19: Adding window tracker backend interface

noreply at xfce.org noreply at xfce.org
Fri Jun 16 10:56:32 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 4eb70f05b132a067bf179f33a2893e97da31a02f
Author: Stephan Haller <nomad at froevel.de>
Date:   Tue Jun 13 07:33:51 2017 +0200

    Adding window tracker backend interface
    
    Enhancement for issue GH #129
---
 libxfdashboard/Makefile.am              |   2 +
 libxfdashboard/window-tracker-backend.c | 235 ++++++++++++++++++++++++++++++++
 libxfdashboard/window-tracker-backend.h |  89 ++++++++++++
 3 files changed, 326 insertions(+)

diff --git a/libxfdashboard/Makefile.am b/libxfdashboard/Makefile.am
index 0f6cc00..d8ec8da 100644
--- a/libxfdashboard/Makefile.am
+++ b/libxfdashboard/Makefile.am
@@ -92,6 +92,7 @@ libxfdashboard_la_headers = \
 	viewpad.h \
 	window-content.h \
 	window-tracker.h \
+	window-tracker-backend.h \
 	window-tracker-monitor.h \
 	window-tracker-window.h \
 	window-tracker-workspace.h \
@@ -165,6 +166,7 @@ libxfdashboard_la_SOURCES = \
 	viewpad.c \
 	window-content.c \
 	window-tracker.c \
+	window-tracker-backend.c \
 	window-tracker-monitor.c \
 	window-tracker-window.c \
 	window-tracker-workspace.c \
diff --git a/libxfdashboard/window-tracker-backend.c b/libxfdashboard/window-tracker-backend.c
new file mode 100644
index 0000000..428d31a
--- /dev/null
+++ b/libxfdashboard/window-tracker-backend.c
@@ -0,0 +1,235 @@
+/*
+ * window-tracker-backend: Window tracker backend providing special functions
+ *                         for different windowing and clutter backends.
+ * 
+ * Copyright 2012-2016 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/window-tracker-backend.h>
+
+#include <glib/gi18n-lib.h>
+
+/*#include <libxfdashboard/x11/window-tracker-backend-x11.h>*/
+/*#include <libxfdashboard/gdk/window-tracker-backend-gdk.h>*/
+#include <libxfdashboard/marshal.h>
+#include <libxfdashboard/compat.h>
+#include <libxfdashboard/debug.h>
+
+
+/* Define this class in GObject system */
+G_DEFINE_INTERFACE(XfdashboardWindowTrackerBackend,
+					xfdashboard_window_tracker_backend,
+					G_TYPE_OBJECT)
+
+
+/* IMPLEMENTATION: Private variables and methods */
+#define XFDASHBOARD_WINDOWS_TRACKER_BACKEND_WARN_NOT_IMPLEMENTED(self, vfunc)  \
+	g_warning(_("Object of type %s does not implement required virtual function XfdashboardWindowTrackerBackend::%s"),\
+				G_OBJECT_TYPE_NAME(self), \
+				vfunc);
+
+static XfdashboardWindowTrackerBackend *_xfdashboard_window_tracker_backend_singleton=NULL;
+
+
+/* IMPLEMENTATION: GObject */
+
+/* Interface initialization
+ * Set up default functions
+ */
+void xfdashboard_window_tracker_backend_default_init(XfdashboardWindowTrackerBackendInterface *iface)
+{
+	static gboolean		initialized=FALSE;
+
+	/* Define properties, signals and actions */
+	if(!initialized)
+	{
+		/* Set flag that base initialization was done for this interface */
+		initialized=TRUE;
+	}
+}
+
+
+/* IMPLEMENTATION: Public API */
+
+/**
+ * xfdashboard_window_tracker_backend_get_default:
+ *
+ * Retrieves the singleton instance of #XfdashboardWindowTrackerBackend. If not
+ * needed anymore the caller must unreference the returned object instance.
+ *
+ * Return value: (transfer full): The instance of #XfdashboardWindowTrackerBackend.
+ */
+XfdashboardWindowTrackerBackend* xfdashboard_window_tracker_backend_get_default(void)
+{
+	if(G_UNLIKELY(_xfdashboard_window_tracker_backend_singleton==NULL))
+	{
+		GType			windowTrackerBackendType=G_TYPE_INVALID;
+		const gchar		*windowTrackerBackend;
+
+		/* Check if a specific backend was requested */
+		windowTrackerBackend=g_getenv("XFDASHBOARD_BACKEND");
+
+		/*if(g_strcmp0(windowTrackerBackend, "gdk")==0)
+		{
+			windowTrackerBackendType=XFDASHBOARD_TYPE_WINDOW_TRACKER_BACKEND_GDK;
+		}*/
+
+		/* If no specific backend was requested use default one */
+		if(windowTrackerBackendType==G_TYPE_INVALID)
+		{
+			/*windowTrackerBackendType=XFDASHBOARD_TYPE_WINDOW_TRACKER_BACKEND_X11;*/
+			XFDASHBOARD_DEBUG(NULL, WINDOWS,
+								"Using default backend %s",
+								g_type_name(windowTrackerBackendType));
+		}
+
+		/* Create singleton */
+		_xfdashboard_window_tracker_backend_singleton=XFDASHBOARD_WINDOW_TRACKER_BACKEND(g_object_new(windowTrackerBackendType, NULL));
+		XFDASHBOARD_DEBUG(_xfdashboard_window_tracker_backend_singleton, WINDOWS,
+							"Created window tracker of type %s for %s backend",
+							_xfdashboard_window_tracker_backend_singleton ? G_OBJECT_TYPE_NAME(_xfdashboard_window_tracker_backend_singleton) : "<<unknown>>",
+							windowTrackerBackend ? windowTrackerBackend : "default");
+	}
+		else g_object_ref(_xfdashboard_window_tracker_backend_singleton);
+
+	return(_xfdashboard_window_tracker_backend_singleton);
+
+}
+
+/**
+ * xfdashboard_window_tracker_backend_get_name:
+ * @self: A #XfdashboardWindowTrackerBackend
+ *
+ * Retrieves the name of #XfdashboardWindowTrackerBackend at @self.
+ *
+ * Return value: String containing the name of the window tracker backend.
+ */
+const gchar* xfdashboard_window_tracker_backend_get_name(XfdashboardWindowTrackerBackend *self)
+{
+	XfdashboardWindowTrackerBackendInterface		*iface;
+
+	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_BACKEND(self), NULL);
+
+	iface=XFDASHBOARD_WINDOW_TRACKER_BACKEND_GET_IFACE(self);
+
+	/* Call virtual function */
+	if(iface->get_name)
+	{
+		return(iface->get_name(self));
+	}
+
+	/* If we get here the virtual function was not overridden */
+	XFDASHBOARD_WINDOWS_TRACKER_BACKEND_WARN_NOT_IMPLEMENTED(self, "get_name");
+	return(NULL);
+}
+
+/**
+ * xfdashboard_window_tracker_backend_get_window_tracker:
+ * @self: A #XfdashboardWindowTrackerBackend
+ *
+ * Retrieves the #XfdashboardWindowTracker used by backend @self. If not needed
+ * anymore the caller must unreference the returned object instance.
+ *
+ * Return value: (transfer full): The instance of #XfdashboardWindowTracker.
+ */
+XfdashboardWindowTracker* xfdashboard_window_tracker_backend_get_window_tracker(XfdashboardWindowTrackerBackend *self)
+{
+	XfdashboardWindowTrackerBackendInterface		*iface;
+
+	g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_BACKEND(self), NULL);
+
+	iface=XFDASHBOARD_WINDOW_TRACKER_BACKEND_GET_IFACE(self);
+
+	/* Call virtual function */
+	if(iface->get_window_tracker)
+	{
+		XfdashboardWindowTracker					*windowTracker;
+
+		windowTracker=iface->get_window_tracker(self);
+		if(windowTracker) g_object_ref(windowTracker);
+
+		return(windowTracker);
+	}
+
+	/* If we get here the virtual function was not overridden */
+	XFDASHBOARD_WINDOWS_TRACKER_BACKEND_WARN_NOT_IMPLEMENTED(self, "get_window_tracker");
+	return(NULL);
+}
+
+/**
+ * xfdashboard_window_tracker_backend_show_stage_window:
+ * @self: A #XfdashboardWindowTrackerBackend
+ * @inStageWindow: A #XfdashboardWindowTrackerWindow defining the stage window
+ *
+ * Asks the window tracker backend @self to set up and show the window @inStageWindow
+ * for use as stage window.
+ */
+void xfdashboard_window_tracker_backend_show_stage_window(XfdashboardWindowTrackerBackend *self,
+															XfdashboardWindowTrackerWindow *inStageWindow)
+{
+	XfdashboardWindowTrackerBackendInterface		*iface;
+
+	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_BACKEND(self));
+	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW(inStageWindow));
+
+	iface=XFDASHBOARD_WINDOW_TRACKER_BACKEND_GET_IFACE(self);
+
+	/* Call virtual function */
+	if(iface->show_stage_window)
+	{
+		iface->show_stage_window(self, inStageWindow);
+		return;
+	}
+
+	/* If we get here the virtual function was not overridden */
+	XFDASHBOARD_WINDOWS_TRACKER_BACKEND_WARN_NOT_IMPLEMENTED(self, "show_stage_window");
+}
+
+/**
+ * xfdashboard_window_tracker_backend_hide_stage_window:
+ * @self: A #XfdashboardWindowTrackerBackend
+ * @inStageWindow: A #XfdashboardWindowTrackerWindow defining the stage window
+ *
+ * Asks the window tracker backend @self to hide the stage window @inStageWindow.
+ */
+void xfdashboard_window_tracker_backend_hide_stage_window(XfdashboardWindowTrackerBackend *self,
+															XfdashboardWindowTrackerWindow *inStageWindow)
+{
+	XfdashboardWindowTrackerBackendInterface		*iface;
+
+	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_BACKEND(self));
+	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW(inStageWindow));
+
+	iface=XFDASHBOARD_WINDOW_TRACKER_BACKEND_GET_IFACE(self);
+
+	/* Call virtual function */
+	if(iface->hide_stage_window)
+	{
+		iface->hide_stage_window(self, inStageWindow);
+		return;
+	}
+
+	/* If we get here the virtual function was not overridden */
+	XFDASHBOARD_WINDOWS_TRACKER_BACKEND_WARN_NOT_IMPLEMENTED(self, "hide_stage_window");
+}
diff --git a/libxfdashboard/window-tracker-backend.h b/libxfdashboard/window-tracker-backend.h
new file mode 100644
index 0000000..7234d1b
--- /dev/null
+++ b/libxfdashboard/window-tracker-backend.h
@@ -0,0 +1,89 @@
+/*
+ * window-tracker-backend: Window tracker backend providing special functions
+ *                         for different windowing and clutter backends.
+ * 
+ * Copyright 2012-2016 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_BACKEND__
+#define __LIBXFDASHBOARD_WINDOW_TRACKER_BACKEND__
+
+#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.h>
+
+G_BEGIN_DECLS
+
+/* Object declaration */
+#define XFDASHBOARD_TYPE_WINDOW_TRACKER_BACKEND				(xfdashboard_window_tracker_get_type())
+#define XFDASHBOARD_WINDOW_TRACKER_BACKEND(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_BACKEND, XfdashboardWindowTrackerBackend))
+#define XFDASHBOARD_IS_WINDOW_TRACKER_BACKEND(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_BACKEND))
+#define XFDASHBOARD_WINDOW_TRACKER_BACKEND_GET_IFACE(obj)	(G_TYPE_INSTANCE_GET_INTERFACE((obj), XFDASHBOARD_TYPE_WINDOW_TRACKER_BACKEND, XfdashboardWindowTrackerBackendInterface))
+
+typedef struct _XfdashboardWindowTrackerBackend				XfdashboardWindowTrackerBackend;
+typedef struct _XfdashboardWindowTrackerBackendInterface	XfdashboardWindowTrackerBackendInterface;
+
+/**
+ * XfdashboardWindowTrackerBackendInterface:
+ * @get_name: Name of window tracker backend
+ * @get_window_tracker: Get window tracker instance used by backend
+ * @show_stage_window: Setup and show stage window
+ * @hide_stage_window: Hide (and maybe deconfigure) stage window
+ */
+struct _XfdashboardWindowTrackerBackendInterface
+{
+	/*< private >*/
+	/* Parent interface */
+	GTypeInterface						parent_interface;
+
+	/*< public >*/
+	/* Virtual functions */
+	const gchar* (*get_name)(XfdashboardWindowTrackerBackend *self);
+
+	XfdashboardWindowTracker* (*get_window_tracker)(XfdashboardWindowTrackerBackend *self);
+
+	void (*show_stage_window)(XfdashboardWindowTrackerBackend *self,
+								XfdashboardWindowTrackerWindow *inStageWindow);
+	void (*hide_stage_window)(XfdashboardWindowTrackerBackend *self,
+								XfdashboardWindowTrackerWindow *inStageWindow);
+};
+
+
+/* Public API */
+GType xfdashboard_window_tracker_backend_get_type(void) G_GNUC_CONST;
+
+XfdashboardWindowTrackerBackend* xfdashboard_window_tracker_backend_get_default(void);
+
+const gchar* xfdashboard_window_tracker_backend_get_name(XfdashboardWindowTrackerBackend *self);
+
+XfdashboardWindowTracker* xfdashboard_window_tracker_backend_get_window_tracker(XfdashboardWindowTrackerBackend *self);
+
+void xfdashboard_window_tracker_backend_show_stage_window(XfdashboardWindowTrackerBackend *self,
+															XfdashboardWindowTrackerWindow *inStageWindow);
+void xfdashboard_window_tracker_backend_hide_stage_window(XfdashboardWindowTrackerBackend *self,
+															XfdashboardWindowTrackerWindow *inStageWindow);
+
+G_END_DECLS
+
+#endif	/* __LIBXFDASHBOARD_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