X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=event.c;h=344a0cc9f1d86a36000b3fdd819bd226764b824a;hb=5ed16faecb94b551ea00ea940e8d719211576de8;hp=909012d73a190aa2d4e11391320e07e7d4c2768b;hpb=16c67f32d62849792c8e6d4fdec22a1896f9c279;p=dwm.git diff --git a/event.c b/event.c index 909012d..344a0cc 100644 --- a/event.c +++ b/event.c @@ -7,6 +7,7 @@ #include #include #include +#include #include "wm.h" @@ -35,7 +36,7 @@ void (*handler[LASTEvent]) (XEvent *) = { }; unsigned int -flush_masked_events(long even_mask) +flush_events(long even_mask) { XEvent ev; unsigned int n = 0; @@ -81,37 +82,28 @@ configurerequest(XEvent *e) static void destroynotify(XEvent *e) { -#if 0 Client *c; XDestroyWindowEvent *ev = &e->xdestroywindow; - if((c = client_of_win(ev->window))) - destroy_client(c); -#endif + if((c = getclient(ev->window))) + unmanage(c); } static void enternotify(XEvent *e) { -#if 0 XCrossingEvent *ev = &e->xcrossing; Client *c; if(ev->mode != NotifyNormal || ev->detail == NotifyInferior) return; - if((c = client_of_win(ev->window))) { - Frame *f = c->sel; - Area *a = f->area; - if(a->mode == Colmax) - c = a->sel->client; - focus(c, False); - } + if((c = getclient(ev->window))) + focus(c); else if(ev->window == root) { sel_screen = True; - draw_frames(); + /*draw_frames();*/ } -#endif } static void @@ -139,9 +131,7 @@ expose(XEvent *e) static void keymapnotify(XEvent *e) { -#if 0 update_keys(); -#endif } static void @@ -159,37 +149,54 @@ maprequest(XEvent *e) return; } - /*if(!client_of_win(ev->window))*/ - /*manage(create_client(ev->window, &wa));*/ - XMapRaised(dpy, ev->window); - XMoveResizeWindow(dpy, ev->window, rect.x, rect.y, rect.width, rect.height - barrect.height); - XSetInputFocus(dpy, ev->window, RevertToPointerRoot, CurrentTime); - XFlush(dpy); + if(!getclient(ev->window)) + manage(ev->window, &wa); } static void propertynotify(XEvent *e) { -#if 0 XPropertyEvent *ev = &e->xproperty; + long msize; Client *c; if(ev->state == PropertyDelete) return; /* ignore */ - if((c = client_of_win(ev->window))) - prop_client(c, ev); -#endif + if(ev->atom == wm_atom[WMProtocols]) { + c->proto = win_proto(c->win); + return; + } + if((c = getclient(ev->window))) { + switch (ev->atom) { + default: break; + case XA_WM_TRANSIENT_FOR: + XGetTransientForHint(dpy, c->win, &c->trans); + break; + case XA_WM_NORMAL_HINTS: + if(!XGetWMNormalHints(dpy, c->win, &c->size, &msize) + || !c->size.flags) + c->size.flags = PSize; + if(c->size.flags & PMinSize && c->size.flags & PMaxSize + && c->size.min_width == c->size.max_width + && c->size.min_height == c->size.max_height) + c->fixedsize = True; + else + c->fixedsize = False; + break; + } + if(ev->atom == XA_WM_NAME || ev->atom == net_atom[NetWMName]) { + update_name(c); + } + } } static void unmapnotify(XEvent *e) { -#if 0 Client *c; XUnmapEvent *ev = &e->xunmap; - if((c = client_of_win(ev->window))) - destroy_client(c); -#endif + if((c = getclient(ev->window))) + unmanage(c); }