From 1801b725e267b2fba6b98171adcd2de8f7db9235 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Fri, 17 Aug 2018 20:25:33 +1000 Subject: [PATCH] Add using_csd variable to transaction state This fixes a race condition flicker when unfloating a view which uses client side decorations. When the view is floated it has using_csd = true, so the decorations are not drawn. When unfloating it it changes to false, but this change wasn't part of transactions so it could potentially render the decorations around the view while it's waiting for the transaction to apply. --- include/sway/tree/container.h | 1 + sway/desktop/render.c | 6 +++--- sway/desktop/transaction.c | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h index b64a2e63..fdcc31ec 100644 --- a/include/sway/tree/container.h +++ b/include/sway/tree/container.h @@ -83,6 +83,7 @@ struct sway_container_state { bool border_bottom; bool border_left; bool border_right; + bool using_csd; // Workspace properties struct sway_container *ws_fullscreen; diff --git a/sway/desktop/render.c b/sway/desktop/render.c index cdac9c72..6e1e31f0 100644 --- a/sway/desktop/render.c +++ b/sway/desktop/render.c @@ -266,7 +266,7 @@ static void render_view(struct sway_output *output, pixman_region32_t *damage, render_view_toplevels(view, output, damage, view->swayc->alpha); } - if (view->using_csd) { + if (view->swayc->current.using_csd) { return; } @@ -585,7 +585,7 @@ static void render_container_simple(struct sway_output *output, marks_texture = view->marks_unfocused; } - if (!view->using_csd) { + if (!view->swayc->current.using_csd) { if (state->border == B_NORMAL) { render_titlebar(output, damage, child, state->swayc_x, state->swayc_y, state->swayc_width, colors, @@ -777,7 +777,7 @@ static void render_floating_container(struct sway_output *soutput, marks_texture = view->marks_unfocused; } - if (!view->using_csd) { + if (!view->swayc->current.using_csd) { if (con->current.border == B_NORMAL) { render_titlebar(soutput, damage, con, con->current.swayc_x, con->current.swayc_y, con->current.swayc_width, colors, diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c index c08730ce..e89f01d8 100644 --- a/sway/desktop/transaction.c +++ b/sway/desktop/transaction.c @@ -107,6 +107,7 @@ static void copy_pending_state(struct sway_container *container, state->border_left = view->border_left; state->border_right = view->border_right; state->border_bottom = view->border_bottom; + state->using_csd = view->using_csd; } else if (container->type == C_WORKSPACE) { state->ws_fullscreen = container->sway_workspace->fullscreen; state->ws_floating = container->sway_workspace->floating;