diff options
| author | Bear <bear@bengtsson.win> | 2021-12-27 09:29:58 +0000 |
|---|---|---|
| committer | Bear <bear@bengtsson.win> | 2021-12-27 09:29:58 +0000 |
| commit | 69262b01ced79c2d776fab9b889926d1816a1e7a (patch) | |
| tree | f304cd6fa8734e83a7772d07dc9b484781565155 /patch/bar_anybar.c | |
Added DWM
Diffstat (limited to 'patch/bar_anybar.c')
| -rw-r--r-- | patch/bar_anybar.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/patch/bar_anybar.c b/patch/bar_anybar.c new file mode 100644 index 0000000..d9bdb27 --- /dev/null +++ b/patch/bar_anybar.c @@ -0,0 +1,94 @@ +void +managealtbar(Window win, XWindowAttributes *wa) +{ + Monitor *m; + Bar *bar; + int i = 0; + if (!(m = recttomon(wa->x, wa->y, wa->width, wa->height))) + return; + for (bar = m->bar; bar && bar->win && bar->next; bar = bar->next); // find last bar + if (!bar) { + bar = m->bar = ecalloc(1, sizeof(Bar)); + bar->topbar = topbar; + } else if (bar && bar->win) { + i = bar->idx + 1; + bar->next = ecalloc(1, sizeof(Bar)); + #if BAR_ANYBAR_TOP_AND_BOTTOM_BARS_PATCH + bar->next->topbar = !bar->topbar; + #else + bar->next->topbar = topbar; + #endif // BAR_ANYBAR_TOP_AND_BOTTOM_BARS_PATCH + bar = bar->next; + } + bar->external = 1; + bar->showbar = 1; + bar->mon = m; + bar->idx = i; + bar->borderpx = 0; + bar->win = win; + bar->bw = wa->width; + bar->bh = wa->height; + updatebarpos(m); + arrange(m); + XSelectInput(dpy, win, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); + XMapWindow(dpy, win); + XMoveResizeWindow(dpy, bar->win, bar->bx, bar->by, bar->bw, bar->bh); + arrange(selmon); + XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, + (unsigned char *) &win, 1); +} + +void +spawnbar() +{ + if (*altbarcmd) + system(altbarcmd); +} + +void +unmanagealtbar(Window w) +{ + Monitor *m = wintomon(w); + Bar *bar, *next, *prev = NULL; + + if (!m) + return; + + for (bar = m->bar; bar && bar->win; bar = next) { + next = bar->next; + if (bar->win == w) { + if (prev) + prev->next = next; + else + m->bar = next; + free(bar); + break; + } + prev = bar; + } + updatebarpos(m); + arrange(m); +} + +int +wmclasscontains(Window win, const char *class, const char *name) +{ + XClassHint ch = { NULL, NULL }; + int res = 1; + + if (XGetClassHint(dpy, win, &ch)) { + if (ch.res_name && strstr(ch.res_name, name) == NULL) + res = 0; + if (ch.res_class && strstr(ch.res_class, class) == NULL) + res = 0; + } else + res = 0; + + if (ch.res_class) + XFree(ch.res_class); + if (ch.res_name) + XFree(ch.res_name); + + return res; +} + |
