aboutsummaryrefslogtreecommitdiffstats
path: root/sway/desktop/xwayland.c
Commit message (Collapse)AuthorAge
...
* 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.
* Implement window_role criteria tokenLibravatar Ryan Dwyer2018-09-04
| | | | Depends on https://github.com/swaywm/wlroots/pull/1226
* Implement focus_on_window_activationLibravatar Ryan Dwyer2018-09-02
| | | | Depends on https://github.com/swaywm/wlroots/pull/1223
* Check modal state when determining whether an xwayland view should floatLibravatar Ryan Dwyer2018-09-02
| | | | | | | | Depends on https://github.com/swaywm/wlroots/pull/1222. I don't know of a program that sets the state to modal without setting the window type, but I know the modal property works because logging the property shows it's true for the Firefox Open File dialog.
* Implement window_type criteria tokenLibravatar Ryan Dwyer2018-09-01
|
* Remove layout.cLibravatar Ryan Dwyer2018-08-26
| | | | | | | | | | | | | | | | | | | | | | | | | When we have type safety we'll need to have functions for workspace_add_tiling and so on. This means the existing container functions will be just for containers, so they are being moved to container.c. At this point layout.c doesn't contain much else, so I've relocated everything and removed the file. * container_swap and its static functions have been moved to the swap command and made static. * container_recursive_resize has been moved to the resize command and made static. * The following have been moved to container.c: * container_handle_fullscreen_reparent * container_insert_child * container_add_sibling * container_add_child * container_remove_child * container_replace_child * container_split * enum movement_direction and sway_dir_to_wlr have been moved to util.c. Side note: Several commands included layout.h which then included root.h. With layout.h gone, root.h has to be included by those commands.
* Refactor destroy functions and save workspaces when there's no outputsLibravatar Ryan Dwyer2018-08-24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This changes the destroy functions to the following: * output_begin_destroy * output_destroy * workspace_begin_destroy * workspace_destroy * container_begin_destroy * container_destroy * view_begin_destroy * view_destroy The terminology was `destroy` and `free`, and it has been changed to `begin_destroy` and `destroy` respectively. When the last output is disconnected, its workspaces will now be stashed in the root. Upon connection of a new output they will be restored. There is a new function `workspace_consider_destroy` which decides whether the given workspace should be destroyed or not (ie. empty and not visible). Calling container_begin_destroy will no longer automatically reap the parents. In some places we want to reap the parents and in some we don't, so this is left to the caller. container_reap_empty_recursive and container_reap_empty have been combined into one function and it will recurse up the tree.
* Store geometry in the view and handle any floating view resizingLibravatar Ryan Dwyer2018-08-18
|
* Set current size when a floating xwayland view resizesLibravatar Ryan Dwyer2018-08-18
| | | | This avoids sending an unnecessary configure.
* Handle xwayland views sending new sizes in their commitsLibravatar Ryan Dwyer2018-08-18
|
* Add view_get_geometryLibravatar emersion2018-08-18
|
* Simplify transactionsLibravatar Ryan Dwyer2018-08-15
| | | | | | | | | | | | | | | | | | | | | | | | Commit 4b8e3a885be74c588291c51f798de80bd81a92db makes it so only one transaction is committed (ie. configures sent) at a time. This commit removes the now-unnecessary code which was used to support concurrent committed transactions. * Instead of containers storing a list of instructions which they've been sent, it now stores a single instruction. * Containers now have an ntxnrefs property. Previously we knew how many references there were by the length of the instruction list. * Instructions no longer need a ready property. It was used to avoid marking an instruction ready twice when they were in a list, but this is now avoided because there is only one instruction and we nullify the container->instruction pointer when it's ready. * When a transaction applies, we no longer need to consider releasing and resaving the surface, as we know there are no other committed transactions. * transaction_notify_view_ready has been renamed to view_notify_view_ready_by_serial to make it consistent with transaction_notify_view_ready_by_size. * Out-of-memory checks have been added when creating transactions and instructions.
* Implement resizing tiled containers via cursorLibravatar Ryan Dwyer2018-08-12
| | | | | | | | | * The OP_RESIZE seat operation has been renamed to OP_RESIZE_FLOATING, and OP_RESIZE_TILING has been introduced. * Similar to the above, seat_begin_resize and handle_resize_motion have been renamed and tiling variants introduced. * resize.c's resize_tiled has to be used, so container_resize_tiled has been introduced in resize.c to allow external code to call it.
* xwayland: fix unmanaged surfaces orderLibravatar emersion2018-08-10
|
* Don't give focus if xwayland window has a type hintLibravatar emersion2018-07-29
|
* Allow containers to be fullscreenLibravatar Ryan Dwyer2018-07-26
|
* Merge branch 'master' into pid-workspacesLibravatar Drew DeVault2018-07-23
|\
| * Implement request_move and request_resize for xwayland viewsLibravatar Ryan Dwyer2018-07-22
| | | | | | | | | | I discovered we have to send a click event when ending the move or resize operation to make xwayland's requests work correctly.
| * Implement force_display_urgency_hintLibravatar Ryan Dwyer2018-07-21
| | | | | | | | | | | | | | | | | | | | | | | | | | The directive sets the timeout before an urgent view becomes normal again after switching to it from another workspace. Also: * When an xwayland surface removes the urgent hint while the timer is active, we now ignore the request. This happens as soon as the view receives focus, so it was effectively making the timer pointless. * The timeout is now only applied when switching to it from another workspace.
| * Allow xwayland views to become urgent when on a non-visible workspaceLibravatar Ryan Dwyer2018-07-19
| | | | | | | | | | | | | | This removes the urgency stuff from the commit handler and puts it in a new set_hints handler instead. This allows the xwayland surface to become urgent without having to commit (which doesn't happen if it's on an non-visible workspace).
| * Don't unfocus when an override redirect window is mappedLibravatar emersion2018-07-18
| |
| * Handle xwayland override_redirect flag changeLibravatar emersion2018-07-18
| | | | | | | | This fixes syncplay menus.
| * Implement xwayland urgency hintLibravatar Ryan Dwyer2018-07-16
| |
| * Simplify transactions by utilising a dirty flag on containersLibravatar Ryan Dwyer2018-07-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
| * Don't disable borders for xwayland floating viewsLibravatar emersion2018-07-12
| |
| * Update for swaywm/wlroots#1126Libravatar emersion2018-07-09
| |
| * Make view_update_* update live props as wellLibravatar emersion2018-07-06
| |
| * Fix xwayland floating views unclickableLibravatar emersion2018-07-06
| | | | | | | | | | | | | | Some xwayland views are first configured with a 1x1 size, and then resized. Since the view size isn't updated, they are unclickable. Fixes #2195
| * Updates per wlroots#1076Libravatar Drew DeVault2018-07-05
| |
| * Fix damage on swaybar when view requests to exit fullscreenLibravatar Ryan Dwyer2018-07-02
| | | | | | | | Fixes #2191
* | Implement pid->workspace trackingLibravatar Drew DeVault2018-07-01
|/ | | | | | | | | When you spawn a process with the exec command, sway now notes the workspace you had focused and the pid of the child process, then assigns that workspace to the child when its window appears. Some of this is carried over from sway 0.15, but with some major refactoring and centralization of state.
* sway views: add helpers to get view and layer from wlr_surfaceLibravatar Dominique Martinet2018-06-30
|
* Merge remote-tracking branch 'upstream/master' into atomicLibravatar Ryan Dwyer2018-06-30
|\
| * Revert "Don't unmaximize floating views"Libravatar Rostislav Pehlivanov2018-06-30
| | | | | | | | This reverts commit 97672295ed50d1d6272876c4a3b6b5607cab05c6.
* | Fix flash of background when xwayland views are mappedLibravatar Ryan Dwyer2018-06-30
| | | | | | | | | | | | | | | | | | | | | | A flash of background was happening for two reasons: 1) We were using the xsurface's dimensions to check if the surface is ready, but these are pending dimensions. 2) In my particular setup, the default geometry of the xsurface does not intersect any output, which prevented it from receiving a frame done event. This made the transaction time out and the client would only redraw once it's been rendered.
* | Merge remote-tracking branch 'upstream/master' into atomicLibravatar Ryan Dwyer2018-06-29
|\|
| * fix accidently removing borders on XCB_CONFIGURE_REQUESTLibravatar Armin Preiml2018-06-27
| | | | | | | | | | | | | | The view was configured with the container coordinates. Although they were right on the first configure, they changed after a XCB_CONFIGURE_REQUEST, when the border was already drawn.
| * xwayland: accept configure requests from floating viewsLibravatar emersion2018-06-24
| |
| * Automatically float xwayland windowsLibravatar emersion2018-06-18
| |
* | Move unsetting of view->surface into view_unmapLibravatar Ryan Dwyer2018-06-27
| |
* | Remove transaction_add_damageLibravatar Ryan Dwyer2018-06-27
| | | | | | | | Instead, damage each container when applying the transaction.
* | Damage output when views toggle fullscreenLibravatar Ryan Dwyer2018-06-26
| | | | | | | | | | Also add workspace to the transaction when a view maps in fullscreen mode.
* | Rename view's free callback to destroyLibravatar Ryan Dwyer2018-06-26
| |
* | Damage output when a fullscreen view unmapsLibravatar Ryan Dwyer2018-06-26
| | | | | | | | | | Also moved the arranging into view_unmap to avoid excessive code duplication.
* | Implement atomic layout updates for xwayland viewsLibravatar Ryan Dwyer2018-06-24
| |
* | Implement atomic layout updates for tree operationsLibravatar Ryan Dwyer2018-06-23
| | | | | | | | | | This implements atomic layout updates for when views map, reparent or unmap.
* | Preserve buffers during transactionsLibravatar Ryan Dwyer2018-06-18
| | | | | | | | | | * Also fix parts of the rendering where it was rendering the pending state instead of current.
* | Refactor everything that needs to arrange windowsLibravatar Ryan Dwyer2018-06-09
| | | | | | | | | | | | | | | | | | | | * 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.
* | Make main properties be the pending stateLibravatar Ryan Dwyer2018-06-09
| |
* | WIP: Atomic layout updates ground workLibravatar Ryan Dwyer2018-06-09
|/