From 36281609ea882d4c0a2a10fc9e604eb1ec2e8951 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 4 Aug 2018 14:46:27 +1000 Subject: Implement move to workspace on a floating container Also adjusts container_floating_translate to not change the current properties directly. --- include/sway/tree/container.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'include/sway') diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h index 16a180f8..d82db89c 100644 --- a/include/sway/tree/container.h +++ b/include/sway/tree/container.h @@ -328,6 +328,14 @@ void container_floating_translate(struct sway_container *con, void container_floating_move_to(struct sway_container *con, double lx, double ly); +/** + * Move a floating container to the center of the workspace. + */ +void container_floating_move_to_center(struct sway_container *con); + +void container_floating_move_to_container(struct sway_container *container, + struct sway_container *destination); + /** * Mark a container as dirty if it isn't already. Dirty containers will be * included in the next transaction then unmarked as dirty. -- cgit v1.2.3 From a0649190deaaf093112e99881c25ff550f07e96b Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 7 Aug 2018 09:30:27 +1000 Subject: Fix edge cases when moving floating container to new workspace * Removes container_floating_move_to_container, instead opting to put that logic in container_move_to * In the seat code, focusing a floating view now updates the pending state only and lets the next transaction carry it over to the current state. This is required, otherwise it would crash. * When unfullscreening a floating container, an output check is now done to see if it should center it. --- include/sway/tree/container.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'include/sway') diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h index d82db89c..4d0e6003 100644 --- a/include/sway/tree/container.h +++ b/include/sway/tree/container.h @@ -322,6 +322,12 @@ void container_get_box(struct sway_container *container, struct wlr_box *box); void container_floating_translate(struct sway_container *con, double x_amount, double y_amount); +/** + * Choose an output for the floating container's new position. + */ +struct sway_container *container_floating_find_output( + struct sway_container *con); + /** * Move a floating container to a new layout-local position. */ @@ -333,9 +339,6 @@ void container_floating_move_to(struct sway_container *con, */ void container_floating_move_to_center(struct sway_container *con); -void container_floating_move_to_container(struct sway_container *container, - struct sway_container *destination); - /** * Mark a container as dirty if it isn't already. Dirty containers will be * included in the next transaction then unmarked as dirty. -- cgit v1.2.3 From 5653fc754b09ae5344f42f9e3df71cd4420b7d61 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Wed, 8 Aug 2018 10:04:11 +1000 Subject: Deny moving a sticky container to workspace if it's the same output Rationale: Sticky containers are always assigned to the visible workspace. The basic idea here is to check the destination's output (move.c:190). But if the command was `move container to workspace x` then a workspace might have been created for it. We could destroy the workspace in this case, but that results in unnecessary IPC events. To avoid this, the logic for `move container to workspace x` has been adjusted. It now delays creating the workspace until the end, and uses `workspace_get_initial_output` to determine and check the output before creating it. --- include/sway/tree/workspace.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'include/sway') diff --git a/include/sway/tree/workspace.h b/include/sway/tree/workspace.h index 239cbbdb..056f2329 100644 --- a/include/sway/tree/workspace.h +++ b/include/sway/tree/workspace.h @@ -16,6 +16,8 @@ struct sway_workspace { extern char *prev_workspace_name; +struct sway_container *workspace_get_initial_output(const char *name); + char *workspace_next_name(const char *output_name); bool workspace_switch(struct sway_container *workspace, -- cgit v1.2.3