You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
1.9 KiB
94 lines
1.9 KiB
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; |
|
} |
|
|
|
|