diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h index fb4e8c68a..8ef98c956 100644 --- a/include/sway/tree/container.h +++ b/include/sway/tree/container.h @@ -34,7 +34,6 @@ enum sway_container_layout { L_VERT, L_STACKED, L_TABBED, - L_FLOATING, }; enum sway_container_border { diff --git a/sway/commands/floating.c b/sway/commands/floating.c index 8432b0dcd..9e0be9d0c 100644 --- a/sway/commands/floating.c +++ b/sway/commands/floating.c @@ -3,9 +3,11 @@ #include "sway/commands.h" #include "sway/input/seat.h" #include "sway/ipc-server.h" +#include "sway/output.h" #include "sway/tree/arrange.h" #include "sway/tree/container.h" #include "sway/tree/layout.h" +#include "sway/tree/view.h" #include "list.h" struct cmd_results *cmd_floating(int argc, char **argv) { @@ -38,6 +40,17 @@ struct cmd_results *cmd_floating(int argc, char **argv) { container, C_WORKSPACE); container_remove_child(container); container_add_floating(workspace, container); + + struct sway_output *output = workspace->parent->sway_output; + output_damage_whole_container(output, container); + // Reset to sane size and position + container->width = 640; + container->height = 480; + container->x = workspace->width / 2 - container->width / 2; + container->y = workspace->height / 2 - container->height / 2; + view_autoconfigure(container->sway_view); + output_damage_whole_container(output, container); + seat_set_focus(config->handler_context.seat, container); arrange_workspace(workspace); } else if (container->is_floating && !wants_floating) { diff --git a/sway/debug-tree.c b/sway/debug-tree.c index ae0a1869b..5af5b5652 100644 --- a/sway/debug-tree.c +++ b/sway/debug-tree.c @@ -22,8 +22,6 @@ static const char *layout_to_str(enum sway_container_layout layout) { return "L_STACKED"; case L_TABBED: return "L_TABBED"; - case L_FLOATING: - return "L_FLOATING"; case L_NONE: default: return "L_NONE"; diff --git a/sway/desktop/output.c b/sway/desktop/output.c index b6965a2aa..e7fad72b8 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -457,9 +457,6 @@ static void render_container(struct sway_output *output, case L_TABBED: render_container_tabbed(output, con); break; - case L_FLOATING: - // TODO - break; } } @@ -524,6 +521,8 @@ static void render_output(struct sway_output *output, struct timespec *when, render_container(output, workspace); + // TODO: iterate over all floating views of all active workspaces and + // render them in layout space for (int i = 0; i < workspace->sway_workspace->floating->length; ++i) { struct sway_container *c = workspace->sway_workspace->floating->items[0]; @@ -607,6 +606,12 @@ static void send_frame_done(struct sway_output *output, struct timespec *when) { struct sway_container *workspace = output_get_active_workspace(output); send_frame_done_container(&data, workspace); + for (int i = 0; i < workspace->sway_workspace->floating->length; ++i) { + struct sway_container *c = + workspace->sway_workspace->floating->items[0]; + send_frame_done_container_iterator(c, &data); + } + send_frame_done_unmanaged(&data, &root_container.sway_root->xwayland_unmanaged); diff --git a/sway/ipc-json.c b/sway/ipc-json.c index ea7fd9ad9..3d4618b39 100644 --- a/sway/ipc-json.c +++ b/sway/ipc-json.c @@ -21,8 +21,6 @@ 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; }