dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit 2a0fc84c4af2257d79c4c7cb37131c4acb763162
parent 896f08d7d553f7def3877648c113cf03e6ca546a
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Wed, 12 Jul 2006 00:00:25 +0200

some more additions/fixes

Diffstat:
Mclient.c | 13+++++++++++--
Mcmd.c | 16++++++++++++++++
Mevent.c | 2+-
Mkb.c | 2++
Mwm.h | 2++
5 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/client.c b/client.c
@@ -93,6 +93,7 @@ focus(Client *c)
     }
     XUnmapWindow(dpy, c->title);
     draw_bar();
+    discard_events(EnterWindowMask);
     XFlush(dpy);
 }
 
@@ -116,7 +117,7 @@ manage(Window w, XWindowAttributes *wa)
     XGetTransientForHint(dpy, c->win, &c->trans);
     twa.override_redirect = 1;
     twa.background_pixmap = ParentRelative;
-    twa.event_mask = SubstructureNotifyMask | ExposureMask;
+    twa.event_mask = ExposureMask;
 
     c->title = XCreateWindow(dpy, root, c->tx, c->ty, c->tw, c->th,
             0, DefaultDepth(dpy, screen), CopyFromParent,
@@ -191,11 +192,19 @@ unmanage(Client *c)
     XFlush(dpy);
     XSetErrorHandler(error_handler);
     XUngrabServer(dpy);
-    discard_events(EnterWindowMask);
     if(stack)
         focus(stack);
 }
 
+Client *
+gettitle(Window w)
+{
+    Client *c;
+    for(c = clients; c; c = c->next)
+        if(c->title == w)
+            return c;
+    return NULL;
+}
 
 Client *
 getclient(Window w)
diff --git a/cmd.c b/cmd.c
@@ -20,6 +20,22 @@ quit(void *aux)
 }
 
 void
+sel(void *aux)
+{
+    const char *arg = aux;
+    Client *c;
+
+    if(!arg || !stack)
+        return;
+    if(!strncmp(arg, "next", 5))
+        focus(stack->snext ? stack->snext : stack);
+    else if(!strncmp(arg, "prev", 5)) {
+        for(c = stack; c && c->snext; c = c->snext);
+        focus(c ? c : stack);
+    }
+}
+
+void
 kill(void *aux)
 {
     Client *c = stack;
diff --git a/event.c b/event.c
@@ -146,7 +146,7 @@ expose(XEvent *e)
     Client *c;
 
     if(ev->count == 0) {
-        if((c = getclient(ev->window)))
+        if((c = gettitle(ev->window)))
             draw_client(c);
         else if(ev->window == barwin)
             draw_bar();
diff --git a/kb.c b/kb.c
@@ -19,6 +19,8 @@ static const char *proglist[] = {
 static Key key[] = {
     { Mod1Mask, XK_Return, run, term },
     { Mod1Mask, XK_p, run, proglist }, 
+    { Mod1Mask, XK_k, sel, "prev"}, 
+    { Mod1Mask, XK_j, sel, "next"}, 
     { Mod1Mask | ShiftMask, XK_c, kill, NULL}, 
     { Mod1Mask | ShiftMask, XK_q, quit, NULL},
 };
diff --git a/wm.h b/wm.h
@@ -63,6 +63,7 @@ extern void draw_bar();
 extern void run(void *aux);
 extern void quit(void *aux);
 extern void kill(void *aux);
+extern void sel(void *aux);
 
 /* client.c */
 extern void manage(Window w, XWindowAttributes *wa);
@@ -73,6 +74,7 @@ extern void update_name(Client *c);
 extern void draw_client(Client *c);
 extern void resize(Client *c);
 extern void update_size(Client *c);
+extern Client *gettitle(Window w);
 
 /* event.c */
 extern unsigned int discard_events(long even_mask);