[Xfce4-commits] <xfce4-wmdock-plugin:master> Check if only one instance of the plugin is run.

Andre Ellguth noreply at xfce.org
Mon Nov 4 13:36:04 CET 2013


Updating branch refs/heads/master
         to 4f0105bab613e65956c8d41c628cd6066fa8f77d (commit)
       from d66211cd85bef1987b619e78838a3148c3b794ec (commit)

commit 4f0105bab613e65956c8d41c628cd6066fa8f77d
Author: Andre Ellguth <andre at ellguth.com>
Date:   Thu Aug 16 20:52:15 2012 +0200

    Check if only one instance of the plugin is run.

 panel-plugin/misc.c        |   45 ++++++++++++++++++++++++++++
 panel-plugin/misc.h        |    1 +
 panel-plugin/wmdock.c      |   21 +++++++++++++
 po/xfce4-wmdock-plugin.pot |   71 --------------------------------------------
 4 files changed, 67 insertions(+), 71 deletions(-)

diff --git a/panel-plugin/misc.c b/panel-plugin/misc.c
index de23b88..5472a93 100644
--- a/panel-plugin/misc.c
+++ b/panel-plugin/misc.c
@@ -34,6 +34,7 @@
 
 #include "extern.h"
 #include "wmdock.h"
+#include "debug.h"
 #include "dockapp.h"
 #include "misc.h"
 
@@ -172,6 +173,50 @@ static void wmdock_icon_pressed(GtkWidget *icon)
 }
 
 
+/**
+ * Function get the number of xfce4-wmdock-instances are running.
+ *
+ * @return int Process count of wmdock-plugin.
+ */
+int wmdock_get_instance_count()
+{
+	int count = 0;
+
+#ifdef __linux__
+	int i;
+	FILE *fp = NULL;
+	char buf[BUF_MAX], username[BUF_MAX];
+
+#ifdef HAVE_CONFIG_H
+	snprintf(buf, BUF_MAX, "ps -C %s -ouser=", GETTEXT_PACKAGE);
+#else
+	snprintf(cmd, BUF_MAX, "ps -C xfce4-wmdock-plugin -ouser=");
+#endif /* HAVE_CONFIG_H */
+
+	fp = popen(buf, "r");
+	if(!fp)
+		return(-1);
+
+	strncpy(username, (const char *) g_get_user_name(), BUF_MAX);
+	while(!feof(fp)) {
+		buf[0] = 0;
+		fgets(buf, BUF_MAX, fp);
+		/* Remove all newline and carriage returns. */
+		for(i = 0; i < BUF_MAX; i++)
+			buf[i] = (buf[i] == 0xA || buf[i] == 0xD) ? 0 : buf[i];
+
+		if(!strncmp(buf, username, BUF_MAX))
+			count++;
+	}
+	pclose(fp);
+#endif /* __linux__ */
+
+	debug("misc.c: Instance count: %d", count);
+
+	return count;
+}
+
+
 void wmdock_panel_draw_wmdock_icon (gboolean redraw)
 {
 	static GtkWidget *eventBox = NULL;
diff --git a/panel-plugin/misc.h b/panel-plugin/misc.h
index 5d2adc6..44c8fd6 100644
--- a/panel-plugin/misc.h
+++ b/panel-plugin/misc.h
@@ -29,5 +29,6 @@ gboolean has_dockapp_hint(WnckWindow *);
 gboolean comp_dockapp_with_filterlist(const gchar *);
 gboolean comp_str_with_pattern(const gchar *, gchar *, gsize);
 void wmdock_panel_draw_wmdock_icon (gboolean redraw);
+int wmdock_get_instance_count();
 
 #endif /* __MISC_H__ */
diff --git a/panel-plugin/wmdock.c b/panel-plugin/wmdock.c
index 31cf9e0..0f6cf64 100644
--- a/panel-plugin/wmdock.c
+++ b/panel-plugin/wmdock.c
@@ -149,18 +149,39 @@ static WmdockPlugin *wmdock_plugin_new (XfcePanelPlugin* plugin)
 static void wmdock_construct (XfcePanelPlugin *plugin)
 {
 	WnckScreen  *s;
+	GtkWidget   *gtkDlg;
 
 	init_debug();
 
 	s = wnck_screen_get(0);
 
+#ifdef HAVE_CONFIG_H
 	xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
+#endif /* HAVE_CONFIG_H */
 
 	XfceDockAppAtom=XInternAtom(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
 			"_XFCE4_DOCKAPP",False);
 
 	wmdock = wmdock_plugin_new (plugin);
 
+	if(wmdock_get_instance_count() > 1) {
+		gtkDlg = gtk_message_dialog_new(GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (plugin))),
+				GTK_DIALOG_DESTROY_WITH_PARENT,
+				GTK_MESSAGE_ERROR,
+				GTK_BUTTONS_OK,
+#ifdef HAVE_CONFIG_H
+				_("Only a single instance of `%s' can run."),
+				GETTEXT_PACKAGE);
+#else
+				_("Only a single instance of `xfce4-wmdock-plugin' can run."));
+#endif /* HAVE_CONFIG_H */
+
+		g_signal_connect (gtkDlg, "response", G_CALLBACK (wmdock_error_dialog_response), NULL);
+		gtk_dialog_run (GTK_DIALOG(gtkDlg));
+
+		exit(EXIT_SUCCESS);
+	}
+
 	g_signal_connect(s, "window_opened", G_CALLBACK(wmdock_window_open), NULL);
 	g_signal_connect (plugin, "size-changed", G_CALLBACK (wmdock_size_changed), NULL);
 	g_signal_connect (plugin, "orientation-changed", G_CALLBACK (wmdock_orientation_changed), NULL);
diff --git a/po/xfce4-wmdock-plugin.pot b/po/xfce4-wmdock-plugin.pot
deleted file mode 100644
index 143d50e..0000000
--- a/po/xfce4-wmdock-plugin.pot
+++ /dev/null
@@ -1,71 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-01-26 20:22+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: panel-plugin/wmdock.c:196
-#, c-format
-msgid "Do you want remove the dockapp \"%s\"?"
-msgstr ""
-
-#: panel-plugin/wmdock.c:398
-msgid "No dockapp is running!"
-msgstr ""
-
-#: panel-plugin/wmdock.c:858
-#, c-format
-msgid "Failed to start %s!"
-msgstr ""
-
-#: panel-plugin/wmdock.c:1148
-msgid "WMdock"
-msgstr ""
-
-#: panel-plugin/wmdock.c:1151
-msgid "Remove dockapp"
-msgstr ""
-
-#: panel-plugin/wmdock.c:1167
-msgid "General settings"
-msgstr ""
-
-#: panel-plugin/wmdock.c:1168
-msgid "Dockapp detection"
-msgstr ""
-
-#: panel-plugin/wmdock.c:1216
-msgid "Select dockapp to configure:"
-msgstr ""
-
-#: panel-plugin/wmdock.c:1225
-msgid "Shell command:"
-msgstr ""
-
-#: panel-plugin/wmdock.c:1236
-msgid "Display tile in the background."
-msgstr ""
-
-#: panel-plugin/wmdock.c:1237
-msgid ""
-"Display a separate WMdock properties\n"
-"button in the panel."
-msgstr ""
-
-#: panel-plugin/wmdock.c:1238
-msgid ""
-"Add only dockapps which start with\n"
-"wm* in the name."
-msgstr ""


More information about the Xfce4-commits mailing list