tremoved the _DWM_PROPERTIES handling, reverted ban/unban to XMoveWindow(), and… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 36672d0401299a5230b516ca4575365d9f45dd35 | |
parent b18e6840152b300f2db8ff8dca16aee0839f864b | |
Author: Anselm R. Garbe <[email protected]> | |
Date: Wed, 22 Aug 2007 19:01:05 +0200 | |
removed the _DWM_PROPERTIES handling, reverted ban/unban to XMoveWindow(), and … | |
Diffstat: | |
M client.c | 50 +++++------------------------… | |
M config.mk | 4 ++-- | |
M dwm.h | 8 ++------ | |
M event.c | 8 +++----- | |
M main.c | 6 ++---- | |
M screen.c | 48 +++++------------------------… | |
6 files changed, 23 insertions(+), 101 deletions(-) | |
--- | |
diff --git a/client.c b/client.c | |
t@@ -1,14 +1,11 @@ | |
/* See LICENSE file for copyright and license details. */ | |
#include "dwm.h" | |
#include <stdlib.h> | |
-#include <string.h> | |
#include <X11/Xatom.h> | |
#include <X11/Xutil.h> | |
/* static */ | |
-static char buf[128]; | |
- | |
static void | |
attachstack(Client *c) { | |
c->snext = stack; | |
t@@ -102,10 +99,8 @@ void | |
ban(Client *c) { | |
if(c->isbanned) | |
return; | |
- XUnmapWindow(dpy, c->win); | |
- setclientstate(c, IconicState); | |
+ XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | |
c->isbanned = True; | |
- c->unmapped++; | |
} | |
void | |
t@@ -181,21 +176,6 @@ killclient(const char *arg) { | |
XKillClient(dpy, sel->win); | |
} | |
-Bool | |
-getprops(Client *c) { | |
- unsigned int i; | |
- Bool result = False; | |
- | |
- if(gettextprop(c->win, dwmprops, buf, sizeof buf)) { | |
- for(i = 0; i < ntags && i < sizeof buf - 1 && buf[i] != '\0'; … | |
- if((c->tags[i] = buf[i] == '1')) | |
- result = True; | |
- if(i < sizeof buf - 1 && buf[i] != '\0') | |
- c->isfloating = buf[i] == '1'; | |
- } | |
- return result; | |
-} | |
- | |
void | |
manage(Window w, XWindowAttributes *wa) { | |
unsigned int i; | |
t@@ -242,15 +222,14 @@ manage(Window w, XWindowAttributes *wa) { | |
if(t) | |
for(i = 0; i < ntags; i++) | |
c->tags[i] = t->tags[i]; | |
- if(!getprops(c)) | |
- applyrules(c); | |
+ applyrules(c); | |
if(!c->isfloating) | |
c->isfloating = (rettrans == Success) || c->isfixed; | |
- setprops(c); | |
attach(c); | |
attachstack(c); | |
XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); /* some window… | |
ban(c); | |
+ XMapWindow(dpy, c->win); | |
arrange(); | |
} | |
t@@ -318,29 +297,15 @@ resize(Client *c, int x, int y, int w, int h, Bool sizeh… | |
} | |
void | |
-setprops(Client *c) { | |
- unsigned int i; | |
- | |
- for(i = 0; i < ntags && i < sizeof buf - 1; i++) | |
- buf[i] = c->tags[i] ? '1' : '0'; | |
- if(i < sizeof buf - 1) | |
- buf[i++] = c->isfloating ? '1' : '0'; | |
- buf[i] = '\0'; | |
- XChangeProperty(dpy, c->win, dwmprops, XA_STRING, 8, | |
- PropModeReplace, (unsigned char *)buf, i); | |
-} | |
- | |
-void | |
unban(Client *c) { | |
if(!c->isbanned) | |
return; | |
- XMapWindow(dpy, c->win); | |
- setclientstate(c, NormalState); | |
+ XMoveWindow(dpy, c->win, c->x, c->y); | |
c->isbanned = False; | |
} | |
void | |
-unmanage(Client *c, long state) { | |
+unmanage(Client *c) { | |
XWindowChanges wc; | |
wc.border_width = c->oldborder; | |
t@@ -353,14 +318,13 @@ unmanage(Client *c, long state) { | |
if(sel == c) | |
focus(NULL); | |
XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | |
- setclientstate(c, state); | |
+ setclientstate(c, WithdrawnState); | |
free(c->tags); | |
free(c); | |
XSync(dpy, False); | |
XSetErrorHandler(xerror); | |
XUngrabServer(dpy); | |
- if(state != NormalState) | |
- arrange(); | |
+ arrange(); | |
} | |
void | |
diff --git a/config.mk b/config.mk | |
t@@ -20,8 +20,8 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 | |
# flags | |
CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\" | |
LDFLAGS = -s ${LIBS} | |
-#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" | |
-#LDFLAGS = -g ${LIBS} | |
+CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" | |
+LDFLAGS = -g ${LIBS} | |
# Solaris | |
#CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\" | |
diff --git a/dwm.h b/dwm.h | |
t@@ -48,7 +48,6 @@ struct Client { | |
int rx, ry, rw, rh; /* revert geometry */ | |
int basew, baseh, incw, inch, maxw, maxh, minw, minh; | |
int minax, maxax, minay, maxay; | |
- int unmapped; | |
long flags; | |
unsigned int border, oldborder; | |
Bool isbanned, isfixed, ismax, isfloating; | |
t@@ -81,7 +80,7 @@ extern int wax, way, wah, waw; /* win… | |
extern unsigned int bh, blw, bpos; /* bar height, bar layout la… | |
extern unsigned int ntags, numlockmask; /* number of tags, numl… | |
extern void (*handler[LASTEvent])(XEvent *); /* event handler */ | |
-extern Atom dwmprops, wmatom[WMLast], netatom[NetLast]; | |
+extern Atom wmatom[WMLast], netatom[NetLast]; | |
extern Bool selscreen, *seltags; /* seltags is array of Bool */ | |
extern Client *clients, *sel, *stack; /* global client list and… | |
extern Cursor cursor[CurLast]; | |
t@@ -96,13 +95,11 @@ void configure(Client *c); /* send syntheti… | |
void detach(Client *c); /* detaches c from global clien… | |
void focus(Client *c); /* focus c if visible && !NULL, … | |
void killclient(const char *arg); /* kill sel nicely */ | |
-Bool getprops(Client *c); /* gets client properties */ | |
void manage(Window w, XWindowAttributes *wa); /* manage new client */ | |
void resize(Client *c, int x, int y, | |
int w, int h, Bool sizehints); /* resize with given coo… | |
-void setprops(Client *c); /* sets client properties */ | |
void unban(Client *c); /* unbans c */ | |
-void unmanage(Client *c, long state); /* unmanage c */ | |
+void unmanage(Client *c); /* unmanage c */ | |
void updatesizehints(Client *c); /* update the size hint variables of c… | |
void updatetitle(Client *c); /* update the name of c */ | |
t@@ -131,7 +128,6 @@ void initlayouts(void); /* initiali… | |
Bool isarrange(void (*func)()); /* returns True if func is the … | |
Bool isfloating(void); /* returns True if floating layo… | |
Bool isvisible(Client *c); /* returns True if client is visible… | |
-void getdwmprops(void); /* gets dwm properties */ | |
Client *nexttiled(Client *c); /* returns tiled successor of c */ | |
void restack(void); /* restores z layers of all clients… | |
void setlayout(const char *arg); /* sets layout, NULL means next layout… | |
diff --git a/event.c b/event.c | |
t@@ -221,7 +221,7 @@ destroynotify(XEvent *e) { | |
XDestroyWindowEvent *ev = &e->xdestroywindow; | |
if((c = getclient(ev->window))) | |
- unmanage(c, WithdrawnState); | |
+ unmanage(c); | |
} | |
static void | |
t@@ -332,10 +332,8 @@ unmapnotify(XEvent *e) { | |
Client *c; | |
XUnmapEvent *ev = &e->xunmap; | |
- if((c = getclient(ev->window)) && (ev->event == root)) { | |
- if(ev->send_event || c->unmapped-- == 0) | |
- unmanage(c, WithdrawnState); | |
- } | |
+ if((c = getclient(ev->window))) | |
+ unmanage(c); | |
} | |
/* extern */ | |
diff --git a/main.c b/main.c | |
t@@ -20,7 +20,7 @@ int screen, sx, sy, sw, sh, wax, way, waw, wah; | |
unsigned int bh, ntags; | |
unsigned int bpos = BARPOS; | |
unsigned int numlockmask = 0; | |
-Atom dwmprops, wmatom[WMLast], netatom[NetLast]; | |
+Atom wmatom[WMLast], netatom[NetLast]; | |
Bool *seltags; | |
Bool selscreen = True; | |
Client *clients = NULL; | |
t@@ -42,7 +42,7 @@ cleanup(void) { | |
close(STDIN_FILENO); | |
while(stack) { | |
unban(stack); | |
- unmanage(stack, NormalState); | |
+ unmanage(stack); | |
} | |
if(dc.font.set) | |
XFreeFontSet(dpy, dc.font.set); | |
t@@ -165,7 +165,6 @@ setup(void) { | |
XSetWindowAttributes wa; | |
/* init atoms */ | |
- dwmprops = XInternAtom(dpy, "_DWM_PROPERTIES", False); | |
wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); | |
wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); | |
wmatom[WMName] = XInternAtom(dpy, "WM_NAME", False); | |
t@@ -231,7 +230,6 @@ setup(void) { | |
XSetFont(dpy, dc.gc, dc.font.xfont->fid); | |
/* multihead support */ | |
selscreen = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask); | |
- getdwmprops(); | |
} | |
/* | |
diff --git a/screen.c b/screen.c | |
t@@ -3,8 +3,6 @@ | |
#include <regex.h> | |
#include <stdio.h> | |
#include <stdlib.h> | |
-#include <string.h> | |
-#include <X11/Xatom.h> | |
#include <X11/Xutil.h> | |
/* static */ | |
t@@ -28,7 +26,6 @@ typedef struct { | |
TAGS | |
RULES | |
-static char buf[512]; | |
static unsigned int nrules = 0; | |
static unsigned int nlayouts = 0; | |
static unsigned int ltidx = 0; /* default */ | |
t@@ -53,19 +50,6 @@ floating(void) { /* default floating layout */ | |
resize(c, c->x, c->y, c->w, c->h, True); | |
} | |
-static void | |
-setdwmprops(void) { | |
- unsigned int i; | |
- | |
- for(i = 0; i < ntags && i < sizeof buf - 1; i++) | |
- buf[i] = seltags[i] ? '1' : '0'; | |
- if(i < sizeof buf - 1) | |
- buf[i++] = (char)ltidx + '0'; | |
- buf[i] = '\0'; | |
- XChangeProperty(dpy, root, dwmprops, XA_STRING, 8, | |
- PropModeReplace, (unsigned char *)buf, i); | |
-} | |
- | |
LAYOUTS | |
/* extern */ | |
t@@ -74,6 +58,7 @@ unsigned int blw = 0; | |
void | |
applyrules(Client *c) { | |
+ static char buf[512]; | |
unsigned int i, j; | |
regmatch_t tmp; | |
Bool matched = False; | |
t@@ -215,20 +200,6 @@ isvisible(Client *c) { | |
return False; | |
} | |
-void | |
-getdwmprops(void) { | |
- unsigned int i; | |
- | |
- if(gettextprop(root, dwmprops, buf, sizeof buf)) { | |
- for(i = 0; i < ntags && i < sizeof buf - 1 && buf[i] != '\0'; … | |
- seltags[i] = buf[i] == '1'; | |
- if(i < sizeof buf - 1 && buf[i] != '\0') { | |
- if((unsigned int)(buf[i] - '0') < nlayouts) | |
- ltidx = buf[i] - '0'; | |
- } | |
- } | |
-} | |
- | |
Client * | |
nexttiled(Client *c) { | |
for(; c && (c->isfloating || !isvisible(c)); c = c->next); | |
t@@ -266,15 +237,17 @@ restack(void) { | |
void | |
setlayout(const char *arg) { | |
- int i; | |
+ unsigned int i; | |
if(!arg) { | |
if(++ltidx == nlayouts) | |
ltidx = 0;; | |
} | |
else { | |
- i = atoi(arg); | |
- if(i < 0 || i >= nlayouts) | |
+ for(i = 0; i < nlayouts; i++) | |
+ if(arg == layouts[i].symbol) | |
+ break; | |
+ if(i == nlayouts) | |
return; | |
ltidx = i; | |
} | |
t@@ -282,7 +255,6 @@ setlayout(const char *arg) { | |
arrange(); | |
else | |
drawstatus(); | |
- setdwmprops(); | |
} | |
void | |
t@@ -296,7 +268,6 @@ tag(const char *arg) { | |
i = idxoftag(arg); | |
if(i >= 0 && i < ntags) | |
sel->tags[i] = True; | |
- setprops(sel); | |
arrange(); | |
} | |
t@@ -315,10 +286,8 @@ togglefloating(const char *arg) { | |
if(!sel || isfloating()) | |
return; | |
sel->isfloating = !sel->isfloating; | |
- if(sel->isfloating) { | |
+ if(sel->isfloating) | |
resize(sel, sel->x, sel->y, sel->w, sel->h, True); | |
- setprops(sel); | |
- } | |
arrange(); | |
} | |
t@@ -352,7 +321,6 @@ toggletag(const char *arg) { | |
for(j = 0; j < ntags && !sel->tags[j]; j++); | |
if(j == ntags) | |
sel->tags[i] = True; | |
- setprops(sel); | |
arrange(); | |
} | |
t@@ -365,7 +333,6 @@ toggleview(const char *arg) { | |
for(j = 0; j < ntags && !seltags[j]; j++); | |
if(j == ntags) | |
seltags[i] = True; /* cannot toggle last view */ | |
- setdwmprops(); | |
arrange(); | |
} | |
t@@ -404,6 +371,5 @@ view(const char *arg) { | |
i = idxoftag(arg); | |
if(i >= 0 && i < ntags) | |
seltags[i] = True; | |
- setdwmprops(); | |
arrange(); | |
} |