Introduction
Introduction Statistics Contact Development Disclaimer Help
tstill something wrong with reorder() - dwm - [fork] customized build of dwm, t…
git clone git://src.adamsgaard.dk/dwm
Log
Files
Refs
README
LICENSE
---
commit 9d739090750ffb3b3a64e86e2331215b8901c360
parent 016c54196e682ae8658854febb746b0437a010dc
Author: Anselm R. Garbe <[email protected]>
Date: Tue, 29 Aug 2006 13:40:09 +0200
still something wrong with reorder()
Diffstat:
M client.c | 5 ++++-
M dwm.h | 3 +--
M tag.c | 6 ++----
M view.c | 75 +++++++++++------------------…
4 files changed, 33 insertions(+), 56 deletions(-)
---
diff --git a/client.c b/client.c
t@@ -241,7 +241,10 @@ manage(Window w, XWindowAttributes *wa)
|| (c->maxw && c->minw &&
c->maxw == c->minw && c->maxh == c->minh);
- attach(c);
+ if(clients)
+ clients->prev = c;
+ c->next = clients;
+ clients = c;
settitle(c);
if(isvisible(c))
diff --git a/dwm.h b/dwm.h
t@@ -56,7 +56,7 @@ struct Client {
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
int grav;
long flags;
- unsigned int border;
+ unsigned int border, weight;
Bool isfloat;
Bool ismax;
Bool *tags;
t@@ -127,7 +127,6 @@ extern void *erealloc(void *ptr, unsigned int size);
extern void spawn(Arg *arg);
/* view.c */
-extern void attach(Client *c);
extern void detach(Client *c);
extern void dofloat(Arg *arg);
extern void dotile(Arg *arg);
diff --git a/tag.c b/tag.c
t@@ -106,6 +106,8 @@ settags(Client *c)
if(!matched)
for(i = 0; i < ntags; i++)
c->tags[i] = seltag[i];
+ for(i = 0; i < ntags && !c->tags[i]; i++);
+ c->weight = i;
}
void
t@@ -120,8 +122,6 @@ tag(Arg *arg)
sel->tags[i] = False;
sel->tags[arg->i] = True;
settitle(sel);
- detach(sel);
- attach(sel);
if(!isvisible(sel))
arrange(NULL);
else
t@@ -141,8 +141,6 @@ toggletag(Arg *arg)
if(i == ntags)
sel->tags[arg->i] = True;
settitle(sel);
- detach(sel);
- attach(sel);
if(!isvisible(sel))
arrange(NULL);
else
diff --git a/view.c b/view.c
t@@ -6,62 +6,34 @@
/* static */
-static Client *
-getslot(Client *c)
+static void
+reorder()
{
- unsigned int i, tic;
- Client *p;
-
- for(tic = 0; tic < ntags && !c->tags[tic]; tic++);
- for(p = clients; p; p = p->next) {
- for(i = 0; i < ntags && !p->tags[i]; i++);
- if(tic < i)
- return p;
- }
- return p;
-}
+ Client *c, *orig, *p;
-static Client *
-tail()
-{
- Client *c;
- for(c = clients; c && c->next; c = c->next);
- return c;
-}
+ orig = clients;
+ clients = NULL;
-/* extern */
+ while((c = orig)) {
+ orig = orig->next;
+ detach(c);
-void (*arrange)(Arg *) = DEFMODE;
-
-void
-attach(Client *c)
-{
- Client *p;
-
- if(!clients) {
- clients = c;
- return;
- }
- if(!(p = getnext(clients)) && !(p = getslot(c))) {
- p = tail();
+ for(p = clients; p && p->next && p->weight <= c->weight; p = p…
c->prev = p;
- p->next = c;
- return;
- }
-
- if(p == clients) {
- c->next = clients;
- clients->prev = c;
- clients = c;
- }
- else {
- p->prev->next = c;
- c->prev = p->prev;
- p->prev = c;
- c->next = p;
+ if(p) {
+ if((c->next = p->next))
+ c->next->prev = c;
+ p->next = c;
+ }
+ else
+ clients = c;
}
}
+/* extern */
+
+void (*arrange)(Arg *) = DEFMODE;
+
void
detach(Client *c)
{
t@@ -277,6 +249,7 @@ toggleview(Arg *arg)
for(i = 0; i < ntags && !seltag[i]; i++);
if(i == ntags)
seltag[arg->i] = True; /* cannot toggle last view */
+ reorder();
arrange(NULL);
}
t@@ -284,10 +257,12 @@ void
view(Arg *arg)
{
unsigned int i;
+ Client *c;
for(i = 0; i < ntags; i++)
seltag[i] = False;
seltag[arg->i] = True;
+ reorder();
arrange(NULL);
}
t@@ -303,7 +278,9 @@ zoom(Arg *arg)
if(!(c = getnext(c->next)))
return;
detach(c);
- attach(c);
+ c->next = clients;
+ clients->prev = c;
+ clients = c;
focus(c);
arrange(NULL);
}
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.