diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h index b802e1d1b..906088f01 100644 --- a/include/sway/tree/container.h +++ b/include/sway/tree/container.h @@ -40,6 +40,7 @@ enum sway_container_layout { L_VERT, L_STACKED, L_TABBED, + L_FLOATING, }; enum sway_container_border { @@ -75,10 +76,6 @@ struct sway_container { enum sway_container_layout layout; enum sway_container_layout prev_layout; - // Allow the container to be automatically removed if it's empty. True by - // default, false for the magic floating container that each workspace has. - bool reapable; - // Saves us from searching the list of children/floating in the parent bool is_floating; bool is_sticky; diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 1d21e80f2..e91be4d4a 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -754,6 +754,8 @@ static void render_container(struct sway_output *output, case L_TABBED: render_container_tabbed(output, damage, con, parent_focused); break; + case L_FLOATING: + sway_assert(false, "Didn't expect to see floating here"); } } diff --git a/sway/ipc-json.c b/sway/ipc-json.c index 4d7024a8a..6d1854490 100644 --- a/sway/ipc-json.c +++ b/sway/ipc-json.c @@ -22,6 +22,8 @@ static const char *ipc_json_layout_description(enum sway_container_layout l) { return "tabbed"; case L_STACKED: return "stacked"; + case L_FLOATING: + return "floating"; case L_NONE: break; } diff --git a/sway/tree/container.c b/sway/tree/container.c index f9a0474cd..17d29d923 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -123,7 +123,6 @@ struct sway_container *container_create(enum sway_container_type type) { c->layout = L_NONE; c->type = type; c->alpha = 1.0f; - c->reapable = true; if (type != C_VIEW) { c->children = create_list(); @@ -280,7 +279,8 @@ static void container_root_finish(struct sway_container *con) { } bool container_reap_empty(struct sway_container *con) { - if (!con->reapable) { + if (con->layout == L_FLOATING) { + // Don't reap the magical floating container that each workspace has return false; } switch (con->type) { @@ -618,6 +618,9 @@ struct sway_container *container_at(struct sway_container *parent, return container_at_tabbed(parent, ox, oy, surface, sx, sy); case L_STACKED: return container_at_stacked(parent, ox, oy, surface, sx, sy); + case L_FLOATING: + sway_assert(false, "Didn't expect to see floating here"); + return NULL; case L_NONE: return NULL; } @@ -842,6 +845,9 @@ static size_t get_tree_representation(struct sway_container *parent, char *buffe case L_STACKED: lenient_strcat(buffer, "S["); break; + case L_FLOATING: + strcpy(buffer, "F["); + break; case L_NONE: lenient_strcat(buffer, "D["); break; diff --git a/sway/tree/workspace.c b/sway/tree/workspace.c index 5bef409aa..37d4a06a0 100644 --- a/sway/tree/workspace.c +++ b/sway/tree/workspace.c @@ -67,7 +67,7 @@ struct sway_container *workspace_create(struct sway_container *output, swayws->swayc = workspace; swayws->floating = container_create(C_CONTAINER); swayws->floating->parent = swayws->swayc; - swayws->floating->reapable = false; + swayws->floating->layout = L_FLOATING; workspace->sway_workspace = swayws; container_add_child(output, workspace);