JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
applied Peters two patches, please test hg tip, if nothing breaks this is 5.9
[dwm.git] / dwm.c
diff --git a/dwm.c b/dwm.c
index 8c1adeb..5df912b 100644 (file)
--- a/dwm.c
+++ b/dwm.c
@@ -42,7 +42,7 @@
 
 /* macros */
 #define BUTTONMASK              (ButtonPressMask|ButtonReleaseMask)
-#define CLEANMASK(mask)         (mask & (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])
@@ -389,7 +389,6 @@ arrange(Monitor *m) {
                showhide(m->stack);
        else for(m = mons; m; m = m->next)
                showhide(m->stack);
-       focus(NULL);
        if(m)
                arrangemon(m);
        else for(m = mons; m; m = m->next)
@@ -442,7 +441,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 +528,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;
@@ -598,6 +597,7 @@ configurenotify(XEvent *e) {
                        updatebars();
                        for(m = mons; m; m = m->next)
                                XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
+                       focus(NULL);
                        arrange(NULL);
                }
        }
@@ -1149,9 +1149,10 @@ manage(Window w, XWindowAttributes *wa) {
        attach(c);
        attachstack(c);
        XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */
-       XMapWindow(dpy, c->win);
        setclientstate(c, NormalState);
        arrange(c->mon);
+       XMapWindow(dpy, c->win);
+       focus(c);
 }
 
 void
@@ -1616,6 +1617,7 @@ void
 tag(const Arg *arg) {
        if(selmon->sel && arg->ui & TAGMASK) {
                selmon->sel->tags = arg->ui & TAGMASK;
+               focus(NULL);
                arrange(selmon);
        }
 }
@@ -1696,6 +1698,7 @@ toggletag(const Arg *arg) {
        newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
        if(newtags) {
                selmon->sel->tags = newtags;
+               focus(NULL);
                arrange(selmon);
        }
 }
@@ -1706,6 +1709,7 @@ toggleview(const Arg *arg) {
 
        if(newtagset) {
                selmon->tagset[selmon->seltags] = newtagset;
+               focus(NULL);
                arrange(selmon);
        }
 }
@@ -1971,6 +1975,7 @@ view(const Arg *arg) {
        selmon->seltags ^= 1; /* toggle sel tagset */
        if(arg->ui & TAGMASK)
                selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
+       focus(NULL);
        arrange(selmon);
 }