some more additions/fixes
2a0fc84c
5 file(s) · +32 −3
| 93 | 93 | } |
|
| 94 | 94 | XUnmapWindow(dpy, c->title); |
|
| 95 | 95 | draw_bar(); |
|
| 96 | + | discard_events(EnterWindowMask); |
|
| 96 | 97 | XFlush(dpy); |
|
| 97 | 98 | } |
|
| 98 | 99 | ||
| 116 | 117 | XGetTransientForHint(dpy, c->win, &c->trans); |
|
| 117 | 118 | twa.override_redirect = 1; |
|
| 118 | 119 | twa.background_pixmap = ParentRelative; |
|
| 119 | - | twa.event_mask = SubstructureNotifyMask | ExposureMask; |
|
| 120 | + | twa.event_mask = ExposureMask; |
|
| 120 | 121 | ||
| 121 | 122 | c->title = XCreateWindow(dpy, root, c->tx, c->ty, c->tw, c->th, |
|
| 122 | 123 | 0, DefaultDepth(dpy, screen), CopyFromParent, |
|
| 191 | 192 | XFlush(dpy); |
|
| 192 | 193 | XSetErrorHandler(error_handler); |
|
| 193 | 194 | XUngrabServer(dpy); |
|
| 194 | - | discard_events(EnterWindowMask); |
|
| 195 | 195 | if(stack) |
|
| 196 | 196 | focus(stack); |
|
| 197 | 197 | } |
|
| 198 | 198 | ||
| 199 | + | Client * |
|
| 200 | + | gettitle(Window w) |
|
| 201 | + | { |
|
| 202 | + | Client *c; |
|
| 203 | + | for(c = clients; c; c = c->next) |
|
| 204 | + | if(c->title == w) |
|
| 205 | + | return c; |
|
| 206 | + | return NULL; |
|
| 207 | + | } |
|
| 199 | 208 | ||
| 200 | 209 | Client * |
|
| 201 | 210 | getclient(Window w) |
|
| 20 | 20 | } |
|
| 21 | 21 | ||
| 22 | 22 | void |
|
| 23 | + | sel(void *aux) |
|
| 24 | + | { |
|
| 25 | + | const char *arg = aux; |
|
| 26 | + | Client *c; |
|
| 27 | + | ||
| 28 | + | if(!arg || !stack) |
|
| 29 | + | return; |
|
| 30 | + | if(!strncmp(arg, "next", 5)) |
|
| 31 | + | focus(stack->snext ? stack->snext : stack); |
|
| 32 | + | else if(!strncmp(arg, "prev", 5)) { |
|
| 33 | + | for(c = stack; c && c->snext; c = c->snext); |
|
| 34 | + | focus(c ? c : stack); |
|
| 35 | + | } |
|
| 36 | + | } |
|
| 37 | + | ||
| 38 | + | void |
|
| 23 | 39 | kill(void *aux) |
|
| 24 | 40 | { |
|
| 25 | 41 | Client *c = stack; |
| 146 | 146 | Client *c; |
|
| 147 | 147 | ||
| 148 | 148 | if(ev->count == 0) { |
|
| 149 | - | if((c = getclient(ev->window))) |
|
| 149 | + | if((c = gettitle(ev->window))) |
|
| 150 | 150 | draw_client(c); |
|
| 151 | 151 | else if(ev->window == barwin) |
|
| 152 | 152 | draw_bar(); |
| 19 | 19 | static Key key[] = { |
|
| 20 | 20 | { Mod1Mask, XK_Return, run, term }, |
|
| 21 | 21 | { Mod1Mask, XK_p, run, proglist }, |
|
| 22 | + | { Mod1Mask, XK_k, sel, "prev"}, |
|
| 23 | + | { Mod1Mask, XK_j, sel, "next"}, |
|
| 22 | 24 | { Mod1Mask | ShiftMask, XK_c, kill, NULL}, |
|
| 23 | 25 | { Mod1Mask | ShiftMask, XK_q, quit, NULL}, |
|
| 24 | 26 | }; |
| 63 | 63 | extern void run(void *aux); |
|
| 64 | 64 | extern void quit(void *aux); |
|
| 65 | 65 | extern void kill(void *aux); |
|
| 66 | + | extern void sel(void *aux); |
|
| 66 | 67 | ||
| 67 | 68 | /* client.c */ |
|
| 68 | 69 | extern void manage(Window w, XWindowAttributes *wa); |
|
| 73 | 74 | extern void draw_client(Client *c); |
|
| 74 | 75 | extern void resize(Client *c); |
|
| 75 | 76 | extern void update_size(Client *c); |
|
| 77 | + | extern Client *gettitle(Window w); |
|
| 76 | 78 | ||
| 77 | 79 | /* event.c */ |
|
| 78 | 80 | extern unsigned int discard_events(long even_mask); |
|