[Xfce4-commits] <xfce4-wmdock-plugin:0.6.x> Added a function to get the current display on which is wmdock located.

Andre Ellguth noreply at xfce.org
Mon Apr 15 18:46:02 CEST 2013


Updating branch refs/heads/0.6.x
         to dfca92e3613b7d672ca8d6c6b18ebee73103c83e (commit)
       from 15016d8b2b5ec0910f6771d7badfdfa06b1150cf (commit)

commit dfca92e3613b7d672ca8d6c6b18ebee73103c83e
Author: Andre Ellguth <andre at ellguth.com>
Date:   Thu Apr 4 21:20:50 2013 +0200

    Added a function to get the current display on which is wmdock located.

 panel-plugin/catchwindow.c |   12 ++++++------
 panel-plugin/dockapp.c     |    2 +-
 panel-plugin/misc.c        |   22 ++++++++++++++++++----
 panel-plugin/misc.h        |    1 +
 panel-plugin/wmdock.c      |    2 +-
 5 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/panel-plugin/catchwindow.c b/panel-plugin/catchwindow.c
index 1266b66..2f73557 100644
--- a/panel-plugin/catchwindow.c
+++ b/panel-plugin/catchwindow.c
@@ -55,7 +55,7 @@ static gchar *wmdock_get_dockapp_cmd(WnckWindow *w)
 	FILE *procfp = NULL;
 	char buf[BUF_MAX];
 
-	XGetCommand(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
+	XGetCommand(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()),
 			wnck_window_get_xid(w), &argv, &argc);
 	if(argc > 0) {
 		argv = (char **) realloc(argv, sizeof(char *) * (argc + 1));
@@ -112,7 +112,7 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
 	gdk_error_trap_push();
 	gdk_flush();
 
-	h = XGetWMHints(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
+	h = XGetWMHints(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()),
 			wnck_window_get_xid(w));
 
 	if(!h) return;
@@ -152,14 +152,14 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
 		}
 
 		if(h->initial_state == WithdrawnState && h->icon_window) {
-			XUnmapWindow(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
+			XUnmapWindow(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()),
 					wnck_window_get_xid(w));
 			dapp->i =h->icon_window;
 		} else {
 			dapp->i = wnck_window_get_xid(w);
 		}
 
-		if(!XGetWindowAttributes(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
+		if(!XGetWindowAttributes(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()),
 				dapp->i, &attr)) {
 			wi = DEFAULT_DOCKAPP_WIDTH;
 			he = DEFAULT_DOCKAPP_HEIGHT;
@@ -171,7 +171,7 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
 		if(wi > DEFAULT_DOCKAPP_WIDTH || he > DEFAULT_DOCKAPP_HEIGHT) {
 			/* It seems to be no dockapp, because the width or the height of the
 			 * window a greater than 64 pixels. */
-			XMapWindow(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
+			XMapWindow(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()),
 					wnck_window_get_xid(w));
 			gtk_widget_destroy(GTK_WIDGET(dapp->s));
 			g_free(cmd);
@@ -198,7 +198,7 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
 		}
 
 		/* Cleanly unmap the original window. */
-		XUnmapWindow(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), dapp->i);
+		XUnmapWindow(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()), dapp->i);
 
 		if(rcDapp == FALSE) {
 			dapp->tile = wmdock_create_tile_from_socket(dapp);
diff --git a/panel-plugin/dockapp.c b/panel-plugin/dockapp.c
index f81560d..8f32ea5 100644
--- a/panel-plugin/dockapp.c
+++ b/panel-plugin/dockapp.c
@@ -248,7 +248,7 @@ gboolean wmdock_startup_dockapp(const gchar *cmd)
 void wmdock_destroy_dockapp(DockappNode *dapp)
 {
 	debug("dockapp.c: Destroy dockapp %s", dapp->name);
-	XDestroyWindow(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), dapp->i);
+	XDestroyWindow(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()), dapp->i);
 }
 
 
diff --git a/panel-plugin/misc.c b/panel-plugin/misc.c
index 5472a93..9d8ab89 100644
--- a/panel-plugin/misc.c
+++ b/panel-plugin/misc.c
@@ -65,7 +65,7 @@ void set_xsmp_support(WnckWindow *w)
 	XTextProperty tp;
 	static Atom _XA_SM_CLIENT_ID = None;
 
-	_XA_SM_CLIENT_ID = XInternAtom (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), "SM_CLIENT_ID", False);
+	_XA_SM_CLIENT_ID = XInternAtom (GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()), "SM_CLIENT_ID", False);
 
 
 	tp.value = (unsigned char *) strdup("SM_CLIENT_ID");
@@ -73,7 +73,7 @@ void set_xsmp_support(WnckWindow *w)
 	tp.format = 8;
 	tp.nitems = 1;
 
-	XSetTextProperty(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
+	XSetTextProperty(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()),
 			wnck_window_get_xid(w),
 			&tp, _XA_SM_CLIENT_ID);
 
@@ -145,7 +145,7 @@ gboolean has_dockapp_hint(WnckWindow *w)
 
 	gdk_error_trap_push();
 	if (XGetWindowProperty(
-			GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
+			GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()),
 			wnck_window_get_xid(w), XfceDockAppAtom, 0, 1, False,
 			XA_CARDINAL, &atype, &afmt, &nitems, &naft, &dat) == Success) {
 		if (nitems==1 && ((long int *) dat)[0]==1) {
@@ -153,7 +153,7 @@ gboolean has_dockapp_hint(WnckWindow *w)
 		}
 		XFree(dat);
 	}
-	XSync(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),False);
+	XSync(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()),False);
 
 	gdk_error_trap_pop();
 
@@ -162,6 +162,20 @@ gboolean has_dockapp_hint(WnckWindow *w)
 
 
 /**
+ * Returns the current GdkDisplay.
+ *
+ * @return current GdkDisplay
+ */
+GdkDisplay *get_current_gdkdisplay()
+{
+	if(!wmdock || !wmdock->plugin)
+		return gdk_display_get_default();
+
+	return gdk_window_get_display(gtk_widget_get_toplevel(GTK_WIDGET(wmdock->plugin))->window);
+}
+
+
+/**
  * Function which interacts with the wmdock icon.
  *
  * @param icon The wmdock icon widget.
diff --git a/panel-plugin/misc.h b/panel-plugin/misc.h
index 44c8fd6..5a3927e 100644
--- a/panel-plugin/misc.h
+++ b/panel-plugin/misc.h
@@ -24,6 +24,7 @@
 
 /* Prototypes */
 GdkPixbuf *get_icon_from_xpm_scaled(const char **, gint, gint);
+GdkDisplay *get_current_gdkdisplay();
 void set_xsmp_support(WnckWindow *);
 gboolean has_dockapp_hint(WnckWindow *);
 gboolean comp_dockapp_with_filterlist(const gchar *);
diff --git a/panel-plugin/wmdock.c b/panel-plugin/wmdock.c
index abdb2ab..033e1b2 100644
--- a/panel-plugin/wmdock.c
+++ b/panel-plugin/wmdock.c
@@ -159,7 +159,7 @@ static void wmdock_construct (XfcePanelPlugin *plugin)
 	xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
 #endif /* HAVE_CONFIG_H */
 
-	XfceDockAppAtom=XInternAtom(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
+	XfceDockAppAtom=XInternAtom(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()),
 			"_XFCE4_DOCKAPP",False);
 
 	wmdock = wmdock_plugin_new (plugin);


More information about the Xfce4-commits mailing list