aboutsummaryrefslogtreecommitdiff
path: root/sway
diff options
context:
space:
mode:
authorRyan Dwyer <ryandwyer1@gmail.com>2018-06-26 13:15:45 +1000
committerRyan Dwyer <ryandwyer1@gmail.com>2018-06-26 13:15:45 +1000
commit7a922c65aab27c5f4282cf15de52d240e5ac8052 (patch)
treebea2a3dee07631b1da05428b29ec5d1e4c47d871 /sway
parentbeacd4d9f9c6da7459bcde0e95031dac41387a7c (diff)
downloadsway-7a922c65aab27c5f4282cf15de52d240e5ac8052.tar.xz
Damage output when a fullscreen view unmaps
Also moved the arranging into view_unmap to avoid excessive code duplication.
Diffstat (limited to 'sway')
-rw-r--r--sway/desktop/xdg_shell.c3
-rw-r--r--sway/desktop/xdg_shell_v6.c3
-rw-r--r--sway/desktop/xwayland.c7
-rw-r--r--sway/tree/view.c14
4 files changed, 14 insertions, 13 deletions
diff --git a/sway/desktop/xdg_shell.c b/sway/desktop/xdg_shell.c
index ab35b98f..a06c3bd2 100644
--- a/sway/desktop/xdg_shell.c
+++ b/sway/desktop/xdg_shell.c
@@ -197,8 +197,7 @@ static void handle_unmap(struct wl_listener *listener, void *data) {
return;
}
- struct sway_container *parent = view_unmap(view);
- arrange_and_commit(parent);
+ view_unmap(view);
wl_list_remove(&xdg_shell_view->commit.link);
wl_list_remove(&xdg_shell_view->new_popup.link);
diff --git a/sway/desktop/xdg_shell_v6.c b/sway/desktop/xdg_shell_v6.c
index 76c1fa24..424bca7b 100644
--- a/sway/desktop/xdg_shell_v6.c
+++ b/sway/desktop/xdg_shell_v6.c
@@ -196,8 +196,7 @@ static void handle_unmap(struct wl_listener *listener, void *data) {
return;
}
- struct sway_container *parent = view_unmap(view);
- arrange_and_commit(parent);
+ view_unmap(view);
wl_list_remove(&xdg_shell_v6_view->commit.link);
wl_list_remove(&xdg_shell_v6_view->new_popup.link);
diff --git a/sway/desktop/xwayland.c b/sway/desktop/xwayland.c
index 7e78ef32..53fa42cc 100644
--- a/sway/desktop/xwayland.c
+++ b/sway/desktop/xwayland.c
@@ -260,8 +260,7 @@ static void handle_unmap(struct wl_listener *listener, void *data) {
return;
}
- struct sway_container *parent = view_unmap(view);
- arrange_and_commit(parent);
+ view_unmap(view);
wl_list_remove(&xwayland_view->commit.link);
view->surface = NULL;
@@ -297,9 +296,7 @@ static void handle_destroy(struct wl_listener *listener, void *data) {
struct sway_view *view = &xwayland_view->view;
if (view->surface) {
- struct sway_container *parent = view_unmap(view);
- arrange_and_commit(parent);
-
+ view_unmap(view);
wl_list_remove(&xwayland_view->commit.link);
view->surface = NULL;
}
diff --git a/sway/tree/view.c b/sway/tree/view.c
index 2ca0dbbb..5a78112a 100644
--- a/sway/tree/view.c
+++ b/sway/tree/view.c
@@ -539,7 +539,7 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface) {
view_handle_container_reparent(&view->container_reparent, NULL);
}
-struct sway_container *view_unmap(struct sway_view *view) {
+void view_unmap(struct sway_view *view) {
wl_signal_emit(&view->events.unmap, view);
wl_list_remove(&view->surface_new_subsurface.link);
@@ -549,10 +549,16 @@ struct sway_container *view_unmap(struct sway_view *view) {
struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE);
ws->sway_workspace->fullscreen = NULL;
container_destroy(view->swayc);
- return ws;
- }
- return container_destroy(view->swayc);
+ struct sway_container *output = ws->parent;
+ struct sway_transaction *transaction = transaction_create();
+ arrange_windows(output, transaction);
+ transaction_add_damage(transaction, container_get_box(output));
+ transaction_commit(transaction);
+ } else {
+ struct sway_container *parent = container_destroy(view->swayc);
+ arrange_and_commit(parent);
+ }
}
void view_update_position(struct sway_view *view, double lx, double ly) {