aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
* Introduce seat_set_focus_container and seat_set_focus_workspaceLibravatar Ryan Dwyer2018-09-06
| | | | | | | | | | | These are the same as seat_set_focus, but accept a specific type rather than using nodes. Doing this adds more typesafety and lets us avoid using &con->node which looks a little ugly. This fixes a crash that pretty much nobody would ever come across. If you have a bindsym for "focus" with no arguments and run it from an empty workspace, sway would crash because it assumes `container` is not NULL.
* Merge pull request #2578 from RyanDwyer/fix-binding-reloadLibravatar emersion2018-09-06
|\ | | | | Fix management of bindings during reload
| * Fix management of bindings during reloadLibravatar Ryan Dwyer2018-09-06
| | | | | | | | | | | | | | | | | | seat_execute_command needs to check the flags on `binding_copy`, as `binding` will be a dangling pointer after a reload command. handle_keyboard_key needs to set the next_repeat_binding for non-reloads prior to executing the command in case the binding is freed by the reload command.
* | Merge pull request #2587 from RyanDwyer/fix-layout-toggle-crashLibravatar Brian Ashworth2018-09-06
|\ \ | | | | | | Fix crash when running "layout toggle"
| * | Fix crash when running "layout toggle"Libravatar Ryan Dwyer2018-09-06
|/ / | | | | | | | | The argc and argv used in this function are the same ones used by the layout command itself.
* | Merge pull request #2586 from RyanDwyer/fix-fullscreen-focus-crashLibravatar Drew DeVault2018-09-05
|\ \ | | | | | | Fix crash when focusing from fullscreen in an invalid direction
| * | Fix crash when focusing from fullscreen in an invalid directionLibravatar Ryan Dwyer2018-09-06
| | | | | | | | | | | | | | | | | | | | | * Fullscreen a view * Run `focus <direction>` where there is no output in that direction The output returned was rightfully NULL, which needs to be handled.
* | | Merge pull request #2585 from RyanDwyer/fix-move-across-outputsLibravatar Drew DeVault2018-09-05
|\ \ \ | | | | | | | | Fix crash when moving view across outputs
| * | | Fix crash when moving view across outputsLibravatar Ryan Dwyer2018-09-06
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | It was incorrectly determining that the container being moved and the destination had the same parent, which resulted in tree corruption. Both parents can be NULL but the containers may belong to different workspaces. To reproduce, create layout H[V[view] view] in one workspace then move a view left or right from another output into that workspace.
* | | Merge pull request #2583 from RyanDwyer/fix-null-surface-crashLibravatar Drew DeVault2018-09-05
|\ \ \ | |/ / |/| | Fix crash when views rapidly map and unmap
| * | Fix crash when views rapidly map and unmapLibravatar Ryan Dwyer2018-09-06
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Suppose the following: * Transactions are already in progress - say transaction A. * View A maps, which creates transaction B and appends it to the transaction queue. * View B maps, which creates transaction C and appends it to the queue. * View A unmaps, which creates transaction D and appends it to the queue. * Transaction A completes, so transaction B attempts to save View A's buffer, but this doesn't exist so it saves nothing. * Rendering code attempts to render View A, but there is no saved buffer nor live buffer that it can use. Rather than implement an elaborate solution for a rare circumstance, I've take the safe option of just not rendering anything for that view. It means that if you reproduce the scenario above, you might get the title and borders rendered but no surface.
* | Merge pull request #2582 from ascent12/funcLibravatar Drew DeVault2018-09-05
|\ \ | | | | | | Remove __PRETTY_FUNCTION__
| * | Remove __PRETTY_FUNCTION__Libravatar Scott Anderson2018-09-06
|/ / | | | | | | | | This is a non-standard extension as well as completely useless in C. __func__ is the standard way of doing this.
* | Merge pull request #2579 from RyanDwyer/adjust-container-boxLibravatar Drew DeVault2018-09-05
|\ \ | | | | | | Adjust container box
| * | Adjust container boxLibravatar Ryan Dwyer2018-09-06
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Prior to f5b9815128b6c000bb5d47c339480fa481a5e99d, children of tabbed and stacked containers would have their container size and position set to the same as the tabbed/stacked container. Normally this would be a problem for a layout such as T[V[view]], but there was some code in the arrange functions which would check if the grandparent of the view was a tabbed or stacked container and would offset the view's Y accordingly. Commit f5b9815128b6c000bb5d47c339480fa481a5e99d changed the box to exclude the titlebar for all tabbed/stacked children so that the grandparent check could be removed. But this meant the title was not covered in the container and wasn't damaged when the child changed its title. This patch changes it so that a child of a tabbed/stacked container will have its box include the title bar if the child is a view, but not if it's a layout container. This fixes the title damage issue while avoiding the grandparent check in the arrange functions, and matches what we see visually.
* | Merge pull request #2580 from RyanDwyer/fix-focus-after-fullscreenLibravatar Drew DeVault2018-09-05
|\ \ | |/ |/| Restore focus correctly when closing a fullscreen view
| * Restore focus correctly when closing a fullscreen viewLibravatar Ryan Dwyer2018-09-06
|/ | | | | We weren't calling seat_send_focus. I think this was previously called by seat_set_focus_warp.
* Merge pull request #2572 from RedSoxFan/wlr-output-disablingLibravatar Drew DeVault2018-09-05
|\ | | | | Call wlr_output_enable on enable/disable if needed
| * Call wlr_output_enable on enable/disable if neededLibravatar Brian Ashworth2018-09-05
|/
* Merge pull request #2540 from RyanDwyer/typesafetyLibravatar Drew DeVault2018-09-05
|\ | | | | Implement type safe arguments and demote sway_container
| * Allow marked containers to be moved out of the scratchpad via move commandLibravatar Ryan Dwyer2018-09-05
| |
| * Fix inversed condition in criteriaLibravatar Ryan Dwyer2018-09-05
| |
| * Fix clicking workspace buttonsLibravatar Ryan Dwyer2018-09-05
| | | | | | | | | | Because node_at_coords was returning the workspace's node, it interpreted this as clicking the focused workspace which was a no op.
| * Fix crash when view in scratchpad becomes urgentLibravatar Ryan Dwyer2018-09-05
| |
| * Focus empty workspace when clicking itLibravatar Ryan Dwyer2018-09-05
| | | | | | | | | | Also removes container_at_coords as this function is no longer necessary.
| * Fix crash when running layout toggle splitLibravatar Ryan Dwyer2018-09-05
| |
| * Fix floating view moving to 0,0 when splittingLibravatar Ryan Dwyer2018-09-05
| |
| * Fix crash when using focus parent/child from an empty workspaceLibravatar Ryan Dwyer2018-09-05
| |
| * Fix scratchpad related crashesLibravatar Ryan Dwyer2018-09-05
| | | | | | | | | | | | | | * Was crashing when a view was moved to the scratchpad (prev focus had no parent). * Was crashing when a hidden scratchpad view unmaps because it has no workspace.
| * Fix output position issueLibravatar Ryan Dwyer2018-09-05
| | | | | | | | | | | | | | Looks like the output dimensions need to be set when arranging rather than when a mode is set. Fixes an issue with position of fullscreen views.
| * Fix another focus bug when moving into outputLibravatar Ryan Dwyer2018-09-05
| | | | | | | | Find the focused_inactive view rather than possibly selecting a parent.
| * Fix focus bugLibravatar Ryan Dwyer2018-09-05
| | | | | | | | | | | | | | | | When changing focus from a view in one workspace to an empty workspace using `focus <direction>`, the view in the previous workspace would keep focused styling. This is because the check to unfocus it was only done in the container case and not workspace case, so it's been moved out of both.
| * Fix swaybars with no defined outputLibravatar Ryan Dwyer2018-09-05
| |
| * Fix crash when moving mouse over a fullscreen split containerLibravatar Ryan Dwyer2018-09-05
| |
| * Fix moving workspace to outputLibravatar Ryan Dwyer2018-09-05
| |
| * Update output propertes on mode changeLibravatar Ryan Dwyer2018-09-05
| | | | | | | | | | This was previously done when arranging the output, but only needs to be done on mode change.
| * Fix mouse_warpingLibravatar Ryan Dwyer2018-09-05
| |
| * Apply default config to outputLibravatar Ryan Dwyer2018-09-05
| | | | | | | | | | When starting without any output config, the default config was not applying.
| * Remove offset argument to container_add_siblingLibravatar Ryan Dwyer2018-09-05
| | | | | | | | I added this thinking that it might come in useful. Turns out it didn't.
| * Fix crash when focus hits edge of rootLibravatar Ryan Dwyer2018-09-05
| |
| * Don't use wlr_output propertiesLibravatar Ryan Dwyer2018-09-05
| | | | | | | | These properties are before rotation.
| * Implement type safe arguments and demote sway_containerLibravatar Ryan Dwyer2018-09-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit changes the meaning of sway_container so that it only refers to layout containers and view containers. Workspaces, outputs and the root are no longer known as containers. Instead, root, outputs, workspaces and containers are all a type of node, and containers come in two types: layout containers and view containers. In addition to the above, this implements type safe variables. This means we use specific types such as sway_output and sway_workspace instead of generic containers or nodes. However, it's worth noting that in a few places places (eg. seat focus and transactions) referring to them in a generic way is unavoidable which is why we still use nodes in some places. If you want a TL;DR, look at node.h, as well as the struct definitions for root, output, workspace and container. Note that sway_output now contains a workspaces list, and workspaces now contain a tiling and floating list, and containers now contain a pointer back to the workspace. There are now functions for seat_get_focused_workspace and seat_get_focused_container. The latter will return NULL if a workspace itself is focused. Most other seat functions like seat_get_focus and seat_set_focus now accept and return nodes. In the config->handler_context struct, current_container has been replaced with three pointers: node, container and workspace. node is the same as what current_container was, while workspace is the workspace that the node resides on and container is the actual container, which may be NULL if a workspace itself is focused. The global root_container variable has been replaced with one simply called root, which is a pointer to the sway_root instance. The way outputs are created, enabled, disabled and destroyed has changed. Previously we'd wrap the sway_output in a container when it is enabled, but as we don't have containers any more it needs a different approach. The output_create and output_destroy functions previously created/destroyed the container, but now they create/destroy the sway_output. There is a new function output_disable to disable an output without destroying it. Containers have a new view property. If this is populated then the container is a view container, otherwise it's a layout container. Like before, this property is immutable for the life of the container. Containers have both a `sway_container *parent` and `sway_workspace *workspace`. As we use specific types now, parent cannot point to a workspace so it'll be NULL for containers which are direct children of the workspace. The workspace property is set for all containers, except those which are hidden in the scratchpad as they have no workspace. In some cases we need to refer to workspaces in a container-like way. For example, workspaces have layout and children, but when using specific types this makes it difficult. Likewise, it's difficult for a container to get its parent's layout when the parent could be another container or a workspace. To make it easier, some helper functions have been created: container_parent_layout and container_get_siblings. container_remove_child has been renamed to container_detach and container_replace_child has been renamed to container_replace. `container_handle_fullscreen_reparent(con, old_parent)` has had the old_parent removed. We now unfullscreen the workspace when detaching the container, so this function is simplified and only needs one argument now. container_notify_subtree_changed has been renamed to container_update_representation. This is more descriptive of its purpose. I also wanted to be able to call it with whatever container was changed rather than the container's parent, which makes bubbling up to the workspace easier. There are now state structs per node thing. ie. sway_output_state, sway_workspace_state and sway_container_state. The focus, move and layout commands have been completely refactored to work with the specific types. I considered making these a separate PR, but I'd be backporting my changes only to replace them again, and it's easier just to test everything at once.
* | Merge pull request #2574 from ammgws/block-bg-fixLibravatar emersion2018-09-05
|\ \ | |/ |/| Fix swaybar block background fill logic
| * Fix swaybar block background fill logicLibravatar Jason2018-09-05
|/ | | Same as #2571 but for 1.0.
* Merge pull request #2569 from RyanDwyer/deny-reload-repeatLibravatar Drew DeVault2018-09-04
|\ | | | | Deny repeating reload by holding key
| * Deny repeating reload by holding keyLibravatar Ryan Dwyer2018-09-04
|/ | | | | | | | | | | | | | | Fixes #2568 The binding that gets stored in the keyboard's `repeat_binding` would get freed on reload, leaving a dangling pointer. Rather than attempt to unset the keyboard's `repeat_binding` along with the other bindings, I opted to just not set it for the reload command because there's no point in reloading repeatedly by holding the binding. This disables repeat bindings for the reload command. As we now need to detect whether it's a reload command in two places, I've added a binding flag to track whether it's a reload or not.
* Merge pull request #2561 from RyanDwyer/window-role-criteriaLibravatar Drew DeVault2018-09-03
|\ | | | | Implement window_role criteria token
| * Implement window_role criteria tokenLibravatar Ryan Dwyer2018-09-04
|/ | | | Depends on https://github.com/swaywm/wlroots/pull/1226
* Merge pull request #2564 from ppascher/masterLibravatar Drew DeVault2018-09-03
|\ | | | | Fix window_type with disabled xwayland support
| * move criteria "instance", "class" and "window_role" inside HAVE_XWAYLAND ifdefs"Libravatar Pascal Pascher2018-09-03
| |