add pid field to client

This commit is contained in:
Akos Horvath 2023-11-25 13:57:49 +01:00
parent f14a75b83e
commit 62bf51d706
2 changed files with 17 additions and 5 deletions

View File

@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "client.h" #include "client.h"
#include "util.h" #include "util.h"
#include "wm.h" #include "wm.h"
#include <X11/Xlib.h>
#include <assert.h> #include <assert.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -74,6 +75,7 @@ Client* wm_client_create(Wm *wm, Window w)
c->hidden = true; c->hidden = true;
c->is_floating = false; c->is_floating = false;
c->name = NULL; c->name = NULL;
c->is_pid_set = false;
if (xtp.value) { if (xtp.value) {
strln = strlen((char*)xtp.value); strln = strlen((char*)xtp.value);
@ -88,8 +90,21 @@ Client* wm_client_create(Wm *wm, Window w)
wm_client_set_atom(wm, c, "_NET_WM_DESKTOP", (unsigned char*)&c->ws->index, wm_client_set_atom(wm, c, "_NET_WM_DESKTOP", (unsigned char*)&c->ws->index,
XA_CARDINAL, 1); XA_CARDINAL, 1);
unsigned char *prop_ret = NULL;
unsigned long nitems_ret;
Atom type;
bool is_normal = false;
type = wm_client_get_atom(wm, c, "_NET_WM_PID", &prop_ret, &nitems_ret);
if (!nitems_ret || !prop_ret) goto ret;
c->pid = *((int*)prop_ret);
DEBUG_PRINT("pid: %d\n", c->pid);
c->is_pid_set = true;
ret:
XFree(xtp.value); XFree(xtp.value);
if (prop_ret) XFree(prop_ret);
return c; return c;
} }
@ -308,11 +323,6 @@ Atom wm_client_get_atom(Wm *wm, Client *c, const char *name, unsigned char **ato
DEBUG_PRINT("actual format return: %d\n", format_ret) DEBUG_PRINT("actual format return: %d\n", format_ret)
DEBUG_PRINT("actual number of items return: %ld\n", *nitems_ret) DEBUG_PRINT("actual number of items return: %ld\n", *nitems_ret)
DEBUG_PRINT("bytes remaining: %ld\n", *nitems_ret) DEBUG_PRINT("bytes remaining: %ld\n", *nitems_ret)
for (int i = 0; i < *nitems_ret; i++) {
char *atom_name = XGetAtomName(wm->display, ((Atom*)*atom_ret)[i]);
printf("property return str: %s\n", atom_name);
XFree(atom_name);
}
return type_ret; return type_ret;
} }

View File

@ -44,6 +44,8 @@ struct Client {
bool focused; bool focused;
bool has_border; bool has_border;
bool is_floating; bool is_floating;
pid_t pid;
bool is_pid_set;
}; };
XWindowChanges wm_client_to_xwchanges(Client *c); XWindowChanges wm_client_to_xwchanges(Client *c);