14 #include <X11/Xatom.h> |
14 #include <X11/Xatom.h> |
15 #include <X11/Xproto.h> |
15 #include <X11/Xproto.h> |
16 |
16 |
17 Display *dpy; |
17 Display *dpy; |
18 Window root, barwin; |
18 Window root, barwin; |
19 Atom wm_atom[WMLast], net_atom[NetLast]; |
19 Atom wmatom[WMLast], netatom[NetLast]; |
20 Cursor cursor[CurLast]; |
20 Cursor cursor[CurLast]; |
21 Bool running = True; |
21 Bool running = True; |
22 Bool issel; |
22 Bool issel = True; |
23 |
23 |
24 int tsel = Tdev; /* default tag */ |
24 int tsel = Tdev; /* default tag */ |
25 int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; |
25 int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; |
26 char stext[1024]; |
26 char stext[1024]; |
27 |
27 |
28 DC dc = {0}; |
28 DC dc = {0}; |
29 Client *clients = NULL; |
29 Client *clients = NULL; |
30 Client *sel = NULL; |
30 Client *sel = NULL; |
31 |
31 |
32 static Bool otherwm; |
32 static Bool otherwm; |
33 static const char version[] = |
|
34 "dwm-" VERSION ", (C)opyright MMVI Anselm R. Garbe\n"; |
|
35 static int (*xerrorxlib)(Display *, XErrorEvent *); |
33 static int (*xerrorxlib)(Display *, XErrorEvent *); |
36 |
34 |
37 /* static functions */ |
35 /* static functions */ |
38 |
36 |
39 static void |
37 static void |
107 unsigned char *protocols; |
105 unsigned char *protocols; |
108 long res; |
106 long res; |
109 int protos = 0; |
107 int protos = 0; |
110 int i; |
108 int i; |
111 |
109 |
112 res = win_property(w, wm_atom[WMProtocols], XA_ATOM, 20L, &protocols); |
110 res = win_property(w, wmatom[WMProtocols], XA_ATOM, 20L, &protocols); |
113 if(res <= 0) { |
111 if(res <= 0) { |
114 return protos; |
112 return protos; |
115 } |
113 } |
116 for(i = 0; i < res; i++) { |
114 for(i = 0; i < res; i++) { |
117 if(protocols[i] == wm_atom[WMDelete]) |
115 if(protocols[i] == wmatom[WMDelete]) |
118 protos |= WM_PROTOCOL_DELWIN; |
116 protos |= WM_PROTOCOL_DELWIN; |
119 } |
117 } |
120 free((char *) protocols); |
118 free((char *) protocols); |
121 return protos; |
119 return protos; |
122 } |
120 } |
182 XEvent ev; |
180 XEvent ev; |
183 |
181 |
184 for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) { |
182 for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) { |
185 switch (argv[i][1]) { |
183 switch (argv[i][1]) { |
186 case 'v': |
184 case 'v': |
187 fprintf(stdout, "%s", version); |
185 fprintf(stdout, "%s", |
|
186 "dwm-"VERSION", (C)opyright MMVI Anselm R. Garbe\n"); |
188 exit(0); |
187 exit(0); |
189 break; |
188 break; |
190 default: |
189 default: |
191 eprint("usage: dwm [-v]\n"); |
190 eprint("usage: dwm [-v]\n"); |
192 break; |
191 break; |
212 |
211 |
213 XSetErrorHandler(0); |
212 XSetErrorHandler(0); |
214 xerrorxlib = XSetErrorHandler(xerror); |
213 xerrorxlib = XSetErrorHandler(xerror); |
215 |
214 |
216 /* init atoms */ |
215 /* init atoms */ |
217 wm_atom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); |
216 wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); |
218 wm_atom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); |
217 wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); |
219 net_atom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); |
218 netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); |
220 net_atom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); |
219 netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); |
221 XChangeProperty(dpy, root, net_atom[NetSupported], XA_ATOM, 32, |
220 XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, |
222 PropModeReplace, (unsigned char *) net_atom, NetLast); |
221 PropModeReplace, (unsigned char *) netatom, NetLast); |
223 |
222 |
224 /* init cursors */ |
223 /* init cursors */ |
225 cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr); |
224 cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr); |
226 cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); |
225 cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); |
227 cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); |
226 cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); |