aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreylles <ed.ylles1997@gmail.com>2021-09-11 08:14:34 -0600
committerBerke Kocaoğlu <berke.kocaoglu@metu.edu.tr>2021-09-16 22:55:31 +0300
commitd8ec6f91a9857fb651f39de7929f17543d1c996c (patch)
treeae53b8c984aa5452d609cd1d4007cba183f66a1c
parent46a54c4b2d6181fc9c92facf600bef59e6041ab3 (diff)
Set the _NET_WM_PID and WM_CLIENT_MACHINE X properties (#13)
Set the _NET_WM_PID and WM_CLIENT_MACHINE X properties Co-authored-by: Leon Kowarschick <lkowarschick@gmail.com> Co-authored-by: Kian Kasad <kian@kasad.com> Co-authored-by: NRK <nrk@disroot.org>
-rw-r--r--sxiv.h1
-rw-r--r--window.c20
2 files changed, 21 insertions, 0 deletions
diff --git a/sxiv.h b/sxiv.h
index d80f7e5..746b35f 100644
--- a/sxiv.h
+++ b/sxiv.h
@@ -385,6 +385,7 @@ enum {
ATOM__NET_WM_ICON_NAME,
ATOM__NET_WM_ICON,
ATOM__NET_WM_STATE,
+ ATOM__NET_WM_PID,
ATOM__NET_WM_STATE_FULLSCREEN,
ATOM_COUNT
};
diff --git a/window.c b/window.c
index 439062c..ded20c8 100644
--- a/window.c
+++ b/window.c
@@ -25,6 +25,7 @@
#include <stdlib.h>
#include <string.h>
#include <locale.h>
+#include <unistd.h>
#include <X11/cursorfont.h>
#include <X11/Xatom.h>
#include <X11/Xresource.h>
@@ -151,6 +152,7 @@ void win_init(win_t *win)
INIT_ATOM_(_NET_WM_ICON_NAME);
INIT_ATOM_(_NET_WM_ICON);
INIT_ATOM_(_NET_WM_STATE);
+ INIT_ATOM_(_NET_WM_PID);
INIT_ATOM_(_NET_WM_STATE_FULLSCREEN);
}
@@ -168,6 +170,8 @@ void win_open(win_t *win)
int gmask;
XSizeHints sizehints;
XWMHints hints;
+ pid_t pid;
+ char hostname[255];
e = &win->env;
parent = options->embed != 0 ? options->embed : RootWindow(e->dpy, e->scr);
@@ -215,6 +219,22 @@ void win_open(win_t *win)
if (win->xwin == None)
error(EXIT_FAILURE, 0, "Error creating X window");
+ /* set the _NET_WM_PID */
+ pid = getpid();
+ XChangeProperty(e->dpy, win->xwin,
+ atoms[ATOM__NET_WM_PID], XA_CARDINAL, sizeof(pid_t) * 8,
+ PropModeReplace, (unsigned char *) &pid, 1);
+
+ /* set the _NET_WM_PID */
+ if (gethostname(hostname, sizeof(hostname)) == 0) {
+ XTextProperty tp;
+ tp.value = (unsigned char *)hostname;
+ tp.nitems = strnlen(hostname, sizeof(hostname));
+ tp.encoding = XA_STRING;
+ tp.format = 8;
+ XSetWMClientMachine(e->dpy, win->xwin, &tp);
+ }
+
XSelectInput(e->dpy, win->xwin,
ButtonReleaseMask | ButtonPressMask | KeyPressMask |
PointerMotionMask | StructureNotifyMask);