Xinqi Bao's Git
projects
/
dwm.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
fixed man page
[dwm.git]
/
dwm.c
diff --git
a/dwm.c
b/dwm.c
index
36ca4eb
..
c4a705d
100644
(file)
--- a/
dwm.c
+++ b/
dwm.c
@@
-27,14
+27,15
@@
*/
#include <errno.h>
#include <locale.h>
*/
#include <errno.h>
#include <locale.h>
-#include <regex.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/select.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/select.h>
+#include <sys/types.h>
#include <sys/wait.h>
#include <sys/wait.h>
+#include <regex.h>
#include <X11/cursorfont.h>
#include <X11/keysym.h>
#include <X11/Xatom.h>
#include <X11/cursorfont.h>
#include <X11/keysym.h>
#include <X11/Xatom.h>
@@
-334,23
+335,23
@@
buttonpress(XEvent *e) {
if(CLEANMASK(ev->state) != MODKEY)
return;
if(ev->button == Button1) {
if(CLEANMASK(ev->state) != MODKEY)
return;
if(ev->button == Button1) {
- if(!isarrange(floating) && !c->isfloating)
- togglefloating(NULL);
- else
+ if(isarrange(floating) || c->isfloating)
restack();
restack();
+ else
+ togglefloating(NULL);
movemouse(c);
}
else if(ev->button == Button2) {
movemouse(c);
}
else if(ev->button == Button2) {
- if(
isarrange(tile)
&& !c->isfixed && c->isfloating)
+ if(
ISTILE
&& !c->isfixed && c->isfloating)
togglefloating(NULL);
else
zoom(NULL);
}
else if(ev->button == Button3 && !c->isfixed) {
togglefloating(NULL);
else
zoom(NULL);
}
else if(ev->button == Button3 && !c->isfixed) {
- if(!isarrange(floating) && !c->isfloating)
- togglefloating(NULL);
- else
+ if(isarrange(floating) || c->isfloating)
restack();
restack();
+ else
+ togglefloating(NULL);
resizemouse(c);
}
}
resizemouse(c);
}
}
@@
-444,7
+445,7
@@
void
configurenotify(XEvent *e) {
XConfigureEvent *ev = &e->xconfigure;
configurenotify(XEvent *e) {
XConfigureEvent *ev = &e->xconfigure;
- if
(ev->window == root && (ev->width != sw || ev->height != sh)) {
+ if(ev->window == root && (ev->width != sw || ev->height != sh)) {
sw = ev->width;
sh = ev->height;
XFreePixmap(dpy, dc.drawable);
sw = ev->width;
sh = ev->height;
XFreePixmap(dpy, dc.drawable);
@@
-645,8
+646,11
@@
enternotify(XEvent *e) {
if(ev->mode != NotifyNormal || ev->detail == NotifyInferior)
return;
if(ev->mode != NotifyNormal || ev->detail == NotifyInferior)
return;
- if((c = getclient(ev->window)))
+ if((c = getclient(ev->window)))
{
focus(c);
focus(c);
+ if(ISTILE && !c->isfloating)
+ restack();
+ }
else if(ev->window == root) {
selscreen = True;
focus(NULL);
else if(ev->window == root) {
selscreen = True;
focus(NULL);
@@
-883,7
+887,7
@@
initfont(const char *fontstr) {
XFreeFont(dpy, dc.font.xfont);
dc.font.xfont = NULL;
if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr))
XFreeFont(dpy, dc.font.xfont);
dc.font.xfont = NULL;
if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr))
-
||
!(dc.font.xfont = XLoadQueryFont(dpy, "fixed")))
+
&&
!(dc.font.xfont = XLoadQueryFont(dpy, "fixed")))
eprint("error, cannot load font: '%s'\n", fontstr);
dc.font.ascent = dc.font.xfont->ascent;
dc.font.descent = dc.font.xfont->descent;
eprint("error, cannot load font: '%s'\n", fontstr);
dc.font.ascent = dc.font.xfont->ascent;
dc.font.descent = dc.font.xfont->descent;
@@
-1398,16
+1402,16
@@
void
setmwfact(const char *arg) {
double delta;
setmwfact(const char *arg) {
double delta;
- if(!
isarrange(tile)
)
+ if(!
ISTILE
)
return;
/* arg handling, manipulate mwfact */
if(arg == NULL)
mwfact = MWFACT;
else if(1 == sscanf(arg, "%lf", &delta)) {
return;
/* arg handling, manipulate mwfact */
if(arg == NULL)
mwfact = MWFACT;
else if(1 == sscanf(arg, "%lf", &delta)) {
- if(arg[0] != '+' && arg[0] != '-')
- mwfact = delta;
- else
+ if(arg[0] == '+' || arg[0] == '-')
mwfact += delta;
mwfact += delta;
+ else
+ mwfact = delta;
if(mwfact < 0.1)
mwfact = 0.1;
else if(mwfact > 0.9)
if(mwfact < 0.1)
mwfact = 0.1;
else if(mwfact > 0.9)
@@
-1418,6
+1422,7
@@
setmwfact(const char *arg) {
void
setup(void) {
void
setup(void) {
+ int d;
unsigned int i, j, mask;
Window w;
XModifierKeymap *modmap;
unsigned int i, j, mask;
Window w;
XModifierKeymap *modmap;
@@
-1507,7
+1512,7
@@
setup(void) {
XSetFont(dpy, dc.gc, dc.font.xfont->fid);
/* multihead support */
XSetFont(dpy, dc.gc, dc.font.xfont->fid);
/* multihead support */
- selscreen = XQueryPointer(dpy, root, &w, &w, &
i, &i, &i, &i
, &mask);
+ selscreen = XQueryPointer(dpy, root, &w, &w, &
d, &d, &d, &d
, &mask);
}
void
}
void
@@
-1567,7
+1572,7
@@
textw(const char *text) {
void
tile(void) {
unsigned int i, n, nx, ny, nw, nh, mw, th;
void
tile(void) {
unsigned int i, n, nx, ny, nw, nh, mw, th;
- Client *c;
+ Client *c
, *mc
;
for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
n++;
for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
n++;
@@
-1580,7
+1585,8
@@
tile(void) {
nx = wax;
ny = way;
nx = wax;
ny = way;
- for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next), i++) {
+ nw = 0; /* gcc stupidity requires this */
+ for(i = 0, c = mc = nexttiled(clients); c; c = nexttiled(c->next), i++) {
c->ismax = False;
if(i == 0) { /* master */
nw = mw - 2 * c->border;
c->ismax = False;
if(i == 0) { /* master */
nw = mw - 2 * c->border;
@@
-1589,9
+1595,9
@@
tile(void) {
else { /* tile window */
if(i == 1) {
ny = way;
else { /* tile window */
if(i == 1) {
ny = way;
- nx += mw;
+ nx += mc->w + mc->border;
+ nw = waw - nx - 2 * c->border;
}
}
- nw = waw - mw - 2 * c->border;
if(i + 1 == n) /* remainder */
nh = (way + wah) - ny - 2 * c->border;
else
if(i + 1 == n) /* remainder */
nh = (way + wah) - ny - 2 * c->border;
else
@@
-1599,7
+1605,7
@@
tile(void) {
}
resize(c, nx, ny, nw, nh, RESIZEHINTS);
if(n > 1 && th != wah)
}
resize(c, nx, ny, nw, nh, RESIZEHINTS);
if(n > 1 && th != wah)
- ny
+= nh + 2 *
c->border;
+ ny
= c->y + c->h +
c->border;
}
}
}
}
@@
-1644,7
+1650,7
@@
togglemax(const char *arg) {
}
else {
resize(sel, sel->rx, sel->ry, sel->rw, sel->rh, True);
}
else {
resize(sel, sel->rx, sel->ry, sel->rw, sel->rh, True);
- if
(!sel->wasfloating)
+ if(!sel->wasfloating)
togglefloating(NULL);
}
drawbar();
togglefloating(NULL);
}
drawbar();
@@
-1673,7
+1679,7
@@
toggleview(const char *arg) {
seltags[i] = !seltags[i];
for(j = 0; j < ntags && !seltags[j]; j++);
if(j == ntags)
seltags[i] = !seltags[i];
for(j = 0; j < ntags && !seltags[j]; j++);
if(j == ntags)
- seltags[i] = True; /*
cannot toggle last view
*/
+ seltags[i] = True; /*
at least one tag must be viewed
*/
arrange();
}
arrange();
}
@@
-1849,7
+1855,7
@@
void
zoom(const char *arg) {
Client *c;
zoom(const char *arg) {
Client *c;
- if(!sel || !
isarrange(tile)
|| sel->isfloating)
+ if(!sel || !
ISTILE
|| sel->isfloating)
return;
if((c = sel) == nexttiled(clients))
if(!(c = nexttiled(c->next)))
return;
if((c = sel) == nexttiled(clients))
if(!(c = nexttiled(c->next)))