diff --git a/src/client.c b/src/client.c index 7c629be..ce59191 100644 --- a/src/client.c +++ b/src/client.c @@ -853,6 +853,7 @@ client_new(Window w, XWindowAttributes *wa, bool scan) client_get_name(c); client_focus(c); client_configure(c); + ewmh_manage_window_type(c); } return c; diff --git a/src/ewmh.c b/src/ewmh.c index 7ff79ae..f2fd9f8 100644 --- a/src/ewmh.c +++ b/src/ewmh.c @@ -169,3 +169,28 @@ ewmh_manage_state(long data[], struct client *c) } } +void +ewmh_manage_window_type(struct client *c) +{ + Atom *atom, rf; + int f; + unsigned long n, il, i; + unsigned char *data = NULL; + long ldata[5] = { _NET_WM_STATE_ADD }; + + /* _NET_WM_STATE at window mangement */ + if(XGetWindowProperty(W->dpy, c->win, W->net_atom[net_wm_state], 0L, 0x7FFFFFFFL, false, + XA_ATOM, &rf, &f, &n, &il, &data) == Success && n) + { + atom = (Atom*)data; + + for(i = 0; i < n; ++i) + { + ldata[1] = atom[i]; + ewmh_manage_state(ldata, c); + } + + XFree(data); + } +} + diff --git a/src/ewmh.h b/src/ewmh.h index da29f3d..61337ac 100644 --- a/src/ewmh.h +++ b/src/ewmh.h @@ -76,5 +76,6 @@ void ewmh_init(void); void ewmh_set_wm_state(Window w, int state); void ewmh_update_wmfs_props(void); void ewmh_manage_state(long data[], struct client *c); +void ewmh_manage_window_type(struct client *c); #endif /* EWMH_H */