1
0
mirror of git://git.suckless.org/dwm synced 2025-08-05 06:32:24 -07:00

Compare commits

...

17 Commits
1.1 ... 1.2

Author SHA1 Message Date
Anselm R. Garbe
140be1b4b3 prepared 1.2 2006-08-30 12:39:27 +02:00
Anselm R. Garbe
79259acc12 now using Salmi's menu command 2006-08-30 11:21:56 +02:00
Anselm R. Garbe
5a3bea2d69 removed a warning reported by Jukka 2006-08-30 11:15:58 +02:00
Anselm R. Garbe
30d928591d simplified configurerequest 2006-08-29 19:24:28 +02:00
Anselm R. Garbe
70a3e62257 now dwm enforces max screen size also in tiled mode on non-floating clients which are maximized 2006-08-29 18:05:02 +02:00
Anselm R. Garbe
6828fba7a0 fixed 2006-08-29 17:33:27 +02:00
Anselm R. Garbe
aa1bda8164 configurenotify remembers max geom now, and restores this if necessary, however it accepts to touch the max size on configurerequest, this shouldn't break fillscreen apps (tested with mplayer) 2006-08-29 17:31:55 +02:00
Anselm R. Garbe
157ea539a2 applied patch similiar proposed by dave tweed 2006-08-29 17:11:37 +02:00
Anselm R. Garbe
c3c94c0e0a improved selection policy 2006-08-29 15:28:29 +02:00
Anselm R. Garbe
9d73909075 still something wrong with reorder() 2006-08-29 13:40:09 +02:00
Anselm R. Garbe
016c54196e this algorithm seems to keep order for any scenario 2006-08-29 09:57:57 +02:00
Anselm R. Garbe
5056bb952d fix client position in list also on tag and toggletag 2006-08-29 09:25:14 +02:00
Anselm R. Garbe
8a6679b3b4 added attach/detach functions which don't attach at the begin of list, but at the slot of a first match of the tags of a client 2006-08-29 09:23:44 +02:00
Anselm R. Garbe
7b6d5ff298 removed crappy variables 2006-08-28 14:32:51 +02:00
Anselm R. Garbe
846850914d changed config.arg.h - I really need the 4th tag 2006-08-28 12:27:00 +02:00
Anselm R. Garbe
4e6c513ac2 updated html page 2006-08-28 10:21:40 +02:00
Anselm R. Garbe
db9cda6a7d Added tag 1.1 for changeset 44a55e6e46bf6c231780b09d919977d6f01083de 2006-08-28 10:19:55 +02:00
10 changed files with 121 additions and 72 deletions

View File

@@ -8,3 +8,4 @@ c11f86db4550cac5d0a648a3fe4d6d3b9a4fcf7e 0.6
cd15de32e173f8ce97bfe1c9b6607937b59056b4 0.8
fae61afa861755636c4a1070694209ace8efbb6c 0.9
bbc98e77ae89a7c9232a5be0835f60ea00d8036e 1.0
44a55e6e46bf6c231780b09d919977d6f01083de 1.1

View File

@@ -52,8 +52,6 @@ grabbuttons(Client *c, Bool focus)
static void
resizetitle(Client *c)
{
int i;
c->tw = textw(c->name);
if(c->tw > c->w)
c->tw = c->w + 2;
@@ -232,13 +230,7 @@ manage(Window w, XWindowAttributes *wa)
DefaultVisual(dpy, screen),
CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa);
if(clients)
clients->prev = c;
c->next = clients;
clients = c;
grabbuttons(c, False);
if((tc = getclient(trans))) /* inherit tags */
for(i = 0; i < ntags; i++)
c->tags[i] = tc->tags[i];
@@ -248,6 +240,12 @@ manage(Window w, XWindowAttributes *wa)
c->isfloat = trans
|| (c->maxw && c->minw &&
c->maxw == c->minw && c->maxh == c->minh);
if(clients)
clients->prev = c;
c->next = clients;
clients = c;
settitle(c);
if(isvisible(c))
sel = c;
@@ -340,7 +338,7 @@ void
settitle(Client *c)
{
char **list = NULL;
int i, n;
int n;
XTextProperty name;
name.nitems = 0;
@@ -409,12 +407,7 @@ unmanage(Client *c)
XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
XDestroyWindow(dpy, c->twin);
if(c->prev)
c->prev->next = c->next;
if(c->next)
c->next->prev = c->prev;
if(c == clients)
clients = c->next;
detach(c);
if(sel == c) {
if(trans && (tc = getclient(trans)) && isvisible(tc))
sel = tc;

View File

@@ -4,7 +4,7 @@
*/
#define TAGS \
const char *tags[] = { "work", "net", "fnord", NULL };
const char *tags[] = { "dev", "work", "net", "fnord", NULL };
#define DEFMODE dotile /* dofloat */
#define FLOATSYMBOL "><>"
@@ -27,8 +27,9 @@ static Key key[] = { \
{ MODKEY|ShiftMask, XK_Return, spawn, \
{ .cmd = "exec uxterm -bg '#111111' -fg '#eeeeee' -cr '#eeeeee' +sb -fn '"FONT"'" } }, \
{ MODKEY, XK_p, spawn, \
{ .cmd = "exec `ls -lL /usr/bin /usr/X11R6/bin /usr/local/bin 2>/dev/null | " \
"awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort -u | dmenu`" } }, \
{ .cmd = "exec \"$(IFS=:; for dir in $PATH; do " \
"for file in \"$dir\"/*; do [ -x \"$file\" ] && echo \"${file##*/}\"; done; " \
"done | sort -u | dmenu)\"" } }, \
{ MODKEY, XK_j, focusnext, { 0 } }, \
{ MODKEY, XK_k, focusprev, { 0 } }, \
{ MODKEY, XK_Return, zoom, { 0 } }, \
@@ -36,17 +37,21 @@ static Key key[] = { \
{ MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \
{ MODKEY|ShiftMask, XK_2, tag, { .i = 1 } }, \
{ MODKEY|ShiftMask, XK_3, tag, { .i = 2 } }, \
{ MODKEY|ShiftMask, XK_4, tag, { .i = 3 } }, \
{ MODKEY|ControlMask|ShiftMask, XK_1, toggletag, { .i = 0 } }, \
{ MODKEY|ControlMask|ShiftMask, XK_2, toggletag, { .i = 1 } }, \
{ MODKEY|ControlMask|ShiftMask, XK_3, toggletag, { .i = 2 } }, \
{ MODKEY|ControlMask|ShiftMask, XK_4, toggletag, { .i = 3 } }, \
{ MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \
{ MODKEY, XK_space, togglemode, { 0 } }, \
{ MODKEY, XK_1, view, { .i = 0 } }, \
{ MODKEY, XK_2, view, { .i = 1 } }, \
{ MODKEY, XK_3, view, { .i = 2 } }, \
{ MODKEY, XK_4, view, { .i = 3 } }, \
{ MODKEY|ControlMask, XK_1, toggleview, { .i = 0 } }, \
{ MODKEY|ControlMask, XK_2, toggleview, { .i = 1 } }, \
{ MODKEY|ControlMask, XK_3, toggleview, { .i = 2 } }, \
{ MODKEY|ControlMask, XK_4, toggleview, { .i = 3 } }, \
{ MODKEY|ShiftMask, XK_q, quit, { 0 } }, \
};

View File

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

2
draw.c
View File

@@ -133,8 +133,6 @@ drawstatus()
void
drawtitle(Client *c)
{
int i;
if(c == sel && issel) {
drawstatus();
XUnmapWindow(dpy, c->twin);

3
dwm.h
View File

@@ -56,7 +56,7 @@ struct Client {
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
int grav;
long flags;
unsigned int border;
unsigned int border, weight;
Bool isfloat;
Bool ismax;
Bool *tags;
@@ -127,6 +127,7 @@ extern void *erealloc(void *ptr, unsigned int size);
extern void spawn(Arg *arg);
/* view.c */
extern void detach(Client *c);
extern void dofloat(Arg *arg);
extern void dotile(Arg *arg);
extern void focusnext(Arg *arg);

View File

@@ -104,8 +104,8 @@
</ul>
<h3>Download</h3>
<ul>
<li><a href="http://10kloc.org/download/dwm-1.0.tar.gz">dwm 1.0</a> (15kb) (20060824)</li>
<li><a href="http://10kloc.org/download/dmenu-0.5.tar.gz">dmenu 0.5</a> (7kb) (20060824)</li>
<li><a href="http://10kloc.org/download/dwm-1.2.tar.gz">dwm 1.2</a> (15kb) (20060830)</li>
<li><a href="http://10kloc.org/download/dmenu-0.6.tar.gz">dmenu 0.6</a> (7kb) (20060828)</li>
</ul>
<h3>Development</h3>
<p>

40
event.c
View File

@@ -147,16 +147,38 @@ buttonpress(XEvent *e)
}
}
static void
synconfig(Client *c, int x, int y, int w, int h, unsigned int border)
{
XEvent synev;
synev.type = ConfigureNotify;
synev.xconfigure.display = dpy;
synev.xconfigure.event = c->win;
synev.xconfigure.window = c->win;
synev.xconfigure.x = x;
synev.xconfigure.y = y;
synev.xconfigure.width = w;
synev.xconfigure.height = h;
synev.xconfigure.border_width = border;
synev.xconfigure.above = None;
XSendEvent(dpy, c->win, True, NoEventMask, &synev);
}
static void
configurerequest(XEvent *e)
{
unsigned long newmask;
Client *c;
XConfigureRequestEvent *ev = &e->xconfigurerequest;
XEvent synev;
XWindowChanges wc;
if((c = getclient(ev->window))) {
if(!c->isfloat && (arrange != dofloat) && c->ismax) {
synconfig(c, sx, sy + bh, sw - 2, sh - 2 - bh, ev->border_width);
XSync(dpy, False);
return;
}
gravitate(c, True);
if(ev->value_mask & CWX)
c->x = ev->x;
@@ -176,20 +198,8 @@ configurerequest(XEvent *e)
newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth));
if(newmask)
XConfigureWindow(dpy, c->win, newmask, &wc);
else {
synev.type = ConfigureNotify;
synev.xconfigure.display = dpy;
synev.xconfigure.event = c->win;
synev.xconfigure.window = c->win;
synev.xconfigure.x = c->x;
synev.xconfigure.y = c->y;
synev.xconfigure.width = c->w;
synev.xconfigure.height = c->h;
synev.xconfigure.border_width = c->border;
synev.xconfigure.above = None;
/* Send synthetic ConfigureNotify */
XSendEvent(dpy, c->win, True, NoEventMask, &synev);
}
else
synconfig(c, c->x, c->y, c->w, c->h, c->border);
XSync(dpy, False);
if(c->isfloat)
resize(c, False, TopLeft);

25
tag.c
View File

@@ -30,6 +30,17 @@ RULES
static RReg *rreg = NULL;
static unsigned int len = 0;
static void
commit()
{
/* asserts sel != NULL */
settitle(sel);
if(!isvisible(sel))
arrange(NULL);
else
drawstatus();
}
/* extern */
Client *
@@ -106,6 +117,8 @@ 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;
}
void
@@ -119,11 +132,7 @@ tag(Arg *arg)
for(i = 0; i < ntags; i++)
sel->tags[i] = False;
sel->tags[arg->i] = True;
settitle(sel);
if(!isvisible(sel))
arrange(NULL);
else
drawstatus();
commit();
}
void
@@ -138,9 +147,5 @@ toggletag(Arg *arg)
for(i = 0; i < ntags && !sel->tags[i]; i++);
if(i == ntags)
sel->tags[arg->i] = True;
settitle(sel);
if(!isvisible(sel))
arrange(NULL);
else
drawstatus();
commit();
}

82
view.c
View File

@@ -3,11 +3,57 @@
* See LICENSE file for license details.
*/
#include "dwm.h"
#include <stdio.h>
/* static */
static Client *
minclient()
{
Client *c, *min;
for(min = c = clients; c; c = c->next)
if(c->weight < min->weight)
min = c;
return min;
}
static void
reorder()
{
Client *c, *newclients, *tail;
newclients = tail = NULL;
while((c = minclient())) {
detach(c);
if(tail) {
c->prev = tail;
tail->next = c;
tail = c;
}
else
tail = newclients = c;
}
clients = newclients;
}
/* extern */
void (*arrange)(Arg *) = DEFMODE;
void
detach(Client *c)
{
if(c->prev)
c->prev->next = c->next;
if(c->next)
c->next->prev = c->prev;
if(c == clients)
clients = c->next;
c->next = c->prev = NULL;
}
void
dofloat(Arg *arg)
{
@@ -21,9 +67,7 @@ dofloat(Arg *arg)
else
ban(c);
}
if(!sel || !isvisible(sel))
sel = getnext(clients);
if(sel)
if((sel = getnext(clients)))
focus(sel);
else
XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
@@ -86,9 +130,7 @@ dotile(Arg *arg)
else
ban(c);
}
if(!sel || !isvisible(sel))
sel = getnext(clients);
if(sel)
if((sel = getnext(clients)))
focus(sel);
else
XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
@@ -211,6 +253,7 @@ toggleview(Arg *arg)
for(i = 0; i < ntags && !seltag[i]; i++);
if(i == ntags)
seltag[arg->i] = True; /* cannot toggle last view */
reorder();
arrange(NULL);
}
@@ -222,32 +265,25 @@ view(Arg *arg)
for(i = 0; i < ntags; i++)
seltag[i] = False;
seltag[arg->i] = True;
reorder();
arrange(NULL);
}
void
zoom(Arg *arg)
{
Client *c;
Client *c = sel;
if(!sel || (arrange != dotile) || sel->isfloat || sel->ismax)
if(!c || (arrange != dotile) || c->isfloat || c->ismax)
return;
if(sel == getnext(clients)) {
if((c = getnext(sel->next)))
sel = c;
else
if(c == getnext(clients))
if(!(c = getnext(c->next)))
return;
}
/* pop */
sel->prev->next = sel->next;
if(sel->next)
sel->next->prev = sel->prev;
sel->prev = NULL;
clients->prev = sel;
sel->next = clients;
clients = sel;
focus(sel);
detach(c);
c->next = clients;
clients->prev = c;
clients = c;
focus(c);
arrange(NULL);
}