dwm-r1533-stdin.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dwm-r1533-stdin.diff (3803B) | |
--- | |
1 This backports pre-dwm-5.3 behaviour where the status bar content was re… | |
2 stdin instead of the root window title. I did this, because I had several | |
3 problems with the "new" method, on different machines, with different | |
4 configurations, including vanilla, where the statusbar froze. | |
5 It adds some LOC, but is not broken for me. | |
6 | |
7 diff -r ba7d976f74d3 config.def.h | |
8 --- a/config.def.h Fri Mar 25 14:06:46 2011 +0000 | |
9 +++ b/config.def.h Sun Apr 10 19:07:26 2011 +0200 | |
10 @@ -12,6 +12,7 @@ | |
11 static const unsigned int snap = 32; /* snap pixel */ | |
12 static const Bool showbar = True; /* False means no bar */ | |
13 static const Bool topbar = True; /* False means bottom b… | |
14 +static Bool readin = True; /* False means do not r… | |
15 | |
16 /* tagging */ | |
17 static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "… | |
18 diff -r ba7d976f74d3 dwm.c | |
19 --- a/dwm.c Fri Mar 25 14:06:46 2011 +0000 | |
20 +++ b/dwm.c Sun Apr 10 19:07:26 2011 +0200 | |
21 @@ -28,6 +28,7 @@ | |
22 #include <stdlib.h> | |
23 #include <string.h> | |
24 #include <unistd.h> | |
25 +#include <sys/select.h> | |
26 #include <sys/types.h> | |
27 #include <sys/wait.h> | |
28 #include <X11/cursorfont.h> | |
29 @@ -232,7 +233,6 @@ | |
30 static void updatebars(void); | |
31 static void updatenumlockmask(void); | |
32 static void updatesizehints(Client *c); | |
33 -static void updatestatus(void); | |
34 static void updatetitle(Client *c); | |
35 static void updatewmhints(Client *c); | |
36 static void view(const Arg *arg); | |
37 @@ -1251,9 +1251,7 @@ | |
38 Window trans; | |
39 XPropertyEvent *ev = &e->xproperty; | |
40 | |
41 - if((ev->window == root) && (ev->atom == XA_WM_NAME)) | |
42 - updatestatus(); | |
43 - else if(ev->state == PropertyDelete) | |
44 + if(ev->state == PropertyDelete) | |
45 return; /* ignore */ | |
46 else if((c = wintoclient(ev->window))) { | |
47 switch (ev->atom) { | |
48 @@ -1413,12 +1411,60 @@ | |
49 | |
50 void | |
51 run(void) { | |
52 + char *p; | |
53 + char sbuf[sizeof stext]; | |
54 + fd_set rd; | |
55 + int r, xfd; | |
56 + unsigned int len, offset; | |
57 XEvent ev; | |
58 - /* main event loop */ | |
59 + | |
60 + /* main event loop, also reads status text from stdin */ | |
61 XSync(dpy, False); | |
62 - while(running && !XNextEvent(dpy, &ev)) { | |
63 - if(handler[ev.type]) | |
64 - handler[ev.type](&ev); /* call handler */ | |
65 + xfd = ConnectionNumber(dpy); | |
66 + offset = 0; | |
67 + len = sizeof stext - 1; | |
68 + sbuf[len] = stext[len] = '\0'; /* 0-terminator is never touched… | |
69 + while(running) { | |
70 + FD_ZERO(&rd); | |
71 + if(readin) | |
72 + FD_SET(STDIN_FILENO, &rd); | |
73 + FD_SET(xfd, &rd); | |
74 + if(select(xfd + 1, &rd, NULL, NULL, NULL) == -1) { | |
75 + if(errno == EINTR) | |
76 + continue; | |
77 + die("select failed\n"); | |
78 + } | |
79 + if(FD_ISSET(STDIN_FILENO, &rd)) { | |
80 + switch((r = read(STDIN_FILENO, sbuf + offset, l… | |
81 + case -1: | |
82 + strncpy(stext, strerror(errno), len); | |
83 + readin = False; | |
84 + break; | |
85 + case 0: | |
86 + strncpy(stext, "EOF", 4); | |
87 + readin = False; | |
88 + break; | |
89 + default: | |
90 + for(p = sbuf + offset; r > 0; p++, r--,… | |
91 + if(*p == '\n' || *p == '\0') { | |
92 + *p = '\0'; | |
93 + strncpy(stext, sbuf, le… | |
94 + p += r - 1; /* p is sbu… | |
95 + for(r = 0; *(p - r) && … | |
96 + offset = r; | |
97 + if(r) | |
98 + memmove(sbuf, p… | |
99 + break; | |
100 + } | |
101 + break; | |
102 + } | |
103 + drawbars(); | |
104 + } | |
105 + while(XPending(dpy)) { | |
106 + XNextEvent(dpy, &ev); | |
107 + if(handler[ev.type]) | |
108 + (handler[ev.type])(&ev); /* call handle… | |
109 + } | |
110 } | |
111 } | |
112 | |
113 @@ -1539,7 +1585,6 @@ | |
114 XSetFont(dpy, dc.gc, dc.font.xfont->fid); | |
115 /* init bars */ | |
116 updatebars(); | |
117 - updatestatus(); | |
118 /* EWMH support per view */ | |
119 XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, | |
120 PropModeReplace, (unsigned char *) netatom, Net… | |
121 @@ -1916,13 +1961,6 @@ | |
122 } | |
123 | |
124 void | |
125 -updatestatus(void) { | |
126 - if(!gettextprop(root, XA_WM_NAME, stext, sizeof(stext))) | |
127 - strcpy(stext, "dwm-"VERSION); | |
128 - drawbar(selmon); | |
129 -} | |
130 - | |
131 -void | |
132 updatewmhints(Client *c) { | |
133 XWMHints *wmh; | |
134 |