From 3878e89b99765974afce3b1231472809132659cb Mon Sep 17 00:00:00 2001 From: David Delassus Date: Tue, 17 Apr 2012 14:36:17 +0200 Subject: [PATCH] Clean up code --- src/event.c | 29 ++--------------------------- src/ewmh.c | 33 +++++++++++++++++++++++++++++++++ src/ewmh.h | 1 + 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/src/event.c b/src/event.c index 0c1c042..ace1ee8 100644 --- a/src/event.c +++ b/src/event.c @@ -242,37 +242,12 @@ event_maprequest(XEvent *e) XWindowAttributes at; struct _systray *s; - Atom *atom, rf; - int f; - unsigned long n, il, i; - unsigned char *data = NULL; - /* Which windows to manage */ if(!XGetWindowAttributes(EVDPY(e), ev->window, &at) - || at.override_redirect) + || at.override_redirect + || ewmh_manage_window_type_desktop(ev->window)) return; - if(XGetWindowProperty(EVDPY(e), ev->window, 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(EVDPY(e), ev->window); - XMapSubwindows(EVDPY(e), ev->window); - XFree(data); - return; - } - } - - XFree(data); - } - if(!client_gb_win(ev->window)) client_new(ev->window, &at, false); else if((s = systray_find(ev->window))) diff --git a/src/ewmh.c b/src/ewmh.c index f21e1dc..e2472ea 100644 --- a/src/ewmh.c +++ b/src/ewmh.c @@ -268,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; +} diff --git a/src/ewmh.h b/src/ewmh.h index becffca..28535fe 100644 --- a/src/ewmh.h +++ b/src/ewmh.h @@ -125,5 +125,6 @@ long ewmh_get_xembed_state(Window win); void ewmh_update_wmfs_props(void); void ewmh_manage_state(long data[], struct client *c); void ewmh_manage_window_type(struct client *c); +bool ewmh_manage_window_type_desktop(Window win); #endif /* EWMH_H */