aewl
diff client.c @ 53:529901e6a227
added mini stuff
author | Anselm R. Garbe <garbeam@wmii.de> |
---|---|
date | Thu, 13 Jul 2006 21:42:17 +0200 |
parents | d18f6dd0cf23 |
children | a64602deac83 |
line diff
1.1 --- a/client.c Thu Jul 13 20:28:19 2006 +0200 1.2 +++ b/client.c Thu Jul 13 21:42:17 2006 +0200 1.3 @@ -11,10 +11,11 @@ 1.4 1.5 #include "dwm.h" 1.6 1.7 -static void (*arrange)(Arg *) = tiling; 1.8 +void (*arrange)(Arg *) = tiling; 1.9 1.10 static Rule rule[] = { 1.11 - { "Firefox-bin", "Gecko", { [Twww] = "www" } }, 1.12 + /* class instance tags floating */ 1.13 + { "Firefox-bin", "Gecko", { [Twww] = "www" }, False }, 1.14 }; 1.15 1.16 static Client * 1.17 @@ -64,25 +65,25 @@ 1.18 } 1.19 1.20 void 1.21 -tag(Arg *arg) 1.22 +tappend(Arg *arg) 1.23 { 1.24 - int i, n; 1.25 if(!sel) 1.26 return; 1.27 1.28 - if(arg->i == tsel) { 1.29 - for(n = i = 0; i < TLast; i++) 1.30 - if(sel->tags[i]) 1.31 - n++; 1.32 - if(n < 2) 1.33 - return; 1.34 - } 1.35 + sel->tags[arg->i] = tags[arg->i]; 1.36 + arrange(NULL); 1.37 +} 1.38 1.39 - if(sel->tags[arg->i]) 1.40 - sel->tags[arg->i] = NULL; /* toggle tag */ 1.41 - else 1.42 - sel->tags[arg->i] = tags[arg->i]; 1.43 - arrange(NULL); 1.44 +void 1.45 +ttrunc(Arg *arg) 1.46 +{ 1.47 + int i; 1.48 + if(!sel) 1.49 + return; 1.50 + 1.51 + for(i = 0; i < TLast; i++) 1.52 + sel->tags[i] = NULL; 1.53 + tappend(arg); 1.54 } 1.55 1.56 static void 1.57 @@ -122,13 +123,18 @@ 1.58 w = sw - mw; 1.59 arrange = tiling; 1.60 for(n = 0, c = clients; c; c = c->next) 1.61 - if(c->tags[tsel]) 1.62 + if(c->tags[tsel] && !c->floating) 1.63 n++; 1.64 1.65 h = (n > 1) ? sh / (n - 1) : sh; 1.66 1.67 for(i = 0, c = clients; c; c = c->next) { 1.68 if(c->tags[tsel]) { 1.69 + if(c->floating) { 1.70 + craise(c); 1.71 + resize(c, True); 1.72 + continue; 1.73 + } 1.74 if(n == 1) { 1.75 c->x = sx; 1.76 c->y = sy; 1.77 @@ -330,14 +336,13 @@ 1.78 1.79 if(XGetClassHint(dpy, c->win, &ch)) { 1.80 if(ch.res_class && ch.res_name) { 1.81 - fprintf(stderr, "%s:%s\n", ch.res_class, ch.res_name); 1.82 for(i = 0; i < len; i++) 1.83 if(!strncmp(rule[i].class, ch.res_class, sizeof(rule[i].class)) 1.84 && !strncmp(rule[i].instance, ch.res_name, sizeof(rule[i].instance))) 1.85 { 1.86 - fprintf(stderr, "->>>%s:%s\n", ch.res_class, ch.res_name); 1.87 for(j = 0; j < TLast; j++) 1.88 c->tags[j] = rule[i].tags[j]; 1.89 + c->floating = rule[i].floating; 1.90 matched = True; 1.91 break; 1.92 } 1.93 @@ -357,6 +362,7 @@ 1.94 { 1.95 Client *c, **l; 1.96 XSetWindowAttributes twa; 1.97 + Window trans; 1.98 1.99 c = emallocz(sizeof(Client)); 1.100 c->win = w; 1.101 @@ -370,7 +376,7 @@ 1.102 update_size(c); 1.103 XSelectInput(dpy, c->win, 1.104 StructureNotifyMask | PropertyChangeMask | EnterWindowMask); 1.105 - XGetTransientForHint(dpy, c->win, &c->trans); 1.106 + XGetTransientForHint(dpy, c->win, &trans); 1.107 twa.override_redirect = 1; 1.108 twa.background_pixmap = ParentRelative; 1.109 twa.event_mask = ExposureMask; 1.110 @@ -396,6 +402,11 @@ 1.111 GrabModeAsync, GrabModeSync, None, None); 1.112 XGrabButton(dpy, Button3, Mod1Mask, c->win, False, ButtonPressMask, 1.113 GrabModeAsync, GrabModeSync, None, None); 1.114 + 1.115 + if(!c->floating) 1.116 + c->floating = trans 1.117 + || ((c->maxw == c->minw) && (c->maxh == c->minh)); 1.118 + 1.119 arrange(NULL); 1.120 if(c->tags[tsel]) 1.121 focus(c);