aboutsummaryrefslogtreecommitdiffstats
path: root/sway/desktop
Commit message (Collapse)AuthorAge
* transaction: Move centering to view_center_surfaceLibravatar Kenny Levinsen2021-02-09
| | | | This will allow us to reuse it for centering elsewhere.
* view: Save surface x and y on saved buffersLibravatar Kenny Levinsen2021-02-09
| | | | | | | | | 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.
* desktop/layer_shell: Fix allocation type mismatchLibravatar Manuel Stoeckl2021-01-30
|
* desktop/output: Disable head if mode is NULLLibravatar Kenny Levinsen2021-01-26
| | | | | | | | | | 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.
* Rename output_layer_for_each_surface_{toplevel,popup}Libravatar Simon Ser2021-01-12
| | | | Swap the "surface" part for consistency with wlroots' naming.
* Switch to wlr_xdg_surface_for_each_popup_surfaceLibravatar Simon Ser2021-01-12
| | | | | | | | 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
* desktop/xwayland: use index constants for atom arrayLibravatar Simon Ser2021-01-08
| | | | This ensures we don't swap two atoms by mistake.
* Change workspace_layout to match i3 behaviorLibravatar Ronan Pigott2020-12-20
| | | | | | | 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.
* Test output before direct scan-outLibravatar Simon Ser2020-12-20
| | | | | | | | | | | 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
* Add layer shell subsurfacesLibravatar Vlad Pănăzan2020-12-07
| | | | | | | Damage subsurfaces created by layer surfaces on map, unmap and commit. This fixes the flicker of Gtk Popovers. Fixes #5617
* xdg_shell: allow views to change geometry anytimeLibravatar Ronan Pigott2020-11-24
| | | | | | | | | | | 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.
* Log which output is using direct scan-outLibravatar Simon Ser2020-11-16
|
* transaction: make transaction collapsing smarter with > 2 viewsLibravatar Tudor Brindus2020-10-19
| | | | | | | | | | | | | | | | | | | | | | | | | 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.
* transaction: validate X transaction completions by geometry, not sizeLibravatar Tudor Brindus2020-10-18
| | | | | | | | | | | 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.
* transaction: don't reconfigure X views unless integral coords changedLibravatar Tudor Brindus2020-10-18
| | | | | | | | | 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.
* xwayland: listen to `set_geometry` eventLibravatar Tudor Brindus2020-10-18
| | | | | | Closes #5735, refs #3007. This makes the "Search everywhere" dialog in JetBrains IDEs movable.
* xwayland: support views that change override-redirect statusLibravatar Tobias Langendorf2020-10-10
|
* desktop/render: show indicators for top-level splitLibravatar Tudor Brindus2020-10-04
| | | | | | | | | 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.
* check parent surface before it is destroyedLibravatar John Mako2020-09-19
|
* Re-focus on parent surface if it is availableLibravatar BrassyPanache2020-09-04
| | | | | | | | | | | | | | | | | | | | | | 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
* Use wlr_output_event_commitLibravatar Simon Ser2020-08-27
| | | | | | | | | | | | | 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
* Fix incorrect format specifiersLibravatar Antonin Décimo2020-07-30
|
* Fix X11 clients getting stuck minimizedLibravatar Tobias Langendorf2020-07-22
| | | | | | | | | | | 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.
* desktop: output: Scale custom output refresh rateLibravatar Andri Yngvason2020-07-18
| | | | | This fixes an issue with wlr-output-management causing the frame rate to jump to 60000 Hz when setting a custom mode.
* xdg_shell: schedule configure on maximize requestsLibravatar Ronan Pigott2020-07-14
|
* input: implement xdg_toplevel interactive resize hintsLibravatar Ronan Pigott2020-07-13
|
* config/output: don't change output state before commitLibravatar Simon Ser2020-07-10
| | | | | | | | | | | | | | | | | | | | | | | 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
* output: simplify loop over layer surfacesLibravatar Isaac Freund2020-06-30
|
* transaction: Mark client resize immediately readyLibravatar Kenny Levinsen2020-06-30
| | | | | | | | | | | | | 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
* Add support for viewporterLibravatar Simon Ser2020-06-17
| | | | | | Depends on [1]. [1]: https://github.com/swaywm/wlroots/pull/2092
* Save transform during transactionLibravatar Kalyan Sriram2020-06-05
| | | Closes: https://github.com/swaywm/sway/issues/5412
* shells: Resize on commit if geometry x/y changesLibravatar Kenny Levinsen2020-06-03
| | | | | Client-side decorations lead to changes to y position, so make sure we catch that.
* container: Remove useless surface dimensionsLibravatar Kenny Levinsen2020-06-03
| | | | The adjustments to resize logic left them unnecessary.
* transaction: Improve transaction commentaryLibravatar Kenny Levinsen2020-06-03
| | | | Some comments where slightly misleading.
* transaction: Account for full size when centering contentLibravatar Kenny Levinsen2020-06-03
| | | | | | 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.
* view: Save all buffers associated with viewLibravatar Kenny Levinsen2020-06-03
| | | | | | | | | | | | 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.
* xwayland: pass focus to previous unmanaged surface on unmapLibravatar Tudor Brindus2020-06-01
| | | | | | | | 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.
* Add views idle inhibition status in get_tree outputLibravatar Damien Tardy-Panis2020-05-29
| | | | Fixes #5286
* Fix typos in commentsLibravatar Martin Michlmayr2020-05-21
|
* Render layer shell popups over the top layerLibravatar David962020-04-10
|
* output: remove damage listeners in damage destroyLibravatar Rouven Czerwinski2020-04-10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Instead of removing the destroy listeners in the output destroy, remove them in the damage destroy handler. Fixes the following use after free: ==646625==ERROR: AddressSanitizer: heap-use-after-free on address 0x61200017cab8 at pc 0x0000004f8f29 bp 0x7ffdf465ad30 sp 0x7ffdf465ad20 WRITE of size 8 at 0x61200017cab8 thread T0 #0 0x4f8f28 in wl_list_remove ../common/list.c:181 #1 0x43dd24 in handle_destroy ../sway/desktop/output.c:790 (`wl_list_remove(&output->damage_destroy.link);` here, 214e3030e1dce master branch) #2 0x7f0e573a1c93 in wlr_signal_emit_safe ../util/signal.c:29 #3 0x7f0e57390954 in wlr_output_destroy ../types/wlr_output.c:365 #4 0x7f0e5735e37f in backend_destroy ../backend/x11/backend.c:128 #5 0x7f0e57348147 in wlr_backend_destroy ../backend/backend.c:47 #6 0x7f0e57356f75 in multi_backend_destroy ../backend/multi/backend.c:54 #7 0x7f0e5735710e in handle_display_destroy ../backend/multi/backend.c:107 #8 0x7f0e573f23e4 in wl_display_destroy (/lib64/libwayland-server.so.0+0x93e4) #9 0x42f0b2 in server_fini ../sway/server.c:177 #10 0x42dd01 in main ../sway/main.c:414 #11 0x7f0e570f7041 in __libc_start_main (/lib64/libc.so.6+0x27041) #12 0x40e3bd in _start (/opt/wayland/bin/sway+0x40e3bd) 0x61200017cab8 is located 120 bytes inside of 320-byte region [0x61200017ca40,0x61200017cb80) freed by thread T0 here: #0 0x7f0e57aa9357 in __interceptor_free (/lib64/libasan.so.6+0xb0357) #1 0x7f0e5738b877 in wlr_output_damage_destroy ../types/wlr_output_damage.c:143 #2 0x7f0e5738b2b9 in output_handle_destroy ../types/wlr_output_damage.c:13 #3 0x7f0e573a1c93 in wlr_signal_emit_safe ../util/signal.c:29 #4 0x7f0e57390954 in wlr_output_destroy ../types/wlr_output.c:365 #5 0x7f0e5735e37f in backend_destroy ../backend/x11/backend.c:128 #6 0x7f0e57348147 in wlr_backend_destroy ../backend/backend.c:47 #7 0x7f0e57356f75 in multi_backend_destroy ../backend/multi/backend.c:54 #8 0x7f0e5735710e in handle_display_destroy ../backend/multi/backend.c:107 #9 0x7f0e573f23e4 in wl_display_destroy (/lib64/libwayland-server.so.0+0x93e4) previously allocated by thread T0 here: #0 0x7f0e57aa9887 in __interceptor_calloc (/lib64/libasan.so.6+0xb0887) #1 0x7f0e5738b532 in wlr_output_damage_create ../types/wlr_output_damage.c:91 #2 0x43e4a7 in handle_new_output ../sway/desktop/output.c:875 #3 0x7f0e573a1c93 in wlr_signal_emit_safe ../util/signal.c:29 #4 0x7f0e57357261 in new_output_reemit ../backend/multi/backend.c:143 #5 0x7f0e573a1c93 in wlr_signal_emit_safe ../util/signal.c:29 #6 0x7f0e5736030a in wlr_x11_output_create ../backend/x11/output.c:253 #7 0x7f0e5735e309 in backend_start ../backend/x11/backend.c:113 #8 0x7f0e573480fb in wlr_backend_start ../backend/backend.c:36 #9 0x7f0e57356e61 in multi_backend_start ../backend/multi/backend.c:31 #10 0x7f0e573480fb in wlr_backend_start ../backend/backend.c:36 #11 0x42f4ba in server_start ../sway/server.c:205 #12 0x42dbd7 in main ../sway/main.c:394 #13 0x7f0e570f7041 in __libc_start_main (/lib64/libc.so.6+0x27041) Fixes #5158
* Add test-only support to wlr-output-management-unstable-v1Libravatar Simon Ser2020-04-08
| | | | | Use the new test_output_config function to implement wlr-output-management-unstable-v1's test request.
* Stop checking wlr_output_attach_buffer return valueLibravatar Simon Ser2020-04-08
| | | | | | Update for [1]. Everything is now checked at commit-time. [1]: https://github.com/swaywm/wlroots/pull/2097
* change apply_exclusive() to closer match layer shell protocolLibravatar Leon Plickat2020-03-30
| | | | | | | | | | | | With these changes, sway will respect positive exclusive zones of layer surfaces anchored to one or three sides. This matches the protocol, which states that a positive exclusive zone should be respected, "if the surface is anchored to one edge or an edge and both perpendicular edges". If the surfaces is "anchored to only two perpendicular edges (a corner), anchored to only two parallel edges or anchored to all edges a positive value will be treated the same as zero".
* Null check sway_layer_surface when checking damageLibravatar Tadeo Kondrak2020-03-10
| | | | | Before this change, an overlay layer-shell surface without a buffer attached would segfault the compositor on screen damage.
* Use wlr_client_bufferLibravatar Simon Ser2020-03-06
| | | | | | Update for breaking changes in [1]. [1]: https://github.com/swaywm/wlroots/pull/2043
* Drop sway_output.surface_needs_frameLibravatar Simon Ser2020-03-06
| | | | | | | wlr_output_schedule_frame now sets output->needs_frame [1], so this isn't needed anymore. [1]: https://github.com/swaywm/wlroots/pull/2053
* Only schedule a frame if client has requested a frame callbackLibravatar Simon Ser2020-03-06
| | | | | When a client hasn't damaged its surface, we only need to schedule an output frame if the client has requested a frame callback.
* Make handle_destroy and output_repaint_timer_handler staticLibravatar Simon Ser2020-03-04
|
* Add support for wlr-output-power-management-unstable-v1Libravatar Simon Ser2020-02-26
|