Change container_get_first_view signature

This will have the function stop the recusive calls as soon as
the first view is found - unlike before
This commit is contained in:
Fabian Specht 2024-01-12 21:23:08 +01:00
parent c2eaf01767
commit 88fb849e59
No known key found for this signature in database
GPG key ID: 8BD4621E4A78BA57
3 changed files with 15 additions and 8 deletions

View file

@ -164,8 +164,7 @@ struct sway_container *tiling_container_at(
struct sway_node *parent, double lx, double ly,
struct wlr_surface **surface, double *sx, double *sy);
void container_get_first_view(struct sway_container *container,
struct sway_container **view);
struct sway_container *container_get_first_view(struct sway_container *container);
void container_for_each_child(struct sway_container *container,
void (*f)(struct sway_container *container, void *data), void *data);

View file

@ -90,10 +90,13 @@ static void set_new_focus(struct sway_workspace *ws, struct sway_seat *seat) {
if (ws->tiling->length) {
// this needs to be more specific (focus not just every container,
// but single windows
struct sway_container *first_view;
struct sway_container *container = ws->tiling->items[0];
struct sway_container *first_view = container_get_first_view(container);
if (!first_view) {
seat_set_focus(seat, &ws->node);
}
container_get_first_view(container, &first_view);
seat_set_focus(seat, &first_view->node);
} else if (ws->floating->length) {
seat_set_focus(seat, ws->floating->items[0]);

View file

@ -430,20 +430,25 @@ struct sway_container *container_at(struct sway_workspace *workspace,
return NULL;
}
void container_get_first_view(struct sway_container *container,
struct sway_container **view) {
struct sway_container *container_get_first_view(struct sway_container *container) {
if (container->view) {
*view = container;
return container;
}
if (container->pending.children) {
for (int i = 0; i < container->pending.children->length; ++i) {
struct sway_container *child = container->pending.children->items[i];
container_get_first_view(child, view);
struct sway_container *view = container_get_first_view(child);
if (view) {
return view;
}
}
}
return NULL;
}
void container_for_each_child(struct sway_container *container,
void (*f)(struct sway_container *container, void *data),
void *data) {