X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=event.c;h=b027a3eee03ec4e1c019c912d80c43d7066f6840;hb=a1d0f819661f2be48f7a03ddd001f2a1a8f325e4;hp=1db3d96517e3f52663fdc8ac4e75222fcfdbb36c;hpb=dfd84f9bf3b9d949412a73bc62a43109b340d395;p=dwm.git diff --git a/event.c b/event.c index 1db3d96..b027a3e 100644 --- a/event.c +++ b/event.c @@ -4,12 +4,13 @@ */ #include +#include #include #include #include #include -#include "wm.h" +#include "dwm.h" /* local functions */ static void buttonpress(XEvent *e); @@ -37,21 +38,16 @@ void (*handler[LASTEvent]) (XEvent *) = { [UnmapNotify] = unmapnotify }; -void -discard_events(long even_mask) -{ - XEvent ev; - while(XCheckMaskEvent(dpy, even_mask, &ev)); -} - static void buttonpress(XEvent *e) { XButtonPressedEvent *ev = &e->xbutton; Client *c; - if((c = getclient(ev->window))) { - raise(c); + if(barwin == ev->window) + barclick(ev); + else if((c = getclient(ev->window))) { + craise(c); switch(ev->button) { default: break; @@ -77,6 +73,7 @@ configurerequest(XEvent *e) ev->value_mask &= ~CWSibling; if((c = getclient(ev->window))) { + gravitate(c, True); if(ev->value_mask & CWX) c->x = ev->x; if(ev->value_mask & CWY) @@ -85,6 +82,10 @@ configurerequest(XEvent *e) c->w = ev->width; if(ev->value_mask & CWHeight) c->h = ev->height; + if(ev->value_mask & CWBorderWidth) + c->border = 1; + gravitate(c, False); + resize(c, True); } wc.x = ev->x; @@ -122,7 +123,7 @@ enternotify(XEvent *e) if((c = getclient(ev->window))) focus(c); else if(ev->window == root) - sel_screen = True; + issel = True; } static void @@ -131,7 +132,7 @@ leavenotify(XEvent *e) XCrossingEvent *ev = &e->xcrossing; if((ev->window == root) && !ev->same_screen) - sel_screen = True; + issel = True; } static void @@ -143,8 +144,6 @@ expose(XEvent *e) if(ev->count == 0) { if((c = gettitle(ev->window))) draw_client(c); - else if(ev->window == barwin) - draw_bar(); } } @@ -177,32 +176,31 @@ static void propertynotify(XEvent *e) { XPropertyEvent *ev = &e->xproperty; + Window trans; Client *c; if(ev->state == PropertyDelete) return; /* ignore */ - if(ev->atom == wm_atom[WMProtocols]) { - c->proto = win_proto(c->win); - return; - } if((c = getclient(ev->window))) { + if(ev->atom == wm_atom[WMProtocols]) { + c->proto = win_proto(c->win); + return; + } switch (ev->atom) { default: break; case XA_WM_TRANSIENT_FOR: - XGetTransientForHint(dpy, c->win, &c->trans); + XGetTransientForHint(dpy, c->win, &trans); + if(!c->floating && (c->floating = (trans != 0))) + arrange(NULL); break; - update_size(c); case XA_WM_NORMAL_HINTS: update_size(c); break; } if(ev->atom == XA_WM_NAME || ev->atom == net_atom[NetWMName]) { update_name(c); - if(c == stack) - draw_bar(); - else - draw_client(c); + draw_client(c); } } }