aboutsummaryrefslogtreecommitdiffstats
path: root/sway/tree/root.c
diff options
context:
space:
mode:
authorLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-09-18 21:53:02 +1000
committerLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-09-18 21:53:02 +1000
commitc6ff1f67f169cb2d58c77673844d4e8e010b1dc8 (patch)
tree4d12673d5f496b33048bc51792a2391e001b41f2 /sway/tree/root.c
parentMerge pull request #2652 from emersion/swaybar-output-names (diff)
downloadsway-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.c6
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 }