#include "dwm.h"
#include <errno.h>
+#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
XFreePixmap(dpy, dc.drawable);
XFreeGC(dpy, dc.gc);
XDestroyWindow(dpy, barwin);
+ XFreeCursor(dpy, cursor[CurNormal]);
+ XFreeCursor(dpy, cursor[CurResize]);
+ XFreeCursor(dpy, cursor[CurMove]);
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
XSync(dpy, False);
free(seltag);
numlockmask = (1 << i);
}
}
- XFree(modmap);
+ XFreeModifiermap(modmap);
/* select for events */
wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask
| EnterWindowMask | LeaveWindowMask;
int
main(int argc, char *argv[]) {
+ char *p;
int r, xfd;
fd_set rd;
}
else if(argc != 1)
eprint("usage: dwm [-v]\n");
+ setlocale(LC_CTYPE, "");
dpy = XOpenDisplay(0);
if(!dpy)
eprint("dwm: cannot open display\n");
if(readin)
FD_SET(STDIN_FILENO, &rd);
FD_SET(xfd, &rd);
- r = select(xfd + 1, &rd, NULL, NULL, NULL);
- if((r == -1) && (errno == EINTR))
- continue;
- if(r > 0) {
- if(readin && FD_ISSET(STDIN_FILENO, &rd)) {
- readin = NULL != fgets(stext, sizeof(stext), stdin);
- if(readin)
- stext[strlen(stext) - 1] = 0;
- else
- strcpy(stext, "broken pipe");
- drawstatus();
+ if(select(xfd + 1, &rd, NULL, NULL, NULL) == -1) {
+ if(errno == EINTR)
+ continue;
+ eprint("select failed\n");
+ }
+ if(FD_ISSET(STDIN_FILENO, &rd)) {
+ switch(r = read(STDIN_FILENO, stext, sizeof stext - 1)) {
+ case -1:
+ strncpy(stext, strerror(errno), sizeof stext - 1);
+ stext[sizeof stext - 1] = '\0';
+ readin = False;
+ break;
+ case 0:
+ strncpy(stext, "EOF", 4);
+ readin = False;
+ break;
+ default:
+ for(stext[r] = '\0', p = stext + strlen(stext) - 1; p >= stext && *p == '\n'; *p-- = '\0');
+ for(p = stext + strlen(stext) - 1; p >= stext && *p != '\n'; --p);
+ if(p > stext)
+ strncpy(stext, p + 1, sizeof stext);
}
+ drawstatus();
}
- else if(r < 0)
- eprint("select failed\n");
- procevent();
+ if(FD_ISSET(xfd, &rd))
+ procevent();
}
cleanup();
XCloseDisplay(dpy);