|
|
@@ -9,13 +9,6 @@
|
|
|
|
|
|
/* static */
|
|
|
|
|
|
-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 focused) {
|
|
|
XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
|
|
|
@@ -67,6 +60,20 @@ xerrordummy(Display *dsply, XErrorEvent *ee) {
|
|
|
|
|
|
/* extern */
|
|
|
|
|
|
+void
|
|
|
+attach(Client *c) {
|
|
|
+ if(clients)
|
|
|
+ clients->prev = c;
|
|
|
+ c->next = clients;
|
|
|
+ clients = c;
|
|
|
+}
|
|
|
+
|
|
|
+void
|
|
|
+attachstack(Client *c) {
|
|
|
+ c->snext = stack;
|
|
|
+ stack = c;
|
|
|
+}
|
|
|
+
|
|
|
void
|
|
|
configure(Client *c) {
|
|
|
XConfigureEvent ce;
|
|
|
@@ -85,6 +92,24 @@ configure(Client *c) {
|
|
|
XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce);
|
|
|
}
|
|
|
|
|
|
+void
|
|
|
+detach(Client *c) {
|
|
|
+ if(c->prev)
|
|
|
+ c->prev->next = c->next;
|
|
|
+ if(c->next)
|
|
|
+ c->next->prev = c->prev;
|
|
|
+ if(c == clients)
|
|
|
+ clients = c->next;
|
|
|
+ c->next = c->prev = NULL;
|
|
|
+}
|
|
|
+
|
|
|
+void
|
|
|
+detachstack(Client *c) {
|
|
|
+ Client **tc;
|
|
|
+ for(tc=&stack; *tc && *tc != c; tc=&(*tc)->snext);
|
|
|
+ *tc = c->snext;
|
|
|
+}
|
|
|
+
|
|
|
void
|
|
|
focus(Client *c) {
|
|
|
if(c && !isvisible(c))
|
|
|
@@ -95,8 +120,7 @@ focus(Client *c) {
|
|
|
}
|
|
|
if(c) {
|
|
|
detachstack(c);
|
|
|
- c->snext = stack;
|
|
|
- stack = c;
|
|
|
+ attachstack(c);
|
|
|
grabbuttons(c, True);
|
|
|
}
|
|
|
sel = c;
|
|
|
@@ -189,11 +213,8 @@ manage(Window w, XWindowAttributes *wa) {
|
|
|
settags(c, t);
|
|
|
if(!c->isfloat)
|
|
|
c->isfloat = (t != 0) || c->isfixed;
|
|
|
- if(clients)
|
|
|
- clients->prev = c;
|
|
|
- c->next = clients;
|
|
|
- c->snext = stack;
|
|
|
- stack = clients = c;
|
|
|
+ attach(c);
|
|
|
+ attachstack(c);
|
|
|
c->isbanned = True;
|
|
|
XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
|
|
|
XMapWindow(dpy, c->win);
|