[metacity] window: add meta_window_get_client_pid
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [metacity] window: add meta_window_get_client_pid
- Date: Sat, 12 Sep 2020 12:19:03 +0000 (UTC)
commit dade470e13292c58822b0c180019caf0ea3862f3
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Sat Sep 12 14:12:10 2020 +0300
window: add meta_window_get_client_pid
src/core/window-private.h | 3 +++
src/core/window.c | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 39 insertions(+)
---
diff --git a/src/core/window-private.h b/src/core/window-private.h
index 4b4253e9..232d9d9a 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -132,6 +132,7 @@ struct _MetaWindow
char *gtk_theme_variant;
int net_wm_pid;
+ pid_t client_pid;
Window xtransient_for;
Window xgroup_leader;
@@ -724,6 +725,8 @@ void meta_window_add_pending_unmap (MetaWindow *window,
gboolean meta_window_remove_pending_unmap (MetaWindow *window,
gulong serial);
+pid_t meta_window_get_client_pid (MetaWindow *self);
+
G_END_DECLS
#endif
diff --git a/src/core/window.c b/src/core/window.c
index 146dde9c..5e149d49 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -51,6 +51,7 @@
#include <string.h>
#include <X11/extensions/shape.h>
+#include <X11/extensions/XRes.h>
/* should investigate changing these to whatever most apps use */
#define META_ICON_SIZE 96
@@ -567,6 +568,7 @@ meta_window_new (MetaDisplay *display,
window->gtk_theme_variant = NULL;
window->net_wm_pid = -1;
+ window->client_pid = -1;
window->xtransient_for = None;
window->xclient_leader = None;
@@ -9264,3 +9266,37 @@ meta_window_remove_pending_unmap (MetaWindow *window,
return removed;
}
+
+pid_t
+meta_window_get_client_pid (MetaWindow *self)
+{
+ if (self->client_pid == -1)
+ {
+ XResClientIdSpec spec;
+ long num_ids;
+ XResClientIdValue *client_ids;
+ long i;
+
+ spec.client = self->xwindow;
+ spec.mask = XRES_CLIENT_ID_PID_MASK;
+
+ XResQueryClientIds (self->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)
+ {
+ self->client_pid = XResGetClientPid (&client_ids[i]);
+ break;
+ }
+ }
+
+ XResClientIdsDestroy (num_ids, client_ids);
+ }
+
+ return self->client_pid;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]