1 /* |
1 /* |
2 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> |
2 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> |
3 * See LICENSE file for license details. |
3 * See LICENSE file for license details. |
4 */ |
4 */ |
5 |
5 |
6 #include "config.h" |
6 #include <X11/Xlib.h> |
7 #include "draw.h" |
|
8 #include "util.h" |
|
9 |
7 |
10 #include <X11/Xutil.h> |
8 /********** CUSTOMIZE **********/ |
11 |
9 |
|
10 #define FONT "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*" |
|
11 #define BGCOLOR "#666699" |
|
12 #define FGCOLOR "#ffffff" |
|
13 #define BORDERCOLOR "#9999CC" |
|
14 #define STATUSDELAY 10 /* seconds */ |
12 #define WM_PROTOCOL_DELWIN 1 |
15 #define WM_PROTOCOL_DELWIN 1 |
13 |
16 |
|
17 /* tags */ |
|
18 enum { Tscratch, Tdev, Tirc, Twww, Twork, TLast }; |
|
19 |
|
20 /********** CUSTOMIZE **********/ |
|
21 |
|
22 typedef struct Brush Brush; |
14 typedef struct Client Client; |
23 typedef struct Client Client; |
|
24 typedef struct Fnt Fnt; |
15 typedef struct Key Key; |
25 typedef struct Key Key; |
16 |
26 |
17 /* atoms */ |
27 /* atoms */ |
18 enum { WMProtocols, WMDelete, WMLast }; |
28 enum { WMProtocols, WMDelete, WMLast }; |
19 enum { NetSupported, NetWMName, NetLast }; |
29 enum { NetSupported, NetWMName, NetLast }; |
20 |
30 |
21 /* cursor */ |
31 /* cursor */ |
22 enum { CurNormal, CurResize, CurMove, CurInput, CurLast }; |
32 enum { CurNormal, CurResize, CurMove, CurInput, CurLast }; |
|
33 |
|
34 struct Fnt { |
|
35 XFontStruct *xfont; |
|
36 XFontSet set; |
|
37 int ascent; |
|
38 int descent; |
|
39 int height; |
|
40 }; |
|
41 |
|
42 struct Brush { |
|
43 GC gc; |
|
44 Drawable drawable; |
|
45 int x, y, w, h; |
|
46 Fnt font; |
|
47 unsigned long bg; |
|
48 unsigned long fg; |
|
49 unsigned long border; |
|
50 }; |
23 |
51 |
24 struct Client { |
52 struct Client { |
25 char name[256]; |
53 char name[256]; |
26 char *tags[TLast]; |
54 char *tags[TLast]; |
27 int proto; |
55 int proto; |
44 void (*func)(void *aux); |
72 void (*func)(void *aux); |
45 void *aux; |
73 void *aux; |
46 }; |
74 }; |
47 |
75 |
48 extern Display *dpy; |
76 extern Display *dpy; |
49 extern Window root, barwin; |
77 extern Window root; |
50 extern Atom wm_atom[WMLast], net_atom[NetLast]; |
78 extern Atom wm_atom[WMLast], net_atom[NetLast]; |
51 extern Cursor cursor[CurLast]; |
79 extern Cursor cursor[CurLast]; |
52 extern Bool running, issel; |
80 extern Bool running, issel; |
53 extern void (*handler[LASTEvent]) (XEvent *); |
81 extern void (*handler[LASTEvent]) (XEvent *); |
54 extern void (*arrange)(void *aux); |
82 extern void (*arrange)(void *aux); |
55 |
83 |
56 extern int tsel, screen, sx, sy, sw, sh, bx, by, bw, bh; |
84 extern int tsel, screen, sx, sy, sw, sh, th; |
57 extern char stext[1024], *tags[TLast]; |
85 extern char stext[1024], *tags[TLast]; |
58 |
86 |
59 extern Brush brush; |
87 extern Brush brush; |
60 extern Client *clients, *stack; |
88 extern Client *clients, *stack; |
61 |
89 |
62 /* bar.c */ |
90 /* draw.c */ |
63 extern void draw_bar(); |
91 extern void draw(Display *dpy, Brush *b, Bool border, const char *text); |
|
92 extern void loadcolors(Display *dpy, int screen, Brush *b, |
|
93 const char *bg, const char *fg, const char *bo); |
|
94 extern void loadfont(Display *dpy, Fnt *font, const char *fontstr); |
|
95 extern unsigned int textnw(Fnt *font, char *text, unsigned int len); |
|
96 extern unsigned int textw(Fnt *font, char *text); |
|
97 extern unsigned int texth(Fnt *font); |
64 |
98 |
65 /* client.c */ |
99 /* client.c */ |
66 extern void manage(Window w, XWindowAttributes *wa); |
100 extern void manage(Window w, XWindowAttributes *wa); |
67 extern void unmanage(Client *c); |
101 extern void unmanage(Client *c); |
68 extern Client *getclient(Window w); |
102 extern Client *getclient(Window w); |
70 extern void update_name(Client *c); |
104 extern void update_name(Client *c); |
71 extern void draw_client(Client *c); |
105 extern void draw_client(Client *c); |
72 extern void resize(Client *c); |
106 extern void resize(Client *c); |
73 extern void update_size(Client *c); |
107 extern void update_size(Client *c); |
74 extern Client *gettitle(Window w); |
108 extern Client *gettitle(Window w); |
75 extern void raise(Client *c); |
109 extern void craise(Client *c); |
76 extern void lower(Client *c); |
110 extern void lower(Client *c); |
77 extern void kill(void *aux); |
111 extern void ckill(void *aux); |
78 extern void sel(void *aux); |
112 extern void sel(void *aux); |
79 extern void max(void *aux); |
113 extern void max(void *aux); |
80 extern void floating(void *aux); |
114 extern void floating(void *aux); |
81 extern void grid(void *aux); |
115 extern void grid(void *aux); |
82 extern void gravitate(Client *c, Bool invert); |
116 extern void gravitate(Client *c, Bool invert); |
90 |
124 |
91 /* mouse.c */ |
125 /* mouse.c */ |
92 extern void mresize(Client *c); |
126 extern void mresize(Client *c); |
93 extern void mmove(Client *c); |
127 extern void mmove(Client *c); |
94 |
128 |
|
129 /* util.c */ |
|
130 extern void error(char *errstr, ...); |
|
131 extern void *emallocz(unsigned int size); |
|
132 extern void *emalloc(unsigned int size); |
|
133 extern void *erealloc(void *ptr, unsigned int size); |
|
134 extern char *estrdup(const char *str); |
|
135 extern void spawn(Display *dpy, char *argv[]); |
|
136 extern void swap(void **p1, void **p2); |
|
137 |
95 /* wm.c */ |
138 /* wm.c */ |
96 extern int error_handler(Display *dpy, XErrorEvent *error); |
139 extern int error_handler(Display *dpy, XErrorEvent *error); |
97 extern void send_message(Window w, Atom a, long value); |
140 extern void send_message(Window w, Atom a, long value); |
98 extern int win_proto(Window w); |
141 extern int win_proto(Window w); |
99 extern void run(void *aux); |
142 extern void run(void *aux); |