Compare commits

...

29 Commits
1.3 ... 1.4

Author SHA1 Message Date
57c49fe867 prepared dwm-1.4 update 2006-09-06 12:18:57 +02:00
c60de1acd4 drawstatus even if no client exists 2006-09-06 12:10:43 +02:00
69b738c097 sanders solution is convincing and elegant 2006-09-06 11:54:16 +02:00
da0b2a2f31 seems to preserve floating client z-layer order (even with reorder() calls) 2006-09-06 11:46:35 +02:00
2378a558a2 Added tag 1.4 for changeset a6b8994af16491220db0199623bd57d061e06143 2006-09-06 10:54:10 +02:00
f18ed615ae small fix 2006-09-06 10:03:21 +02:00
f6656fffb4 made args mode symbols the default ones (the default ones look too ugly) 2006-09-06 09:23:34 +02:00
aaad7bfd15 moved transient_for tag inheritance to settags 2006-09-06 09:21:17 +02:00
0915da8842 no, reodering floating clients definately breaks the manage() policy which attaches all clients zoomed (otherwise higher-weight clients couldn't be attached zoomed, which sucks) 2006-09-06 09:13:31 +02:00
0d0e8bde13 no, ordering floating clients at the end seems better 2006-09-05 19:26:34 +02:00
838a1ff950 fix 2006-09-05 18:43:15 +02:00
e1315fd40c this makes sure the issue mentioned by sander 2006-09-05 18:04:22 +02:00
52a3ab1042 fixing zoom 2006-09-05 17:10:48 +02:00
a82e7b765e fixing two off-by-ones 2006-09-05 16:11:52 +02:00
0ed0fa4d5b ach ich will auch Alt-s 2006-09-05 16:05:09 +02:00
ec85fddb9a applied checking existance of >2 tiles patch (proposed by sander) to zoom and resizecol 2006-09-05 16:00:09 +02:00
3a1343a245 renamed resizetile into resizecol 2006-09-05 13:52:23 +02:00
9066ee2eb4 well ok, added Mod-s to default bindings (however, I don't need it) 2006-09-05 13:27:43 +02:00
40bd21ce63 s/growcol/resizetile/g 2006-09-05 13:25:42 +02:00
4633fbec61 right, multihead issue is not involved with growcol 2006-09-05 13:21:59 +02:00
25060031a5 hotfix 2006-09-05 13:20:29 +02:00
c7ae6334b7 applied a fix related to Sanders remark to growcol 2006-09-05 13:19:18 +02:00
eac04882b4 sanders toggletag patch is much more elegant 2006-09-05 09:37:45 +02:00
6499fc4f93 I really need column growing, now pushing upstream 2006-09-05 09:02:37 +02:00
04f27a5438 don't access sel in restack without checking for NULL (multihead crashing bug) 2006-09-05 08:37:34 +02:00
1b3903d6e9 fixing c->weight handling 2006-09-05 08:24:00 +02:00
cc05093b0d removed some useless tags 2006-09-04 19:19:37 +02:00
6436dd4438 after 1.3 2006-09-04 17:52:46 +02:00
26c50c780e Added tag 1.3 for changeset f5f5cbf016a94b48a8fe9c47f0736e96d166d5d4 2006-09-04 17:52:16 +02:00
10 changed files with 83 additions and 57 deletions

View File

@ -10,5 +10,4 @@ fae61afa861755636c4a1070694209ace8efbb6c 0.9
bbc98e77ae89a7c9232a5be0835f60ea00d8036e 1.0
44a55e6e46bf6c231780b09d919977d6f01083de 1.1
e3179ce2b90451d2807cd53b589d768412b8666b 1.2
6413ea66b1c2496cfc2173fe58df67cb965eb1da 1.3
dd44dc937e8b0a46abf1a15a333dba5304e4fe89 1.3
f5f5cbf016a94b48a8fe9c47f0736e96d166d5d4 1.3

View File

@ -199,7 +199,7 @@ void
manage(Window w, XWindowAttributes *wa)
{
unsigned int i;
Client *c, *tc;
Client *c;
Window trans;
XSetWindowAttributes twa;
@ -238,11 +238,7 @@ manage(Window w, XWindowAttributes *wa)
CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa);
grabbuttons(c, False);
if((tc = getclient(trans))) /* inherit tags */
for(i = 0; i < ntags; i++)
c->tags[i] = tc->tags[i];
else
settags(c);
settags(c, getclient(trans));
if(!c->isfloat)
c->isfloat = trans
|| (c->maxw && c->minw &&

View File

@ -34,6 +34,8 @@ static Key key[] = { \
{ MODKEY, XK_k, focusprev, { 0 } }, \
{ MODKEY, XK_Return, zoom, { 0 } }, \
{ MODKEY, XK_m, togglemax, { 0 } }, \
{ MODKEY, XK_g, resizecol, { .i = 20 } }, \
{ MODKEY, XK_s, resizecol, { .i = -20 } }, \
{ MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \
{ MODKEY|ShiftMask, XK_2, tag, { .i = 1 } }, \
{ MODKEY|ShiftMask, XK_3, tag, { .i = 2 } }, \

View File

@ -7,8 +7,8 @@
const char *tags[] = { "1", "2", "3", "4", "5", NULL };
#define DEFMODE dotile /* dofloat */
#define FLOATSYMBOL "~"
#define TILESYMBOL "#"
#define FLOATSYMBOL "><>"
#define TILESYMBOL "[]="
#define FONT "fixed"
#define SELBGCOLOR "#666699"
@ -29,6 +29,8 @@ static Key key[] = { \
{ MODKEY|ShiftMask, XK_Tab, focusprev, { 0 } }, \
{ MODKEY, XK_Return, zoom, { 0 } }, \
{ MODKEY, XK_m, togglemax, { 0 } }, \
{ MODKEY, XK_g, resizecol, { .i = 20 } }, \
{ MODKEY, XK_s, resizecol, { .i = -20 } }, \
{ MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \
{ MODKEY|ShiftMask, XK_2, tag, { .i = 1 } }, \
{ MODKEY|ShiftMask, XK_3, tag, { .i = 2 } }, \

View File

@ -1,5 +1,5 @@
# dwm version
VERSION = 1.3
VERSION = 1.4
# Customize below to fit your system

12
dwm.1
View File

@ -90,6 +90,18 @@ mode only).
Maximize current
.BR window .
.TP
.B Mod1-g
Grow current
.BR column
.RB ( tiling
mode only).
.TP
.B Mod1-s
Shrink current
.BR column
.RB ( tiling
mode only).
.TP
.B Mod1-Shift-[1..n]
Apply
.B nth tag

3
dwm.h
View File

@ -115,7 +115,7 @@ extern int xerror(Display *dsply, XErrorEvent *ee);
extern void initrregs();
extern Client *getnext(Client *c);
extern Client *getprev(Client *c);
extern void settags(Client *c);
extern void settags(Client *c, Client *trans);
extern void tag(Arg *arg);
extern void toggletag(Arg *arg);
@ -132,6 +132,7 @@ extern void dotile(Arg *arg);
extern void focusnext(Arg *arg);
extern void focusprev(Arg *arg);
extern Bool isvisible(Client *c);
extern void resizecol(Arg *arg);
extern void restack();
extern void togglemode(Arg *arg);
extern void toggleview(Arg *arg);

1
main.c
View File

@ -55,6 +55,7 @@ cleanup()
XDestroyWindow(dpy, barwin);
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
XSync(dpy, False);
free(seltag);
}
static void

15
tag.c
View File

@ -76,15 +76,19 @@ initrregs()
}
void
settags(Client *c)
settags(Client *c, Client *trans)
{
char prop[512];
unsigned int i, j;
regmatch_t tmp;
Bool matched = False;
Bool matched = trans != NULL;
XClassHint ch;
if(XGetClassHint(dpy, c->win, &ch)) {
if(matched) {
for(i = 0; i < ntags; i++)
c->tags[i] = trans->tags[i];
}
else if(XGetClassHint(dpy, c->win, &ch)) {
snprintf(prop, sizeof(prop), "%s:%s:%s",
ch.res_class ? ch.res_class : "",
ch.res_name ? ch.res_name : "", c->name);
@ -106,8 +110,7 @@ settags(Client *c)
if(!matched)
for(i = 0; i < ntags; i++)
c->tags[i] = seltag[i];
for(i = 0; i < ntags && !c->tags[i]; i++);
c->weight = i;
for(c->weight = 0; c->weight < ntags && !c->tags[c->weight]; c->weight++);
}
void
@ -121,6 +124,7 @@ tag(Arg *arg)
for(i = 0; i < ntags; i++)
sel->tags[i] = False;
sel->tags[arg->i] = True;
sel->weight = arg->i;
arrange(NULL);
}
@ -136,5 +140,6 @@ toggletag(Arg *arg)
for(i = 0; i < ntags && !sel->tags[i]; i++);
if(i == ntags)
sel->tags[arg->i] = True;
sel->weight = (i == ntags) ? arg->i : i;
arrange(NULL);
}

88
view.c
View File

@ -38,6 +38,13 @@ reorder()
clients = newclients;
}
static Client *
nexttiled(Client *c)
{
for(c = getnext(c); c && c->isfloat; c = getnext(c->next));
return c;
}
/* extern */
void (*arrange)(Arg *) = DEFMODE;
@ -180,53 +187,50 @@ isvisible(Client *c)
return False;
}
void
resizecol(Arg *arg)
{
unsigned int n;
Client *c;
for(n = 0, c = clients; c; c = c->next)
if(isvisible(c) && !c->isfloat)
n++;
if(!sel || sel->isfloat || n < 2 || (arrange != dotile) || maximized)
return;
if(sel == getnext(clients)) {
if(mw + arg->i > sw - 100 || mw + arg->i < 100)
return;
mw += arg->i;
}
else {
if(mw - arg->i > sw - 100 || mw - arg->i < 100)
return;
mw -= arg->i;
}
arrange(NULL);
}
void
restack()
{
static unsigned int nwins = 0;
static Window *wins = NULL;
unsigned int f, fi, m, mi, n;
Client *c;
XEvent ev;
for(f = 0, m = 0, c = clients; c; c = c->next)
if(isvisible(c)) {
if(c->isfloat || arrange == dofloat)
f++;
else
m++;
}
if(!(n = 2 * (f + m))) {
if(!sel) {
drawstatus();
return;
}
if(nwins < n) {
nwins = n;
wins = erealloc(wins, nwins * sizeof(Window));
}
fi = 0;
mi = 2 * f;
if(sel->isfloat || arrange == dofloat) {
wins[fi++] = sel->twin;
wins[fi++] = sel->win;
XRaiseWindow(dpy, sel->win);
XRaiseWindow(dpy, sel->twin);
}
else {
wins[mi++] = sel->twin;
wins[mi++] = sel->win;
}
for(c = clients; c; c = c->next)
if(isvisible(c) && c != sel) {
if(c->isfloat || arrange == dofloat) {
wins[fi++] = c->twin;
wins[fi++] = c->win;
}
else {
wins[mi++] = c->twin;
wins[mi++] = c->win;
}
if(arrange != dofloat)
for(c = nexttiled(clients); c; c = nexttiled(c->next)) {
XLowerWindow(dpy, c->twin);
XLowerWindow(dpy, c->win);
}
XRestackWindows(dpy, wins, n);
drawall();
XSync(dpy, False);
while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
@ -281,13 +285,17 @@ viewall(Arg *arg)
void
zoom(Arg *arg)
{
Client *c = sel;
unsigned int n;
Client *c;
if(!c || (arrange != dotile) || c->isfloat || maximized)
for(n = 0, c = clients; c; c = c->next)
if(isvisible(c) && !c->isfloat)
n++;
if(!sel || sel->isfloat || n < 2 || (arrange != dotile) || maximized)
return;
if(c == getnext(clients))
if(!(c = getnext(c->next)))
if((c = sel) == nexttiled(clients))
if(!(c = nexttiled(c->next)))
return;
detach(c);
c->next = clients;