51 |
51 |
52 /* enums */ |
52 /* enums */ |
53 enum { BarTop, BarBot, BarOff }; /* bar position */ |
53 enum { BarTop, BarBot, BarOff }; /* bar position */ |
54 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ |
54 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ |
55 enum { ColBorder, ColFG, ColBG, ColLast }; /* color */ |
55 enum { ColBorder, ColFG, ColBG, ColLast }; /* color */ |
56 enum { NetSupported, NetWMCheck, NetWMName, NetLast }; /* EWMH atoms */ |
56 enum { NetSupported, NetWMName, NetLast }; /* EWMH atoms */ |
57 enum { WMProtocols, WMDelete, WMName, WMState, WMLast };/* default atoms */ |
57 enum { WMProtocols, WMDelete, WMName, WMState, WMLast };/* default atoms */ |
58 |
58 |
59 /* typedefs */ |
59 /* typedefs */ |
60 typedef struct Client Client; |
60 typedef struct Client Client; |
61 struct Client { |
61 struct Client { |
1425 |
1425 |
1426 void |
1426 void |
1427 setup(void) { |
1427 setup(void) { |
1428 int d; |
1428 int d; |
1429 unsigned int i, j, mask; |
1429 unsigned int i, j, mask; |
1430 Atom utf8string; |
|
1431 Window w; |
1430 Window w; |
1432 XModifierKeymap *modmap; |
1431 XModifierKeymap *modmap; |
1433 XSetWindowAttributes wa; |
1432 XSetWindowAttributes wa; |
1434 |
1433 |
1435 /* init atoms */ |
1434 /* init atoms */ |
1436 utf8string = XInternAtom(dpy, "UTF8_STRING", False); |
|
1437 wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); |
1435 wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); |
1438 wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); |
1436 wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); |
1439 wmatom[WMName] = XInternAtom(dpy, "WM_NAME", False); |
1437 wmatom[WMName] = XInternAtom(dpy, "WM_NAME", False); |
1440 wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False); |
1438 wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False); |
1441 netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); |
1439 netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); |
1442 netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False); |
|
1443 netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); |
1440 netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); |
|
1441 XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, |
|
1442 PropModeReplace, (unsigned char *) netatom, NetLast); |
1444 |
1443 |
1445 /* init cursors */ |
1444 /* init cursors */ |
1446 cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr); |
1445 cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr); |
1447 cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); |
1446 cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); |
1448 cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); |
1447 cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); |
1514 XSetFont(dpy, dc.gc, dc.font.xfont->fid); |
1513 XSetFont(dpy, dc.gc, dc.font.xfont->fid); |
1515 |
1514 |
1516 /* multihead support */ |
1515 /* multihead support */ |
1517 selscreen = XQueryPointer(dpy, root, &w, &w, &d, &d, &d, &d, &mask); |
1516 selscreen = XQueryPointer(dpy, root, &w, &w, &d, &d, &d, &d, &mask); |
1518 |
1517 |
1519 /* EWMH properties */ |
|
1520 XChangeProperty(dpy, barwin, netatom[NetWMCheck], XA_WINDOW, 32, |
|
1521 PropModeReplace, (unsigned char *) &barwin, 1); |
|
1522 /* HACK: dwm identifies itself as LookingGlass to workaround the XToolkit bug of Sun JDK */ |
|
1523 XChangeProperty(dpy, barwin, netatom[NetWMName], utf8string, 8, |
|
1524 PropModeReplace, (unsigned char *) "LG3D", 4); |
|
1525 XChangeProperty(dpy, root, netatom[NetWMCheck], XA_WINDOW, 32, |
|
1526 PropModeReplace, (unsigned char *) &barwin, 1); |
|
1527 XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, |
|
1528 PropModeReplace, (unsigned char *) netatom, NetLast); |
|
1529 } |
1518 } |
1530 |
1519 |
1531 void |
1520 void |
1532 spawn(const char *arg) { |
1521 spawn(const char *arg) { |
1533 static char *shell = NULL; |
1522 static char *shell = NULL; |