Xinqi Bao's Git
projects
/
dwm.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
applied Sanders focus_* patches, removed the unnecessary clean-prefix from the new...
[dwm.git]
/
main.c
diff --git
a/main.c
b/main.c
index
8699284
..
4aad990
100644
(file)
--- a/
main.c
+++ b/
main.c
@@
-18,16
+18,26
@@
/* static */
static int (*xerrorxlib)(Display *, XErrorEvent *);
/* static */
static int (*xerrorxlib)(Display *, XErrorEvent *);
-static Bool otherwm;
+static Bool otherwm
, readin
;
static void
cleanup()
{
static void
cleanup()
{
+ close(STDIN_FILENO);
while(sel) {
resize(sel, True, TopLeft);
unmanage(sel);
}
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);
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
+ XSync(dpy, False);
}
static void
}
static void
@@
-37,6
+47,7
@@
scan()
Window *wins, d1, d2;
XWindowAttributes wa;
Window *wins, d1, d2;
XWindowAttributes wa;
+ wins = NULL;
if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
for(i = 0; i < num; i++) {
if(!XGetWindowAttributes(dpy, wins[i], &wa))
if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
for(i = 0; i < num; i++) {
if(!XGetWindowAttributes(dpy, wins[i], &wa))
@@
-52,7
+63,7
@@
scan()
}
static int
}
static int
-win
_property
(Window w, Atom a, Atom t, long l, unsigned char **prop)
+win
prop
(Window w, Atom a, Atom t, long l, unsigned char **prop)
{
int status, format;
unsigned long res, extra;
{
int status, format;
unsigned long res, extra;
@@
-105,7
+116,7
@@
getproto(Window w)
long res;
Atom *protocols;
long res;
Atom *protocols;
- res = win
_property
(w, wmatom[WMProtocols], XA_ATOM, 20L,
+ res = win
prop
(w, wmatom[WMProtocols], XA_ATOM, 20L,
((unsigned char **)&protocols));
if(res <= 0) {
return protos;
((unsigned char **)&protocols));
if(res <= 0) {
return protos;
@@
-136,7
+147,7
@@
sendevent(Window w, Atom a, long value)
void
quit(Arg *arg)
{
void
quit(Arg *arg)
{
- running = False;
+ r
eadin = r
unning = False;
}
/*
}
/*
@@
-166,9
+177,7
@@
main(int argc, char *argv[])
int i, j, xfd;
unsigned int mask;
fd_set rd;
int i, j, xfd;
unsigned int mask;
fd_set rd;
- Bool readin = True;
Window w;
Window w;
- XEvent ev;
XModifierKeymap *modmap;
XSetWindowAttributes wa;
XModifierKeymap *modmap;
XSetWindowAttributes wa;
@@
-196,6
+205,7
@@
main(int argc, char *argv[])
if(otherwm)
eprint("dwm: another window manager is already running\n");
if(otherwm)
eprint("dwm: another window manager is already running\n");
+ XSync(dpy, False);
XSetErrorHandler(NULL);
xerrorxlib = XSetErrorHandler(xerror);
XSync(dpy, False);
XSetErrorHandler(NULL);
xerrorxlib = XSetErrorHandler(xerror);
XSync(dpy, False);
@@
-268,18
+278,17
@@
main(int argc, char *argv[])
/* main event loop, also reads status text from stdin */
XSync(dpy, False);
/* main event loop, also reads status text from stdin */
XSync(dpy, False);
- goto XLoop;
+ 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);
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;
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)
if(readin && FD_ISSET(STDIN_FILENO, &rd)) {
readin = NULL != fgets(stext, sizeof(stext), stdin);
if(readin)
@@
-288,15
+297,10
@@
main(int argc, char *argv[])
strcpy(stext, "broken pipe");
drawstatus();
}
strcpy(stext, "broken pipe");
drawstatus();
}
- if(FD_ISSET(xfd, &rd)) {
-XLoop:
- while(XPending(dpy)) {
- XNextEvent(dpy, &ev);
- if(handler[ev.type])
- (handler[ev.type])(&ev); /* call handler */
- }
- }
}
}
+ else if(i < 0)
+ eprint("select failed\n");
+ procevent();
}
cleanup();
XCloseDisplay(dpy);
}
cleanup();
XCloseDisplay(dpy);