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 #include #include +#include #include #include #include @@ -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);