diff options
| author | Ivan Kanakarakis <ivan.kanak@gmail.com> | 2011-12-28 03:47:26 +0200 |
|---|---|---|
| committer | Ivan Kanakarakis <ivan.kanak@gmail.com> | 2011-12-28 03:54:15 +0200 |
| commit | 0bf4234b87973f21540299d62f2d1f1fd1c034f8 (patch) | |
| tree | 4f8f47458a258786848ffab1e4b6be41ad76e450 | |
| parent | 4760e3b4b3c8486be9c0848076a9e4037f86778d (diff) | |
rework and unify maprequest() function
| -rw-r--r-- | monsterwm.c | 40 |
1 files changed, 15 insertions, 25 deletions
diff --git a/monsterwm.c b/monsterwm.c index 81d0593..9e6a3a0 100644 --- a/monsterwm.c +++ b/monsterwm.c @@ -355,42 +355,32 @@ void maprequest(XEvent *e) { if(XGetWindowAttributes(dis, ev->window, &wa) && wa.override_redirect) return; if(wintoclient(ev->window)) return; - /* window is transient */ Window trans; - if(XGetTransientForHint(dis, ev->window, &trans) && trans) { - add_window(ev->window); - XMapWindow(dis, ev->window); - update_current(); - return; - } + Bool follow = False, winistrans = XGetTransientForHint(dis, ev->window, &trans) && trans; + int cd = current_desktop, nd = current_desktop; - /* window is normal and has a rule set */ XClassHint ch = {0, 0}; - if(XGetClassHint(dis, ev->window, &ch)) + if(!winistrans && XGetClassHint(dis, ev->window, &ch)) for(unsigned int i=0; i<LENGTH(rules); i++) { if(strcmp(ch.res_class, rules[i].class) && strcmp(ch.res_name, rules[i].class)) continue; - int cd = current_desktop; - save_desktop(cd); - select_desktop(rules[i].desktop); - add_window(ev->window); - select_desktop(cd); - if(cd == rules[i].desktop) { - tile(); - XMapWindow(dis, ev->window); - update_current(); - } else if(rules[i].follow) - change_desktop(&(Arg){.i = rules[i].desktop}); + nd = rules[i].desktop; + follow = rules[i].follow; if(ch.res_class) XFree(ch.res_class); if(ch.res_name) XFree(ch.res_name); - return; + break; } - /* window is normal and has no rule set */ + save_desktop(cd); + select_desktop(nd); add_window(ev->window); - tile(); - XMapWindow(dis, ev->window); - update_current(); + select_desktop(cd); + if(cd == nd) { + if(!winistrans) tile(); + XMapWindow(dis, ev->window); + update_current(); + } + if(follow) change_desktop(&(Arg){.i = nd}); } void move_down() { |
