diff options
author | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-08-20 15:54:30 +1000 |
---|---|---|
committer | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-08-24 22:17:28 +1000 |
commit | b6058703fa240780d66fac8ef96982c66b2b0263 (patch) | |
tree | 5e056a7859751c68c0cfb425fc6f37599c3f7400 /sway/tree/view.c | |
parent | Merge pull request #2470 from ianyfan/completions (diff) | |
download | sway-b6058703fa240780d66fac8ef96982c66b2b0263.tar.gz sway-b6058703fa240780d66fac8ef96982c66b2b0263.tar.zst sway-b6058703fa240780d66fac8ef96982c66b2b0263.zip |
Refactor destroy functions and save workspaces when there's no outputs
This changes the destroy functions to the following:
* output_begin_destroy
* output_destroy
* workspace_begin_destroy
* workspace_destroy
* container_begin_destroy
* container_destroy
* view_begin_destroy
* view_destroy
The terminology was `destroy` and `free`, and it has been changed to
`begin_destroy` and `destroy` respectively.
When the last output is disconnected, its workspaces will now be stashed
in the root. Upon connection of a new output they will be restored.
There is a new function `workspace_consider_destroy` which decides
whether the given workspace should be destroyed or not (ie. empty and
not visible).
Calling container_begin_destroy will no longer automatically reap the
parents. In some places we want to reap the parents and in some we
don't, so this is left to the caller.
container_reap_empty_recursive and container_reap_empty have been
combined into one function and it will recurse up the tree.
Diffstat (limited to 'sway/tree/view.c')
-rw-r--r-- | sway/tree/view.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/sway/tree/view.c b/sway/tree/view.c index 7bf7325a..ba4a880f 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c | |||
@@ -35,7 +35,7 @@ void view_init(struct sway_view *view, enum sway_view_type type, | |||
35 | wl_signal_init(&view->events.unmap); | 35 | wl_signal_init(&view->events.unmap); |
36 | } | 36 | } |
37 | 37 | ||
38 | void view_free(struct sway_view *view) { | 38 | void view_destroy(struct sway_view *view) { |
39 | if (!sway_assert(view->surface == NULL, "Tried to free mapped view")) { | 39 | if (!sway_assert(view->surface == NULL, "Tried to free mapped view")) { |
40 | return; | 40 | return; |
41 | } | 41 | } |
@@ -75,14 +75,14 @@ void view_free(struct sway_view *view) { | |||
75 | * destroying flag will make the view get freed when the transaction is | 75 | * destroying flag will make the view get freed when the transaction is |
76 | * finished. | 76 | * finished. |
77 | */ | 77 | */ |
78 | void view_destroy(struct sway_view *view) { | 78 | void view_begin_destroy(struct sway_view *view) { |
79 | if (!sway_assert(view->surface == NULL, "Tried to destroy a mapped view")) { | 79 | if (!sway_assert(view->surface == NULL, "Tried to destroy a mapped view")) { |
80 | return; | 80 | return; |
81 | } | 81 | } |
82 | view->destroying = true; | 82 | view->destroying = true; |
83 | 83 | ||
84 | if (!view->swayc) { | 84 | if (!view->swayc) { |
85 | view_free(view); | 85 | view_destroy(view); |
86 | } | 86 | } |
87 | } | 87 | } |
88 | 88 | ||
@@ -560,7 +560,9 @@ void view_unmap(struct sway_view *view) { | |||
560 | } | 560 | } |
561 | 561 | ||
562 | bool was_fullscreen = view->swayc->is_fullscreen; | 562 | bool was_fullscreen = view->swayc->is_fullscreen; |
563 | struct sway_container *surviving_ancestor = container_destroy(view->swayc); | 563 | struct sway_container *parent = view->swayc->parent; |
564 | container_begin_destroy(view->swayc); | ||
565 | struct sway_container *surviving_ancestor = container_reap_empty(parent); | ||
564 | 566 | ||
565 | // If the workspace wasn't reaped | 567 | // If the workspace wasn't reaped |
566 | if (surviving_ancestor && surviving_ancestor->type >= C_WORKSPACE) { | 568 | if (surviving_ancestor && surviving_ancestor->type >= C_WORKSPACE) { |