Mercurial > dwm-meillo
comparison main.c @ 57:f005d46462e8
implemented bar for dwm (I miss status text), I plan that status text is read from stdin in dwm
author | Anselm R. Garbe <garbeam@wmii.de> |
---|---|
date | Fri, 14 Jul 2006 10:07:38 +0200 |
parents | d18f6dd0cf23 |
children | 1269bd127551 |
comparison
equal
deleted
inserted
replaced
56:b72b7086c385 | 57:f005d46462e8 |
---|---|
4 */ | 4 */ |
5 | 5 |
6 #include <stdarg.h> | 6 #include <stdarg.h> |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 #include <stdlib.h> | 8 #include <stdlib.h> |
9 #include <string.h> | |
9 | 10 |
10 #include <X11/cursorfont.h> | 11 #include <X11/cursorfont.h> |
11 #include <X11/Xatom.h> | 12 #include <X11/Xatom.h> |
12 #include <X11/Xproto.h> | 13 #include <X11/Xproto.h> |
13 | 14 |
32 Cursor cursor[CurLast]; | 33 Cursor cursor[CurLast]; |
33 Bool running = True; | 34 Bool running = True; |
34 Bool issel; | 35 Bool issel; |
35 | 36 |
36 int tsel = Tdev; /* default tag */ | 37 int tsel = Tdev; /* default tag */ |
37 int screen, sx, sy, sw, sh, mw, th; | 38 int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; |
39 char stext[1024]; | |
38 | 40 |
39 DC dc = {0}; | 41 DC dc = {0}; |
40 Client *clients = NULL; | 42 Client *clients = NULL; |
41 Client *sel = NULL; | 43 Client *sel = NULL; |
42 | 44 |
43 static Bool other_wm_running; | 45 static Bool other_wm_running; |
44 static const char version[] = | 46 static const char version[] = |
45 "dwm - " VERSION ", (C)opyright MMVI Anselm R. Garbe\n"; | 47 "dwm-" VERSION ", (C)opyright MMVI Anselm R. Garbe\n"; |
46 static int (*x_error_handler) (Display *, XErrorEvent *); | 48 static int (*x_error_handler) (Display *, XErrorEvent *); |
47 | 49 |
48 static void | 50 static void |
49 usage() { error("usage: dwm [-v]\n"); } | 51 usage() { error("usage: dwm [-v]\n"); } |
50 | 52 |
217 XFlush(dpy); | 219 XFlush(dpy); |
218 | 220 |
219 if(other_wm_running) | 221 if(other_wm_running) |
220 error("dwm: another window manager is already running\n"); | 222 error("dwm: another window manager is already running\n"); |
221 | 223 |
222 sx = sy = 0; | |
223 sw = DisplayWidth(dpy, screen); | |
224 sh = DisplayHeight(dpy, screen); | |
225 mw = (sw * MASTERW) / 100; | |
226 issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask); | |
227 | |
228 XSetErrorHandler(0); | 224 XSetErrorHandler(0); |
229 x_error_handler = XSetErrorHandler(error_handler); | 225 x_error_handler = XSetErrorHandler(error_handler); |
230 | 226 |
231 /* init atoms */ | 227 /* init atoms */ |
232 wm_atom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); | 228 wm_atom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); |
233 wm_atom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); | 229 wm_atom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); |
234 net_atom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); | 230 net_atom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); |
235 net_atom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); | 231 net_atom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); |
236 | |
237 XChangeProperty(dpy, root, net_atom[NetSupported], XA_ATOM, 32, | 232 XChangeProperty(dpy, root, net_atom[NetSupported], XA_ATOM, 32, |
238 PropModeReplace, (unsigned char *) net_atom, NetLast); | 233 PropModeReplace, (unsigned char *) net_atom, NetLast); |
239 | |
240 | 234 |
241 /* init cursors */ | 235 /* init cursors */ |
242 cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr); | 236 cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr); |
243 cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); | 237 cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); |
244 cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); | 238 cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); |
249 dc.bg = initcolor(BGCOLOR); | 243 dc.bg = initcolor(BGCOLOR); |
250 dc.fg = initcolor(FGCOLOR); | 244 dc.fg = initcolor(FGCOLOR); |
251 dc.border = initcolor(BORDERCOLOR); | 245 dc.border = initcolor(BORDERCOLOR); |
252 initfont(FONT); | 246 initfont(FONT); |
253 | 247 |
254 th = dc.font.height + 4; | 248 sx = sy = 0; |
255 | 249 sw = DisplayWidth(dpy, screen); |
256 dc.drawable = XCreatePixmap(dpy, root, sw, th, DefaultDepth(dpy, screen)); | 250 sh = DisplayHeight(dpy, screen); |
257 dc.gc = XCreateGC(dpy, root, 0, 0); | 251 mw = (sw * MASTERW) / 100; |
252 | |
253 wa.override_redirect = 1; | |
254 wa.background_pixmap = ParentRelative; | |
255 wa.event_mask = ExposureMask; | |
256 | |
257 bx = by = 0; | |
258 bw = sw; | |
259 dc.h = bh = dc.font.height + 4; | |
260 barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen), | |
261 CopyFromParent, DefaultVisual(dpy, screen), | |
262 CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); | |
263 XDefineCursor(dpy, barwin, cursor[CurNormal]); | |
264 XMapRaised(dpy, barwin); | |
265 | |
266 issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask); | |
258 | 267 |
259 wa.event_mask = SubstructureRedirectMask | EnterWindowMask \ | 268 wa.event_mask = SubstructureRedirectMask | EnterWindowMask \ |
260 | LeaveWindowMask; | 269 | LeaveWindowMask; |
261 wa.cursor = cursor[CurNormal]; | 270 wa.cursor = cursor[CurNormal]; |
271 | |
262 XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); | 272 XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); |
263 | 273 |
274 dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen)); | |
275 dc.gc = XCreateGC(dpy, root, 0, 0); | |
276 | |
277 strcpy(stext, "dwm-"VERSION); | |
264 scan_wins(); | 278 scan_wins(); |
279 draw_bar(); | |
265 | 280 |
266 while(running) { | 281 while(running) { |
267 XNextEvent(dpy, &ev); | 282 XNextEvent(dpy, &ev); |
268 if(handler[ev.type]) | 283 if(handler[ev.type]) |
269 (handler[ev.type])(&ev); /* call handler */ | 284 (handler[ev.type])(&ev); /* call handler */ |