aboutsummaryrefslogtreecommitdiffstats
path: root/sway/desktop/output.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/desktop/output.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/desktop/output.c')
-rw-r--r--sway/desktop/output.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c
index 66747a3f..43ed9793 100644
--- a/sway/desktop/output.c
+++ b/sway/desktop/output.c
@@ -303,15 +303,14 @@ struct send_frame_done_data {
303 303
304static void send_frame_done_container_iterator(struct sway_container *con, 304static void send_frame_done_container_iterator(struct sway_container *con,
305 void *_data) { 305 void *_data) {
306 struct send_frame_done_data *data = _data; 306 if (con->type != C_VIEW) {
307 if (!sway_assert(con->type == C_VIEW, "expected a view")) {
308 return; 307 return;
309 } 308 }
310
311 if (!view_is_visible(con->sway_view)) { 309 if (!view_is_visible(con->sway_view)) {
312 return; 310 return;
313 } 311 }
314 312
313 struct send_frame_done_data *data = _data;
315 output_view_for_each_surface(data->output, con->sway_view, 314 output_view_for_each_surface(data->output, con->sway_view,
316 send_frame_done_iterator, data->when); 315 send_frame_done_iterator, data->when);
317} 316}
@@ -322,8 +321,8 @@ static void send_frame_done_container(struct sway_output *output,
322 .output = output, 321 .output = output,
323 .when = when, 322 .when = when,
324 }; 323 };
325 container_descendants(con, C_VIEW, 324 output_for_each_container(output->swayc,
326 send_frame_done_container_iterator, &data); 325 send_frame_done_container_iterator, &data);
327} 326}
328 327
329static void send_frame_done(struct sway_output *output, struct timespec *when) { 328static void send_frame_done(struct sway_output *output, struct timespec *when) {