From d6cd79c342495738fc23fbfbf19a01e73cdc42dc Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Fri, 17 Aug 2018 19:48:34 +1000 Subject: Implement iterators per container type This introduces the following `for_each` functions: * root_for_each_workspace * root_for_each_container * output_for_each_workspace * output_for_each_container * workspace_for_each_container And introduces the following `find` functions: * root_find_output * root_find_workspace * root_find_container * output_find_workspace * output_find_container * workspace_find_container * container_find_child And removes the following functions: * container_descendants * container_for_each_descendant * container_find This change is preparing the way for demoting sway_container. Eventually these functions will accept and return sway_outputs, sway_workspaces and sway_containers (meaning a C_CONTAINER or C_VIEW). This change also makes it easy to handle abnormalities like the workspace floating list, root's scratchpad list and (once implemented) root's saved workspaces list for when there's no connected outputs. --- sway/commands/hide_edge_borders.c | 2 +- sway/commands/show_marks.c | 3 +-- sway/commands/swap.c | 6 +++--- sway/commands/unmark.c | 3 +-- 4 files changed, 6 insertions(+), 8 deletions(-) (limited to 'sway/commands') diff --git a/sway/commands/hide_edge_borders.c b/sway/commands/hide_edge_borders.c index bb390f5f..d59c9fdb 100644 --- a/sway/commands/hide_edge_borders.c +++ b/sway/commands/hide_edge_borders.c @@ -31,7 +31,7 @@ struct cmd_results *cmd_hide_edge_borders(int argc, char **argv) { "'"); } - container_for_each_descendant(&root_container, _configure_view, NULL); + root_for_each_container(_configure_view, NULL); return cmd_results_new(CMD_SUCCESS, NULL, NULL); } diff --git a/sway/commands/show_marks.c b/sway/commands/show_marks.c index cf153a0a..dd7d170c 100644 --- a/sway/commands/show_marks.c +++ b/sway/commands/show_marks.c @@ -24,8 +24,7 @@ struct cmd_results *cmd_show_marks(int argc, char **argv) { config->show_marks = parse_boolean(argv[0], config->show_marks); if (config->show_marks) { - container_for_each_descendant(&root_container, - rebuild_marks_iterator, NULL); + root_for_each_container(rebuild_marks_iterator, NULL); } for (int i = 0; i < root_container.children->length; ++i) { diff --git a/sway/commands/swap.c b/sway/commands/swap.c index 4e3a9cce..615e6b1d 100644 --- a/sway/commands/swap.c +++ b/sway/commands/swap.c @@ -50,13 +50,13 @@ struct cmd_results *cmd_swap(int argc, char **argv) { if (strcasecmp(argv[2], "id") == 0) { #ifdef HAVE_XWAYLAND xcb_window_t id = strtol(value, NULL, 0); - other = container_find(&root_container, test_id, (void *)&id); + other = root_find_container(test_id, (void *)&id); #endif } else if (strcasecmp(argv[2], "con_id") == 0) { size_t con_id = atoi(value); - other = container_find(&root_container, test_con_id, (void *)con_id); + other = root_find_container(test_con_id, (void *)con_id); } else if (strcasecmp(argv[2], "mark") == 0) { - other = container_find(&root_container, test_mark, (void *)value); + other = root_find_container(test_mark, (void *)value); } else { free(value); return cmd_results_new(CMD_INVALID, "swap", EXPECTED_SYNTAX); diff --git a/sway/commands/unmark.c b/sway/commands/unmark.c index 44ceccee..c183785b 100644 --- a/sway/commands/unmark.c +++ b/sway/commands/unmark.c @@ -52,8 +52,7 @@ struct cmd_results *cmd_unmark(int argc, char **argv) { view_find_and_unmark(mark); } else { // Remove all marks from all views - container_for_each_descendant(&root_container, - remove_all_marks_iterator, NULL); + root_for_each_container(remove_all_marks_iterator, NULL); } free(mark); -- cgit v1.2.3-54-g00ecf