[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