made all stuff non-static - so you can choose wether to use dwm the static or the extern way when extending it
This commit is contained in:
		
							parent
							
								
									01022b95d6
								
							
						
					
					
						commit
						fe2775a15b
					
				
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @ -3,7 +3,7 @@ | |||||||
| 
 | 
 | ||||||
| include config.mk | include config.mk | ||||||
| 
 | 
 | ||||||
| SRC = dwm.c | SRC += dwm.c | ||||||
| OBJ = ${SRC:.c=.o} | OBJ = ${SRC:.c=.o} | ||||||
| 
 | 
 | ||||||
| all: options dwm | all: options dwm | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								config.h
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								config.h
									
									
									
									
									
								
							| @ -12,8 +12,8 @@ | |||||||
| #define SELFGCOLOR		"#fff" | #define SELFGCOLOR		"#fff" | ||||||
| 
 | 
 | ||||||
| /* tagging */ | /* tagging */ | ||||||
| static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL }; | const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL }; | ||||||
| static Rule rules[] = { | Rule rules[] = { | ||||||
| 	/* class:instance:title regex	tags regex	isfloating */ | 	/* class:instance:title regex	tags regex	isfloating */ | ||||||
| 	{ "Firefox",			"3",		False }, | 	{ "Firefox",			"3",		False }, | ||||||
| 	{ "Gimp",			NULL,		True }, | 	{ "Gimp",			NULL,		True }, | ||||||
| @ -22,7 +22,7 @@ static Rule rules[] = { | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* layout(s) */ | /* layout(s) */ | ||||||
| static Layout layouts[] = { | Layout layouts[] = { | ||||||
| 	/* symbol		function */ | 	/* symbol		function */ | ||||||
| 	{ "[]=",		tile }, /* first entry is default */ | 	{ "[]=",		tile }, /* first entry is default */ | ||||||
| 	{ "><>",		floating }, | 	{ "><>",		floating }, | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								dwm.1
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								dwm.1
									
									
									
									
									
								
							| @ -1,4 +1,4 @@ | |||||||
| .TH DWM 1 dwm\-VERSION | .TH DWM 1 dwm\-4.3 | ||||||
| .SH NAME | .SH NAME | ||||||
| dwm \- dynamic window manager | dwm \- dynamic window manager | ||||||
| .SH SYNOPSIS | .SH SYNOPSIS | ||||||
|  | |||||||
							
								
								
									
										361
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										361
									
								
								dwm.c
									
									
									
									
									
								
							| @ -21,10 +21,7 @@ | |||||||
|  * creates a small title window, which is resized whenever the (_NET_)WM_NAME |  * creates a small title window, which is resized whenever the (_NET_)WM_NAME | ||||||
|  * properties are updated or the client is moved/resized. |  * properties are updated or the client is moved/resized. | ||||||
|  * |  * | ||||||
|  * Keys and tagging rules are organized as arrays and defined in the config.h |  * Keys and tagging rules are organized as arrays and defined in config.h. | ||||||
|  * file. These arrays are kept static in event.o and tag.o respectively, |  | ||||||
|  * because no other part of dwm needs access to them.  The current layout is |  | ||||||
|  * represented by the lt pointer. |  | ||||||
|  * |  * | ||||||
|  * To understand everything else, start reading main(). |  * To understand everything else, start reading main(). | ||||||
|  */ |  */ | ||||||
| @ -114,96 +111,96 @@ typedef struct { | |||||||
| } Regs; | } Regs; | ||||||
| 
 | 
 | ||||||
| /* forward declarations */ | /* forward declarations */ | ||||||
| static void applyrules(Client *c); | void applyrules(Client *c); | ||||||
| static void arrange(void); | void arrange(void); | ||||||
| static void attach(Client *c); | void attach(Client *c); | ||||||
| static void attachstack(Client *c); | void attachstack(Client *c); | ||||||
| static void ban(Client *c); | void ban(Client *c); | ||||||
| static void buttonpress(XEvent *e); | void buttonpress(XEvent *e); | ||||||
| static void checkotherwm(void); | void checkotherwm(void); | ||||||
| static void cleanup(void); | void cleanup(void); | ||||||
| static void compileregs(void); | void compileregs(void); | ||||||
| static void configure(Client *c); | void configure(Client *c); | ||||||
| static void configurenotify(XEvent *e); | void configurenotify(XEvent *e); | ||||||
| static void configurerequest(XEvent *e); | void configurerequest(XEvent *e); | ||||||
| static void destroynotify(XEvent *e); | void destroynotify(XEvent *e); | ||||||
| static void detach(Client *c); | void detach(Client *c); | ||||||
| static void detachstack(Client *c); | void detachstack(Client *c); | ||||||
| static void drawbar(void); | void drawbar(void); | ||||||
| static void drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]); | void drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]); | ||||||
| static void drawtext(const char *text, unsigned long col[ColLast]); | void drawtext(const char *text, unsigned long col[ColLast]); | ||||||
| static void *emallocz(unsigned int size); | void *emallocz(unsigned int size); | ||||||
| static void enternotify(XEvent *e); | void enternotify(XEvent *e); | ||||||
| static void eprint(const char *errstr, ...); | void eprint(const char *errstr, ...); | ||||||
| static void expose(XEvent *e); | void expose(XEvent *e); | ||||||
| static void floating(void); /* default floating layout */ | void floating(void); /* default floating layout */ | ||||||
| static void focus(Client *c); | void focus(Client *c); | ||||||
| static void focusnext(const char *arg); | void focusnext(const char *arg); | ||||||
| static void focusprev(const char *arg); | void focusprev(const char *arg); | ||||||
| static Client *getclient(Window w); | Client *getclient(Window w); | ||||||
| static unsigned long getcolor(const char *colstr); | unsigned long getcolor(const char *colstr); | ||||||
| static long getstate(Window w); | long getstate(Window w); | ||||||
| static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size); | Bool gettextprop(Window w, Atom atom, char *text, unsigned int size); | ||||||
| static void grabbuttons(Client *c, Bool focused); | void grabbuttons(Client *c, Bool focused); | ||||||
| static unsigned int idxoftag(const char *tag); | unsigned int idxoftag(const char *tag); | ||||||
| static void initfont(const char *fontstr); | void initfont(const char *fontstr); | ||||||
| static Bool isarrange(void (*func)()); | Bool isarrange(void (*func)()); | ||||||
| static Bool isoccupied(unsigned int t); | Bool isoccupied(unsigned int t); | ||||||
| static Bool isprotodel(Client *c); | Bool isprotodel(Client *c); | ||||||
| static Bool isvisible(Client *c); | Bool isvisible(Client *c); | ||||||
| static void keypress(XEvent *e); | void keypress(XEvent *e); | ||||||
| static void killclient(const char *arg); | void killclient(const char *arg); | ||||||
| static void leavenotify(XEvent *e); | void leavenotify(XEvent *e); | ||||||
| static void manage(Window w, XWindowAttributes *wa); | void manage(Window w, XWindowAttributes *wa); | ||||||
| static void mappingnotify(XEvent *e); | void mappingnotify(XEvent *e); | ||||||
| static void maprequest(XEvent *e); | void maprequest(XEvent *e); | ||||||
| static void movemouse(Client *c); | void movemouse(Client *c); | ||||||
| static Client *nexttiled(Client *c); | Client *nexttiled(Client *c); | ||||||
| static void propertynotify(XEvent *e); | void propertynotify(XEvent *e); | ||||||
| static void quit(const char *arg); | void quit(const char *arg); | ||||||
| static void resize(Client *c, int x, int y, int w, int h, Bool sizehints); | void resize(Client *c, int x, int y, int w, int h, Bool sizehints); | ||||||
| static void resizemouse(Client *c); | void resizemouse(Client *c); | ||||||
| static void restack(void); | void restack(void); | ||||||
| static void run(void); | void run(void); | ||||||
| static void scan(void); | void scan(void); | ||||||
| static void setclientstate(Client *c, long state); | void setclientstate(Client *c, long state); | ||||||
| static void setlayout(const char *arg); | void setlayout(const char *arg); | ||||||
| static void setmwfact(const char *arg); | void setmwfact(const char *arg); | ||||||
| static void setup(void); | void setup(void); | ||||||
| static void spawn(const char *arg); | void spawn(const char *arg); | ||||||
| static void tag(const char *arg); | void tag(const char *arg); | ||||||
| static unsigned int textnw(const char *text, unsigned int len); | unsigned int textnw(const char *text, unsigned int len); | ||||||
| static unsigned int textw(const char *text); | unsigned int textw(const char *text); | ||||||
| static void tile(void); | void tile(void); | ||||||
| static void togglebar(const char *arg); | void togglebar(const char *arg); | ||||||
| static void togglefloating(const char *arg); | void togglefloating(const char *arg); | ||||||
| static void togglemax(const char *arg); | void togglemax(const char *arg); | ||||||
| static void toggletag(const char *arg); | void toggletag(const char *arg); | ||||||
| static void toggleview(const char *arg); | void toggleview(const char *arg); | ||||||
| static void unban(Client *c); | void unban(Client *c); | ||||||
| static void unmanage(Client *c); | void unmanage(Client *c); | ||||||
| static void unmapnotify(XEvent *e); | void unmapnotify(XEvent *e); | ||||||
| static void updatebarpos(void); | void updatebarpos(void); | ||||||
| static void updatesizehints(Client *c); | void updatesizehints(Client *c); | ||||||
| static void updatetitle(Client *c); | void updatetitle(Client *c); | ||||||
| static void view(const char *arg); | void view(const char *arg); | ||||||
| static int xerror(Display *dpy, XErrorEvent *ee); | int xerror(Display *dpy, XErrorEvent *ee); | ||||||
| static int xerrordummy(Display *dsply, XErrorEvent *ee); | int xerrordummy(Display *dsply, XErrorEvent *ee); | ||||||
| static int xerrorstart(Display *dsply, XErrorEvent *ee); | int xerrorstart(Display *dsply, XErrorEvent *ee); | ||||||
| static void zoom(const char *arg); | void zoom(const char *arg); | ||||||
| 
 | 
 | ||||||
| /* variables */ | /* variables */ | ||||||
| static char stext[256]; | char stext[256]; | ||||||
| static double mwfact; | double mwfact; | ||||||
| static int screen, sx, sy, sw, sh, wax, way, waw, wah; | int screen, sx, sy, sw, sh, wax, way, waw, wah; | ||||||
| static int (*xerrorxlib)(Display *, XErrorEvent *); | int (*xerrorxlib)(Display *, XErrorEvent *); | ||||||
| static unsigned int bh, bpos, ntags; | unsigned int bh, bpos, ntags; | ||||||
| static unsigned int blw = 0; | unsigned int blw = 0; | ||||||
| static unsigned int ltidx = 0; /* default */ | unsigned int ltidx = 0; /* default */ | ||||||
| static unsigned int nlayouts = 0; | unsigned int nlayouts = 0; | ||||||
| static unsigned int nrules = 0; | unsigned int nrules = 0; | ||||||
| static unsigned int numlockmask = 0; | unsigned int numlockmask = 0; | ||||||
| static void (*handler[LASTEvent]) (XEvent *) = { | void (*handler[LASTEvent]) (XEvent *) = { | ||||||
| 	[ButtonPress] = buttonpress, | 	[ButtonPress] = buttonpress, | ||||||
| 	[ConfigureRequest] = configurerequest, | 	[ConfigureRequest] = configurerequest, | ||||||
| 	[ConfigureNotify] = configurenotify, | 	[ConfigureNotify] = configurenotify, | ||||||
| @ -217,25 +214,25 @@ static void (*handler[LASTEvent]) (XEvent *) = { | |||||||
| 	[PropertyNotify] = propertynotify, | 	[PropertyNotify] = propertynotify, | ||||||
| 	[UnmapNotify] = unmapnotify | 	[UnmapNotify] = unmapnotify | ||||||
| }; | }; | ||||||
| static Atom wmatom[WMLast], netatom[NetLast]; | Atom wmatom[WMLast], netatom[NetLast]; | ||||||
| static Bool otherwm, readin; | Bool otherwm, readin; | ||||||
| static Bool running = True; | Bool running = True; | ||||||
| static Bool *seltags; | Bool *seltags; | ||||||
| static Bool selscreen = True; | Bool selscreen = True; | ||||||
| static Client *clients = NULL; | Client *clients = NULL; | ||||||
| static Client *sel = NULL; | Client *sel = NULL; | ||||||
| static Client *stack = NULL; | Client *stack = NULL; | ||||||
| static Cursor cursor[CurLast]; | Cursor cursor[CurLast]; | ||||||
| static Display *dpy; | Display *dpy; | ||||||
| static DC dc = {0}; | DC dc = {0}; | ||||||
| static Window barwin, root; | Window barwin, root; | ||||||
| static Regs *regs = NULL; | Regs *regs = NULL; | ||||||
| 
 | 
 | ||||||
| /* configuration, allows nested code to access above variables */ | /* configuration, allows nested code to access above variables */ | ||||||
| #include "config.h" | #include "config.h" | ||||||
| 
 | 
 | ||||||
| /* functions*/ | /* functions*/ | ||||||
| static void | void | ||||||
| applyrules(Client *c) { | applyrules(Client *c) { | ||||||
| 	static char buf[512]; | 	static char buf[512]; | ||||||
| 	unsigned int i, j; | 	unsigned int i, j; | ||||||
| @ -267,7 +264,7 @@ applyrules(Client *c) { | |||||||
| 			c->tags[i] = seltags[i]; | 			c->tags[i] = seltags[i]; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| arrange(void) { | arrange(void) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 
 | 
 | ||||||
| @ -281,7 +278,7 @@ arrange(void) { | |||||||
| 	restack(); | 	restack(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| attach(Client *c) { | attach(Client *c) { | ||||||
| 	if(clients) | 	if(clients) | ||||||
| 		clients->prev = c; | 		clients->prev = c; | ||||||
| @ -289,13 +286,13 @@ attach(Client *c) { | |||||||
| 	clients = c; | 	clients = c; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| attachstack(Client *c) { | attachstack(Client *c) { | ||||||
| 	c->snext = stack; | 	c->snext = stack; | ||||||
| 	stack = c; | 	stack = c; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| ban(Client *c) { | ban(Client *c) { | ||||||
| 	if(c->isbanned) | 	if(c->isbanned) | ||||||
| 		return; | 		return; | ||||||
| @ -303,7 +300,7 @@ ban(Client *c) { | |||||||
| 	c->isbanned = True; | 	c->isbanned = True; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| buttonpress(XEvent *e) { | buttonpress(XEvent *e) { | ||||||
| 	unsigned int i, x; | 	unsigned int i, x; | ||||||
| 	Client *c; | 	Client *c; | ||||||
| @ -359,7 +356,7 @@ buttonpress(XEvent *e) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| checkotherwm(void) { | checkotherwm(void) { | ||||||
| 	otherwm = False; | 	otherwm = False; | ||||||
| 	XSetErrorHandler(xerrorstart); | 	XSetErrorHandler(xerrorstart); | ||||||
| @ -375,7 +372,7 @@ checkotherwm(void) { | |||||||
| 	XSync(dpy, False); | 	XSync(dpy, False); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| cleanup(void) { | cleanup(void) { | ||||||
| 	close(STDIN_FILENO); | 	close(STDIN_FILENO); | ||||||
| 	while(stack) { | 	while(stack) { | ||||||
| @ -398,7 +395,7 @@ cleanup(void) { | |||||||
| 	free(seltags); | 	free(seltags); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| compileregs(void) { | compileregs(void) { | ||||||
| 	unsigned int i; | 	unsigned int i; | ||||||
| 	regex_t *reg; | 	regex_t *reg; | ||||||
| @ -425,7 +422,7 @@ compileregs(void) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| configure(Client *c) { | configure(Client *c) { | ||||||
| 	XConfigureEvent ce; | 	XConfigureEvent ce; | ||||||
| 
 | 
 | ||||||
| @ -443,7 +440,7 @@ configure(Client *c) { | |||||||
| 	XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce); | 	XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| configurenotify(XEvent *e) { | configurenotify(XEvent *e) { | ||||||
| 	XConfigureEvent *ev = &e->xconfigure; | 	XConfigureEvent *ev = &e->xconfigure; | ||||||
| 
 | 
 | ||||||
| @ -458,7 +455,7 @@ configurenotify(XEvent *e) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| configurerequest(XEvent *e) { | configurerequest(XEvent *e) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 	XConfigureRequestEvent *ev = &e->xconfigurerequest; | 	XConfigureRequestEvent *ev = &e->xconfigurerequest; | ||||||
| @ -503,7 +500,7 @@ configurerequest(XEvent *e) { | |||||||
| 	XSync(dpy, False); | 	XSync(dpy, False); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| destroynotify(XEvent *e) { | destroynotify(XEvent *e) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 	XDestroyWindowEvent *ev = &e->xdestroywindow; | 	XDestroyWindowEvent *ev = &e->xdestroywindow; | ||||||
| @ -512,7 +509,7 @@ destroynotify(XEvent *e) { | |||||||
| 		unmanage(c); | 		unmanage(c); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| detach(Client *c) { | detach(Client *c) { | ||||||
| 	if(c->prev) | 	if(c->prev) | ||||||
| 		c->prev->next = c->next; | 		c->prev->next = c->next; | ||||||
| @ -523,7 +520,7 @@ detach(Client *c) { | |||||||
| 	c->next = c->prev = NULL; | 	c->next = c->prev = NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| detachstack(Client *c) { | detachstack(Client *c) { | ||||||
| 	Client **tc; | 	Client **tc; | ||||||
| 
 | 
 | ||||||
| @ -531,7 +528,7 @@ detachstack(Client *c) { | |||||||
| 	*tc = c->snext; | 	*tc = c->snext; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| drawbar(void) { | drawbar(void) { | ||||||
| 	int i, x; | 	int i, x; | ||||||
| 
 | 
 | ||||||
| @ -571,7 +568,7 @@ drawbar(void) { | |||||||
| 	XSync(dpy, False); | 	XSync(dpy, False); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]) { | drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]) { | ||||||
| 	int x; | 	int x; | ||||||
| 	XGCValues gcv; | 	XGCValues gcv; | ||||||
| @ -592,7 +589,7 @@ drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| drawtext(const char *text, unsigned long col[ColLast]) { | drawtext(const char *text, unsigned long col[ColLast]) { | ||||||
| 	int x, y, w, h; | 	int x, y, w, h; | ||||||
| 	static char buf[256]; | 	static char buf[256]; | ||||||
| @ -632,7 +629,7 @@ drawtext(const char *text, unsigned long col[ColLast]) { | |||||||
| 		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); | 		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void * | void * | ||||||
| emallocz(unsigned int size) { | emallocz(unsigned int size) { | ||||||
| 	void *res = calloc(1, size); | 	void *res = calloc(1, size); | ||||||
| 
 | 
 | ||||||
| @ -641,7 +638,7 @@ emallocz(unsigned int size) { | |||||||
| 	return res; | 	return res; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| enternotify(XEvent *e) { | enternotify(XEvent *e) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 	XCrossingEvent *ev = &e->xcrossing; | 	XCrossingEvent *ev = &e->xcrossing; | ||||||
| @ -656,7 +653,7 @@ enternotify(XEvent *e) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| eprint(const char *errstr, ...) { | eprint(const char *errstr, ...) { | ||||||
| 	va_list ap; | 	va_list ap; | ||||||
| 
 | 
 | ||||||
| @ -666,7 +663,7 @@ eprint(const char *errstr, ...) { | |||||||
| 	exit(EXIT_FAILURE); | 	exit(EXIT_FAILURE); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| expose(XEvent *e) { | expose(XEvent *e) { | ||||||
| 	XExposeEvent *ev = &e->xexpose; | 	XExposeEvent *ev = &e->xexpose; | ||||||
| 
 | 
 | ||||||
| @ -676,7 +673,7 @@ expose(XEvent *e) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| floating(void) { /* default floating layout */ | floating(void) { /* default floating layout */ | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 
 | 
 | ||||||
| @ -685,7 +682,7 @@ floating(void) { /* default floating layout */ | |||||||
| 			resize(c, c->x, c->y, c->w, c->h, True); | 			resize(c, c->x, c->y, c->w, c->h, True); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| focus(Client *c) { | focus(Client *c) { | ||||||
| 	if((!c && selscreen) || (c && !isvisible(c))) | 	if((!c && selscreen) || (c && !isvisible(c))) | ||||||
| 		for(c = stack; c && !isvisible(c); c = c->snext); | 		for(c = stack; c && !isvisible(c); c = c->snext); | ||||||
| @ -710,7 +707,7 @@ focus(Client *c) { | |||||||
| 		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); | 		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| focusnext(const char *arg) { | focusnext(const char *arg) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 
 | 
 | ||||||
| @ -725,7 +722,7 @@ focusnext(const char *arg) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| focusprev(const char *arg) { | focusprev(const char *arg) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 
 | 
 | ||||||
| @ -742,7 +739,7 @@ focusprev(const char *arg) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static Client * | Client * | ||||||
| getclient(Window w) { | getclient(Window w) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 
 | 
 | ||||||
| @ -750,7 +747,7 @@ getclient(Window w) { | |||||||
| 	return c; | 	return c; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static unsigned long | unsigned long | ||||||
| getcolor(const char *colstr) { | getcolor(const char *colstr) { | ||||||
| 	Colormap cmap = DefaultColormap(dpy, screen); | 	Colormap cmap = DefaultColormap(dpy, screen); | ||||||
| 	XColor color; | 	XColor color; | ||||||
| @ -760,7 +757,7 @@ getcolor(const char *colstr) { | |||||||
| 	return color.pixel; | 	return color.pixel; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static long | long | ||||||
| getstate(Window w) { | getstate(Window w) { | ||||||
| 	int format, status; | 	int format, status; | ||||||
| 	long result = -1; | 	long result = -1; | ||||||
| @ -778,7 +775,7 @@ getstate(Window w) { | |||||||
| 	return result; | 	return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static Bool | Bool | ||||||
| gettextprop(Window w, Atom atom, char *text, unsigned int size) { | gettextprop(Window w, Atom atom, char *text, unsigned int size) { | ||||||
| 	char **list = NULL; | 	char **list = NULL; | ||||||
| 	int n; | 	int n; | ||||||
| @ -805,7 +802,7 @@ gettextprop(Window w, Atom atom, char *text, unsigned int size) { | |||||||
| 	return True; | 	return True; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| grabbuttons(Client *c, Bool focused) { | grabbuttons(Client *c, Bool focused) { | ||||||
| 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | ||||||
| 
 | 
 | ||||||
| @ -842,7 +839,7 @@ grabbuttons(Client *c, Bool focused) { | |||||||
| 				GrabModeAsync, GrabModeSync, None, None); | 				GrabModeAsync, GrabModeSync, None, None); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static unsigned int | unsigned int | ||||||
| idxoftag(const char *tag) { | idxoftag(const char *tag) { | ||||||
| 	unsigned int i; | 	unsigned int i; | ||||||
| 
 | 
 | ||||||
| @ -852,7 +849,7 @@ idxoftag(const char *tag) { | |||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| initfont(const char *fontstr) { | initfont(const char *fontstr) { | ||||||
| 	char *def, **missing; | 	char *def, **missing; | ||||||
| 	int i, n; | 	int i, n; | ||||||
| @ -894,13 +891,13 @@ initfont(const char *fontstr) { | |||||||
| 	dc.font.height = dc.font.ascent + dc.font.descent; | 	dc.font.height = dc.font.ascent + dc.font.descent; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static Bool | Bool | ||||||
| isarrange(void (*func)()) | isarrange(void (*func)()) | ||||||
| { | { | ||||||
| 	return func == layouts[ltidx].arrange; | 	return func == layouts[ltidx].arrange; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static Bool | Bool | ||||||
| isoccupied(unsigned int t) { | isoccupied(unsigned int t) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 
 | 
 | ||||||
| @ -910,7 +907,7 @@ isoccupied(unsigned int t) { | |||||||
| 	return False; | 	return False; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static Bool | Bool | ||||||
| isprotodel(Client *c) { | isprotodel(Client *c) { | ||||||
| 	int i, n; | 	int i, n; | ||||||
| 	Atom *protocols; | 	Atom *protocols; | ||||||
| @ -925,7 +922,7 @@ isprotodel(Client *c) { | |||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static Bool | Bool | ||||||
| isvisible(Client *c) { | isvisible(Client *c) { | ||||||
| 	unsigned int i; | 	unsigned int i; | ||||||
| 
 | 
 | ||||||
| @ -935,7 +932,7 @@ isvisible(Client *c) { | |||||||
| 	return False; | 	return False; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| keypress(XEvent *e) { | keypress(XEvent *e) { | ||||||
| 	KEYS | 	KEYS | ||||||
| 	unsigned int len = sizeof keys / sizeof keys[0]; | 	unsigned int len = sizeof keys / sizeof keys[0]; | ||||||
| @ -970,7 +967,7 @@ keypress(XEvent *e) { | |||||||
| 		} | 		} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| killclient(const char *arg) { | killclient(const char *arg) { | ||||||
| 	XEvent ev; | 	XEvent ev; | ||||||
| 
 | 
 | ||||||
| @ -989,7 +986,7 @@ killclient(const char *arg) { | |||||||
| 		XKillClient(dpy, sel->win); | 		XKillClient(dpy, sel->win); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| leavenotify(XEvent *e) { | leavenotify(XEvent *e) { | ||||||
| 	XCrossingEvent *ev = &e->xcrossing; | 	XCrossingEvent *ev = &e->xcrossing; | ||||||
| 
 | 
 | ||||||
| @ -999,7 +996,7 @@ leavenotify(XEvent *e) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| manage(Window w, XWindowAttributes *wa) { | manage(Window w, XWindowAttributes *wa) { | ||||||
| 	unsigned int i; | 	unsigned int i; | ||||||
| 	Client *c, *t = NULL; | 	Client *c, *t = NULL; | ||||||
| @ -1057,7 +1054,7 @@ manage(Window w, XWindowAttributes *wa) { | |||||||
| 	arrange(); | 	arrange(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| mappingnotify(XEvent *e) { | mappingnotify(XEvent *e) { | ||||||
| 	XMappingEvent *ev = &e->xmapping; | 	XMappingEvent *ev = &e->xmapping; | ||||||
| 
 | 
 | ||||||
| @ -1066,7 +1063,7 @@ mappingnotify(XEvent *e) { | |||||||
| 		keypress(NULL); | 		keypress(NULL); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| maprequest(XEvent *e) { | maprequest(XEvent *e) { | ||||||
| 	static XWindowAttributes wa; | 	static XWindowAttributes wa; | ||||||
| 	XMapRequestEvent *ev = &e->xmaprequest; | 	XMapRequestEvent *ev = &e->xmaprequest; | ||||||
| @ -1079,7 +1076,7 @@ maprequest(XEvent *e) { | |||||||
| 		manage(ev->window, &wa); | 		manage(ev->window, &wa); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| movemouse(Client *c) { | movemouse(Client *c) { | ||||||
| 	int x1, y1, ocx, ocy, di, nx, ny; | 	int x1, y1, ocx, ocy, di, nx, ny; | ||||||
| 	unsigned int dui; | 	unsigned int dui; | ||||||
| @ -1122,13 +1119,13 @@ movemouse(Client *c) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static Client * | Client * | ||||||
| nexttiled(Client *c) { | nexttiled(Client *c) { | ||||||
| 	for(; c && (c->isfloating || !isvisible(c)); c = c->next); | 	for(; c && (c->isfloating || !isvisible(c)); c = c->next); | ||||||
| 	return c; | 	return c; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| propertynotify(XEvent *e) { | propertynotify(XEvent *e) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 	Window trans; | 	Window trans; | ||||||
| @ -1156,12 +1153,12 @@ propertynotify(XEvent *e) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| quit(const char *arg) { | quit(const char *arg) { | ||||||
| 	readin = running = False; | 	readin = running = False; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| resize(Client *c, int x, int y, int w, int h, Bool sizehints) { | resize(Client *c, int x, int y, int w, int h, Bool sizehints) { | ||||||
| 	double dx, dy, max, min, ratio; | 	double dx, dy, max, min, ratio; | ||||||
| 	XWindowChanges wc;  | 	XWindowChanges wc;  | ||||||
| @ -1224,7 +1221,7 @@ resize(Client *c, int x, int y, int w, int h, Bool sizehints) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| resizemouse(Client *c) { | resizemouse(Client *c) { | ||||||
| 	int ocx, ocy; | 	int ocx, ocy; | ||||||
| 	int nw, nh; | 	int nw, nh; | ||||||
| @ -1263,7 +1260,7 @@ resizemouse(Client *c) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| restack(void) { | restack(void) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 	XEvent ev; | 	XEvent ev; | ||||||
| @ -1292,7 +1289,7 @@ restack(void) { | |||||||
| 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| run(void) { | run(void) { | ||||||
| 	char *p; | 	char *p; | ||||||
| 	int r, xfd; | 	int r, xfd; | ||||||
| @ -1340,7 +1337,7 @@ run(void) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| scan(void) { | scan(void) { | ||||||
| 	unsigned int i, num; | 	unsigned int i, num; | ||||||
| 	Window *wins, d1, d2; | 	Window *wins, d1, d2; | ||||||
| @ -1367,7 +1364,7 @@ scan(void) { | |||||||
| 		XFree(wins); | 		XFree(wins); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| setclientstate(Client *c, long state) { | setclientstate(Client *c, long state) { | ||||||
| 	long data[] = {state, None}; | 	long data[] = {state, None}; | ||||||
| 
 | 
 | ||||||
| @ -1375,7 +1372,7 @@ setclientstate(Client *c, long state) { | |||||||
| 			PropModeReplace, (unsigned char *)data, 2); | 			PropModeReplace, (unsigned char *)data, 2); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| setlayout(const char *arg) { | setlayout(const char *arg) { | ||||||
| 	unsigned int i; | 	unsigned int i; | ||||||
| 
 | 
 | ||||||
| @ -1397,7 +1394,7 @@ setlayout(const char *arg) { | |||||||
| 		drawbar(); | 		drawbar(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| setmwfact(const char *arg) { | setmwfact(const char *arg) { | ||||||
| 	double delta; | 	double delta; | ||||||
| 
 | 
 | ||||||
| @ -1419,7 +1416,7 @@ setmwfact(const char *arg) { | |||||||
| 	arrange(); | 	arrange(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| setup(void) { | setup(void) { | ||||||
| 	unsigned int i, j, mask; | 	unsigned int i, j, mask; | ||||||
| 	Window w; | 	Window w; | ||||||
| @ -1513,7 +1510,7 @@ setup(void) { | |||||||
| 	selscreen = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask); | 	selscreen = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| spawn(const char *arg) { | spawn(const char *arg) { | ||||||
| 	static char *shell = NULL; | 	static char *shell = NULL; | ||||||
| 
 | 
 | ||||||
| @ -1537,7 +1534,7 @@ spawn(const char *arg) { | |||||||
| 	wait(0); | 	wait(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| tag(const char *arg) { | tag(const char *arg) { | ||||||
| 	unsigned int i; | 	unsigned int i; | ||||||
| 
 | 
 | ||||||
| @ -1551,7 +1548,7 @@ tag(const char *arg) { | |||||||
| 	arrange(); | 	arrange(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static unsigned int | unsigned int | ||||||
| textnw(const char *text, unsigned int len) { | textnw(const char *text, unsigned int len) { | ||||||
| 	XRectangle r; | 	XRectangle r; | ||||||
| 
 | 
 | ||||||
| @ -1562,12 +1559,12 @@ textnw(const char *text, unsigned int len) { | |||||||
| 	return XTextWidth(dc.font.xfont, text, len); | 	return XTextWidth(dc.font.xfont, text, len); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static unsigned int | unsigned int | ||||||
| textw(const char *text) { | textw(const char *text) { | ||||||
| 	return textnw(text, strlen(text)) + dc.font.height; | 	return textnw(text, strlen(text)) + dc.font.height; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| tile(void) { | tile(void) { | ||||||
| 	unsigned int i, n, nx, ny, nw, nh, mw, th; | 	unsigned int i, n, nx, ny, nw, nh, mw, th; | ||||||
| 	Client *c; | 	Client *c; | ||||||
| @ -1606,7 +1603,7 @@ tile(void) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| togglebar(const char *arg) { | togglebar(const char *arg) { | ||||||
| 	if(bpos == BarOff) | 	if(bpos == BarOff) | ||||||
| 		bpos = (BARPOS == BarOff) ? BarTop : BARPOS; | 		bpos = (BARPOS == BarOff) ? BarTop : BARPOS; | ||||||
| @ -1616,7 +1613,7 @@ togglebar(const char *arg) { | |||||||
| 	arrange(); | 	arrange(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| togglefloating(const char *arg) { | togglefloating(const char *arg) { | ||||||
| 	if(!sel) | 	if(!sel) | ||||||
| 		return; | 		return; | ||||||
| @ -1626,7 +1623,7 @@ togglefloating(const char *arg) { | |||||||
| 	arrange(); | 	arrange(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| togglemax(const char *arg) { | togglemax(const char *arg) { | ||||||
| 	XEvent ev; | 	XEvent ev; | ||||||
| 
 | 
 | ||||||
| @ -1645,7 +1642,7 @@ togglemax(const char *arg) { | |||||||
| 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| toggletag(const char *arg) { | toggletag(const char *arg) { | ||||||
| 	unsigned int i, j; | 	unsigned int i, j; | ||||||
| 
 | 
 | ||||||
| @ -1659,7 +1656,7 @@ toggletag(const char *arg) { | |||||||
| 	arrange(); | 	arrange(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| toggleview(const char *arg) { | toggleview(const char *arg) { | ||||||
| 	unsigned int i, j; | 	unsigned int i, j; | ||||||
| 
 | 
 | ||||||
| @ -1671,7 +1668,7 @@ toggleview(const char *arg) { | |||||||
| 	arrange(); | 	arrange(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| unban(Client *c) { | unban(Client *c) { | ||||||
| 	if(!c->isbanned) | 	if(!c->isbanned) | ||||||
| 		return; | 		return; | ||||||
| @ -1679,7 +1676,7 @@ unban(Client *c) { | |||||||
| 	c->isbanned = False; | 	c->isbanned = False; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| unmanage(Client *c) { | unmanage(Client *c) { | ||||||
| 	XWindowChanges wc; | 	XWindowChanges wc; | ||||||
| 
 | 
 | ||||||
| @ -1702,7 +1699,7 @@ unmanage(Client *c) { | |||||||
| 	arrange(); | 	arrange(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| unmapnotify(XEvent *e) { | unmapnotify(XEvent *e) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 	XUnmapEvent *ev = &e->xunmap; | 	XUnmapEvent *ev = &e->xunmap; | ||||||
| @ -1711,7 +1708,7 @@ unmapnotify(XEvent *e) { | |||||||
| 		unmanage(c); | 		unmanage(c); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| updatebarpos(void) { | updatebarpos(void) { | ||||||
| 	XEvent ev; | 	XEvent ev; | ||||||
| 
 | 
 | ||||||
| @ -1737,7 +1734,7 @@ updatebarpos(void) { | |||||||
| 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| updatesizehints(Client *c) { | updatesizehints(Client *c) { | ||||||
| 	long msize; | 	long msize; | ||||||
| 	XSizeHints size; | 	XSizeHints size; | ||||||
| @ -1789,7 +1786,7 @@ updatesizehints(Client *c) { | |||||||
| 			&& c->maxw == c->minw && c->maxh == c->minh); | 			&& c->maxw == c->minw && c->maxh == c->minh); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| updatetitle(Client *c) { | updatetitle(Client *c) { | ||||||
| 	if(!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name)) | 	if(!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name)) | ||||||
| 		gettextprop(c->win, wmatom[WMName], c->name, sizeof c->name); | 		gettextprop(c->win, wmatom[WMName], c->name, sizeof c->name); | ||||||
| @ -1798,7 +1795,7 @@ updatetitle(Client *c) { | |||||||
| /* There's no way to check accesses to destroyed windows, thus those cases are
 | /* There's no way to check accesses to destroyed windows, thus those cases are
 | ||||||
|  * ignored (especially on UnmapNotify's).  Other types of errors call Xlibs |  * ignored (especially on UnmapNotify's).  Other types of errors call Xlibs | ||||||
|  * default error handler, which may call exit.  */ |  * default error handler, which may call exit.  */ | ||||||
| static int | int | ||||||
| xerror(Display *dpy, XErrorEvent *ee) { | xerror(Display *dpy, XErrorEvent *ee) { | ||||||
| 	if(ee->error_code == BadWindow | 	if(ee->error_code == BadWindow | ||||||
| 	|| (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch) | 	|| (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch) | ||||||
| @ -1814,20 +1811,20 @@ xerror(Display *dpy, XErrorEvent *ee) { | |||||||
| 	return xerrorxlib(dpy, ee); /* may call exit */ | 	return xerrorxlib(dpy, ee); /* may call exit */ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int | int | ||||||
| xerrordummy(Display *dsply, XErrorEvent *ee) { | xerrordummy(Display *dsply, XErrorEvent *ee) { | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Startup Error handler to check if another window manager
 | /* Startup Error handler to check if another window manager
 | ||||||
|  * is already running. */ |  * is already running. */ | ||||||
| static int | int | ||||||
| xerrorstart(Display *dsply, XErrorEvent *ee) { | xerrorstart(Display *dsply, XErrorEvent *ee) { | ||||||
| 	otherwm = True; | 	otherwm = True; | ||||||
| 	return -1; | 	return -1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| view(const char *arg) { | view(const char *arg) { | ||||||
| 	unsigned int i; | 	unsigned int i; | ||||||
| 
 | 
 | ||||||
| @ -1839,7 +1836,7 @@ view(const char *arg) { | |||||||
| 	arrange(); | 	arrange(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | void | ||||||
| zoom(const char *arg) { | zoom(const char *arg) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user