|
|
@@ -11,9 +11,9 @@
|
|
|
* in O(1) time.
|
|
|
*
|
|
|
* Each child of the root window is called a client, except windows which have
|
|
|
- * set the override_redirect flag. Clients are organized in a global
|
|
|
- * linked client list, the focus history is remembered through a global
|
|
|
- * stack list. Each client contains a bit array to indicate the tags of a
|
|
|
+ * set the override_redirect flag. Clients are organized in a linked client
|
|
|
+ * list on each monitor, the focus history is remembered through a stack list
|
|
|
+ * on each monitor. Each client contains a bit array to indicate the tags of a
|
|
|
* client.
|
|
|
*
|
|
|
* Keys and tagging rules are organized as arrays and defined in config.h.
|
|
|
@@ -164,6 +164,7 @@ static void destroynotify(XEvent *e);
|
|
|
static void detach(Client *c);
|
|
|
static void detachstack(Client *c);
|
|
|
static void die(const char *errstr, ...);
|
|
|
+static Monitor *dirtomon(int dir);
|
|
|
static void drawbar(Monitor *m);
|
|
|
static void drawbars(void);
|
|
|
static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]);
|
|
|
@@ -180,7 +181,6 @@ static long getstate(Window w);
|
|
|
static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
|
|
|
static void grabbuttons(Client *c, Bool focused);
|
|
|
static void grabkeys(void);
|
|
|
-static Monitor *idxtomon(unsigned int n);
|
|
|
static void initfont(const char *fontstr);
|
|
|
static Bool isprotodel(Client *c);
|
|
|
static void keypress(XEvent *e);
|
|
|
@@ -621,6 +621,22 @@ die(const char *errstr, ...) {
|
|
|
exit(EXIT_FAILURE);
|
|
|
}
|
|
|
|
|
|
+Monitor *
|
|
|
+dirtomon(int dir) {
|
|
|
+ Monitor *m = NULL;
|
|
|
+
|
|
|
+ if(dir > 0)
|
|
|
+ if(!(m = selmon->next))
|
|
|
+ m = mons;
|
|
|
+ else {
|
|
|
+ if(selmon == mons)
|
|
|
+ for(m = mons; m->next; m = m->next);
|
|
|
+ else
|
|
|
+ for(m = mons; m->next != selmon; m = m->next);
|
|
|
+ }
|
|
|
+ return m;
|
|
|
+}
|
|
|
+
|
|
|
void
|
|
|
drawbar(Monitor *m) {
|
|
|
int x;
|
|
|
@@ -797,10 +813,11 @@ focusin(XEvent *e) { /* there are some broken focus acquiring clients */
|
|
|
|
|
|
void
|
|
|
focusmon(const Arg *arg) {
|
|
|
- Monitor *m;
|
|
|
+ Monitor *m = NULL;
|
|
|
|
|
|
- if(!(m = idxtomon(arg->ui)) || m == selmon)
|
|
|
+ if(!mons->next)
|
|
|
return;
|
|
|
+ m = dirtomon(arg->i);
|
|
|
unfocus(selmon->sel);
|
|
|
selmon = m;
|
|
|
focus(NULL);
|
|
|
@@ -934,15 +951,6 @@ grabkeys(void) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-Monitor *
|
|
|
-idxtomon(unsigned int n) {
|
|
|
- unsigned int i;
|
|
|
- Monitor *m;
|
|
|
-
|
|
|
- for(m = mons, i = 0; m && i != n; m = m->next, i++);
|
|
|
- return m;
|
|
|
-}
|
|
|
-
|
|
|
void
|
|
|
initfont(const char *fontstr) {
|
|
|
char *def, **missing;
|
|
|
@@ -1512,11 +1520,9 @@ tag(const Arg *arg) {
|
|
|
|
|
|
void
|
|
|
tagmon(const Arg *arg) {
|
|
|
- Monitor *m;
|
|
|
-
|
|
|
- if(!selmon->sel || !(m = idxtomon(arg->ui)))
|
|
|
- return;
|
|
|
- sendmon(selmon->sel, m);
|
|
|
+ if(!selmon->sel || !mons->next)
|
|
|
+ return
|
|
|
+ sendmon(selmon->sel, dirtomon(arg->i));
|
|
|
}
|
|
|
|
|
|
int
|