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