conform the xdg-protocol with fullscreen translucent clients
see `setfullscreen()` for more info
This commit is contained in:
		@@ -5,6 +5,8 @@ static const int lockfullscreen     = 1;  /* 1 will force focus on the fullscree
 | 
			
		||||
static const float rootcolor[]      = {0.3, 0.3, 0.3, 1.0};
 | 
			
		||||
static const float bordercolor[]    = {0.5, 0.5, 0.5, 1.0};
 | 
			
		||||
static const float focuscolor[]     = {1.0, 0.0, 0.0, 1.0};
 | 
			
		||||
/* To conform the xdg-protocol, set the alpha to zero to restore the old behavior */
 | 
			
		||||
static const float fullscreen_bg[]  = {0.1, 0.1, 0.1, 1.0};
 | 
			
		||||
 | 
			
		||||
/* tagging */
 | 
			
		||||
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								dwl.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								dwl.c
									
									
									
									
									
								
							@@ -98,6 +98,7 @@ typedef struct {
 | 
			
		||||
	struct wlr_scene_node *scene;
 | 
			
		||||
	struct wlr_scene_rect *border[4]; /* top, bottom, left, right */
 | 
			
		||||
	struct wlr_scene_node *scene_surface;
 | 
			
		||||
	struct wlr_scene_rect *fullscreen_bg; /* See setfullscreen() for info */
 | 
			
		||||
	struct wl_list link;
 | 
			
		||||
	struct wl_list flink;
 | 
			
		||||
	union {
 | 
			
		||||
@@ -1869,10 +1870,23 @@ setfullscreen(Client *c, int fullscreen)
 | 
			
		||||
	if (fullscreen) {
 | 
			
		||||
		c->prev = c->geom;
 | 
			
		||||
		resize(c, c->mon->m, 0);
 | 
			
		||||
		/* The xdg-protocol specifies:
 | 
			
		||||
		 *
 | 
			
		||||
		 * If the fullscreened surface is not opaque, the compositor must make
 | 
			
		||||
		 * sure that other screen content not part of the same surface tree (made
 | 
			
		||||
		 * up of subsurfaces, popups or similarly coupled surfaces) are not
 | 
			
		||||
		 * visible below the fullscreened surface.
 | 
			
		||||
		 *
 | 
			
		||||
		 * For brevity we set a black background for all clients
 | 
			
		||||
		 */
 | 
			
		||||
		c->fullscreen_bg = wlr_scene_rect_create(c->scene,
 | 
			
		||||
			c->geom.width, c->geom.height, fullscreen_bg);
 | 
			
		||||
		wlr_scene_node_lower_to_bottom(&c->fullscreen_bg->node);
 | 
			
		||||
	} else {
 | 
			
		||||
		/* restore previous size instead of arrange for floating windows since
 | 
			
		||||
		 * client positions are set by the user and cannot be recalculated */
 | 
			
		||||
		resize(c, c->prev, 0);
 | 
			
		||||
		wlr_scene_node_destroy(&c->fullscreen_bg->node);
 | 
			
		||||
	}
 | 
			
		||||
	arrange(c->mon);
 | 
			
		||||
	printstatus();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user