aboutsummaryrefslogtreecommitdiffstats
path: root/sway/tree/container.c
diff options
context:
space:
mode:
authorLibravatar Tony Crisci <tony@dubstepdish.com>2018-02-24 14:30:47 -0500
committerLibravatar Tony Crisci <tony@dubstepdish.com>2018-02-24 14:30:47 -0500
commit1cca3965f395f624f698cc162946c6cbd6b10673 (patch)
treece07d65ab79287280f1f5468e2e62eb5cbef4089 /sway/tree/container.c
parentadd config handlers (diff)
downloadsway-1cca3965f395f624f698cc162946c6cbd6b10673.tar.gz
sway-1cca3965f395f624f698cc162946c6cbd6b10673.tar.zst
sway-1cca3965f395f624f698cc162946c6cbd6b10673.zip
static bfs queue
Diffstat (limited to 'sway/tree/container.c')
-rw-r--r--sway/tree/container.c34
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
20static list_t *bfs_queue;
21
22static 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
20swayc_t *swayc_by_test(swayc_t *container, 35swayc_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
274swayc_t *swayc_at(swayc_t *parent, double lx, double ly, 289swayc_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
382void container_for_each_bfs(swayc_t *con, void (*f)(swayc_t *con, void *data), 396void 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
404swayc_t *swayc_change_layout(swayc_t *container, enum swayc_layouts layout) { 420swayc_t *swayc_change_layout(swayc_t *container, enum swayc_layouts layout) {