conform the xdg-protocol with fullscreen translucent clients
see `setfullscreen()` for more info
This commit is contained in:
parent
90a12c90a0
commit
8cdb997126
|
@ -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 rootcolor[] = {0.3, 0.3, 0.3, 1.0};
|
||||||
static const float bordercolor[] = {0.5, 0.5, 0.5, 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};
|
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 */
|
/* tagging */
|
||||||
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
|
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_node *scene;
|
||||||
struct wlr_scene_rect *border[4]; /* top, bottom, left, right */
|
struct wlr_scene_rect *border[4]; /* top, bottom, left, right */
|
||||||
struct wlr_scene_node *scene_surface;
|
struct wlr_scene_node *scene_surface;
|
||||||
|
struct wlr_scene_rect *fullscreen_bg; /* See setfullscreen() for info */
|
||||||
struct wl_list link;
|
struct wl_list link;
|
||||||
struct wl_list flink;
|
struct wl_list flink;
|
||||||
union {
|
union {
|
||||||
|
@ -1869,10 +1870,23 @@ setfullscreen(Client *c, int fullscreen)
|
||||||
if (fullscreen) {
|
if (fullscreen) {
|
||||||
c->prev = c->geom;
|
c->prev = c->geom;
|
||||||
resize(c, c->mon->m, 0);
|
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 {
|
} else {
|
||||||
/* restore previous size instead of arrange for floating windows since
|
/* restore previous size instead of arrange for floating windows since
|
||||||
* client positions are set by the user and cannot be recalculated */
|
* client positions are set by the user and cannot be recalculated */
|
||||||
resize(c, c->prev, 0);
|
resize(c, c->prev, 0);
|
||||||
|
wlr_scene_node_destroy(&c->fullscreen_bg->node);
|
||||||
}
|
}
|
||||||
arrange(c->mon);
|
arrange(c->mon);
|
||||||
printstatus();
|
printstatus();
|
||||||
|
|
Loading…
Reference in a new issue