diff options
| author | Anselm R. Garbe <garbeam@gmail.com> | 2007-08-22 19:01:05 +0200 | 
|---|---|---|
| committer | Anselm R. Garbe <garbeam@gmail.com> | 2007-08-22 19:01:05 +0200 | 
| commit | 36672d0401299a5230b516ca4575365d9f45dd35 (patch) | |
| tree | 3770848e8bec981cdc239d0e89b2a241f2bdfc67 | |
| parent | b18e6840152b300f2db8ff8dca16aee0839f864b (diff) | |
removed the _DWM_PROPERTIES handling, reverted ban/unban to XMoveWindow(), and changed argument of setlayout to layout[N].symbol check
| -rw-r--r-- | client.c | 50 | ||||
| -rw-r--r-- | config.mk | 4 | ||||
| -rw-r--r-- | dwm.h | 8 | ||||
| -rw-r--r-- | event.c | 8 | ||||
| -rw-r--r-- | main.c | 6 | ||||
| -rw-r--r-- | screen.c | 48 | 
6 files changed, 23 insertions, 101 deletions
| @@ -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; @@ -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 @@ 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'; 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 @@ 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 windows require this */  	ban(c); +	XMapWindow(dpy, c->win);  	arrange();  } @@ -318,29 +297,15 @@ resize(Client *c, int x, int y, int w, int h, Bool sizehints) {  }  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 @@ 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 @@ -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}\" @@ -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; @@ -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 */ @@ -221,7 +221,7 @@ destroynotify(XEvent *e) {  	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 */ @@ -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 @@ 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); @@ -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();  }  /* @@ -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 */ @@ -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 */ @@ -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 */ @@ -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 @@ 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'; 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 @@ 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;  	} @@ -282,7 +255,6 @@ setlayout(const char *arg) {  		arrange();  	else  		drawstatus(); -	setdwmprops();  }  void @@ -296,7 +268,6 @@ tag(const char *arg) {  	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 @@ toggletag(const char *arg) {  	for(j = 0; j < ntags && !sel->tags[j]; j++);  	if(j == ntags)  		sel->tags[i] = True; -	setprops(sel);  	arrange();  } @@ -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();  } @@ -404,6 +371,5 @@ view(const char *arg) {  	i = idxoftag(arg);  	if(i >= 0 && i < ntags)  		seltags[i] = True; -	setdwmprops();  	arrange();  } | 
