diff options
-rw-r--r-- | sxiv.h | 1 | ||||
-rw-r--r-- | window.c | 20 |
2 files changed, 21 insertions, 0 deletions
@@ -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 }; @@ -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); |