about summary refs log tree commit diff stats
path: root/Makefile
Commit message (Expand)AuthorAgeFilesLines
* using SRC instead of *.carg@10ksloc.org2006-08-031-1/+1
* changed the files included in make distarg@10ksloc.org2006-08-031-1/+2
* applied Sanders doc changes, added a PHONY line and changed the output of con...arg@10ksloc.org2006-08-031-1/+4
* implemented the idea presented by Sander for dwm targetarg@10ksloc.org2006-08-021-1/+4
* applied Sanders patchesarg@10ksloc.org2006-08-011-2/+1
* makefile now sets permissions for executables and man pagesarg@10ksloc.org2006-07-201-0/+6
* simplified MakefileAnselm R. Garbe2006-07-171-2/+2
* rearranged several stuffAnselm R. Garbe2006-07-151-1/+1
* rearrangedAnselm R. Garbe2006-07-141-1/+1
* draw bar on exposure ;)Anselm R. Garbe2006-07-141-1/+1
* prep 0.1 0.1Anselm R. Garbe2006-07-141-1/+1
* implemented bar for dwm (I miss status text), I plan that status text is read...Anselm R. Garbe2006-07-141-1/+1
* changed default colorsAnselm R. Garbe2006-07-131-2/+2
* added dev.c instead of kb.cAnselm R. Garbe2006-07-131-1/+1
* added logo+descriptionAnselm R. Garbe2006-07-131-12/+12
* removed unnecessary crapAnselm R. Garbe2006-07-131-16/+10
* added grid mode on Mod1Mask gAnselm R. Garbe2006-07-121-1/+1
* added mouse-based resizalsAnselm R. Garbe2006-07-111-1/+1
* removed unnecessary sel stuffAnselm R. Garbe2006-07-111-8/+2
* added gridsel to gridwmAnselm R. Garbe2006-07-111-2/+8
* added key handlingAnselm R. Garbe2006-07-111-1/+1
* added several other stuffAnselm R. Garbe2006-07-101-2/+2
* renamed gridmenu.c into menu.cAnselm R. Garbe2006-07-101-1/+1
* several new changes, made gridmenu workingAnselm R. Garbe2006-07-101-4/+10
* added new stuffAnselm R. Garbe2006-07-101-6/+6
* added gridmenuAnselm R. Garbe2006-07-101-3/+35
* initial importAnselm R. Garbe2006-07-101-0/+23
href='/akkartik/mu/commit/074console.mu?h=hlt&id=77d5b5d658830bd24724f945e0d6ddf6a06adc0e'>77d5b5d6 ^
45c08fea ^
e3092e7b ^
45c08fea ^


e3092e7b ^
45c08fea ^
5497090a ^
e3092e7b ^
45c08fea ^

e3092e7b ^
45c08fea ^
5497090a ^
45c08fea ^
e3092e7b ^
45c08fea ^
134dad7c ^
45c08fea ^

e3092e7b ^

c6c19a27 ^


45c08fea ^
77d5b5d6 ^
45c08fea ^













e3092e7b ^
f8c0ef3e ^

77d5b5d6 ^
45c08fea ^
f8c0ef3e ^


45c08fea ^
cf9af278 ^
45c08fea ^

f8c0ef3e ^

f8c0ef3e ^


6a0f71b9 ^

77d5b5d6 ^
6a0f71b9 ^





5e9eff8c ^


77d5b5d6 ^
5e9eff8c ^








1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115

                                                                            
 


                                                                     
                                              


                                                              
                       





                   
              
                          

 
                         
             

                                                                                              


                                                              
                                                                              
                                            
                              

 
                   
             
                                      
   


                                                                           
     
                                                        
                                                                            
                                

                                                                                                              
     
                                                                                 
                                                                       
                                                                                               
   
                                                              
        

                                                                                            

 


                                                                            
                 
             













                                                                                                                    
 

                             
             
                                    


                                         
                                                                                           
                              

                                                      

                                                                   


        

                       
             





                                                                    


                                                                             
             








                                                     
6092aa977e9cc87bcf72713af8e7c698ddea4b56'>6092aa9 ^
9056d7e ^
d2d394e ^
281f098 ^
3399650 ^
d7e1708 ^
6b25d06 ^

d7ec23a ^
281f098 ^

868159f ^
d7e1708 ^
dba2306 ^
6b25d06 ^

b9da4b0 ^
9e8b325 ^
281f098 ^



9e8b325 ^
dba2306 ^
6b25d06 ^
281f098 ^

d2d394e ^
868159f ^

29355bd ^
8b59083 ^
281f098 ^
868159f ^
281f098 ^
868159f ^
aa13727 ^

281f098 ^
5983c00 ^

281f098 ^

0b80d18 ^
281f098 ^
4b5b3d9 ^
6b25d06 ^
8dc8605 ^
868159f ^


fee8df6 ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
                                                                    
                                        


                                                                             


                                                                              
  
                                                                            
                                                                        



                                                                              
  




                                                                              

                                                                             
  


                                                                             

                                                                        
  
                                                              

   
                   
                     
 
                                                   
                                                                     

                                          
                                 
 








                                                                           
               
                        
              
                          
 
                


                    

                           
      
 
                
                       


                                      


                          
                        
 
                             
               
                       
                  
                       
                                                 
                                                       

                                                             
                            
                                     
                   
                     
                     
                      
                   
                    

  


                                                                                        
                                                                     
                                                                         

                                                                                              
                                                                   
                                                                                       
                                             
                                                                             
                                                                                  
                              
                                                                         
                    
                           
 
              
                                                                       
                                                                                    


                                                                                   


                                                                               
                                                                               
                                                                                         
                                                                          
                                                               
 
            

                                                                                                
                                                                                    

                                                                                    
                                                                                   
 
             

                                                                                       
 
            



                                                                                                       
 
           
                                                                                                     

                                                                                     
                                                                    

                                                                                     
 
            
                                                                                                       
                                                                                    
                                                                                                
                                                                                              

            
                                                                                        

                                                                                   

                                                                                                     
                                                                                               
                                                                                       
                                                                                                       
                                                                                      
                                                                                                                 


                                                                                                      
                                                                                                             
/* (C)opyright MMVI-MMVII Anselm R. Garbe <garbeam at gmail dot com>
 * See LICENSE file for license details.
 *
 * dynamic window manager is designed like any other X client as well. It is
 * driven through handling X events. In contrast to other X clients, a window
 * manager selects for SubstructureRedirectMask on the root window, to receive
 * events about window (dis-)appearance.  Only one X connection at a time is
 * allowed to select for this event mask.
 *
 * Calls to fetch an X event from the event queue are blocking.  Due reading
 * status text from standard input, a select()-driven main loop has been
 * implemented which selects for reads on the X connection and STDIN_FILENO to
 * handle all data smoothly. The event handlers of dwm are organized in an
 * array which is accessed whenever a new event has been fetched. This allows
 * event dispatching in O(1) time.
 *
 * Each child of the root window is called a client, except windows which have
 * set the override_redirect flag.  Clients are organized in a global
 * doubly-linked client list, the focus history is remembered through a global
 * stack list. Each client contains an array of Bools of the same size as the
 * global tags array to indicate the tags of a client.  For each client dwm
 * creates a small title window, which is resized whenever the (_NET_)WM_NAME
 * properties are updated or the client is moved/resized.
 *
 * Keys and tagging rules are organized as arrays and defined in the 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 mode is
 * represented by the arrange() function pointer, which wether points to
 * dofloat() or dotile(). 
 *
 * To understand everything else, start reading main.c:main().
 */

#include "config.h"
#include <X11/Xlib.h>

/* mask shorthands, used in event.c and client.c */
#define BUTTONMASK		(ButtonPressMask | ButtonReleaseMask)
/* other stuff used in different places */
#define BORDERPX		1
#define PROTODELWIN		1

enum { NetSupported, NetWMName, NetLast };		/* EWMH atoms */
enum { WMProtocols, WMDelete, WMLast };			/* default atoms */
enum { CurNormal, CurResize, CurMove, CurLast };	/* cursor */
enum { ColFG, ColBG, ColLast };				/* color */

typedef enum {
	TopLeft, TopRight, BotLeft, BotRight
} Corner; /* window corners */

typedef union {
	const char *cmd;
	int i;
} Arg; /* argument type */

typedef struct {
	int ascent;
	int descent;
	int height;
	XFontSet set;
	XFontStruct *xfont;
} Fnt;

typedef struct {
	int x, y, w, h;
	unsigned long norm[ColLast];
	unsigned long sel[ColLast];
	unsigned long status[ColLast];
	Drawable drawable;
	Fnt font;
	GC gc;
} DC; /* draw context */

typedef struct Client Client;
struct Client {
	char name[256];
	int proto;
	int x, y, w, h;
	int rx, ry, rw, rh; /* revert geometry */
	int tx, ty, tw, th; /* title window geometry */
	int basew, baseh, incw, inch, maxw, maxh, minw, minh;
	long flags; 
	unsigned int border;
	Bool isfloat, isfixed, ismax;
	Bool *tags;
	Client *next;
	Client *prev;
	Client *snext;
	Window win;
	Window twin;
};

extern const char *tags[];			/* all tags */
extern char stext[1024];			/* status text */
extern int bx, by, bw, bh, bmw;			/* bar geometry, bar mode label width */
extern int screen, sx, sy, sw, sh;		/* screen geometry */
extern int wax, way, wah, waw;			/* windowarea geometry */
extern unsigned int master, nmaster;		/* master percent, number of master clients */
extern unsigned int ntags, numlockmask;		/* number of tags, dynamic lock mask */
extern void (*handler[LASTEvent])(XEvent *);	/* event handler */
extern void (*arrange)(void);			/* arrange function, indicates mode  */
extern Atom wmatom[WMLast], netatom[NetLast];
extern Bool running, issel, *seltag;		/* seltag is array of Bool */
extern Client *clients, *sel, *stack;		/* global client list and stack */
extern Cursor cursor[CurLast];
extern DC dc;					/* global draw context */
extern Display *dpy;
extern Window root, barwin;

/* client.c */
extern void ban(Client *c);			/* ban c from screen */
extern void configure(Client *c);		/* send synthetic configure event */
extern void focus(Client *c);			/* focus c, c may be NULL */
extern Client *getclient(Window w);		/* return client of w */
extern Client *getctitle(Window w);		/* return client of title window */
extern void killclient(Arg *arg);		/* kill c nicely */
extern void manage(Window w, XWindowAttributes *wa);	/* manage new client */
extern void resize(Client *c, Bool sizehints, Corner sticky); /* resize c*/
extern void resizetitle(Client *c);		/* resizes c->twin correctly */
extern void updatesizehints(Client *c);		/* update the size hint variables of c */
extern void updatetitle(Client *c);		/* update the name of c */
extern void unmanage(Client *c);		/* destroy c */

/* draw.c */
extern void drawall(void);			/* draw all visible client titles and the bar */
extern void drawstatus(void);			/* draw the bar */
extern void drawclient(Client *c);		/* draw title and set border of c */
extern unsigned long getcolor(const char *colstr);	/* return color of colstr */
extern void setfont(const char *fontstr);	/* set the font for DC */
extern unsigned int textw(const char *text);	/* return the width of text in px*/

/* event.c */
extern void grabkeys(void);			/* grab all keys defined in config.h */
extern void procevent(void);			/* process pending X events */

/* main.c */
extern int getproto(Window w);			/* return protocol mask of WMProtocols property of w */
extern void quit(Arg *arg);			/* quit dwm nicely */
extern void sendevent(Window w, Atom a, long value);	/* send synthetic event to w */
extern int xerror(Display *dsply, XErrorEvent *ee);	/* dwm's X error handler */

/* tag.c */
extern void initrregs(void);			/* initialize regexps of rules defined in config.h */
extern Client *getnext(Client *c);		/* returns next visible client */
extern Client *getprev(Client *c);		/* returns previous visible client */
extern void settags(Client *c, Client *trans);	/* sets tags of c */
extern void tag(Arg *arg);			/* tags c with arg's index */
extern void toggletag(Arg *arg);		/* toggles c tags with arg's index */

/* util.c */
extern void *emallocz(unsigned int size);	/* allocates zero-initialized memory, exits on error */
extern void eprint(const char *errstr, ...);	/* prints errstr and exits with 1 */
extern void *erealloc(void *ptr, unsigned int size);	/* reallocates memory, exits on error */
extern void spawn(Arg *arg);			/* forks a new subprocess with to arg's cmd */

/* view.c */
extern void detach(Client *c);			/* detaches c from global client list */
extern void dofloat(void);			/* arranges all windows floating */
extern void dotile(void);			/* arranges all windows tiled */
extern void focusnext(Arg *arg);		/* focuses next visible client, arg is ignored  */
extern void focusprev(Arg *arg);		/* focuses previous visible client, arg is ignored */
extern void incnmaster(Arg *arg);		/* increments nmaster with arg's index value */
extern Bool isvisible(Client *c);		/* returns True if client is visible */
extern void resizemaster(Arg *arg);		/* resizes the master percent with arg's index value */
extern void restack(void);			/* restores z layers of all clients */
extern void togglefloat(Arg *arg);		/* toggles focusesd client between floating/non-floating state */
extern void togglemode(Arg *arg);		/* toggles global arrange function (dotile/dofloat) */
extern void toggleview(Arg *arg);		/* toggles the tag with arg's index (in)visible */
extern void view(Arg *arg);			/* views the tag with arg's index */
extern void zoom(Arg *arg);			/* zooms the focused client to master area, arg is ignored */