Mercurial > hg > index.fcgi > dwm > dwm-3.6.1-10pba
comparison dwm.h @ 0:7024076fa948
initial add
author | paulo@localhost |
---|---|
date | Sun, 22 Mar 2009 23:26:35 -0700 |
parents | |
children | ba504f41828f |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:446485c4c2df |
---|---|
1 /* (C)opyright MMVI-MMVII Anselm R. Garbe <garbeam at gmail dot com> | |
2 * See LICENSE file for license details. | |
3 * | |
4 * dynamic window manager is designed like any other X client as well. It is | |
5 * driven through handling X events. In contrast to other X clients, a window | |
6 * manager selects for SubstructureRedirectMask on the root window, to receive | |
7 * events about window (dis-)appearance. Only one X connection at a time is | |
8 * allowed to select for this event mask. | |
9 * | |
10 * Calls to fetch an X event from the event queue are blocking. Due reading | |
11 * status text from standard input, a select()-driven main loop has been | |
12 * implemented which selects for reads on the X connection and STDIN_FILENO to | |
13 * handle all data smoothly. The event handlers of dwm are organized in an | |
14 * array which is accessed whenever a new event has been fetched. This allows | |
15 * event dispatching in O(1) time. | |
16 * | |
17 * Each child of the root window is called a client, except windows which have | |
18 * set the override_redirect flag. Clients are organized in a global | |
19 * doubly-linked client list, the focus history is remembered through a global | |
20 * stack list. Each client contains an array of Bools of the same size as the | |
21 * global tags array to indicate the tags of a client. For each client dwm | |
22 * creates a small title window, which is resized whenever the (_NET_)WM_NAME | |
23 * properties are updated or the client is moved/resized. | |
24 * | |
25 * Keys and tagging rules are organized as arrays and defined in the config.h | |
26 * file. These arrays are kept static in event.o and tag.o respectively, | |
27 * because no other part of dwm needs access to them. The current layout is | |
28 * represented by the lt pointer. | |
29 * | |
30 * To understand everything else, start reading main.c:main(). | |
31 */ | |
32 | |
33 #include "config.h" | |
34 #include <X11/Xlib.h> | |
35 | |
36 /* mask shorthands, used in event.c and client.c */ | |
37 #define BUTTONMASK (ButtonPressMask | ButtonReleaseMask) | |
38 | |
39 enum { NetSupported, NetWMName, NetLast }; /* EWMH atoms */ | |
40 enum { WMProtocols, WMDelete, WMState, WMLast }; /* default atoms */ | |
41 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ | |
42 enum { ColBorder, ColFG, ColBG, ColLast }; /* color */ | |
43 | |
44 typedef union { | |
45 const char *cmd; | |
46 int i; | |
47 } Arg; /* argument type */ | |
48 | |
49 typedef struct { | |
50 int ascent; | |
51 int descent; | |
52 int height; | |
53 XFontSet set; | |
54 XFontStruct *xfont; | |
55 } Fnt; | |
56 | |
57 typedef struct { | |
58 int x, y, w, h; | |
59 unsigned long norm[ColLast]; | |
60 unsigned long sel[ColLast]; | |
61 Drawable drawable; | |
62 Fnt font; | |
63 GC gc; | |
64 } DC; /* draw context */ | |
65 | |
66 typedef struct Client Client; | |
67 struct Client { | |
68 char name[256]; | |
69 int x, y, w, h; | |
70 int rx, ry, rw, rh; /* revert geometry */ | |
71 int basew, baseh, incw, inch, maxw, maxh, minw, minh; | |
72 int minax, minay, maxax, maxay; | |
73 long flags; | |
74 unsigned int border; | |
75 Bool isbanned, isfixed, ismax, isversatile; | |
76 Bool *tags; | |
77 Client *next; | |
78 Client *prev; | |
79 Client *snext; | |
80 Window win; | |
81 }; | |
82 | |
83 typedef struct { | |
84 const char *symbol; | |
85 void (*arrange)(void); | |
86 } Layout; | |
87 | |
88 extern const char *tags[]; /* all tags */ | |
89 extern char stext[256]; /* status text */ | |
90 extern int screen, sx, sy, sw, sh; /* screen geometry */ | |
91 extern int wax, way, wah, waw; /* windowarea geometry */ | |
92 extern unsigned int bh, blw; /* bar height, bar layout label width */ | |
93 extern unsigned int master, nmaster; /* master percent, number of master clients */ | |
94 extern unsigned int ntags, numlockmask; /* number of tags, dynamic lock mask */ | |
95 extern void (*handler[LASTEvent])(XEvent *); /* event handler */ | |
96 extern Atom wmatom[WMLast], netatom[NetLast]; | |
97 extern Bool selscreen, *seltag; /* seltag is array of Bool */ | |
98 extern Client *clients, *sel, *stack; /* global client list and stack */ | |
99 extern Cursor cursor[CurLast]; | |
100 extern DC dc; /* global draw context */ | |
101 extern Display *dpy; | |
102 extern Layout *lt; | |
103 extern Window root, barwin; | |
104 | |
105 /* client.c */ | |
106 extern void configure(Client *c); /* send synthetic configure event */ | |
107 extern void focus(Client *c); /* focus c, c may be NULL */ | |
108 extern void killclient(Arg *arg); /* kill c nicely */ | |
109 extern void manage(Window w, XWindowAttributes *wa); /* manage new client */ | |
110 extern void resize(Client *c, int x, int y, | |
111 int w, int h, Bool sizehints); /* resize with given coordinates c*/ | |
112 extern void toggleversatile(Arg *arg); /* toggles focused client between versatile/and non-versatile state */ | |
113 extern void updatesizehints(Client *c); /* update the size hint variables of c */ | |
114 extern void updatetitle(Client *c); /* update the name of c */ | |
115 extern void unmanage(Client *c); /* destroy c */ | |
116 extern void zoom(Arg *arg); /* zooms the focused client to master area, arg is ignored */ | |
117 extern void pushup(Arg *arg); | |
118 extern void pushdown(Arg *arg); | |
119 extern void moveresize(Arg *arg); | |
120 | |
121 /* draw.c */ | |
122 extern void drawstatus(void); /* draw the bar */ | |
123 extern void drawtext(const char *text, | |
124 unsigned long col[ColLast]); /* draw text */ | |
125 extern unsigned int textw(const char *text); /* return the width of text in px*/ | |
126 | |
127 /* event.c */ | |
128 extern void grabkeys(void); /* grab all keys defined in config.h */ | |
129 | |
130 /* layout.c */ | |
131 extern void focusnext(Arg *arg); /* focuses next visible client, arg is ignored */ | |
132 extern void focusprev(Arg *arg); /* focuses previous visible client, arg is ignored */ | |
133 extern void incnmaster(Arg *arg); /* increments nmaster with arg's index value */ | |
134 extern void initlayouts(void); /* initialize layout array */ | |
135 extern Client *nexttiled(Client *c); /* returns tiled successor of c */ | |
136 extern void resizemaster(Arg *arg); /* resizes the master percent with arg's index value */ | |
137 extern void restack(void); /* restores z layers of all clients */ | |
138 extern void setlayout(Arg *arg); /* sets layout, -1 toggles */ | |
139 extern void versatile(void); /* arranges all windows versatile */ | |
140 | |
141 /* main.c */ | |
142 extern void quit(Arg *arg); /* quit dwm nicely */ | |
143 extern void sendevent(Window w, Atom a, long value); /* send synthetic event to w */ | |
144 extern int xerror(Display *dsply, XErrorEvent *ee); /* dwm's X error handler */ | |
145 | |
146 /* tag.c */ | |
147 extern void compileregs(void); /* initialize regexps of rules defined in config.h */ | |
148 extern Bool isvisible(Client *c); /* returns True if client is visible */ | |
149 extern void settags(Client *c, Client *trans); /* sets tags of c */ | |
150 extern void tag(Arg *arg); /* tags c with arg's index */ | |
151 extern void toggletag(Arg *arg); /* toggles c tags with arg's index */ | |
152 extern void toggleview(Arg *arg); /* toggles the tag with arg's index (in)visible */ | |
153 extern void view(Arg *arg); /* views the tag with arg's index */ | |
154 extern void last_view(Arg *arg); /* go to last viewed tag */ | |
155 | |
156 /* util.c */ | |
157 extern void *emallocz(unsigned int size); /* allocates zero-initialized memory, exits on error */ | |
158 extern void eprint(const char *errstr, ...); /* prints errstr and exits with 1 */ | |
159 extern void spawn(Arg *arg); /* forks a new subprocess with arg's cmd */ | |
160 |