honour fullscreen hint on map
This commit is contained in:
		
							parent
							
								
									e5a1e77351
								
							
						
					
					
						commit
						d21026f0a1
					
				
							
								
								
									
										122
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										122
									
								
								dwm.c
									
									
									
									
									
								
							| @ -215,6 +215,7 @@ static Bool sendevent(Client *c, Atom proto); | ||||
| static void sendmon(Client *c, Monitor *m); | ||||
| static void setclientstate(Client *c, long state); | ||||
| static void setfocus(Client *c); | ||||
| static void setfullscreen(Client *c, Bool fullscreen); | ||||
| static void setlayout(const Arg *arg); | ||||
| static void setmfact(const Arg *arg); | ||||
| static void setup(void); | ||||
| @ -531,31 +532,10 @@ clientmessage(XEvent *e) { | ||||
| 
 | ||||
| 	if(!c) | ||||
| 		return; | ||||
| 	if(cme->message_type == netatom[NetWMState] && cme->data.l[1] == netatom[NetWMFullscreen]) { | ||||
| 		if(cme->data.l[0] && !c->isfullscreen) { | ||||
| 			XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32, | ||||
| 			                PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); | ||||
| 			c->isfullscreen = True; | ||||
| 			c->oldstate = c->isfloating; | ||||
| 			c->oldbw = c->bw; | ||||
| 			c->bw = 0; | ||||
| 			c->isfloating = True; | ||||
| 			resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); | ||||
| 			XRaiseWindow(dpy, c->win); | ||||
| 		} | ||||
| 		else { | ||||
| 			XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32, | ||||
| 			                PropModeReplace, (unsigned char*)0, 0); | ||||
| 			c->isfullscreen = False; | ||||
| 			c->isfloating = c->oldstate; | ||||
| 			c->bw = c->oldbw; | ||||
| 			c->x = c->oldx; | ||||
| 			c->y = c->oldy; | ||||
| 			c->w = c->oldw; | ||||
| 			c->h = c->oldh; | ||||
| 			resizeclient(c, c->x, c->y, c->w, c->h); | ||||
| 			arrange(c->mon); | ||||
| 		} | ||||
| 	if(cme->message_type == netatom[NetWMState]) { | ||||
| 		if(cme->data.l[1] == netatom[NetWMFullscreen] || cme->data.l[2] == netatom[NetWMFullscreen]) | ||||
| 			setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD    */ | ||||
| 			              || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen))); | ||||
| 	} | ||||
| 	else if(cme->message_type == netatom[NetActiveWindow]) { | ||||
| 		if(!ISVISIBLE(c)) { | ||||
| @ -928,6 +908,21 @@ focusstack(const Arg *arg) { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| Atom | ||||
| getatomprop(Client *c, Atom prop) { | ||||
| 	int di; | ||||
| 	unsigned long dl; | ||||
| 	unsigned char *p = NULL; | ||||
| 	Atom da, atom = None; | ||||
| 
 | ||||
| 	if(XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, XA_ATOM, | ||||
| 	                      &da, &di, &dl, &dl, &p) == Success && p) { | ||||
| 		atom = *(Atom *)p; | ||||
| 		XFree(p); | ||||
| 	} | ||||
| 	return atom; | ||||
| } | ||||
| 
 | ||||
| unsigned long | ||||
| getcolor(const char *colstr) { | ||||
| 	Colormap cmap = DefaultColormap(dpy, screen); | ||||
| @ -1133,23 +1128,17 @@ manage(Window w, XWindowAttributes *wa) { | ||||
| 	c->w = c->oldw = wa->width; | ||||
| 	c->h = c->oldh = wa->height; | ||||
| 	c->oldbw = wa->border_width; | ||||
| 	if(c->w == c->mon->mw && c->h == c->mon->mh) { | ||||
| 		c->isfloating = True; // regression with flash, XXXX
 | ||||
| 		c->x = c->mon->mx; | ||||
| 		c->y = c->mon->my; | ||||
| 		c->bw = 0; | ||||
| 	} | ||||
| 	else { | ||||
| 		if(c->x + WIDTH(c) > c->mon->mx + c->mon->mw) | ||||
| 			c->x = c->mon->mx + c->mon->mw - WIDTH(c); | ||||
| 		if(c->y + HEIGHT(c) > c->mon->my + c->mon->mh) | ||||
| 			c->y = c->mon->my + c->mon->mh - HEIGHT(c); | ||||
| 		c->x = MAX(c->x, c->mon->mx); | ||||
| 		/* only fix client y-offset, if the client center might cover the bar */ | ||||
| 		c->y = MAX(c->y, ((c->mon->by == c->mon->my) && (c->x + (c->w / 2) >= c->mon->wx) | ||||
| 		           && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my); | ||||
| 		c->bw = borderpx; | ||||
| 	} | ||||
| 
 | ||||
| 	if(c->x + WIDTH(c) > c->mon->mx + c->mon->mw) | ||||
| 		c->x = c->mon->mx + c->mon->mw - WIDTH(c); | ||||
| 	if(c->y + HEIGHT(c) > c->mon->my + c->mon->mh) | ||||
| 		c->y = c->mon->my + c->mon->mh - HEIGHT(c); | ||||
| 	c->x = MAX(c->x, c->mon->mx); | ||||
| 	/* only fix client y-offset, if the client center might cover the bar */ | ||||
| 	c->y = MAX(c->y, ((c->mon->by == c->mon->my) && (c->x + (c->w / 2) >= c->mon->wx) | ||||
| 	           && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my); | ||||
| 	c->bw = borderpx; | ||||
| 
 | ||||
| 	wc.border_width = c->bw; | ||||
| 	XConfigureWindow(dpy, w, CWBorderWidth, &wc); | ||||
| 	XSetWindowBorder(dpy, w, dc.norm[ColBorder]); | ||||
| @ -1515,6 +1504,34 @@ setfocus(Client *c) { | ||||
| 	sendevent(c, wmatom[WMTakeFocus]); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| setfullscreen(Client *c, Bool fullscreen) { | ||||
| 	if(fullscreen) { | ||||
| 		XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, | ||||
| 		                PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); | ||||
| 		c->isfullscreen = True; | ||||
| 		c->oldstate = c->isfloating; | ||||
| 		c->oldbw = c->bw; | ||||
| 		c->bw = 0; | ||||
| 		c->isfloating = True; | ||||
| 		resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); | ||||
| 		XRaiseWindow(dpy, c->win); | ||||
| 	} | ||||
| 	else { | ||||
| 		XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, | ||||
| 		                PropModeReplace, (unsigned char*)0, 0); | ||||
| 		c->isfullscreen = False; | ||||
| 		c->isfloating = c->oldstate; | ||||
| 		c->bw = c->oldbw; | ||||
| 		c->x = c->oldx; | ||||
| 		c->y = c->oldy; | ||||
| 		c->w = c->oldw; | ||||
| 		c->h = c->oldh; | ||||
| 		resizeclient(c, c->x, c->y, c->w, c->h); | ||||
| 		arrange(c->mon); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void | ||||
| setlayout(const Arg *arg) { | ||||
| 	if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) | ||||
| @ -1974,22 +1991,15 @@ updatestatus(void) { | ||||
| } | ||||
| 
 | ||||
| void | ||||
| updatewindowtype(Client *c) | ||||
| { | ||||
| 	Atom wtype, real; | ||||
| 	int format; | ||||
| 	unsigned long n, extra; | ||||
| 	unsigned char *p = NULL; | ||||
| updatewindowtype(Client *c) { | ||||
| 	Atom state = getatomprop(c, netatom[NetWMState]); | ||||
| 	Atom wtype = getatomprop(c, netatom[NetWMWindowType]); | ||||
| 
 | ||||
| 	if(XGetWindowProperty(dpy, c->win, netatom[NetWMWindowType], 0L, | ||||
| 	                      sizeof(Atom), False, XA_ATOM, &real, &format, | ||||
| 	                      &n, &extra, (unsigned char **)&p) == Success && p) { | ||||
| 		wtype = *(Atom *)p; | ||||
| 		XFree(p); | ||||
| 	if(state == netatom[NetWMFullscreen]) | ||||
| 		setfullscreen(c, True); | ||||
| 
 | ||||
| 		if(wtype == netatom[NetWMWindowTypeDialog]) | ||||
| 			c->isfloating = True; | ||||
| 	} | ||||
| 	if(wtype == netatom[NetWMWindowTypeDialog]) | ||||
| 		c->isfloating = True; | ||||
| } | ||||
| 
 | ||||
| void | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Connor Lane Smith
						Connor Lane Smith