tapplied anydot's 3 minor patches, thank you anydot - dwm - [fork] customized build of dwm, the dynamic window manager
(HTM) git clone git://src.adamsgaard.dk/dwm
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 199a6016114875656102d11e79a80939bfaff3b3
(DIR) parent 492c6f10fcf9acf74d84eb3fe005ecf2dd42611a
(HTM) Author: Anselm R. Garbe <arg@suckless.org>
Date: Tue, 29 May 2007 11:35:20 +0200
applied anydot's 3 minor patches, thank you anydot
Diffstat:
M client.c | 17 ++++-------------
M dwm.h | 3 +--
M event.c | 4 ++--
M layout.c | 41 ++++++++++++++++++-------------
4 files changed, 31 insertions(+), 34 deletions(-)
---
(DIR) diff --git a/client.c b/client.c
t@@ -129,8 +129,8 @@ detach(Client *c) {
void
focus(Client *c) {
- if(c && !isvisible(c))
- return;
+ if( !c && selscreen || c && !isvisible(c))
+ for(c = stack; c && !isvisible(c); c = c->snext);
if(sel && sel != c) {
grabbuttons(sel, False);
XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]);
t@@ -153,14 +153,6 @@ focus(Client *c) {
}
void
-focustopvisible(void) {
- Client *c;
-
- for(c = stack; c && !isvisible(c); c = c->snext);
- focus(c);
-}
-
-void
killclient(const char *arg) {
XEvent ev;
t@@ -230,8 +222,7 @@ manage(Window w, XWindowAttributes *wa) {
XMoveWindow(dpy, w, c->x + 2 * sw, c->y);
XMapWindow(dpy, w);
setclientstate(c, NormalState);
- if(isvisible(c))
- focus(c);
+ focus(c);
lt->arrange();
}
t@@ -401,7 +392,7 @@ unmanage(Client *c) {
detach(c);
detachstack(c);
if(sel == c)
- focustopvisible();
+ focus(NULL);
XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
setclientstate(c, WithdrawnState);
free(c->tags);
(DIR) diff --git a/dwm.h b/dwm.h
t@@ -100,8 +100,7 @@ Window root, barwin;
void attach(Client *c); /* attaches c to global client list */
void configure(Client *c); /* send synthetic configure event */
void detach(Client *c); /* detaches c from global client list */
-void focus(Client *c); /* focus c, c may be NULL */
-void focustopvisible(void); /* focus top visible window on stack */
+void focus(Client *c); /* focus c if visible && !NULL, or focus top visible */
void killclient(const char *arg); /* kill sel nicely */
void manage(Window w, XWindowAttributes *wa); /* manage new client */
void resize(Client *c, int x, int y,
(DIR) diff --git a/event.c b/event.c
t@@ -242,11 +242,11 @@ enternotify(XEvent *e) {
if(ev->mode != NotifyNormal || ev->detail == NotifyInferior)
return;
- if((c = getclient(ev->window)) && isvisible(c))
+ if(c = getclient(ev->window))
focus(c);
else if(ev->window == root) {
selscreen = True;
- focustopvisible();
+ focus(NULL);
}
}
(DIR) diff --git a/layout.c b/layout.c
t@@ -14,6 +14,22 @@ static unsigned int masterw = MASTERWIDTH;
static unsigned int nmaster = NMASTER;
static void
+ban(Client *c) {
+ if (c->isbanned)
+ return;
+ XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
+ c->isbanned = True;
+}
+
+static void
+unban(Client *c) {
+ if (!c->isbanned)
+ return;
+ XMoveWindow(dpy, c->win, c->x, c->y);
+ c->isbanned = False;
+}
+
+static void
tile(void) {
unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th;
Client *c;
t@@ -28,9 +44,7 @@ tile(void) {
for(i = 0, c = clients; c; c = c->next)
if(isvisible(c)) {
- if(c->isbanned)
- XMoveWindow(dpy, c->win, c->x, c->y);
- c->isbanned = False;
+ unban(c);
if(c->isfloating)
continue;
c->ismax = False;
t@@ -60,12 +74,9 @@ tile(void) {
resize(c, nx, ny, nw, nh, False);
i++;
}
- else {
- c->isbanned = True;
- XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
- }
- if(!sel || !isvisible(sel))
- focustopvisible();
+ else
+ ban(c);
+ focus(NULL);
restack();
}
t@@ -77,20 +88,16 @@ void
floating(void) {
Client *c;
- for(c = clients; c; c = c->next) {
+ for(c = clients; c; c = c->next)
if(isvisible(c)) {
if(c->isbanned)
XMoveWindow(dpy, c->win, c->x, c->y);
c->isbanned = False;
resize(c, c->x, c->y, c->w, c->h, True);
}
- else {
- c->isbanned = True;
- XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
- }
- }
- if(!sel || !isvisible(sel))
- focustopvisible();
+ else
+ ban(c);
+ focus(NULL);
restack();
}