summaryrefslogtreecommitdiff
path: root/dwm/dwm.c
diff options
context:
space:
mode:
authorauric <104602845+ihateamongus@users.noreply.github.com>2025-09-07 17:08:01 -0500
committerGitHub <noreply@github.com>2025-09-07 17:08:01 -0500
commit417c5740bc4cd96e053b5725589fe3c4a835a231 (patch)
treefcf771779ae1dedaab2433d5242118e84c68f02b /dwm/dwm.c
parentc683be2f77a688e3ed162f97820a5c07f9d90a78 (diff)
parent2eec1939699ed3fa9e6b3699c2899e0e94a9d978 (diff)
Merge pull request #3 from ihateamongus/codex/analyze-oldresources-folder-for-performance-yvoz5b
Resolved. May need tweaks.
Diffstat (limited to 'dwm/dwm.c')
-rw-r--r--dwm/dwm.c50
1 files changed, 37 insertions, 13 deletions
diff --git a/dwm/dwm.c b/dwm/dwm.c
index 97fb920..633e9d6 100644
--- a/dwm/dwm.c
+++ b/dwm/dwm.c
@@ -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