Got questions, comments, patches, etc.?
Contact Jason Woofenden
gitweb
/
dwm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
some cleanups
[dwm.git]
/
dwm.c
diff --git
a/dwm.c
b/dwm.c
index
d47da3f
..
9e049c6
100644
(file)
--- a/
dwm.c
+++ b/
dwm.c
@@
-11,9
+11,9
@@
* in O(1) time.
*
* Each child of the root window is called a client, except windows which have
* 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.
* 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 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]);
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 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);
static void initfont(const char *fontstr);
static Bool isprotodel(Client *c);
static void keypress(XEvent *e);
@@
-237,7
+237,7
@@
static void zoom(const Arg *arg);
/* variables */
static char stext[256];
static int screen;
/* variables */
static char stext[256];
static int screen;
-static int sw, sh; /* X display screen geometry x, y, width, height */
+static int sw, sh; /* X display screen geometry x, y, width, height */
static int bh, blw = 0; /* bar geometry */
static int (*xerrorxlib)(Display *, XErrorEvent *);
static unsigned int numlockmask = 0;
static int bh, blw = 0; /* bar geometry */
static int (*xerrorxlib)(Display *, XErrorEvent *);
static unsigned int numlockmask = 0;
@@
-264,6
+264,7
@@
static DC dc;
static Layout *lt[] = { NULL, NULL };
static Monitor *mons = NULL, *selmon = NULL;
static Window root;
static Layout *lt[] = { NULL, NULL };
static Monitor *mons = NULL, *selmon = NULL;
static Window root;
+
/* configuration, allows nested code to access above variables */
#include "config.h"
/* configuration, allows nested code to access above variables */
#include "config.h"
@@
-284,7
+285,8
@@
applyrules(Client *c) {
r = &rules[i];
if((!r->title || strstr(c->name, r->title))
&& (!r->class || (ch.res_class && strstr(ch.res_class, r->class)))
r = &rules[i];
if((!r->title || strstr(c->name, r->title))
&& (!r->class || (ch.res_class && strstr(ch.res_class, r->class)))
- && (!r->instance || (ch.res_name && strstr(ch.res_name, r->instance)))) {
+ && (!r->instance || (ch.res_name && strstr(ch.res_name, r->instance))))
+ {
c->isfloating = r->isfloating;
c->tags |= r->tags;
}
c->isfloating = r->isfloating;
c->tags |= r->tags;
}
@@
-305,7
+307,6
@@
applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact) {
/* set minimum possible */
*w = MAX(1, *w);
*h = MAX(1, *h);
/* set minimum possible */
*w = MAX(1, *w);
*h = MAX(1, *h);
-
if(interact) {
if(*x > sw)
*x = sw - WIDTH(c);
if(interact) {
if(*x > sw)
*x = sw - WIDTH(c);
@@
-621,6
+622,23
@@
die(const char *errstr, ...) {
exit(EXIT_FAILURE);
}
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;
void
drawbar(Monitor *m) {
int x;
@@
-797,10
+815,11
@@
focusin(XEvent *e) { /* there are some broken focus acquiring clients */
void
focusmon(const Arg *arg) {
void
focusmon(const Arg *arg) {
- Monitor *m;
+ Monitor *m = NULL;
- if(!(m = idxtomon(arg->ui)) || m == selmon)
+ if(!mons->next)
return;
return;
+ m = dirtomon(arg->i);
unfocus(selmon->sel);
selmon = m;
focus(NULL);
unfocus(selmon->sel);
selmon = m;
focus(NULL);
@@
-885,7
+904,8
@@
gettextprop(Window w, Atom atom, char *text, unsigned int size) {
strncpy(text, (char *)name.value, size - 1);
else {
if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success
strncpy(text, (char *)name.value, size - 1);
else {
if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success
- && n > 0 && *list) {
+ && n > 0 && *list)
+ {
strncpy(text, *list, size - 1);
XFreeStringList(list);
}
strncpy(text, *list, size - 1);
XFreeStringList(list);
}
@@
-910,7
+930,8
@@
grabbuttons(Client *c, Bool focused) {
buttons[i].mask | modifiers[j],
c->win, False, BUTTONMASK,
GrabModeAsync, GrabModeSync, None, None);
buttons[i].mask | modifiers[j],
c->win, False, BUTTONMASK,
GrabModeAsync, GrabModeSync, None, None);
- } else
+ }
+ else
XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
}
XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
}
@@
-934,15
+955,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;
void
initfont(const char *fontstr) {
char *def, **missing;
@@
-1376,7
+1388,7
@@
sendmon(Client *c, Monitor *m) {
void
setclientstate(Client *c, long state) {
void
setclientstate(Client *c, long state) {
- long data[] = {state, None};
+ long data[] = { state, None };
XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32,
PropModeReplace, (unsigned char *)data, 2);
XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32,
PropModeReplace, (unsigned char *)data, 2);
@@
-1512,11
+1524,9
@@
tag(const Arg *arg) {
void
tagmon(const Arg *arg) {
void
tagmon(const Arg *arg) {
- Monitor *m;
-
- if(!selmon->sel || !(m = idxtomon(arg->ui)))
+ if(!selmon->sel || !mons->next)
return;
return;
- sendmon(selmon->sel, m);
+ sendmon(selmon->sel, dirtomon(arg->i));
}
int
}
int