Xinqi Bao's Git
projects
/
dwm.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
removed RESIZEHINTS and enhanced tile for fixed or aspect-ratio'ed clients
[dwm.git]
/
dwm.c
diff --git
a/dwm.c
b/dwm.c
index
99920d0
..
f61ce3b
100644
(file)
--- a/
dwm.c
+++ b/
dwm.c
@@
-111,7
+111,7
@@
typedef struct {
regex_t *tagregex;
} Regs;
regex_t *tagregex;
} Regs;
-/* functions */
+/* function
declaration
s */
void applyrules(Client *c);
void arrange(void);
void attach(Client *c);
void applyrules(Client *c);
void arrange(void);
void attach(Client *c);
@@
-232,10
+232,11
@@
Regs *regs = NULL;
/* configuration, allows nested code to access above variables */
#include "config.h"
/* configuration, allows nested code to access above variables */
#include "config.h"
-/* statically define the number of tags. */
-unsigned int ntags = sizeof tags / sizeof tags[0];
-Bool seltags[sizeof tags / sizeof tags[0]] = {[0] = True};
-Bool prevtags[sizeof tags / sizeof tags[0]] = {[0] = True};
+#define NTAGS (sizeof tags / sizeof tags[0])
+Bool seltags[NTAGS] = {[0] = True};
+Bool prevtags[NTAGS] = {[0] = True};
+
+/* function implementations */
void
applyrules(Client *c) {
static char buf[512];
void
applyrules(Client *c) {
static char buf[512];
@@
-252,7
+253,7
@@
applyrules(Client *c) {
for(i = 0; i < nrules; i++)
if(regs[i].propregex && !regexec(regs[i].propregex, buf, 1, &tmp, 0)) {
c->isfloating = rules[i].isfloating;
for(i = 0; i < nrules; i++)
if(regs[i].propregex && !regexec(regs[i].propregex, buf, 1, &tmp, 0)) {
c->isfloating = rules[i].isfloating;
- for(j = 0; regs[i].tagregex && j <
ntags
; j++) {
+ for(j = 0; regs[i].tagregex && j <
NTAGS
; j++) {
if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) {
matched = True;
c->tags[j] = True;
if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) {
matched = True;
c->tags[j] = True;
@@
-311,7
+312,7
@@
buttonpress(XEvent *e) {
if(barwin == ev->window) {
x = 0;
if(barwin == ev->window) {
x = 0;
- for(i = 0; i <
ntags
; i++) {
+ for(i = 0; i <
NTAGS
; i++) {
x += textw(tags[i]);
if(ev->x < x) {
if(ev->button == Button1) {
x += textw(tags[i]);
if(ev->x < x) {
if(ev->button == Button1) {
@@
-344,7
+345,7
@@
buttonpress(XEvent *e) {
movemouse(c);
}
else if(ev->button == Button2) {
movemouse(c);
}
else if(ev->button == Button2) {
- if(
ISTILE
&& !c->isfixed && c->isfloating)
+ if(
(ISTILE)
&& !c->isfixed && c->isfloating)
togglefloating(NULL);
else
zoom(NULL);
togglefloating(NULL);
else
zoom(NULL);
@@
-535,7
+536,7
@@
drawbar(void) {
int i, x;
dc.x = dc.y = 0;
int i, x;
dc.x = dc.y = 0;
- for(i = 0; i <
ntags
; i++) {
+ for(i = 0; i <
NTAGS
; i++) {
dc.w = textw(tags[i]);
if(seltags[i]) {
drawtext(tags[i], dc.sel);
dc.w = textw(tags[i]);
if(seltags[i]) {
drawtext(tags[i], dc.sel);
@@
-845,10
+846,8
@@
unsigned int
idxoftag(const char *tag) {
unsigned int i;
idxoftag(const char *tag) {
unsigned int i;
- for(i = 0; i < ntags; i++)
- if(tags[i] == tag)
- return i;
- return 0;
+ for(i = 0; (i < NTAGS) && (tags[i] != tag); i++);
+ return (i < NTAGS) ? i : 0;
}
void
}
void
@@
-928,7
+927,7
@@
Bool
isvisible(Client *c) {
unsigned int i;
isvisible(Client *c) {
unsigned int i;
- for(i = 0; i <
ntags
; i++)
+ for(i = 0; i <
NTAGS
; i++)
if(c->tags[i] && seltags[i])
return True;
return False;
if(c->tags[i] && seltags[i])
return True;
return False;
@@
-1138,7
+1137,7
@@
propertynotify(XEvent *e) {
default: break;
case XA_WM_TRANSIENT_FOR:
XGetTransientForHint(dpy, c->win, &trans);
default: break;
case XA_WM_TRANSIENT_FOR:
XGetTransientForHint(dpy, c->win, &trans);
- if(!c->isfloating && (c->isfloating = (
getclient(trans) != NULL
)))
+ if(!c->isfloating && (c->isfloating = (
NULL != getclient(trans)
)))
arrange();
break;
case XA_WM_NORMAL_HINTS:
arrange();
break;
case XA_WM_NORMAL_HINTS:
@@
-1400,7
+1399,7
@@
void
setmwfact(const char *arg) {
double delta;
setmwfact(const char *arg) {
double delta;
- if(!
ISTILE
)
+ if(!
(ISTILE)
)
return;
/* arg handling, manipulate mwfact */
if(arg == NULL)
return;
/* arg handling, manipulate mwfact */
if(arg == NULL)
@@
-1540,11
+1539,9
@@
tag(const char *arg) {
if(!sel)
return;
if(!sel)
return;
- for(i = 0; i < ntags; i++)
- sel->tags[i] = arg == NULL;
- i = idxoftag(arg);
- if(i >= 0 && i < ntags)
- sel->tags[i] = True;
+ for(i = 0; i < NTAGS; i++)
+ sel->tags[i] = (NULL == arg);
+ sel->tags[idxoftag(arg)] = True;
arrange();
}
arrange();
}
@@
-1598,7
+1595,9
@@
tile(void) {
else
nh = th - 2 * c->border;
}
else
nh = th - 2 * c->border;
}
- resize(c, nx, ny, nw, nh, RESIZEHINTS);
+ resize(c, nx, ny, nw, nh, True);
+ if((c->h < bh) || (c->h > nh)) /* client doesn't accept geometry */
+ resize(c, nx, ny, nw, nh, False);
if(n > 1 && th != wah)
ny = c->y + c->h + 2 * c->border;
}
if(n > 1 && th != wah)
ny = c->y + c->h + 2 * c->border;
}
@@
-1660,9
+1659,9
@@
toggletag(const char *arg) {
return;
i = idxoftag(arg);
sel->tags[i] = !sel->tags[i];
return;
i = idxoftag(arg);
sel->tags[i] = !sel->tags[i];
- for(j = 0; j <
ntags
&& !sel->tags[j]; j++);
- if(j ==
ntags
)
- sel->tags[i] = True;
+ for(j = 0; j <
NTAGS
&& !sel->tags[j]; j++);
+ if(j ==
NTAGS
)
+ sel->tags[i] = True;
/* at least one tag must be enabled */
arrange();
}
arrange();
}
@@
-1672,8
+1671,8
@@
toggleview(const char *arg) {
i = idxoftag(arg);
seltags[i] = !seltags[i];
i = idxoftag(arg);
seltags[i] = !seltags[i];
- for(j = 0; j <
ntags
&& !seltags[j]; j++);
- if(j ==
ntags
)
+ for(j = 0; j <
NTAGS
&& !seltags[j]; j++);
+ if(j ==
NTAGS
)
seltags[i] = True; /* at least one tag must be viewed */
arrange();
}
seltags[i] = True; /* at least one tag must be viewed */
arrange();
}
@@
-1839,11
+1838,9
@@
view(const char *arg) {
unsigned int i;
memcpy(prevtags, seltags, sizeof seltags);
unsigned int i;
memcpy(prevtags, seltags, sizeof seltags);
- for(i = 0; i <
ntags
; i++)
+ for(i = 0; i <
NTAGS
; i++)
seltags[i] = arg == NULL;
seltags[i] = arg == NULL;
- i = idxoftag(arg);
- if(i >= 0 && i < ntags)
- seltags[i] = True;
+ seltags[idxoftag(arg)] = True;
arrange();
}
arrange();
}
@@
-1861,7
+1858,7
@@
void
zoom(const char *arg) {
Client *c;
zoom(const char *arg) {
Client *c;
- if(!sel || !
ISTILE
|| 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)))