all repos — dwm @ 36672d0401299a5230b516ca4575365d9f45dd35

my dwm build

removed the _DWM_PROPERTIES handling, reverted ban/unban to XMoveWindow(), and changed argument of setlayout to layout[N].symbol check
Anselm R. Garbe garbeam@gmail.com
Wed, 22 Aug 2007 19:01:05 +0200
commit

36672d0401299a5230b516ca4575365d9f45dd35

parent

b18e6840152b300f2db8ff8dca16aee0839f864b

6 files changed, 23 insertions(+), 101 deletions(-)

jump to
M client.cclient.c

@@ -1,13 +1,10 @@

/* 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) {

@@ -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

@@ -181,21 +176,6 @@ else

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'; i++) - 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;

@@ -242,15 +222,14 @@ for(t = clients; t && t->win != trans; t = t->next);

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 windows require this */ ban(c); + XMapWindow(dpy, c->win); arrange(); }

@@ -318,29 +297,15 @@ }

} 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;

@@ -353,14 +318,13 @@ detachstack(c);

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
M config.mkconfig.mk

@@ -20,8 +20,8 @@

# 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}\"
M dwm.hdwm.h

@@ -48,7 +48,6 @@ int x, y, w, h;

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;

@@ -81,7 +80,7 @@ extern int wax, way, wah, waw; /* windowarea geometry */

extern unsigned int bh, blw, bpos; /* bar height, bar layout label width, bar position */ extern unsigned int ntags, numlockmask; /* number of tags, numlock mask */ 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 stack */ extern Cursor cursor[CurLast];

@@ -96,13 +95,11 @@ void configure(Client *c); /* send synthetic configure event */

void detach(Client *c); /* detaches c from global client list */ void focus(Client *c); /* focus c if visible && !NULL, or focus top visible */ 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 coordinates c*/ -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 */

@@ -131,7 +128,6 @@ void initlayouts(void); /* initialize layout array */

Bool isarrange(void (*func)()); /* returns True if func is the layout function in use */ Bool isfloating(void); /* returns True if floating layout is enabled */ 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 */
M event.cevent.c

@@ -221,7 +221,7 @@ Client *c;

XDestroyWindowEvent *ev = &e->xdestroywindow; if((c = getclient(ev->window))) - unmanage(c, WithdrawnState); + unmanage(c); } static void

@@ -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 */
M main.cmain.c

@@ -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;

@@ -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);

@@ -165,7 +165,6 @@ XModifierKeymap *modmap;

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);

@@ -231,7 +230,6 @@ if(!dc.font.set)

XSetFont(dpy, dc.gc, dc.font.xfont->fid); /* multihead support */ selscreen = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask); - getdwmprops(); } /*
M screen.cscreen.c

@@ -3,8 +3,6 @@ #include "dwm.h"

#include <regex.h> #include <stdio.h> #include <stdlib.h> -#include <string.h> -#include <X11/Xatom.h> #include <X11/Xutil.h> /* static */

@@ -28,7 +26,6 @@

TAGS RULES -static char buf[512]; static unsigned int nrules = 0; static unsigned int nlayouts = 0; static unsigned int ltidx = 0; /* default */

@@ -53,19 +50,6 @@ if(isvisible(c))

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 */

@@ -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;

@@ -215,20 +200,6 @@ return True;

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'; i++) - 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);

@@ -266,15 +237,17 @@ }

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; }

@@ -282,7 +255,6 @@ if(sel)

arrange(); else drawstatus(); - setdwmprops(); } void

@@ -296,7 +268,6 @@ sel->tags[i] = arg == NULL;

i = idxoftag(arg); if(i >= 0 && i < ntags) sel->tags[i] = True; - setprops(sel); arrange(); }

@@ -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(); }

@@ -352,7 +321,6 @@ sel->tags[i] = !sel->tags[i];

for(j = 0; j < ntags && !sel->tags[j]; j++); if(j == ntags) sel->tags[i] = True; - setprops(sel); arrange(); }

@@ -365,7 +333,6 @@ seltags[i] = !seltags[i];

for(j = 0; j < ntags && !seltags[j]; j++); if(j == ntags) seltags[i] = True; /* cannot toggle last view */ - setdwmprops(); arrange(); }

@@ -404,6 +371,5 @@ seltags[i] = arg == NULL;

i = idxoftag(arg); if(i >= 0 && i < ntags) seltags[i] = True; - setdwmprops(); arrange(); }