diff options
| author | Leonardo Hernández Hernández <leohdz172@protonmail.com> | 2022-07-23 02:08:10 -0500 | 
|---|---|---|
| committer | Leonardo Hernández Hernández <leohdz172@protonmail.com> | 2022-07-23 02:17:00 -0500 | 
| commit | 8cdb9971264adfdc35777b5a9935c2e4c47eea9f (patch) | |
| tree | 36b2056e4877852f3647fd2e26c3a89a162feff7 | |
| parent | always set the same monitor and tags for child clients of a client (diff) | |
| download | dwl-8cdb9971264adfdc35777b5a9935c2e4c47eea9f.tar.gz dwl-8cdb9971264adfdc35777b5a9935c2e4c47eea9f.tar.bz2 dwl-8cdb9971264adfdc35777b5a9935c2e4c47eea9f.tar.xz dwl-8cdb9971264adfdc35777b5a9935c2e4c47eea9f.tar.zst dwl-8cdb9971264adfdc35777b5a9935c2e4c47eea9f.zip | |
conform the xdg-protocol with fullscreen translucent clients
see `setfullscreen()` for more info
Diffstat (limited to '')
| -rw-r--r-- | config.def.h | 2 | ||||
| -rw-r--r-- | dwl.c | 14 | 
2 files changed, 16 insertions, 0 deletions
| diff --git a/config.def.h b/config.def.h index 43f35cd..29c6dbf 100644 --- a/config.def.h +++ b/config.def.h @@ -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" }; @@ -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(); | 
