diff options
Diffstat (limited to 'sway/tree/output.c')
-rw-r--r-- | sway/tree/output.c | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/sway/tree/output.c b/sway/tree/output.c index ab955359..6da63064 100644 --- a/sway/tree/output.c +++ b/sway/tree/output.c | |||
@@ -103,6 +103,57 @@ struct sway_container *output_create( | |||
103 | return output; | 103 | return output; |
104 | } | 104 | } |
105 | 105 | ||
106 | void output_for_each_workspace(struct sway_container *output, | ||
107 | void (*f)(struct sway_container *con, void *data), void *data) { | ||
108 | if (!sway_assert(output->type == C_OUTPUT, "Expected an output")) { | ||
109 | return; | ||
110 | } | ||
111 | for (int i = 0; i < output->children->length; ++i) { | ||
112 | struct sway_container *workspace = output->children->items[i]; | ||
113 | f(workspace, data); | ||
114 | } | ||
115 | } | ||
116 | |||
117 | void output_for_each_container(struct sway_container *output, | ||
118 | void (*f)(struct sway_container *con, void *data), void *data) { | ||
119 | if (!sway_assert(output->type == C_OUTPUT, "Expected an output")) { | ||
120 | return; | ||
121 | } | ||
122 | for (int i = 0; i < output->children->length; ++i) { | ||
123 | struct sway_container *workspace = output->children->items[i]; | ||
124 | workspace_for_each_container(workspace, f, data); | ||
125 | } | ||
126 | } | ||
127 | |||
128 | struct sway_container *output_find_workspace(struct sway_container *output, | ||
129 | bool (*test)(struct sway_container *con, void *data), void *data) { | ||
130 | if (!sway_assert(output->type == C_OUTPUT, "Expected an output")) { | ||
131 | return NULL; | ||
132 | } | ||
133 | for (int i = 0; i < output->children->length; ++i) { | ||
134 | struct sway_container *workspace = output->children->items[i]; | ||
135 | if (test(workspace, data)) { | ||
136 | return workspace; | ||
137 | } | ||
138 | } | ||
139 | return NULL; | ||
140 | } | ||
141 | |||
142 | struct sway_container *output_find_container(struct sway_container *output, | ||
143 | bool (*test)(struct sway_container *con, void *data), void *data) { | ||
144 | if (!sway_assert(output->type == C_OUTPUT, "Expected an output")) { | ||
145 | return NULL; | ||
146 | } | ||
147 | struct sway_container *result = NULL; | ||
148 | for (int i = 0; i < output->children->length; ++i) { | ||
149 | struct sway_container *workspace = output->children->items[i]; | ||
150 | if ((result = workspace_find_container(workspace, test, data))) { | ||
151 | return result; | ||
152 | } | ||
153 | } | ||
154 | return NULL; | ||
155 | } | ||
156 | |||
106 | static int sort_workspace_cmp_qsort(const void *_a, const void *_b) { | 157 | static int sort_workspace_cmp_qsort(const void *_a, const void *_b) { |
107 | struct sway_container *a = *(void **)_a; | 158 | struct sway_container *a = *(void **)_a; |
108 | struct sway_container *b = *(void **)_b; | 159 | struct sway_container *b = *(void **)_b; |
@@ -122,4 +173,3 @@ static int sort_workspace_cmp_qsort(const void *_a, const void *_b) { | |||
122 | void output_sort_workspaces(struct sway_container *output) { | 173 | void output_sort_workspaces(struct sway_container *output) { |
123 | list_stable_sort(output->children, sort_workspace_cmp_qsort); | 174 | list_stable_sort(output->children, sort_workspace_cmp_qsort); |
124 | } | 175 | } |
125 | |||