some more refactoring, bar toggle fixes
This commit is contained in:
		
							parent
							
								
									d53ceee682
								
							
						
					
					
						commit
						a3bbdb1b7b
					
				
							
								
								
									
										44
									
								
								dwm.c
								
								
								
								
							
							
						
						
									
										44
									
								
								dwm.c
								
								
								
								
							| 
						 | 
				
			
			@ -124,6 +124,7 @@ struct Monitor {
 | 
			
		|||
	int screen_number;
 | 
			
		||||
	float mfact;
 | 
			
		||||
	int by, btx;          /* bar geometry */
 | 
			
		||||
	int my, mh;           /* vertical screen size*/
 | 
			
		||||
	int wx, wy, ww, wh;   /* window area  */
 | 
			
		||||
	unsigned int seltags;
 | 
			
		||||
	unsigned int sellt;
 | 
			
		||||
| 
						 | 
				
			
			@ -209,6 +210,7 @@ static void toggleview(const Arg *arg);
 | 
			
		|||
static void unmanage(Client *c);
 | 
			
		||||
static void unmapnotify(XEvent *e);
 | 
			
		||||
static void updategeom(void);
 | 
			
		||||
static void updatebarpos(Monitor *m);
 | 
			
		||||
static void updatebars(void);
 | 
			
		||||
static void updatenumlockmask(void);
 | 
			
		||||
static void updatesizehints(Client *c);
 | 
			
		||||
| 
						 | 
				
			
			@ -389,7 +391,7 @@ buttonpress(XEvent *e) {
 | 
			
		|||
	XButtonPressedEvent *ev = &e->xbutton;
 | 
			
		||||
 | 
			
		||||
	click = ClkRootWin;
 | 
			
		||||
	if(ev->window == selmon->barwin) {
 | 
			
		||||
	if(ev->window == selmon->barwin && ev->x >= selmon->btx) {
 | 
			
		||||
		i = 0;
 | 
			
		||||
		x = selmon->btx;
 | 
			
		||||
		do
 | 
			
		||||
| 
						 | 
				
			
			@ -597,6 +599,7 @@ die(const char *errstr, ...) {
 | 
			
		|||
 | 
			
		||||
void
 | 
			
		||||
drawbar(Monitor *m) {
 | 
			
		||||
	char buf[2];
 | 
			
		||||
	int x;
 | 
			
		||||
	unsigned int i, occ = 0, urg = 0;
 | 
			
		||||
	unsigned long *col;
 | 
			
		||||
| 
						 | 
				
			
			@ -613,11 +616,11 @@ drawbar(Monitor *m) {
 | 
			
		|||
	dc.x = 0;
 | 
			
		||||
#ifdef XINERAMA
 | 
			
		||||
	{
 | 
			
		||||
		/*
 | 
			
		||||
		dc.w = TEXTW(m->symbol);
 | 
			
		||||
		drawtext(NULL, selmon == m ? dc.sel : dc.norm, False);
 | 
			
		||||
		buf[0] = m->screen_number + '0';
 | 
			
		||||
		buf[1] = '\0';
 | 
			
		||||
		dc.w = TEXTW(buf);
 | 
			
		||||
		drawtext(buf, selmon == m ? dc.sel : dc.norm, True);
 | 
			
		||||
		dc.x += dc.w;
 | 
			
		||||
		*/
 | 
			
		||||
	}
 | 
			
		||||
#endif /* XINERAMA */
 | 
			
		||||
	m->btx = dc.x;
 | 
			
		||||
| 
						 | 
				
			
			@ -1525,7 +1528,7 @@ tile(Monitor *m) {
 | 
			
		|||
void
 | 
			
		||||
togglebar(const Arg *arg) {
 | 
			
		||||
	selmon->showbar = !selmon->showbar;
 | 
			
		||||
	updategeom();
 | 
			
		||||
	updatebarpos(selmon);
 | 
			
		||||
	XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
 | 
			
		||||
	arrange();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1614,6 +1617,19 @@ updatebars(void) {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
updatebarpos(Monitor *m) {
 | 
			
		||||
	m->wy = m->my;
 | 
			
		||||
	m->wh = m->mh;
 | 
			
		||||
	if(m->showbar) {
 | 
			
		||||
		m->wh -= bh;
 | 
			
		||||
		m->by = m->topbar ? m->wy : m->wy + m->wh;
 | 
			
		||||
		m->wy = m->topbar ? m->wy + bh : m->wy;
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
		m->by = -bh;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
updategeom(void) {
 | 
			
		||||
	int i, n;
 | 
			
		||||
| 
						 | 
				
			
			@ -1639,9 +1655,9 @@ updategeom(void) {
 | 
			
		|||
		for(i = 0, m = newmons; m; m = m->next, i++) {
 | 
			
		||||
			m->screen_number = info[i].screen_number;
 | 
			
		||||
			m->wx = info[i].x_org;
 | 
			
		||||
			m->wy = info[i].y_org;
 | 
			
		||||
			m->my = m->wy = info[i].y_org;
 | 
			
		||||
			m->ww = info[i].width;
 | 
			
		||||
			m->wh = info[i].height;
 | 
			
		||||
			m->mh = m->wh = info[i].height;
 | 
			
		||||
		}
 | 
			
		||||
		XFree(info);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1651,9 +1667,9 @@ updategeom(void) {
 | 
			
		|||
	{
 | 
			
		||||
		m->screen_number = 0;
 | 
			
		||||
		m->wx = sx;
 | 
			
		||||
		m->wy = sy;
 | 
			
		||||
		m->my = m->wy = sy;
 | 
			
		||||
		m->ww = sw;
 | 
			
		||||
		m->wh = sh;
 | 
			
		||||
		m->mh = m->wh = sh;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* bar geometry setup */
 | 
			
		||||
| 
						 | 
				
			
			@ -1665,13 +1681,7 @@ updategeom(void) {
 | 
			
		|||
		m->mfact = mfact;
 | 
			
		||||
		m->showbar = showbar;
 | 
			
		||||
		m->topbar = topbar;
 | 
			
		||||
		if(m->showbar) {
 | 
			
		||||
			m->wh -= bh;
 | 
			
		||||
			m->by = m->topbar ? m->wy : m->wy + m->wh;
 | 
			
		||||
			m->wy = m->topbar ? m->wy + bh : m->wy;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			m->by = -bh;
 | 
			
		||||
		updatebarpos(m);
 | 
			
		||||
		/* reassign all clients with same screen number */
 | 
			
		||||
		for(c = clients; c; c = c->next)
 | 
			
		||||
			if(c->m->screen_number == m->screen_number)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue