95 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
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;
 | 
						|
}
 | 
						|
 |