Introduction
Introduction Statistics Contact Development Disclaimer Help
tusing a global stack for focus recovery on arrange() - seems to work great - d…
git clone git://src.adamsgaard.dk/dwm
Log
Files
Refs
README
LICENSE
---
commit 15abade2720158fd35dcf59aa2cd5cbb325a849c
parent 7ab8c8728168234f6b9e99d1be384323d1246b10
Author: Anselm R. Garbe <[email protected]>
Date: Thu, 7 Sep 2006 17:53:40 +0200
using a global stack for focus recovery on arrange() - seems to work great
Diffstat:
M client.c | 16 ++++++++++++++--
M dwm.h | 3 ++-
M main.c | 1 +
M view.c | 14 +++++++++-----
4 files changed, 26 insertions(+), 8 deletions(-)
---
diff --git a/client.c b/client.c
t@@ -11,6 +11,14 @@
/* static functions */
static void
+detachstack(Client *c)
+{
+ Client **tc;
+ for(tc=&stack; *tc && *tc != c; tc=&(*tc)->snext);
+ *tc = c->snext;
+}
+
+static void
grabbuttons(Client *c, Bool focus)
{
XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
t@@ -99,6 +107,9 @@ focus(Client *c)
}
}
if(c) {
+ detachstack(c);
+ c->snext = stack;
+ stack = c;
grabbuttons(c, True);
drawtitle(c);
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
t@@ -198,7 +209,6 @@ killclient(Arg *arg)
void
manage(Window w, XWindowAttributes *wa)
{
- unsigned int i;
Client *c;
Window trans;
XSetWindowAttributes twa;
t@@ -247,7 +257,8 @@ manage(Window w, XWindowAttributes *wa)
if(clients)
clients->prev = c;
c->next = clients;
- clients = c;
+ c->snext = stack;
+ stack = clients = c;
settitle(c);
ban(c);
t@@ -421,6 +432,7 @@ unmanage(Client *c)
XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
XDestroyWindow(dpy, c->twin);
+ detachstack(c);
free(c->tags);
free(c);
diff --git a/dwm.h b/dwm.h
t@@ -61,6 +61,7 @@ struct Client {
Bool *tags;
Client *next;
Client *prev;
+ Client *snext;
Window win;
Window twin;
};
t@@ -73,7 +74,7 @@ extern void (*handler[LASTEvent])(XEvent *);
extern void (*arrange)(Arg *);
extern Atom wmatom[WMLast], netatom[NetLast];
extern Bool running, issel, maximized, *seltag;
-extern Client *clients, *sel;
+extern Client *clients, *sel, *stack;
extern Cursor cursor[CurLast];
extern DC dc;
extern Display *dpy;
diff --git a/main.c b/main.c
t@@ -27,6 +27,7 @@ Bool issel = True;
Bool maximized = False;
Client *clients = NULL;
Client *sel = NULL;
+Client *stack = NULL;
Cursor cursor[CurLast];
Display *dpy;
DC dc = {0};
diff --git a/view.c b/view.c
t@@ -76,8 +76,10 @@ dofloat(Arg *arg)
else
ban(c);
}
- if(!sel || !isvisible(sel))
- focus(getnext(clients));
+ if(!sel || !isvisible(sel)) {
+ for(sel = stack; sel && !isvisible(sel); sel = sel->snext);
+ focus(sel);
+ }
restack();
}
t@@ -138,8 +140,10 @@ dotile(Arg *arg)
else
ban(c);
}
- if(!sel || !isvisible(sel))
- focus(getnext(clients));
+ if(!sel || !isvisible(sel)) {
+ for(sel = stack; sel && !isvisible(sel); sel = sel->snext);
+ focus(sel);
+ }
restack();
}
t@@ -227,7 +231,7 @@ restack()
XRaiseWindow(dpy, sel->win);
XRaiseWindow(dpy, sel->twin);
}
- if(arrange != dofloat)
+ if(arrange != dofloat)
for(c = nexttiled(clients); c; c = nexttiled(c->next)) {
XLowerWindow(dpy, c->twin);
XLowerWindow(dpy, c->win);
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.