diff options
author | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-09-18 21:53:02 +1000 |
---|---|---|
committer | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-09-18 21:53:02 +1000 |
commit | c6ff1f67f169cb2d58c77673844d4e8e010b1dc8 (patch) | |
tree | 4d12673d5f496b33048bc51792a2391e001b41f2 /sway/tree/root.c | |
parent | Merge pull request #2652 from emersion/swaybar-output-names (diff) | |
download | sway-c6ff1f67f169cb2d58c77673844d4e8e010b1dc8.tar.gz sway-c6ff1f67f169cb2d58c77673844d4e8e010b1dc8.tar.zst sway-c6ff1f67f169cb2d58c77673844d4e8e010b1dc8.zip |
Fix double iteration of scratchpad containers
root_for_each_container and root_find_container were using incorrect
logic to determine if a container was hidden in the scratchpad.
Containers will have a NULL parent if they are a direct child of a
workspace. Containers will have a NULL workspace if they are hidden in
the scratchpad.
The incorrect check meant that root_for_each_container would run the
callback on scratchpad containers twice. This meant that executing a
command such as `[class="$something"] scratchpad show` would cause the
command to run twice, resulting in the container being shown and hidden
again which is effectively a no op.
Fixes #2655.
Diffstat (limited to 'sway/tree/root.c')
-rw-r--r-- | sway/tree/root.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sway/tree/root.c b/sway/tree/root.c index ecc04ddb..d6f67bd7 100644 --- a/sway/tree/root.c +++ b/sway/tree/root.c | |||
@@ -265,10 +265,10 @@ void root_for_each_container(void (*f)(struct sway_container *con, void *data), | |||
265 | // Scratchpad | 265 | // Scratchpad |
266 | for (int i = 0; i < root->scratchpad->length; ++i) { | 266 | for (int i = 0; i < root->scratchpad->length; ++i) { |
267 | struct sway_container *container = root->scratchpad->items[i]; | 267 | struct sway_container *container = root->scratchpad->items[i]; |
268 | // If the container has a parent then it's visible on a workspace | 268 | // If the container has a workspace then it's visible on a workspace |
269 | // and will have been iterated in the previous for loop. So we only | 269 | // and will have been iterated in the previous for loop. So we only |
270 | // iterate the hidden scratchpad containers here. | 270 | // iterate the hidden scratchpad containers here. |
271 | if (!container->parent) { | 271 | if (!container->workspace) { |
272 | f(container, data); | 272 | f(container, data); |
273 | container_for_each_child(container, f, data); | 273 | container_for_each_child(container, f, data); |
274 | } | 274 | } |
@@ -311,7 +311,7 @@ struct sway_container *root_find_container( | |||
311 | // Scratchpad | 311 | // Scratchpad |
312 | for (int i = 0; i < root->scratchpad->length; ++i) { | 312 | for (int i = 0; i < root->scratchpad->length; ++i) { |
313 | struct sway_container *container = root->scratchpad->items[i]; | 313 | struct sway_container *container = root->scratchpad->items[i]; |
314 | if (!container->parent) { | 314 | if (!container->workspace) { |
315 | if (test(container, data)) { | 315 | if (test(container, data)) { |
316 | return container; | 316 | return container; |
317 | } | 317 | } |