summaryrefslogtreecommitdiff
path: root/patch/bar_anybar.c
diff options
context:
space:
mode:
authorBear <bear@bengtsson.win>2021-12-27 09:29:58 +0000
committerBear <bear@bengtsson.win>2021-12-27 09:29:58 +0000
commit69262b01ced79c2d776fab9b889926d1816a1e7a (patch)
treef304cd6fa8734e83a7772d07dc9b484781565155 /patch/bar_anybar.c
Added DWM
Diffstat (limited to 'patch/bar_anybar.c')
-rw-r--r--patch/bar_anybar.c94
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;
+}
+