--- a/client.c Tue Jul 11 23:46:39 2006 +0200
+++ b/client.c Wed Jul 12 00:00:25 2006 +0200
@@ -93,6 +93,7 @@
}
XUnmapWindow(dpy, c->title);
draw_bar();
+ discard_events(EnterWindowMask);
XFlush(dpy);
}
@@ -116,7 +117,7 @@
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 @@
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)
--- a/cmd.c Tue Jul 11 23:46:39 2006 +0200
+++ b/cmd.c Wed Jul 12 00:00:25 2006 +0200
@@ -20,6 +20,22 @@
}
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;
--- a/event.c Tue Jul 11 23:46:39 2006 +0200
+++ b/event.c Wed Jul 12 00:00:25 2006 +0200
@@ -146,7 +146,7 @@
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();
--- a/kb.c Tue Jul 11 23:46:39 2006 +0200
+++ b/kb.c Wed Jul 12 00:00:25 2006 +0200
@@ -19,6 +19,8 @@
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},
};
--- a/wm.h Tue Jul 11 23:46:39 2006 +0200
+++ b/wm.h Wed Jul 12 00:00:25 2006 +0200
@@ -63,6 +63,7 @@
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 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);