diff options
Diffstat (limited to 'dwm/dwm.c')
| -rw-r--r-- | dwm/dwm.c | 50 |
1 files changed, 37 insertions, 13 deletions
@@ -34,6 +34,7 @@ #include <sys/mman.h> #include <sys/stat.h> #include <fcntl.h> +#include <sys/select.h> #include <X11/cursorfont.h> #include <X11/keysym.h> #include <X11/Xatom.h> @@ -671,15 +672,23 @@ createmon(void) static void updateaccent(void) { - if (!accentshm) return; + if (!accentshm) + return; uint32_t s1, s2; + char tmp[8]; do { s1 = accentshm->seq; - memcpy(accentcol, accentshm->color, 8); + memcpy(tmp, accentshm->color, 8); s2 = accentshm->seq; } while (s1 != s2); + if (tmp[0] != '#') + return; + memcpy(accentcol, tmp, 8); drw_clr_create(drw, &scheme[SchemeSel][ColBg], accentcol); drw_clr_create(drw, &scheme[SchemeSel][ColBorder], accentcol); + for (Monitor *m = mons; m; m = m->next) + if (m->sel) + XSetWindowBorder(dpy, m->sel->win, scheme[SchemeSel][ColBorder].pixel); } static void @@ -745,8 +754,7 @@ dirtomon(int dir) void drawbar(Monitor *m) { - updateaccent(); - int x, w, tw = 0; + int x, w, tw = 0; int boxs = drw->fonts->h / 9; int boxw = drw->fonts->h / 6 + 2; unsigned int i, occ = 0, urg = 0; @@ -799,10 +807,11 @@ drawbar(Monitor *m) void drawbars(void) { - Monitor *m; + Monitor *m; - for (m = mons; m; m = m->next) - drawbar(m); + updateaccent(); + for (m = mons; m; m = m->next) + drawbar(m); } void @@ -1438,12 +1447,27 @@ restack(Monitor *m) void run(void) { - XEvent ev; - /* main event loop */ - XSync(dpy, False); - while (running && !XNextEvent(dpy, &ev)) - if (handler[ev.type]) - handler[ev.type](&ev); /* call handler */ + XEvent ev; + int xfd; + fd_set fds; + struct timeval tv; + + XSync(dpy, False); + xfd = ConnectionNumber(dpy); + while (running) { + FD_ZERO(&fds); + FD_SET(xfd, &fds); + tv.tv_sec = 0; + tv.tv_usec = 50000; + if (select(xfd + 1, &fds, NULL, NULL, &tv) > 0) { + while (XPending(dpy)) { + XNextEvent(dpy, &ev); + if (handler[ev.type]) + handler[ev.type](&ev); /* call handler */ + } + } + drawbars(); + } } void |
