aboutsummaryrefslogtreecommitdiff
path: root/sway/desktop
AgeCommit message (Collapse)Author
2021-02-23transaction: Note if instructions are server requestsKenny Levinsen
On server request, we need to send configure events to inform the client of the new intended size. If the client changes size itself, sending a configure event will only cause problems. Use transaction_commit_dirty_client to distinguish between the two transaction causes.
2021-02-22Fix #5643, #5064: rounding issues in floating-point -> integer conversionsDimitris Triantafyllidis
Currently, various floating-point expressions involving the coordinates of borders, titlebars and content surfaces are directly assigned to integers, and so they are rounded towards zero. This results in off-by-one distances between these elements when the signs of their coordinates differ. Fixed by wrapping these expressions with a call to floor before the assignment.
2021-02-22container: Add container_is_current_floatingKenny Levinsen
Needed to check if containers are currently floating from render code, as container_is_floating checks pending state.
2021-02-22render: scale titlebars correctly when straddling outputsQuantum
When a container straddles multiple outputs, the title bar is only rendered at the scale of the "effective" output. If the title bar straddles onto another output with a different scale factor, it was drawn at the wrong size. In this commit, we take into consideration the scale the title was rendered at and scale it accordingly so that it appears at the right size on the other outputs. This fixes #6054.
2021-02-21Fix incorrect damage being applied on popupsTadeo Kondrak
To reproduce: - Open a floating window and a popup that hangs over the bottom or right - Move the window in the direction of the popup overhang - The previous position of the popup is damaged, not the new one
2021-02-16render: Use current instead of pending fullscreenKenny Levinsen
2021-02-16container: Move pending state to state structKenny Levinsen
Pending state is currently inlined directly in the container struct, while the current state is in a state struct. A side-effect of this is that it is not immediately obvious that pending double-buffered state is accessed, nor is it obvious what state is double-buffered. Instead, use the state struct for both current and pending.
2021-02-16transactions: Amend pending transactionsKenny Levinsen
The transaction system contains a necessary optimization where a popped transaction is combined with later, similar transactions. This breaks the chronological order of states, and can lead to desynchronized geometries. To fix this, we replace the queue with only 2 transactions: current and pending. If a pending transaction exists, it is updated with new state instead of creating additional transactions. As we never have more than a single waiting transaction, we no longer need the queue optimization that is causing problems. Closes: https://github.com/swaywm/sway/issues/6012
2021-02-15transaction: Only wait for ack from visible viewsKenny Levinsen
Transactions currently wait for all configures to be acked, regardless fo what they were sent to. This includes views that are hidden in tabbed or stacked containers. If these views do not ack the configure in response to a single frame callback, they can cause transaction timeouts. Check if a container is hidden before registering the configure serial and saving any view buffers. Closes: https://github.com/swaywm/sway/issues/6023
2021-02-09view: Read geometry directly in view_update_sizeKenny Levinsen
2021-02-09shells: Align geometry change commit handlingKenny Levinsen
xdg_shell and xwayland handled geometry changes differently despite needing mostly identical behavior. The xwayland implementation has been changed to match that of xdg_shell.
2021-02-09shells: Only center tiled views on size changeKenny Levinsen
The size of a tiled container cannot change in response to new buffer sizes, so there is no need to commit a new transaction. Instead, simply recenter the view with the new geometry, leaving the full transaction flow for floating containers.
2021-02-09transaction: Move centering to view_center_surfaceKenny Levinsen
This will allow us to reuse it for centering elsewhere.
2021-02-09view: Save surface x and y on saved buffersKenny Levinsen
We need to use surface_x and surface_y when rendering and damaging saved buffers as these compensate for views that have been centered due to being smaller than their container. Add them to the surface positions on the saved buffer so we have the values from the time the buffer was saved.
2021-01-30desktop/layer_shell: Fix allocation type mismatchManuel Stoeckl
2021-01-26desktop/output: Disable head if mode is NULLKenny Levinsen
wlr_output_configuration_head_v1_create normally fills out the head "enabled" field to match the wlr_output state. We overwrite this to also set the head as enabled if it is only turned off with DPMS. However, in some cases we may not have a mode for this display, in which case setting it as enabled will lead to a segfault later on. Therefore, enabled conditional on the presence of a mode.
2021-01-12Rename output_layer_for_each_surface_{toplevel,popup}Simon Ser
Swap the "surface" part for consistency with wlroots' naming.
2021-01-12Switch to wlr_xdg_surface_for_each_popup_surfaceSimon Ser
Instead of calling wlr_xdg_surface_for_each_popup and then wlr_surface_for_each_surface, use the new for_each_popup_surface helper introduced in [1] that does it in one go. [1]: https://github.com/swaywm/wlroots/pull/2609
2021-01-08desktop/xwayland: use index constants for atom arraySimon Ser
This ensures we don't swap two atoms by mistake.
2020-12-20Change workspace_layout to match i3 behaviorRonan Pigott
In i3, the workspace_layout command does not affect the workspace layout. Instead, new workspace level containers are wrapped in the desired layout and the workspace layout always defaults to the output orientation.
2020-12-20Test output before direct scan-outSimon Ser
This avoids some log spam. Eventually when we wire up the atomic test commit this will take care of the other log spam referenced below. References: https://github.com/swaywm/sway/pull/5010 References: https://github.com/swaywm/wlroots/issues/2181 Closes: https://github.com/swaywm/wlroots/issues/2532
2020-12-07Add layer shell subsurfacesVlad Pănăzan
Damage subsurfaces created by layer surfaces on map, unmap and commit. This fixes the flicker of Gtk Popovers. Fixes #5617
2020-11-24xdg_shell: allow views to change geometry anytimeRonan Pigott
Currently, when sway sends a configure with some geometry and the client responds with a different geometry in a commit that acks that configure, sway ignores the new size. Sway applies the surface geometry it had requested to the container, not what was actually committed, in the following transaction. This change allows any client commit to change its surface geometry, even if it is a response to a configure event.
2020-11-16Log which output is using direct scan-outSimon Ser
2020-10-19transaction: make transaction collapsing smarter with > 2 viewsTudor Brindus
Sway maintains a list of pending transactions, and tries to merge consecutive transactions applying to the same views into one. Given a pending transactions list on views {A, B, C} of: A -> A' -> A'' -> B -> B' -> B'' Sway will collapse the transactions into just A'' -> B''. This works fine when doing things like resizing views by their border. However, when interactively resizing layouts like H[V[A B] C], we end up with pending transaction lists like: A -> B -> C -> A' -> B' -> C' -> A'' -> B'' -> C'' Previously, Sway would not be able to simplify this transaction list, and execute many more transactions than would be necessary (the final state is determined by {A'', B'', C''}). After this commit, the transaction list gets simplified to A'' -> B'' -> C'', resolving performance problems (that were particularly noticeable with high-refresh-rate mice). Fixes #5736.
2020-10-18transaction: validate X transaction completions by geometry, not sizeTudor Brindus
Xwayland views are aware of their coordinates, so validating transaction completions should take into account the reported coordinates of the view. Prior to this commit they didn't, and matching dimensions would suffice to validate the transaction. Also introduced `transaction_notify_view_ready_immediately` to support the fix from d0f7e0f without jumping through hoops to figure out the geometry of an `xdg_shell` view.
2020-10-18transaction: don't reconfigure X views unless integral coords changedTudor Brindus
Sway logical coordinates are doubles, but they get truncated to integers when sent to Xwayland through `xcb_configure_window`. X11 apps will not respond to duplicate configure requests (from their truncated point of view) and cause transactions to time out. Fixes #5035.
2020-10-18xwayland: listen to `set_geometry` eventTudor Brindus
Closes #5735, refs #3007. This makes the "Search everywhere" dialog in JetBrains IDEs movable.
2020-10-10xwayland: support views that change override-redirect statusTobias Langendorf
2020-10-04desktop/render: show indicators for top-level splitTudor Brindus
i3 shows indicators for the workspace-level pseudo-split, but Sway does not, as of b977c02. This commit replaces the floating container check with a call to `container_is_floating`, which has some more robust checks in place. Fixes #5699.
2020-09-19check parent surface before it is destroyedJohn Mako
2020-09-04Re-focus on parent surface if it is availableBrassyPanache
My primary issue was IntelliJ IDEA's code suggestion pop-up not returning focus to the active editing window. I have spent some time looking at the changes of @Xyene (#5398) and @RyanDwyer (#2103). I think my proposed change maintains the status quo for the most part whilst fixing my focus issue. I have verified that @Xyene's fix for IntelliJ sub-menus still works. I have done basic testing which consists of: - Chrome - IntelliJ IDEA 2020.2.1 - VSCode - Alacritty It seems to hold up. I at least didn't see any obvious errors. Relates to #3007
2020-08-27Use wlr_output_event_commitSimon Ser
Instead of listening to both transform and scale events, we can listen to the commit event and use the new wlr_output_event_commit struct to decide what to do. This de-duplicates some of the work we were doing twice when an output was re-configured. Depends on [1]. [1]: https://github.com/swaywm/wlroots/pull/2315
2020-07-30Fix incorrect format specifiersAntonin Décimo
2020-07-22Fix X11 clients getting stuck minimizedTobias Langendorf
Usually it should be enough to simply not grant a client's minimize request, however some applications (Steam, fullscreen games in Wine) don't wait for the compositor and minimize anyway, getting them stuck in an unrecoverable state. Restoring them immediately lead to heavy flickering when unfocused on my test application (Earth Defense Force 5 via Steam), so it's preferable to grant their request without actually minimizing and then restoring them once they are in focus again.
2020-07-18desktop: output: Scale custom output refresh rateAndri Yngvason
This fixes an issue with wlr-output-management causing the frame rate to jump to 60000 Hz when setting a custom mode.
2020-07-14xdg_shell: schedule configure on maximize requestsRonan Pigott
2020-07-13input: implement xdg_toplevel interactive resize hintsRonan Pigott
2020-07-10config/output: don't change output state before commitSimon Ser
Previously, we called output_disable prior to wlr_output_commit. This mutates Sway's output state before the output commit actually succeeds. This results in Sway's state getting out-of-sync with wlroots'. An alternative fix [1] was to revert the changes made by output_disable in case of failure. This is a little complicated. Instead, this patch makes it so Sway's internal state is never changed before a successful wlr_output commit. We had two output flags: enabled and configured. However enabled was set prior to the output becoming enabled, and was used to prevent the output event handlers (specifically, the mode handler) from calling apply_output_config again (infinite loop). Rename enabled to enabling and use it exclusively for this purpose. Rename configure to enabled, because that's what it really means. [1]: https://github.com/swaywm/sway/pull/5521 Closes: https://github.com/swaywm/sway/issues/5483
2020-06-30output: simplify loop over layer surfacesIsaac Freund
2020-06-30transaction: Mark client resize immediately readyKenny Levinsen
If a client commits a new size on its own, we create a transaction for the resize like any other. However, this involves sending a configure and waiting for the ack, and wlroots will not send configure events when there has been no change. This leads to transactions timing out. Instead, just mark the view ready immediately by size when the client is already ready, so that we avoid waiting for an ack that will never come. Closes: https://github.com/swaywm/sway/issues/5490
2020-06-17Add support for viewporterSimon Ser
Depends on [1]. [1]: https://github.com/swaywm/wlroots/pull/2092
2020-06-05Save transform during transactionKalyan Sriram
Closes: https://github.com/swaywm/sway/issues/5412
2020-06-03shells: Resize on commit if geometry x/y changesKenny Levinsen
Client-side decorations lead to changes to y position, so make sure we catch that.
2020-06-03container: Remove useless surface dimensionsKenny Levinsen
The adjustments to resize logic left them unnecessary.
2020-06-03transaction: Improve transaction commentaryKenny Levinsen
Some comments where slightly misleading.
2020-06-03transaction: Account for full size when centering contentKenny Levinsen
The centering logic needs to take borders, titlebars and CSDs into account. Instead of using the main surface geometry, use the container and view geometry, which account for this.
2020-06-03view: Save all buffers associated with viewKenny Levinsen
During the execution of a resize transaction, the buffer associated with a view's surface is saved and reused until the client acknowledges the resulting configure event. However, only one the main buffer of the main surface was stored and rendered, meaning that subsurfaces disappear during resize. Iterate over all, store and render buffers from all surfaces in the view to ensure that correct rendering is preserved.
2020-06-01xwayland: pass focus to previous unmanaged surface on unmapTudor Brindus
This is necessary because some applications (e.g. Jetbrains IDEs) represent their multi-level menus as unmanaged surfaces, and when closing a submenu, the main menu should get input focus. Closes #5347.
2020-05-29Add views idle inhibition status in get_tree outputDamien Tardy-Panis
Fixes #5286