summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml1
-rw-r--r--configure.ac2
-rw-r--r--src/core/window-props.c47
3 files changed, 49 insertions, 1 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 36249af6..e66b5974 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -32,6 +32,7 @@ variables:
libxinerama-dev
libxrandr-dev
libxrender-dev
+ libxres-dev
libxt-dev
yelp-tools
zenity
diff --git a/configure.ac b/configure.ac
index 044f47f3..b0ce546c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -144,7 +144,7 @@ AC_CHECK_SIZEOF(__int64)
## byte order
AC_C_BIGENDIAN
-METACITY_PC_MODULES="gtk+-3.0 >= $GTK_REQUIRED_VERSION gio-2.0 >= $GLIB_REQUIRED_VERSION pango >= $PANGO_REQUIRED_VERSION gsettings-desktop-schemas >= 3.3.0 xcomposite >= $XCOMPOSITE_REQUIRED_VERSION xfixes xrender xdamage"
+METACITY_PC_MODULES="gtk+-3.0 >= $GTK_REQUIRED_VERSION gio-2.0 >= $GLIB_REQUIRED_VERSION pango >= $PANGO_REQUIRED_VERSION gsettings-desktop-schemas >= 3.3.0 xcomposite >= $XCOMPOSITE_REQUIRED_VERSION xfixes xrender xdamage xres"
GLIB_GSETTINGS
diff --git a/src/core/window-props.c b/src/core/window-props.c
index 64d500bd..9afc2743 100644
--- a/src/core/window-props.c
+++ b/src/core/window-props.c
@@ -43,6 +43,7 @@
#include "frame-private.h"
#include "group.h"
#include <X11/Xatom.h>
+#include <X11/extensions/XRes.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
@@ -395,11 +396,57 @@ reload_wm_window_role (MetaWindow *window,
window->role = g_strdup (value->v.str);
}
+static pid_t
+get_local_pid (MetaWindow *window)
+{
+ pid_t pid;
+ XResClientIdSpec spec;
+ long num_ids;
+ XResClientIdValue *client_ids;
+ long i;
+
+ pid = -1;
+
+ spec.client = window->xwindow;
+ spec.mask = XRES_CLIENT_ID_PID_MASK;
+
+ XResQueryClientIds (window->display->xdisplay,
+ 1,
+ &spec,
+ &num_ids,
+ &client_ids);
+
+ for (i = 0; i < num_ids; i++)
+ {
+ if (client_ids[i].spec.mask == XRES_CLIENT_ID_PID_MASK)
+ {
+ pid = XResGetClientPid (&client_ids[i]);
+ break;
+ }
+ }
+
+ XResClientIdsDestroy (num_ids, client_ids);
+
+ return pid;
+}
+
static void
reload_net_wm_pid (MetaWindow *window,
MetaPropValue *value,
gboolean initial)
{
+ pid_t pid;
+
+ pid = get_local_pid (window);
+
+ if (pid != -1)
+ {
+ meta_verbose ("Ignoring _NET_WM_PID in favor of XResGetClientPid\n");
+
+ window->net_wm_pid = pid;
+ return;
+ }
+
if (value->type != META_PROP_VALUE_INVALID)
{
gulong cardinal = (int) value->v.cardinal;