diff options
author | Tony Crisci <tony@dubstepdish.com> | 2018-02-24 14:30:47 -0500 |
---|---|---|
committer | Tony Crisci <tony@dubstepdish.com> | 2018-02-24 14:30:47 -0500 |
commit | 1cca3965f395f624f698cc162946c6cbd6b10673 (patch) | |
tree | ce07d65ab79287280f1f5468e2e62eb5cbef4089 /sway | |
parent | add config handlers (diff) | |
download | sway-1cca3965f395f624f698cc162946c6cbd6b10673.tar.gz sway-1cca3965f395f624f698cc162946c6cbd6b10673.tar.zst sway-1cca3965f395f624f698cc162946c6cbd6b10673.zip |
static bfs queue
Diffstat (limited to 'sway')
-rw-r--r-- | sway/tree/container.c | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/sway/tree/container.c b/sway/tree/container.c index b56e72e1..fafbdb03 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c | |||
@@ -17,6 +17,21 @@ | |||
17 | #include "sway/workspace.h" | 17 | #include "sway/workspace.h" |
18 | #include "log.h" | 18 | #include "log.h" |
19 | 19 | ||
20 | static list_t *bfs_queue; | ||
21 | |||
22 | static list_t *get_bfs_queue() { | ||
23 | if (!bfs_queue) { | ||
24 | bfs_queue = create_list(); | ||
25 | if (!bfs_queue) { | ||
26 | wlr_log(L_ERROR, "could not allocate list for bfs queue"); | ||
27 | return NULL; | ||
28 | } | ||
29 | } | ||
30 | bfs_queue->length = 0; | ||
31 | |||
32 | return bfs_queue; | ||
33 | } | ||
34 | |||
20 | swayc_t *swayc_by_test(swayc_t *container, | 35 | swayc_t *swayc_by_test(swayc_t *container, |
21 | bool (*test)(swayc_t *view, void *data), void *data) { | 36 | bool (*test)(swayc_t *view, void *data), void *data) { |
22 | if (!container->children) { | 37 | if (!container->children) { |
@@ -273,7 +288,11 @@ swayc_t *swayc_parent_by_type(swayc_t *container, enum swayc_types type) { | |||
273 | 288 | ||
274 | swayc_t *swayc_at(swayc_t *parent, double lx, double ly, | 289 | swayc_t *swayc_at(swayc_t *parent, double lx, double ly, |
275 | struct wlr_surface **surface, double *sx, double *sy) { | 290 | struct wlr_surface **surface, double *sx, double *sy) { |
276 | list_t *queue = create_list(); | 291 | list_t *queue = get_bfs_queue(); |
292 | if (!queue) { | ||
293 | return NULL; | ||
294 | } | ||
295 | |||
277 | list_add(queue, parent); | 296 | list_add(queue, parent); |
278 | 297 | ||
279 | swayc_t *swayc = NULL; | 298 | swayc_t *swayc = NULL; |
@@ -313,7 +332,6 @@ swayc_t *swayc_at(swayc_t *parent, double lx, double ly, | |||
313 | *sx = view_sx - popup_sx; | 332 | *sx = view_sx - popup_sx; |
314 | *sy = view_sy - popup_sy; | 333 | *sy = view_sy - popup_sy; |
315 | *surface = popup->surface; | 334 | *surface = popup->surface; |
316 | list_free(queue); | ||
317 | return swayc; | 335 | return swayc; |
318 | } | 336 | } |
319 | break; | 337 | break; |
@@ -332,7 +350,6 @@ swayc_t *swayc_at(swayc_t *parent, double lx, double ly, | |||
332 | *sx = view_sx - sub_x; | 350 | *sx = view_sx - sub_x; |
333 | *sy = view_sy - sub_y; | 351 | *sy = view_sy - sub_y; |
334 | *surface = subsurface->surface; | 352 | *surface = subsurface->surface; |
335 | list_free(queue); | ||
336 | return swayc; | 353 | return swayc; |
337 | } | 354 | } |
338 | 355 | ||
@@ -344,7 +361,6 @@ swayc_t *swayc_at(swayc_t *parent, double lx, double ly, | |||
344 | *sx = view_sx; | 361 | *sx = view_sx; |
345 | *sy = view_sy; | 362 | *sy = view_sy; |
346 | *surface = swayc->sway_view->surface; | 363 | *surface = swayc->sway_view->surface; |
347 | list_free(queue); | ||
348 | return swayc; | 364 | return swayc; |
349 | } | 365 | } |
350 | } else { | 366 | } else { |
@@ -352,8 +368,6 @@ swayc_t *swayc_at(swayc_t *parent, double lx, double ly, | |||
352 | } | 368 | } |
353 | } | 369 | } |
354 | 370 | ||
355 | list_free(queue); | ||
356 | |||
357 | return NULL; | 371 | return NULL; |
358 | } | 372 | } |
359 | 373 | ||
@@ -381,7 +395,11 @@ void container_map(swayc_t *container, void (*f)(swayc_t *view, void *data), voi | |||
381 | 395 | ||
382 | void container_for_each_bfs(swayc_t *con, void (*f)(swayc_t *con, void *data), | 396 | void container_for_each_bfs(swayc_t *con, void (*f)(swayc_t *con, void *data), |
383 | void *data) { | 397 | void *data) { |
384 | list_t *queue = create_list(); | 398 | list_t *queue = get_bfs_queue(); |
399 | if (!queue) { | ||
400 | return; | ||
401 | } | ||
402 | |||
385 | if (queue == NULL) { | 403 | if (queue == NULL) { |
386 | wlr_log(L_ERROR, "could not allocate list"); | 404 | wlr_log(L_ERROR, "could not allocate list"); |
387 | return; | 405 | return; |
@@ -397,8 +415,6 @@ void container_for_each_bfs(swayc_t *con, void (*f)(swayc_t *con, void *data), | |||
397 | // TODO floating containers | 415 | // TODO floating containers |
398 | list_cat(queue, current->children); | 416 | list_cat(queue, current->children); |
399 | } | 417 | } |
400 | |||
401 | list_free(queue); | ||
402 | } | 418 | } |
403 | 419 | ||
404 | swayc_t *swayc_change_layout(swayc_t *container, enum swayc_layouts layout) { | 420 | swayc_t *swayc_change_layout(swayc_t *container, enum swayc_layouts layout) { |