/* static */
static int (*xerrorxlib)(Display *, XErrorEvent *);
-static Bool otherwm;
+static Bool otherwm, readin;
static void
cleanup()
{
+ close(STDIN_FILENO);
while(sel) {
resize(sel, True, TopLeft);
unmanage(sel);
}
+ if(dc.font.set)
+ XFreeFontSet(dpy, dc.font.set);
+ else
+ XFreeFont(dpy, dc.font.xfont);
XUngrabKey(dpy, AnyKey, AnyModifier, root);
+ XFreePixmap(dpy, dc.drawable);
+ XFreeGC(dpy, dc.gc);
+ XDestroyWindow(dpy, barwin);
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
XSync(dpy, False);
}
XFree(wins);
}
-static int
-win_property(Window w, Atom a, Atom t, long l, unsigned char **prop)
-{
- int status, format;
- unsigned long res, extra;
- Atom real;
-
- status = XGetWindowProperty(dpy, w, a, 0L, l, False, t, &real, &format,
- &res, &extra, prop);
-
- if(status != Success || *prop == 0) {
- return 0;
- }
- if(res == 0) {
- free((void *) *prop);
- }
- return res;
-}
-
/*
* Startup Error handler to check if another window manager
* is already running.
int
getproto(Window w)
{
- int protos = 0;
- int i;
- long res;
- Atom *protocols;
-
- res = win_property(w, wmatom[WMProtocols], XA_ATOM, 20L,
- ((unsigned char **)&protocols));
- if(res <= 0) {
+ int i, format, protos, status;
+ unsigned long extra, res;
+ Atom *protocols, real;
+
+ protos = 0;
+ status = XGetWindowProperty(dpy, w, wmatom[WMProtocols], 0L, 20L, False,
+ XA_ATOM, &real, &format, &res, &extra, (unsigned char **)&protocols);
+ if(status != Success || protocols == 0)
return protos;
- }
- for(i = 0; i < res; i++) {
+ for(i = 0; i < res; i++)
if(protocols[i] == wmatom[WMDelete])
protos |= PROTODELWIN;
- }
- free((char *) protocols);
+ free(protocols);
return protos;
}
void
quit(Arg *arg)
{
- running = False;
+ readin = running = False;
}
/*
int i, j, xfd;
unsigned int mask;
fd_set rd;
- Bool readin = True;
Window w;
XModifierKeymap *modmap;
XSetWindowAttributes wa;
for(ntags = 0; tags[ntags]; ntags++);
seltag = emallocz(sizeof(Bool) * ntags);
- seltag[DEFTAG] = True;
+ seltag[0] = True;
/* style */
dc.bg = getcolor(BGCOLOR);
/* main event loop, also reads status text from stdin */
XSync(dpy, False);
procevent();
+ readin = True;
while(running) {
FD_ZERO(&rd);
if(readin)
FD_SET(STDIN_FILENO, &rd);
FD_SET(xfd, &rd);
i = select(xfd + 1, &rd, NULL, NULL, NULL);
- if(i == -1 && errno == EINTR)
+ if((i == -1) && (errno == EINTR))
continue;
- if(i < 0)
- eprint("select failed\n");
- else if(i > 0) {
+ if(i > 0) {
if(readin && FD_ISSET(STDIN_FILENO, &rd)) {
readin = NULL != fgets(stext, sizeof(stext), stdin);
if(readin)
drawstatus();
}
}
+ else if(i < 0)
+ eprint("select failed\n");
procevent();
}
cleanup();