aboutsummaryrefslogtreecommitdiffstats
path: root/sway/ipc-server.c
diff options
context:
space:
mode:
authorLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-08-17 19:48:34 +1000
committerLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-08-18 23:38:54 +1000
commitd6cd79c342495738fc23fbfbf19a01e73cdc42dc (patch)
tree7a5ebeae1d5e15f047f09698978fa84f61756faa /sway/ipc-server.c
parentMerge pull request #2460 from RyanDwyer/implement-mousedown (diff)
downloadsway-d6cd79c342495738fc23fbfbf19a01e73cdc42dc.tar.gz
sway-d6cd79c342495738fc23fbfbf19a01e73cdc42dc.tar.zst
sway-d6cd79c342495738fc23fbfbf19a01e73cdc42dc.zip
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.
Diffstat (limited to 'sway/ipc-server.c')
-rw-r--r--sway/ipc-server.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/sway/ipc-server.c b/sway/ipc-server.c
index dad1f310..34e940ad 100644
--- a/sway/ipc-server.c
+++ b/sway/ipc-server.c
@@ -522,7 +522,7 @@ void ipc_client_disconnect(struct ipc_client *client) {
522 522
523static void ipc_get_workspaces_callback(struct sway_container *workspace, 523static void ipc_get_workspaces_callback(struct sway_container *workspace,
524 void *data) { 524 void *data) {
525 if (workspace->type != C_WORKSPACE) { 525 if (!sway_assert(workspace->type == C_WORKSPACE, "Expected a workspace")) {
526 return; 526 return;
527 } 527 }
528 json_object *workspace_json = ipc_json_describe_container(workspace); 528 json_object *workspace_json = ipc_json_describe_container(workspace);
@@ -631,8 +631,7 @@ void ipc_client_handle_command(struct ipc_client *client) {
631 case IPC_GET_WORKSPACES: 631 case IPC_GET_WORKSPACES:
632 { 632 {
633 json_object *workspaces = json_object_new_array(); 633 json_object *workspaces = json_object_new_array();
634 container_for_each_descendant(&root_container, 634 root_for_each_workspace(ipc_get_workspaces_callback, workspaces);
635 ipc_get_workspaces_callback, workspaces);
636 const char *json_string = json_object_to_json_string(workspaces); 635 const char *json_string = json_object_to_json_string(workspaces);
637 client_valid = 636 client_valid =
638 ipc_send_reply(client, json_string, (uint32_t)strlen(json_string)); 637 ipc_send_reply(client, json_string, (uint32_t)strlen(json_string));
@@ -729,8 +728,7 @@ void ipc_client_handle_command(struct ipc_client *client) {
729 case IPC_GET_MARKS: 728 case IPC_GET_MARKS:
730 { 729 {
731 json_object *marks = json_object_new_array(); 730 json_object *marks = json_object_new_array();
732 container_descendants(&root_container, C_VIEW, ipc_get_marks_callback, 731 root_for_each_container(ipc_get_marks_callback, marks);
733 marks);
734 const char *json_string = json_object_to_json_string(marks); 732 const char *json_string = json_object_to_json_string(marks);
735 client_valid = 733 client_valid =
736 ipc_send_reply(client, json_string, (uint32_t)strlen(json_string)); 734 ipc_send_reply(client, json_string, (uint32_t)strlen(json_string));