From: Anselm R. Garbe Date: Tue, 11 Jul 2006 22:00:25 +0000 (+0200) Subject: some more additions/fixes X-Git-Url: https://git.danieliu.xyz/?a=commitdiff_plain;ds=inline;h=2a0fc84c4af2257d79c4c7cb37131c4acb763162;p=dwm.git some more additions/fixes --- diff --git a/client.c b/client.c index eb3acf4..ee659c4 100644 --- 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 index 4f1c84b..c14c3e6 100644 --- a/cmd.c +++ b/cmd.c @@ -19,6 +19,22 @@ quit(void *aux) running = False; } +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) { diff --git a/event.c b/event.c index ba41f55..a47bc25 100644 --- 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 index b9cf1cb..7eb788a 100644 --- 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 index fc07b5c..8f31f60 100644 --- 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);