mirror of
https://github.com/swaywm/sway.git
synced 2025-11-08 13:29:50 -05:00
Allow containers to float
Things worth noting:
* When a fullscreen view unmaps, the check to unset fullscreen on the
workspace has been moved out of view_unmap and into container_destroy,
because containers can be fullscreen too
* The calls to `container_reap_empty_recursive(workspace)` have been
removed from `container_set_floating`. That function reaps upwards so it
wouldn't do anything. I'm probably the one who originally added it...
* My fix (b14bd1b0b1) for the tabbed child
crash has a side effect where when you close a floating container, focus
is not given to the tiled container again. I've removed my fix and
removed the call to `send_cursor_motion` from `seat_set_focus_warp`. We
should consider calling it from somewhere earlier in the call stack.
This commit is contained in:
parent
a2164c6661
commit
08cfba2192
11 changed files with 126 additions and 86 deletions
|
|
@ -17,9 +17,16 @@ struct cmd_results *cmd_floating(int argc, char **argv) {
|
|||
}
|
||||
struct sway_container *container =
|
||||
config->handler_context.current_container;
|
||||
if (container->type != C_VIEW) {
|
||||
// TODO: This doesn't strictly speaking have to be true
|
||||
return cmd_results_new(CMD_INVALID, "float", "Only views can float");
|
||||
if (container->type == C_WORKSPACE && container->children->length == 0) {
|
||||
return cmd_results_new(CMD_INVALID, "floating",
|
||||
"Can't float an empty workspace");
|
||||
}
|
||||
if (container->type == C_WORKSPACE) {
|
||||
// Wrap the workspace's children in a container so we can float it
|
||||
struct sway_container *workspace = container;
|
||||
container = container_wrap_children(container);
|
||||
workspace->layout = L_HORIZ;
|
||||
seat_set_focus(config->handler_context.seat, container);
|
||||
}
|
||||
|
||||
bool wants_floating;
|
||||
|
|
|
|||
|
|
@ -298,9 +298,15 @@ static struct cmd_results *move_to_position(struct sway_container *container,
|
|||
}
|
||||
|
||||
static struct cmd_results *move_to_scratchpad(struct sway_container *con) {
|
||||
if (con->type != C_CONTAINER && con->type != C_VIEW) {
|
||||
if (con->type == C_WORKSPACE && con->children->length == 0) {
|
||||
return cmd_results_new(CMD_INVALID, "move",
|
||||
"Only views and containers can be moved to the scratchpad");
|
||||
"Can't move an empty workspace to the scratchpad");
|
||||
}
|
||||
if (con->type == C_WORKSPACE) {
|
||||
// Wrap the workspace's children in a container
|
||||
struct sway_container *workspace = con;
|
||||
con = container_wrap_children(con);
|
||||
workspace->layout = L_HORIZ;
|
||||
}
|
||||
if (con->scratchpad) {
|
||||
return cmd_results_new(CMD_INVALID, "move",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue