static void mappingnotify(XEvent *e);
static void maprequest(XEvent *e);
static void monocle(Monitor *m);
+static void motionnotify(XEvent *e);
static void movemouse(const Arg *arg);
static Client *nexttiled(Client *c);
static void pop(Client *);
[KeyPress] = keypress,
[MappingNotify] = mappingnotify,
[MapRequest] = maprequest,
+ [MotionNotify] = motionnotify,
[PropertyNotify] = propertynotify,
[UnmapNotify] = unmapnotify
};
showhide(m->stack);
else for(m = mons; m; m = m->next)
showhide(m->stack);
- if(m)
+ if(m) {
arrangemon(m);
- else for(m = mons; m; m = m->next)
+ restack(m);
+ } else for(m = mons; m; m = m->next)
arrangemon(m);
}
strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
if(m->lt[m->sellt]->arrange)
m->lt[m->sellt]->arrange(m);
- restack(m);
}
void
}
void
+motionnotify(XEvent *e) {
+ static Monitor *mon = NULL;
+ Monitor *m;
+ XMotionEvent *ev = &e->xmotion;
+
+ if(ev->window != root)
+ return;
+ if((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) {
+ unfocus(selmon->sel, True);
+ selmon = m;
+ focus(NULL);
+ }
+ mon = m;
+}
+
+void
movemouse(const Arg *arg) {
int x, y, ocx, ocy, nx, ny;
Client *c;
&& (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
togglefloating(NULL);
}
- if(!selmon->lt[selmon->sellt]->arrange || c->isfloating)
+ if(!selmon->lt[selmon->sellt]->arrange || c->isfloating) {
+ if(c->isfullscreen)
+ setfullscreen(c, False);
resize(c, nx, ny, c->w, c->h, True);
+ }
break;
}
} while(ev.type != ButtonRelease);
&& (abs(nw - c->w) > snap || abs(nh - c->h) > snap))
togglefloating(NULL);
}
- if(!selmon->lt[selmon->sellt]->arrange || c->isfloating)
+ if(!selmon->lt[selmon->sellt]->arrange || c->isfloating) {
+ if(c->isfullscreen)
+ setfullscreen(c, False);
resize(c, c->x, c->y, nw, nh, True);
+ }
break;
}
} while(ev.type != ButtonRelease);
PropModeReplace, (unsigned char *) netatom, NetLast);
/* select for events */
wa.cursor = cursor[CurNormal];
- wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask|ButtonPressMask
- |EnterWindowMask|LeaveWindowMask|StructureNotifyMask
- |PropertyChangeMask;
+ wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask|ButtonPressMask|PointerMotionMask
+ |EnterWindowMask|LeaveWindowMask|StructureNotifyMask|PropertyChangeMask;
XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa);
XSelectInput(dpy, root, wa.event_mask);
grabkeys();
if(selmon->sel->isfloating)
resize(selmon->sel, selmon->sel->x, selmon->sel->y,
selmon->sel->w, selmon->sel->h, False);
+ else if(selmon->sel->isfullscreen)
+ setfullscreen(selmon->sel, False);
arrange(selmon);
}
.event_mask = ButtonPressMask|ExposureMask
};
for(m = mons; m; m = m->next) {
+ if (m->barwin)
+ continue;
m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen),
CopyFromParent, DefaultVisual(dpy, screen),
CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
if(state == netatom[NetWMFullscreen])
setfullscreen(c, True);
-
if(wtype == netatom[NetWMWindowTypeDialog])
c->isfloating = True;
}
int
main(int argc, char *argv[]) {
if(argc == 2 && !strcmp("-v", argv[1]))
- die("dwm-"VERSION", © 2006-2011 dwm engineers, see LICENSE for details\n");
+ die("dwm-"VERSION", © 2006-2012 dwm engineers, see LICENSE for details\n");
else if(argc != 1)
die("usage: dwm [-v]\n");
if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())