X-Git-Url: https://jasonwoof.com/gitweb/?p=dwm.git;a=blobdiff_plain;f=dwm.c;h=f955d44c5ddfb95317e2bb357a3129c9d7f9e7d5;hp=bb017f53de61fbd4074092a1fdc4361b819f6c05;hb=d0b4575bf47bb848b09edbd5c5a0f27e889a976a;hpb=212f417e44f631d406d65156b0d244f60598b8cc diff --git a/dwm.c b/dwm.c index bb017f5..f955d44 100644 --- a/dwm.c +++ b/dwm.c @@ -42,7 +42,7 @@ /* macros */ #define BUTTONMASK (ButtonPressMask|ButtonReleaseMask) -#define CLEANMASK(mask) (mask & ~numlockmask & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)) +#define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)) #define INRECT(X,Y,RX,RY,RW,RH) ((X) >= (RX) && (X) < (RX) + (RW) && (Y) >= (RY) && (Y) < (RY) + (RH)) #define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags])) #define LENGTH(X) (sizeof X / sizeof X[0]) @@ -442,7 +442,7 @@ buttonpress(XEvent *e) { } else if(ev->x < x + blw) click = ClkLtSymbol; - else if(ev->x > selmon->wx + selmon->ww - TEXTW(stext)) + else if(ev->x > selmon->ww - TEXTW(stext)) click = ClkStatusText; else click = ClkWinTitle; @@ -529,7 +529,7 @@ clientmessage(XEvent *e) { if(!c) return; if(cme->message_type == netatom[NetWMState] && cme->data.l[1] == netatom[NetWMFullscreen]) { - if(cme->data.l[0]) { + if(cme->data.l[0] && !c->isfullscreen) { XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32, PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); c->isfullscreen = True; @@ -615,14 +615,22 @@ configurerequest(XEvent *e) { c->bw = ev->border_width; else if(c->isfloating || !selmon->lt[selmon->sellt]->arrange) { m = c->mon; - if(ev->value_mask & CWX) + if(ev->value_mask & CWX) { + c->oldx = c->x; c->x = m->mx + ev->x; - if(ev->value_mask & CWY) + } + if(ev->value_mask & CWY) { + c->oldy = c->y; c->y = m->my + ev->y; - if(ev->value_mask & CWWidth) + } + if(ev->value_mask & CWWidth) { + c->oldw = c->w; c->w = ev->width; - if(ev->value_mask & CWHeight) + } + if(ev->value_mask & CWHeight) { + c->oldh = c->h; c->h = ev->height; + } if((c->x + c->w) > m->mx + m->mw && c->isfloating) c->x = m->mx + (m->mw / 2 - c->w / 2); /* center in x direction */ if((c->y + c->h) > m->my + m->mh && c->isfloating) @@ -827,13 +835,14 @@ enternotify(XEvent *e) { if((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root) return; c = wintoclient(ev->window); - if((m = wintomon(ev->window)) && m != selmon) { + m = c ? c->mon : wintomon(ev->window); + if(m != selmon) { unfocus(selmon->sel, True); selmon = m; } - else if(c == selmon->sel || c == NULL) + else if(!c || c == selmon->sel) return; - focus((wintoclient(ev->window))); + focus(c); } void @@ -1112,8 +1121,8 @@ manage(Window w, XWindowAttributes *wa) { applyrules(c); } /* geometry */ - c->x = c->oldx = wa->x + c->mon->wx; - c->y = c->oldy = wa->y + c->mon->wy; + c->x = c->oldx = wa->x; + c->y = c->oldy = wa->y; c->w = c->oldw = wa->width; c->h = c->oldh = wa->height; c->oldbw = wa->border_width;