aewl
diff aewl.c @ 782:f1e806b34697
created separated floating space; added per space mode
Eventually I realized the plans I had for so long.
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Mon, 05 Sep 2011 23:05:08 +0200 |
parents | 7ea91d4d0882 |
children | f259785bac44 |
line diff
1.1 --- a/aewl.c Mon Sep 05 21:32:16 2011 +0200 1.2 +++ b/aewl.c Mon Sep 05 23:05:08 2011 +0200 1.3 @@ -127,11 +127,14 @@ 1.4 unsigned int nmaster; /* number of master clients */ 1.5 unsigned int numlockmask; /* dynamic lock mask */ 1.6 void (*handler[LASTEvent])(XEvent *); /* event handler */ 1.7 -void (*arrange)(void); /* arrange function, indicates mode */ 1.8 +void arrange(void); /* arrange */ 1.9 +void (*arrange1)(void); /* arrange function, indicates mode */ 1.10 +void (*arrange2)(void); /* arrange function, indicates mode */ 1.11 Atom wmatom[WMLast], netatom[NetLast]; 1.12 Bool running = True; 1.13 Bool selscreen = True; 1.14 Bool seltag; 1.15 +Bool viewfloats; 1.16 Client* clients = NULL; /* global client list */ 1.17 Client* stack = NULL; /* global client stack */ 1.18 Client* sel = NULL; /* selected client */ 1.19 @@ -179,11 +182,12 @@ 1.20 void restack(void); /* restores z layers of all clients */ 1.21 1.22 void toggleview(void); /* toggle the view */ 1.23 +void floattoggle(); /* toggle floatsview */ 1.24 void focusnext(void); /* focuses next visible client */ 1.25 void zoom(void); /* zooms the focused client to master area */ 1.26 void killclient(void); /* kill c nicely */ 1.27 void quit(void); /* quit nicely */ 1.28 -void togglemode(void); /* toggles global arrange function (dotile/domax) */ 1.29 +void togglemode(void); /* toggles arrange function (dotile/domax) */ 1.30 void togglefloat(void); /* toggles focusesd client between floating/non-floating state */ 1.31 void incnmaster(void); /* increments nmaster */ 1.32 void decnmaster(void); /* decrements nmaster */ 1.33 @@ -362,7 +366,10 @@ 1.34 1.35 Bool 1.36 isvisible(Client *c) { 1.37 - return (c->tag == seltag); 1.38 + if (c->isfloat) { 1.39 + return viewfloats; 1.40 + } 1.41 + return (!viewfloats && c->tag == seltag); 1.42 } 1.43 1.44 void 1.45 @@ -373,9 +380,10 @@ 1.46 drawbar(); 1.47 if(!sel) 1.48 return; 1.49 - if(sel->isfloat) 1.50 + /*if(sel->isfloat)*/ 1.51 XRaiseWindow(dpy, sel->win); 1.52 1.53 + /* 1.54 if(!sel->isfloat) 1.55 XLowerWindow(dpy, sel->win); 1.56 for(c = nexttiled(clients); c; c = nexttiled(c->next)) { 1.57 @@ -383,6 +391,7 @@ 1.58 continue; 1.59 XLowerWindow(dpy, c->win); 1.60 } 1.61 + */ 1.62 1.63 XSync(dpy, False); 1.64 while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); 1.65 @@ -393,25 +402,50 @@ 1.66 if (!sel) 1.67 return; 1.68 sel->isfloat = !sel->isfloat; 1.69 - arrange(); 1.70 + floattoggle(); 1.71 } 1.72 1.73 void 1.74 togglemode() { 1.75 - /* only toggle between tile and max - float is just available through togglefloat */ 1.76 - arrange = (arrange == dotile) ? domax : dotile; 1.77 + /* toggle between tile and max */ 1.78 + if (viewfloats) { 1.79 + return; 1.80 + } 1.81 + if (seltag) { 1.82 + arrange1 = (arrange1 == dotile) ? domax : dotile; 1.83 + } else { 1.84 + arrange2 = (arrange2 == dotile) ? domax : dotile; 1.85 + } 1.86 if(sel) 1.87 arrange(); 1.88 zoom(); 1.89 } 1.90 1.91 void 1.92 +arrange() { 1.93 + if (seltag) { 1.94 + arrange1(); 1.95 + } else { 1.96 + arrange2(); 1.97 + } 1.98 +} 1.99 + 1.100 +void 1.101 toggleview() { 1.102 + if (viewfloats) { 1.103 + return; 1.104 + } 1.105 seltag = !seltag; 1.106 arrange(); 1.107 } 1.108 1.109 void 1.110 +floattoggle() { 1.111 + viewfloats = !viewfloats; 1.112 + arrange(); 1.113 +} 1.114 + 1.115 +void 1.116 zoom() { 1.117 unsigned int n; 1.118 Client *c; 1.119 @@ -916,7 +950,7 @@ 1.120 /* views */ 1.121 dc.x = dc.y = 0; 1.122 dc.w = textw(NAMETAGGED); 1.123 - drawtext(NAMETAGGED, ( seltag ? dc.sel : dc.norm )); 1.124 + drawtext(NAMETAGGED, ( (seltag&&!viewfloats) ? dc.sel : dc.norm )); 1.125 1.126 dc.x += dc.w; 1.127 dc.w = BORDERPX; 1.128 @@ -924,7 +958,7 @@ 1.129 1.130 dc.x += dc.w; 1.131 dc.w = textw(NAMEUNTAGGED); 1.132 - drawtext(NAMEUNTAGGED, ( seltag ? dc.norm : dc.sel )); 1.133 + drawtext(NAMEUNTAGGED, ( (!seltag&&!viewfloats) ? dc.sel : dc.norm )); 1.134 1.135 dc.x += dc.w; 1.136 dc.w = BORDERPX; 1.137 @@ -1447,6 +1481,7 @@ 1.138 XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); 1.139 grabkeys(); 1.140 seltag = True; 1.141 + viewfloats = False; 1.142 /* style */ 1.143 dc.norm[ColBG] = getcolor(NORMBGCOLOR); 1.144 dc.norm[ColFG] = getcolor(NORMFGCOLOR); 1.145 @@ -1458,7 +1493,8 @@ 1.146 sw = DisplayWidth(dpy, screen); 1.147 sh = DisplayHeight(dpy, screen); 1.148 nmaster = NMASTER; 1.149 - arrange = DEFMODE; 1.150 + arrange1 = DEFMODE; 1.151 + arrange2 = DEFMODE; 1.152 /* bar */ 1.153 dc.h = bh = dc.font.height + 2; 1.154 wa.override_redirect = 1;