Merge pull request #45 from linkdd/master
Manage _NET_WM_WINDOW_TYPE_DESKTOP (Closes #29)
This commit is contained in:
commit
4e2c6125ca
@ -244,7 +244,8 @@ event_maprequest(XEvent *e)
|
|||||||
|
|
||||||
/* Which windows to manage */
|
/* Which windows to manage */
|
||||||
if(!XGetWindowAttributes(EVDPY(e), ev->window, &at)
|
if(!XGetWindowAttributes(EVDPY(e), ev->window, &at)
|
||||||
|| at.override_redirect)
|
|| at.override_redirect
|
||||||
|
|| ewmh_manage_window_type_desktop(ev->window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(!client_gb_win(ev->window))
|
if(!client_gb_win(ev->window))
|
||||||
|
|||||||
34
src/ewmh.c
34
src/ewmh.c
@ -42,6 +42,7 @@ ewmh_init(void)
|
|||||||
W->net_atom[net_supporting_wm_check] = ATOM("_NET_SUPPORTING_WM_CHECK");
|
W->net_atom[net_supporting_wm_check] = ATOM("_NET_SUPPORTING_WM_CHECK");
|
||||||
W->net_atom[net_wm_window_opacity] = ATOM("_NET_WM_WINDOW_OPACITY");
|
W->net_atom[net_wm_window_opacity] = ATOM("_NET_WM_WINDOW_OPACITY");
|
||||||
W->net_atom[net_wm_window_type_normal] = ATOM("_NET_WM_WINDOW_TYPE_NORMAL");
|
W->net_atom[net_wm_window_type_normal] = ATOM("_NET_WM_WINDOW_TYPE_NORMAL");
|
||||||
|
W->net_atom[net_wm_window_type_desktop] = ATOM("_NET_WM_WINDOW_TYPE_DESKTOP");
|
||||||
W->net_atom[net_wm_window_type_dock] = ATOM("_NET_WM_WINDOW_TYPE_DOCK");
|
W->net_atom[net_wm_window_type_dock] = ATOM("_NET_WM_WINDOW_TYPE_DOCK");
|
||||||
W->net_atom[net_wm_window_type_splash] = ATOM("_NET_WM_WINDOW_TYPE_SPLASH");
|
W->net_atom[net_wm_window_type_splash] = ATOM("_NET_WM_WINDOW_TYPE_SPLASH");
|
||||||
W->net_atom[net_wm_window_type_dialog] = ATOM("_NET_WM_WINDOW_TYPE_DIALOG");
|
W->net_atom[net_wm_window_type_dialog] = ATOM("_NET_WM_WINDOW_TYPE_DIALOG");
|
||||||
@ -267,3 +268,36 @@ ewmh_manage_window_type(struct client *c)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ewmh_manage_window_type_desktop(Window win)
|
||||||
|
{
|
||||||
|
Atom *atom, rf;
|
||||||
|
int f;
|
||||||
|
unsigned long n, il, i;
|
||||||
|
unsigned char *data = NULL;
|
||||||
|
bool is_desktop = false;
|
||||||
|
|
||||||
|
if(XGetWindowProperty(W->dpy, win, W->net_atom[net_wm_window_type], 0L, 0x7FFFFFFF,
|
||||||
|
False, XA_ATOM, &rf, &f, &n, &il, &data) == Success && n)
|
||||||
|
{
|
||||||
|
atom = (Atom*)data;
|
||||||
|
|
||||||
|
for(i = 0; i < n; ++i)
|
||||||
|
{
|
||||||
|
/* If it is a _NET_WM_WINDOW_TYPE_DESKTOP window */
|
||||||
|
if(atom[i] == W->net_atom[net_wm_window_type_desktop])
|
||||||
|
{
|
||||||
|
/* map it, but don't manage it */
|
||||||
|
XMapWindow(W->dpy, win);
|
||||||
|
XMapSubwindows(W->dpy, win);
|
||||||
|
|
||||||
|
is_desktop = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
XFree(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return is_desktop;
|
||||||
|
}
|
||||||
|
|||||||
@ -60,6 +60,7 @@ enum
|
|||||||
net_supporting_wm_check,
|
net_supporting_wm_check,
|
||||||
net_wm_window_opacity,
|
net_wm_window_opacity,
|
||||||
net_wm_window_type_normal,
|
net_wm_window_type_normal,
|
||||||
|
net_wm_window_type_desktop,
|
||||||
net_wm_window_type_dock,
|
net_wm_window_type_dock,
|
||||||
net_wm_window_type_splash,
|
net_wm_window_type_splash,
|
||||||
net_wm_window_type_dialog,
|
net_wm_window_type_dialog,
|
||||||
@ -124,5 +125,6 @@ long ewmh_get_xembed_state(Window win);
|
|||||||
void ewmh_update_wmfs_props(void);
|
void ewmh_update_wmfs_props(void);
|
||||||
void ewmh_manage_state(long data[], struct client *c);
|
void ewmh_manage_state(long data[], struct client *c);
|
||||||
void ewmh_manage_window_type(struct client *c);
|
void ewmh_manage_window_type(struct client *c);
|
||||||
|
bool ewmh_manage_window_type_desktop(Window win);
|
||||||
|
|
||||||
#endif /* EWMH_H */
|
#endif /* EWMH_H */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user