[Xfce4-commits] [apps/xfdashboard] 02/02: Add new plugin 'middle-click-window-close' which (when enabled) allows the user to close windows in windows view with a middle click. This plugin is not configurable.

noreply at xfce.org noreply at xfce.org
Tue Jun 21 14:16:38 CEST 2016


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

nomad pushed a commit to branch master
in repository apps/xfdashboard.

commit aed3c5498ed73b8978d4fbd72fb705aaf31051c6
Author: Stephan Haller <nomad at froevel.de>
Date:   Tue Jun 21 14:14:36 2016 +0200

    Add new plugin 'middle-click-window-close' which (when enabled) allows the user to close windows in windows view with a middle click. This plugin is not configurable.
    
    This commit addresses GH #128
---
 configure.ac.in                                    |   1 +
 plugins/Makefile.am                                |   3 +-
 plugins/middle-click-window-close/Makefile.am      |  52 ++++
 .../middle-click-window-close.c                    | 316 +++++++++++++++++++++
 .../middle-click-window-close.h                    |  67 +++++
 plugins/middle-click-window-close/plugin.c         |  82 ++++++
 6 files changed, 520 insertions(+), 1 deletion(-)

diff --git a/configure.ac.in b/configure.ac.in
index 79ff2c3..f12dd36 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -277,6 +277,7 @@ plugins/Makefile
 plugins/clock-view/Makefile
 plugins/gnome-shell-search-provider/Makefile
 plugins/hot-corner/Makefile
+plugins/middle-click-window-close/Makefile
 po/Makefile.in
 settings/Makefile
 xfdashboard/Makefile
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index c2d91ab..fdde9a5 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -1,4 +1,5 @@
 SUBDIRS = \
 	clock-view \
 	gnome-shell-search-provider \
-	hot-corner
\ No newline at end of file
+	hot-corner \
+	middle-click-window-close
diff --git a/plugins/middle-click-window-close/Makefile.am b/plugins/middle-click-window-close/Makefile.am
new file mode 100644
index 0000000..f85fb11
--- /dev/null
+++ b/plugins/middle-click-window-close/Makefile.am
@@ -0,0 +1,52 @@
+plugindir = $(libdir)/xfdashboard/plugins
+PLUGIN_ID = middle-click-window-close
+
+AM_CPPFLAGS = \
+	-I$(top_builddir) \
+	-I$(top_srcdir) \
+	-DG_LOG_DOMAIN=\"xfdashboard-plugin-middle_click_window_close\" \
+	-DLIBEXECDIR=\"$(libexecdir)\" \
+	-DPACKAGE_LOCALE_DIR=\"$(localedir)\" \
+	-DPLUGIN_ID=\"$(PLUGIN_ID)\"
+
+plugin_LTLIBRARIES = \
+	middle-click-window-close.la
+
+middle_click_window_close_la_SOURCES = \
+	middle-click-window-close.c \
+	middle-click-window-close.h \
+	plugin.c
+
+middle_click_window_close_la_CFLAGS = \
+	$(LIBXFCE4UTIL_CFLAGS) \
+	$(GTK_CFLAGS) \
+	$(CLUTTER_CFLAGS) \
+	$(LIBXFCONF_CFLAGS) \
+	$(GARCON_CFLAGS) \
+	$(PLATFORM_CFLAGS)
+
+middle_click_window_close_la_LDFLAGS = \
+	-avoid-version \
+	-export-dynamic \
+	-export-symbols-regex '^plugin_init$$' \
+	-no-undefined \
+	-module \
+	-shared \
+	$(PLATFORM_LDFLAGS)
+
+middle_click_window_close_la_LIBADD = \
+	$(LIBXFCE4UTIL_LIBS) \
+	$(GTK_LIBS) \
+	$(CLUTTER_LIBS) \
+	$(LIBXFCONF_LIBS) \
+	$(GARCON_CLIBS) \
+	$(top_builddir)/libxfdashboard/libxfdashboard.la
+
+CLEANFILES = \
+	$(plugin_DATA)
+
+EXTRA_DIST = \
+	$(plugin_DATA)
+
+DISTCLEANFILES = \
+	$(plugin_DATA)
diff --git a/plugins/middle-click-window-close/middle-click-window-close.c b/plugins/middle-click-window-close/middle-click-window-close.c
new file mode 100644
index 0000000..ce89510
--- /dev/null
+++ b/plugins/middle-click-window-close/middle-click-window-close.c
@@ -0,0 +1,316 @@
+/*
+ * middle-click-window-close: Closes windows in window by middle-click
+ * 
+ * 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 "middle-click-window-close.h"
+
+#include <libxfdashboard/libxfdashboard.h>
+#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
+#include <math.h>
+
+
+/* Define this class in GObject system */
+G_DEFINE_DYNAMIC_TYPE(XfdashboardMiddleClickWindowClose,
+						xfdashboard_middle_click_window_close,
+						G_TYPE_OBJECT)
+
+/* Define this class in this plugin */
+XFDASHBOARD_DEFINE_PLUGIN_TYPE(xfdashboard_middle_click_window_close);
+
+/* Private structure - access only by public API if needed */
+#define XFDASHBOARD_MIDDLE_CLICK_WINDOW_CLOSE_GET_PRIVATE(obj)         \
+	(G_TYPE_INSTANCE_GET_PRIVATE((obj), XFDASHBOARD_TYPE_MIDDLE_CLICK_WINDOW_CLOSE, XfdashboardMiddleClickWindowClosePrivate))
+
+struct _XfdashboardMiddleClickWindowClosePrivate
+{
+	/* Instance related */
+	XfdashboardStage						*stage;
+	guint									stageActorCreatedSignalID;
+	guint									stageDestroySignalID;
+
+	XfdashboardCssSelector					*liveWindowSelector;
+};
+
+
+/* IMPLEMENTATION: Private variables and methods */
+#define DEFAULT_WINDOW_CLOSE_BUTTON							XFDASHBOARD_CLICK_ACTION_MIDDLE_BUTTON
+#define XFDASHBOARD_MIDDLE_CLICK_WINDOW_CLOSE_ACTION_NAME	"middle-click-window-close-action"
+
+/* A configured live window actor was clicked */
+static void _xfdashboard_middle_click_window_close_on_clicked(XfdashboardMiddleClickWindowClose *self,
+																ClutterActor *inActor,
+																gpointer inUserData)
+{
+	XfdashboardLiveWindow							*liveWindow;
+	XfdashboardClickAction							*action;
+	guint											button;
+	XfdashboardWindowTrackerWindow					*window;
+
+	g_return_if_fail(XFDASHBOARD_IS_MIDDLE_CLICK_WINDOW_CLOSE(self));
+	g_return_if_fail(XFDASHBOARD_IS_LIVE_WINDOW(inActor));
+	g_return_if_fail(XFDASHBOARD_IS_CLICK_ACTION(inUserData));
+
+	liveWindow=XFDASHBOARD_LIVE_WINDOW(inActor);
+	action=XFDASHBOARD_CLICK_ACTION(inUserData);
+
+	/* Get button used for click action */
+	button=xfdashboard_click_action_get_button(action);
+	if(button==DEFAULT_WINDOW_CLOSE_BUTTON)
+	{
+		window=xfdashboard_live_window_get_window(liveWindow);
+		xfdashboard_window_tracker_window_close(window);
+	}
+}
+
+/* An actor was created so check if we are interested at this one */
+static void _xfdashboard_middle_click_window_close_on_actor_created(XfdashboardMiddleClickWindowClose *self,
+																	ClutterActor *inActor,
+																	gpointer inUserData)
+{
+	XfdashboardMiddleClickWindowClosePrivate		*priv;
+	gint											score;
+	ClutterAction									*action;
+
+	g_return_if_fail(XFDASHBOARD_IS_MIDDLE_CLICK_WINDOW_CLOSE(self));
+	g_return_if_fail(CLUTTER_IS_ACTOR(inActor));
+
+	priv=self->priv;
+
+	/* Check if we are interested in this newly created actor and set it up */
+	if(XFDASHBOARD_IS_STYLABLE(inActor))
+	{
+		score=xfdashboard_css_selector_score_matching_stylable_node(priv->liveWindowSelector, XFDASHBOARD_STYLABLE(inActor));
+		if(score>0)
+		{
+			action=xfdashboard_click_action_new();
+			clutter_actor_add_action_with_name(inActor, XFDASHBOARD_MIDDLE_CLICK_WINDOW_CLOSE_ACTION_NAME, action);
+			g_signal_connect_swapped(action, "clicked", G_CALLBACK(_xfdashboard_middle_click_window_close_on_clicked), self);
+		}
+	}
+}
+
+/* Callback for traversal to setup live window for use with this plugin */
+static gboolean _xfdashboard_middle_click_window_close_traverse_acquire(ClutterActor *inActor,
+																		gpointer inUserData)
+{
+	XfdashboardMiddleClickWindowClose				*self;
+	ClutterAction									*action;
+
+	g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WINDOW(inActor), XFDASHBOARD_TRAVERSAL_CONTINUE);
+	g_return_val_if_fail(XFDASHBOARD_IS_MIDDLE_CLICK_WINDOW_CLOSE(inUserData), XFDASHBOARD_TRAVERSAL_CONTINUE);
+
+	self=XFDASHBOARD_MIDDLE_CLICK_WINDOW_CLOSE(inUserData);
+
+	/* Set up live window */
+	action=xfdashboard_click_action_new();
+	clutter_actor_add_action_with_name(inActor, XFDASHBOARD_MIDDLE_CLICK_WINDOW_CLOSE_ACTION_NAME, action);
+	g_signal_connect_swapped(action, "clicked", G_CALLBACK(_xfdashboard_middle_click_window_close_on_clicked), self);
+
+	/* All done continue with traversal */
+	return(XFDASHBOARD_TRAVERSAL_CONTINUE);
+}
+
+/* Callback for traversal to deconfigure live window from use at this plugin */
+static gboolean _xfdashboard_middle_click_window_close_traverse_release(ClutterActor *inActor,
+																		gpointer inUserData)
+{
+	g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WINDOW(inActor), XFDASHBOARD_TRAVERSAL_CONTINUE);
+	g_return_val_if_fail(XFDASHBOARD_IS_MIDDLE_CLICK_WINDOW_CLOSE(inUserData), XFDASHBOARD_TRAVERSAL_CONTINUE);
+
+	/* Set up live window */
+	clutter_actor_remove_action_by_name(inActor, XFDASHBOARD_MIDDLE_CLICK_WINDOW_CLOSE_ACTION_NAME);
+
+	/* All done continue with traversal */
+	return(XFDASHBOARD_TRAVERSAL_CONTINUE);
+}
+
+/* Stage is going to be destroyed */
+static void _xfdashboard_middle_click_window_close_on_stage_destroyed(XfdashboardMiddleClickWindowClose *self,
+																		gpointer inUserData)
+{
+	XfdashboardMiddleClickWindowClosePrivate		*priv;
+	XfdashboardStage								*stage;
+
+	g_return_if_fail(XFDASHBOARD_IS_MIDDLE_CLICK_WINDOW_CLOSE(self));
+	g_return_if_fail(XFDASHBOARD_IS_STAGE(inUserData));
+
+	priv=self->priv;
+	stage=XFDASHBOARD_STAGE(inUserData);
+
+	/* Iterate through all existing live window actors that may still exist
+	 * and deconfigure them from use at this plugin. We traverse the stage
+	 * which is going to be destroyed and provided as function parameter
+	 * regardless if it the stage we have set up initially or if it is any other.
+	 */
+	xfdashboard_traverse_actor(CLUTTER_ACTOR(stage),
+								priv->liveWindowSelector,
+								_xfdashboard_middle_click_window_close_traverse_release,
+								self);
+
+	/* Disconnect signals from stage as it will be destroyed and reset variables
+	 * but only if it the stage we are handling right now (this should always be
+	 * the case!)
+	 */
+	if(priv->stage==stage)
+	{
+		/* Disconnect signals */
+		if(priv->stageActorCreatedSignalID)
+		{
+			g_signal_handler_disconnect(priv->stage, priv->stageActorCreatedSignalID);
+			priv->stageActorCreatedSignalID=0;
+		}
+
+		if(priv->stageDestroySignalID)
+		{
+			g_signal_handler_disconnect(priv->stage, priv->stageDestroySignalID);
+			priv->stageDestroySignalID=0;
+		}
+
+		/* Release stage */
+		priv->stage=NULL;
+	}
+}
+
+/* IMPLEMENTATION: GObject */
+
+/* Dispose this object */
+static void _xfdashboard_middle_click_window_close_dispose(GObject *inObject)
+{
+	XfdashboardMiddleClickWindowClose				*self=XFDASHBOARD_MIDDLE_CLICK_WINDOW_CLOSE(inObject);
+	XfdashboardMiddleClickWindowClosePrivate		*priv=self->priv;
+
+	/* Release allocated resources */
+	if(priv->stage)
+	{
+		/* Iterate through all existing live window actors that may still exist
+		 * and deconfigure them from use at this plugin.
+		 */
+		xfdashboard_traverse_actor(CLUTTER_ACTOR(priv->stage),
+									priv->liveWindowSelector,
+									_xfdashboard_middle_click_window_close_traverse_release,
+									self);
+
+		/* Disconnect signals from stage */
+		if(priv->stageActorCreatedSignalID)
+		{
+			g_signal_handler_disconnect(priv->stage, priv->stageActorCreatedSignalID);
+			priv->stageActorCreatedSignalID=0;
+		}
+
+		if(priv->stageDestroySignalID)
+		{
+			g_signal_handler_disconnect(priv->stage, priv->stageDestroySignalID);
+			priv->stageDestroySignalID=0;
+		}
+
+		/* Release stage */
+		priv->stage=NULL;
+	}
+
+	if(priv->liveWindowSelector)
+	{
+		g_object_unref(priv->liveWindowSelector);
+		priv->liveWindowSelector=NULL;
+	}
+
+	/* Call parent's class dispose method */
+	G_OBJECT_CLASS(xfdashboard_middle_click_window_close_parent_class)->dispose(inObject);
+}
+
+/* Class initialization
+ * Override functions in parent classes and define properties
+ * and signals
+ */
+void xfdashboard_middle_click_window_close_class_init(XfdashboardMiddleClickWindowCloseClass *klass)
+{
+	GObjectClass			*gobjectClass=G_OBJECT_CLASS(klass);
+
+	/* Override functions */
+	gobjectClass->dispose=_xfdashboard_middle_click_window_close_dispose;
+
+	/* Set up private structure */
+	g_type_class_add_private(klass, sizeof(XfdashboardMiddleClickWindowClosePrivate));
+}
+
+/* Class finalization */
+void xfdashboard_middle_click_window_close_class_finalize(XfdashboardMiddleClickWindowCloseClass *klass)
+{
+}
+
+/* Object initialization
+ * Create private structure and set up default values
+ */
+void xfdashboard_middle_click_window_close_init(XfdashboardMiddleClickWindowClose *self)
+{
+	XfdashboardMiddleClickWindowClosePrivate		*priv;
+
+	self->priv=priv=XFDASHBOARD_MIDDLE_CLICK_WINDOW_CLOSE_GET_PRIVATE(self);
+
+	/* Set up default values */
+	priv->stage=xfdashboard_application_get_stage(NULL);
+	priv->stageActorCreatedSignalID=0;
+	priv->stageDestroySignalID=0;
+	priv->liveWindowSelector=xfdashboard_css_selector_new_from_string("XfdashboardWindowsView XfdashboardLiveWindow");
+
+	/* Iterate through all already existing live window actors and configure
+	 * them for use with this plugin.
+	 */
+	xfdashboard_traverse_actor(CLUTTER_ACTOR(priv->stage),
+								priv->liveWindowSelector,
+								_xfdashboard_middle_click_window_close_traverse_acquire,
+								self);
+
+	/* Connect signal to get notified about actor creations  and filter out
+	 * and set up the ones we are interested in.
+	 */
+	priv->stageActorCreatedSignalID=
+		g_signal_connect_swapped(priv->stage,
+									"actor-created",
+									G_CALLBACK(_xfdashboard_middle_click_window_close_on_actor_created),
+									self);
+
+	/* Connect signal to get notified when stage is getting destoyed */
+	priv->stageDestroySignalID=
+		g_signal_connect_swapped(priv->stage,
+									"destroy",
+									G_CALLBACK(_xfdashboard_middle_click_window_close_on_stage_destroyed),
+									self);
+}
+
+
+/* IMPLEMENTATION: Public API */
+
+/* Create new instance */
+XfdashboardMiddleClickWindowClose* xfdashboard_middle_click_window_close_new(void)
+{
+	GObject		*middleClickWindowClose;
+
+	middleClickWindowClose=g_object_new(XFDASHBOARD_TYPE_MIDDLE_CLICK_WINDOW_CLOSE, NULL);
+	if(!middleClickWindowClose) return(NULL);
+
+	return(XFDASHBOARD_MIDDLE_CLICK_WINDOW_CLOSE(middleClickWindowClose));
+}
diff --git a/plugins/middle-click-window-close/middle-click-window-close.h b/plugins/middle-click-window-close/middle-click-window-close.h
new file mode 100644
index 0000000..ab20653
--- /dev/null
+++ b/plugins/middle-click-window-close/middle-click-window-close.h
@@ -0,0 +1,67 @@
+/*
+ * middle-click-window-close: Closes windows in window by middle-click
+ * 
+ * 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 __XFDASHBOARD_MIDDLE_CLICK_WINDOW_CLOSE__
+#define __XFDASHBOARD_MIDDLE_CLICK_WINDOW_CLOSE__
+
+#include <libxfdashboard/libxfdashboard.h>
+
+G_BEGIN_DECLS
+
+#define XFDASHBOARD_TYPE_MIDDLE_CLICK_WINDOW_CLOSE				(xfdashboard_middle_click_window_close_get_type())
+#define XFDASHBOARD_MIDDLE_CLICK_WINDOW_CLOSE(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), XFDASHBOARD_TYPE_MIDDLE_CLICK_WINDOW_CLOSE, XfdashboardMiddleClickWindowClose))
+#define XFDASHBOARD_IS_MIDDLE_CLICK_WINDOW_CLOSE(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), XFDASHBOARD_TYPE_MIDDLE_CLICK_WINDOW_CLOSE))
+#define XFDASHBOARD_MIDDLE_CLICK_WINDOW_CLOSE_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass), XFDASHBOARD_TYPE_MIDDLE_CLICK_WINDOW_CLOSE, XfdashboardMiddleClickWindowCloseClass))
+#define XFDASHBOARD_IS_MIDDLE_CLICK_WINDOW_CLOSE_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), XFDASHBOARD_TYPE_MIDDLE_CLICK_WINDOW_CLOSE))
+#define XFDASHBOARD_MIDDLE_CLICK_WINDOW_CLOSE_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), XFDASHBOARD_TYPE_MIDDLE_CLICK_WINDOW_CLOSE, XfdashboardMiddleClickWindowCloseClass))
+
+typedef struct _XfdashboardMiddleClickWindowClose				XfdashboardMiddleClickWindowClose; 
+typedef struct _XfdashboardMiddleClickWindowClosePrivate		XfdashboardMiddleClickWindowClosePrivate;
+typedef struct _XfdashboardMiddleClickWindowCloseClass			XfdashboardMiddleClickWindowCloseClass;
+
+struct _XfdashboardMiddleClickWindowClose
+{
+	/* Parent instance */
+	GObject										parent_instance;
+
+	/* Private structure */
+	XfdashboardMiddleClickWindowClosePrivate	*priv;
+};
+
+struct _XfdashboardMiddleClickWindowCloseClass
+{
+	/*< private >*/
+	/* Parent class */
+	GObjectClass								parent_class;
+};
+
+/* Public API */
+GType xfdashboard_middle_click_window_close_get_type(void) G_GNUC_CONST;
+
+XFDASHBOARD_DECLARE_PLUGIN_TYPE(xfdashboard_middle_click_window_close);
+
+XfdashboardMiddleClickWindowClose* xfdashboard_middle_click_window_close_new(void);
+
+G_END_DECLS
+
+#endif
diff --git a/plugins/middle-click-window-close/plugin.c b/plugins/middle-click-window-close/plugin.c
new file mode 100644
index 0000000..2c7a298
--- /dev/null
+++ b/plugins/middle-click-window-close/plugin.c
@@ -0,0 +1,82 @@
+/*
+ * plugin: Plugin functions for 'middle-click-window-close'
+ *
+ * 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 <libxfce4util/libxfce4util.h>
+#include <gtk/gtk.h>
+
+#include "middle-click-window-close.h"
+
+
+/* Forward declarations */
+G_MODULE_EXPORT void plugin_init(XfdashboardPlugin *self);
+
+
+/* IMPLEMENTATION: XfdashboardPlugin */
+
+static XfdashboardMiddleClickWindowClose			*middleClickWindowClose=NULL;
+
+/* Plugin enable function */
+static void plugin_enable(XfdashboardPlugin *self, gpointer inUserData)
+{
+	/* Create instance of hot corner */
+	if(!middleClickWindowClose)
+	{
+		middleClickWindowClose=xfdashboard_middle_click_window_close_new();
+	}
+}
+
+/* Plugin disable function */
+static void plugin_disable(XfdashboardPlugin *self, gpointer inUserData)
+{
+	/* Destroy instance of hot corner */
+	if(middleClickWindowClose)
+	{
+		g_object_unref(middleClickWindowClose);
+		middleClickWindowClose=NULL;
+	}
+}
+
+/* Plugin initialization function */
+G_MODULE_EXPORT void plugin_init(XfdashboardPlugin *self)
+{
+	/* Set up localization */
+	xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
+
+	/* Set plugin info */
+	xfdashboard_plugin_set_info(self,
+								"name", _("Middle-click window close"),
+								"description", _("Closes windows in windows view by middle-click"),
+								"author", "Stephan Haller <nomad at froevel.de>",
+								NULL);
+
+	/* Register GObject types of this plugin */
+	XFDASHBOARD_REGISTER_PLUGIN_TYPE(self, xfdashboard_middle_click_window_close);
+
+	/* Connect plugin action handlers */
+	g_signal_connect(self, "enable", G_CALLBACK(plugin_enable), NULL);
+	g_signal_connect(self, "disable", G_CALLBACK(plugin_disable), NULL);
+}

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


More information about the Xfce4-commits mailing list