some more additions/fixes

This commit is contained in:
Anselm R. Garbe 2006-07-12 00:00:25 +02:00
parent 896f08d7d5
commit 2a0fc84c4a
5 changed files with 32 additions and 3 deletions

View File

@ -93,6 +93,7 @@ focus(Client *c)
} }
XUnmapWindow(dpy, c->title); XUnmapWindow(dpy, c->title);
draw_bar(); draw_bar();
discard_events(EnterWindowMask);
XFlush(dpy); XFlush(dpy);
} }
@ -116,7 +117,7 @@ manage(Window w, XWindowAttributes *wa)
XGetTransientForHint(dpy, c->win, &c->trans); XGetTransientForHint(dpy, c->win, &c->trans);
twa.override_redirect = 1; twa.override_redirect = 1;
twa.background_pixmap = ParentRelative; 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, c->title = XCreateWindow(dpy, root, c->tx, c->ty, c->tw, c->th,
0, DefaultDepth(dpy, screen), CopyFromParent, 0, DefaultDepth(dpy, screen), CopyFromParent,
@ -191,11 +192,19 @@ unmanage(Client *c)
XFlush(dpy); XFlush(dpy);
XSetErrorHandler(error_handler); XSetErrorHandler(error_handler);
XUngrabServer(dpy); XUngrabServer(dpy);
discard_events(EnterWindowMask);
if(stack) if(stack)
focus(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 * Client *
getclient(Window w) getclient(Window w)

16
cmd.c
View File

@ -19,6 +19,22 @@ quit(void *aux)
running = False; 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 void
kill(void *aux) kill(void *aux)
{ {

View File

@ -146,7 +146,7 @@ expose(XEvent *e)
Client *c; Client *c;
if(ev->count == 0) { if(ev->count == 0) {
if((c = getclient(ev->window))) if((c = gettitle(ev->window)))
draw_client(c); draw_client(c);
else if(ev->window == barwin) else if(ev->window == barwin)
draw_bar(); draw_bar();

2
kb.c
View File

@ -19,6 +19,8 @@ static const char *proglist[] = {
static Key key[] = { static Key key[] = {
{ Mod1Mask, XK_Return, run, term }, { Mod1Mask, XK_Return, run, term },
{ Mod1Mask, XK_p, run, proglist }, { Mod1Mask, XK_p, run, proglist },
{ Mod1Mask, XK_k, sel, "prev"},
{ Mod1Mask, XK_j, sel, "next"},
{ Mod1Mask | ShiftMask, XK_c, kill, NULL}, { Mod1Mask | ShiftMask, XK_c, kill, NULL},
{ Mod1Mask | ShiftMask, XK_q, quit, NULL}, { Mod1Mask | ShiftMask, XK_q, quit, NULL},
}; };

2
wm.h
View File

@ -63,6 +63,7 @@ extern void draw_bar();
extern void run(void *aux); extern void run(void *aux);
extern void quit(void *aux); extern void quit(void *aux);
extern void kill(void *aux); extern void kill(void *aux);
extern void sel(void *aux);
/* client.c */ /* client.c */
extern void manage(Window w, XWindowAttributes *wa); 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 draw_client(Client *c);
extern void resize(Client *c); extern void resize(Client *c);
extern void update_size(Client *c); extern void update_size(Client *c);
extern Client *gettitle(Window w);
/* event.c */ /* event.c */
extern unsigned int discard_events(long even_mask); extern unsigned int discard_events(long even_mask);