aboutsummaryrefslogtreecommitdiff
path: root/sway/commands/move.c
AgeCommit message (Collapse)Author
2018-08-19Replace hacky L_FLOATING container with a listRyan Dwyer
Workspaces previously had a magical `workspace->floating` container, which had a layout of L_FLOATING and whose children were actual floating views. This allowed some conveniences, but was a hacky solution because the container has to be exempt from focus, coordinate transactions with the workspace, and omit emitting IPC events (which we didn't do). This commit changes it to be a list directly in the sway_workspace. The L_FLOATING layout is no longer used so this has been removed as well. * Fixes incorrect check in the swap command (it checked if the containers had the L_FLOATING layout, but this layout applied to the magical container). * Introduces workspace_add_floating
2018-08-18commands: saner workspace number handlingIan Fan
2018-08-18commands: fix documentation formatting mistakes for move commandIan Fan
2018-08-18Rename container_sort_workspaces and container_wrap_childrenRyan Dwyer
This commit renames container_sort_workspaces to output_sort_workspaces and moves it to output.c. This also renames container_wrap_children to workspace_wrap_children and moves it to workspace.c. This function is only called with workspaces.
2018-08-08Deny moving a sticky container to workspace if it's the same outputRyan Dwyer
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.
2018-08-07Fix crash when running `move container to workspace back_and_forth`Ryan Dwyer
The back_and_forth condition is intended to be handled in the else-if block, but this was never reached because it remained in the first block's conditions.
2018-08-06Merge branch 'master' into workspace-move-to-outputBrian Ashworth
2018-08-07Move workspace moving code out of container_move_toRyan Dwyer
container_move_to handled moving containers to new parents, as well as moving workspaces to new outputs. This commit removes the workspace-moving code from this function and introduces workspace_move_to_output. Moving workspaces using container_move_to only happened from the move command, so it's been implemented as a static function in that file. Simplifying container_move_to makes it easier for me to fix some issues in #2420.
2018-08-06commands: fix workspace edge casesIan Fan
2018-08-06commands: check for special workspaces in workspace & move commandsIan Fan
2018-08-06commands: add optional flags to moveIan Fan
2018-08-06commands: complete move implementationIan Fan
2018-08-04Separate root-related codeRyan Dwyer
This creates a root.c and moves bits and pieces from elsewhere into it. * layout_init has been renamed to root_create and moved into root.c * root_destroy has been created and is called on shutdown * scratchpad code has been moved into root.c, because hidden scratchpad containers are stored in the root struct
2018-08-03Deny "move container" when an empty workspace is focusedRyan Dwyer
2018-08-02Allow moving containers when workspace itself is focusedRyan Dwyer
2018-08-01ipc: prevent emitting a workspace::focus event when moving a container to a ↵Ian Fan
different workspace or output When a container is moved from, say, workspace 1 to workspace 2, workspace 2 is focused in order to arrange the windows before focus is moved back to workspace 1, which caused a workspace:focus event from workspace 2 to workspace 1 to be emitted. This commit inhibits that event.
2018-07-28Send floating container to scratchpad when a child is focusedRyan Dwyer
2018-07-28Allow containers to floatRyan Dwyer
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 (b14bd1b0b1536039e4f46fe94515c7c44e7afc61) 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.
2018-07-26Allow containers to be fullscreenRyan Dwyer
2018-07-23Implement scratchpadRyan Dwyer
Implements the following commands: * move scratchpad * scratchpad show * [criteria] scratchpad show Also fixes these: * Fix memory leak when executing command with criteria (use `list_free(views)` instead of `free(views)`) * Fix crash when running `move to` with no further arguments
2018-07-14Simplify transactions by utilising a dirty flag on containersRyan Dwyer
This PR changes the way we handle transactions to a more simple method. The new method is to mark containers as dirty from low level code (eg. arranging, or container_destroy, and eventually seat_set_focus), then call transaction_commit_dirty which picks up those containers and runs them through a transaction. The old methods of using transactions (arrange_and_commit, or creating one manually) are now no longer possible. The highest-level code (execute_command and view implementation handlers) will call transaction_commit_dirty, so most other code just needs to set containers as dirty. This is done by arranging, but can also be done by calling container_set_dirty.
2018-07-09Implement some floating move commandsRyan Dwyer
This implements the following for floating containers: * move <direction> <amount> * move [absolute] position <x> <y> * move [absolute] position mouse
2018-06-30Fix compile errorRyan Dwyer
2018-06-29Fix crash when moving last child of a container to workspace or outputRyan Dwyer
We were arranging a parent which may have been deleted by the reaper, which meant the `current` children list of the surviving parent had a dangling pointer. Instead, we now reap the workspace.
2018-06-24Fix crash when running move <direction> in an empty workspaceRyan Dwyer
2018-06-24Fix crash when unmapping a view with reapable parentsRyan Dwyer
container_destroy was calling container_reap_empty, which calls container_destroy and so on. Eventually the original container_destroy would return a NULL pointer to the caller which caused a crash. This also fixes an arrange on the wrong container when moving views in and out of stacks.
2018-06-09Refactor everything that needs to arrange windowsRyan Dwyer
* The arrange_foo functions are now replaced with arrange_and_commit, or with manually created transactions and arrange_windows x2. * The arrange functions are now only called from the highest level functions rather than from both high level and low level functions. * Due to the previous point, view_set_fullscreen_raw and view_set_fullscreen are both merged into one function again. * Floating and fullscreen are now working with transactions.
2018-06-01Adjust move command to account for changed coordinate systemRyan Dwyer
2018-05-10cmd_move_container: Focus a window on the source workspace.Geoff Greer
In Sway 0.15, moving a window to another workspace would cause a window on the source workspace to be focused. This restores that behavior, allowing you to quickly move a lot of windows to another workspace.
2018-04-09Add workspace_auto_back_and_forth for move cmddb
2018-04-06Implement move [left|right|up|down]Drew DeVault
The exact semantics of this command are complicated. I'll describe each test scenario as s-expressions. Everything assumes L_HORIZ if not specified, but if you rotate everything 90 degrees the same test cases hold. ``` (container (view a) (view b focus) (view c)) -> move left (container (view b focus) (view a) (view c)) (container (view a) (view b focus) (view c)) -> move right (container (view a) (view c) (view b focus)) (container L_VERT (view a)) (container L_HORIZ (view b) (view c focus)) -> move up (container L_VERT (view a) (view c focus)) (container L_HORIZ (view b)) (workspace (view a) (view b focus) (view c)) -> move up (workspace [split direction flipped] (view b focus) (container (view a) (view c))) (workspace (view a) (view b focus) (view c)) -> move down (workspace [split direction flipped] (container (view a) (view c)) (view b focus))) Note: outputs use wlr_output_layout instead of assuming that i+/-1 is the next output in the move direction. (root (output X11-1 (workspace 1)) (output X11-2 (workspace 1 (view a focus) (view b))))) -> move left (root (output X11-1 (workspace 1 (view a focus))) (output X11-2 (workspace 1 (view b))))) (root (output X11-1 (workspace 1 (container (view a) (view b))) (output X11-2 (workspace 1 (view c focus))))) -> move left (root (output X11-1 (workspace 1 (container (view a) (view b)) (view c focus))) (output X11-2 (workspace 1))) ```
2018-04-03move workspace create to workspace.cTony Crisci
2018-04-03unify workspace create functionsTony Crisci
2018-04-02Merge branch 'wlroots' into seat-fixesTony Crisci
2018-04-02Fixes regarding @emersion's feedbackDrew DeVault
2018-04-02Partially implement move commandDrew DeVault
Works: - move [container|window] to workspace <name> - Note, this should be able to move C_CONTAINER but this is untested - move [workspace] to output [left|right|up|down|<name>] Not implemented yet: - move [left|right|up|down] - move scratchpad - move position
2017-11-18Move everything to sway/old/Drew DeVault
2017-11-11Wire up output frame loopDrew DeVault
2017-10-06Fix move to named workspaceslbonn
The command parsing did not handle workspaces with spaces in their name (like it's done in `cmd_workspace`)
2017-07-12Use WLC v2 pointer interfaceScott Anderson
2017-04-18Implement and document `move [to] scratchpad`Vasilij Schneidermann
2017-04-05Improve criteria handlingCalvin Lee
This commit changes how commands decide what container to act on. Commands get the current container though `current_container`, a global defined in sway/commands.c. If a criteria is given before a command, then the following command will be run once for every container the criteria matches with a reference to the matching container in 'current_container'. Commands should use this instead of `get_focused_container()` from now on. This commit also fixes a few (minor) mistakes made in implementing marks such as non-escaped arrows in sway(5) and calling the "mark" command "floating" by accident. It also cleans up `criteria.c` in a few places.
2017-03-10UnGNUify the codebaseDrew DeVault
2017-03-01i3 feature support: Moving flotaing containersCalvin Lee
This commit lets the 'move' command apply to floating containers as well as tiled ones. The command may be appended with a number of pixels and then optionally the string `px` (like '10 px') in order to move the container more or fewer than the standard ten pixels.
2017-01-01changed "layout promote" command to "move first"wil
This is more consistent with other Sway semantics.
2016-12-29introduce next/prev as a direction for focus/move commands.wil
2016-12-04add workspace_layout to containerD.B
Add swayc_change_layout function, which changes either layout or workspace_layout, depending on the container type.
2016-10-12Revert "Fixes dealing with workspace_layout and related bugs [rfc]"Drew DeVault
2016-10-11add workspace_layout, ensure ws is always L_HORIZD.B
Add swayc_change_layout function, which changes either layout or workspace_layout, depending on the container type. Workspace being always L_HORIZ makes this much more i3-compatible.
2016-10-11Can't move an empty workspaceNicolas Cornu