aboutsummaryrefslogtreecommitdiffstats
path: root/sway/desktop/layer_shell.c
Commit message (Collapse)AuthorAge
* layer-shell: Restore interactive layer focus codeLibravatar Joan Bruguera Micó2024-07-22
| | | | | | | | | | | | | | | | | Commit 188811f80861 ("scene_graph: Port layer_shell") accidentally removed code in `arrange_layers` to handle focus on layer shell surfaces with keyboard interactivity. Due to this, layer shell surfaces requesting exclusive keyboard interactivity may not get automatically focused, and layer shell surfaces giving up exclusive keyboard interactivity can remain focused. Add the previous code back to fix the problem. Note the non-rename change included in b4d7e84d3852 ("desktop: Rename layers to shell_layers") is not included as it also seems accidental. Fixes: #7936
* desktop/layer_shell: provide fractional scale on creationLibravatar Manuel Stoeckl2024-05-07
| | | | Also, send a matching wl_surface.preferred_buffer_scale event.
* text_input: Implement input-method popupsLibravatar Access2024-02-20
| | | Co-authored-by: tadeokondrak <me@tadeo.ca>
* Drop unnecessary includes from sway/server.hLibravatar Simon Ser2024-02-15
|
* layer_shell: Handle popups through popup descriptorLibravatar Alexander Orzechowski2024-02-12
| | | | | | | | We tried to synchronize layer shell popups with the parent layer shell on commits, but this is subtly wrong because we would only update the position for one layer shell that was committed, but not any other layer that might be affected. By moving handling to the scene descriptor we can iterate all popups and ensure they are synchronized.
* layer_shell: Arrange popups even if exclusive zone doesn't changeLibravatar Alexander Orzechowski2024-02-12
|
* layer_shell: Fix typo of return instead of continueLibravatar Alexander Orzechowski2024-01-21
| | | | | Otherwise we would skip arranging the rest of the surfaces if one of them isn't initialized.
* Fix SIGSEGV on output destroyLibravatar Daniel De Graaf2024-01-21
| | | | | | | | | | | ``` Program terminated with signal SIGSEGV, Segmentation fault. 144 struct wlr_layer_surface_v1 *layer_surface = surface->layer_surface; [Current thread is 1 (Thread 0x7f1f7c5b3ac0 (LWP 2473))] (gdb) bt ``` Add a NULL check in `find_mapped_layer_by_client` like the one in `arrange_surface`.
* container: Don't track outputsLibravatar Alexander Orzechowski2024-01-18
| | | | The scene graph abstraction does this for us
* scene_graph: Port layer_shellLibravatar Alexander Orzechowski2024-01-18
|
* desktop: Rename layers to shell_layersLibravatar Alexander Orzechowski2024-01-18
| | | | | This code will be deleted later, but for the time being rename it so it doesn't conflict with future properties.
* layer-shell: don't configure uninitialized surfacesLibravatar Kirill Primak2024-01-17
|
* layer-shell: wait for an initial commit before configuringLibravatar Kirill Primak2024-01-17
|
* layer-shell: don't try to unmap on destroyLibravatar Kirill Primak2024-01-17
| | | | A surface is guaranteed to be unmapped on destruction.
* input/seat: drop exclusive_clientLibravatar Simon Ser2023-12-13
| | | | This was a input-inhibit concept.
* xdg-shell: chase events updateLibravatar Kirill Primak2023-11-23
|
* chore: chase wlroots xdg-surface role reworkLibravatar Kirill Primak2023-08-21
|
* Add support for wlr-layer-shell ON_DEMAND keyboard interactivityLibravatar Erik Reider2023-06-06
| | | | | This allows for layer shell surfaces to receive focus while the surface is explicitly focused, i.e allowing text fields to receive keyboard input just like a regular surface.
* chore: chase wlroots map logic unificationLibravatar Kirill Primak2023-06-02
|
* Fix layer old damage not being offset by the monitor layout coordsLibravatar Erik Reider2023-05-20
|
* layer-shell: enter output before surface is mappedLibravatar Simon Ser2023-02-20
| | | | | | This sends fractional-scale-v1 events before the first configure event. That way clients have all of the metadata they need to render the first frame.
* Introduce surface_{enter,leave}_output()Libravatar Simon Ser2023-02-10
| | | | We can centralize all output-related surface events from there.
* Use wlr_damage_ringLibravatar Kirill Primak2022-11-11
| | | wlr_output_damage is to be replaced with wlr_damage_ring, so use that.
* chore: chase wlroots xdg-shell updateLibravatar Kirill Primak2022-05-27
|
* layer_shell: keep output non-NULL wherever possibleLibravatar Thomas Hebb2022-04-13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Our layer shell implementation assigns every layer surface to an output on creation. It tracks this output using the output field on the underlying wlr_layer_surface_v1 structure. As such, much of the existing code assumes that output is always non-NULL and omits NULL checks accordingly. However, there are currently two cases where we destroy a sway_layer_surface and output is NULL. The first is when we can't find an output to assign the surface to and destroy it immediately after creation. The second is when we destroy a surface in response to its output getting destroyed, as we set output to NULL in handle_output_destroy() before we call wlr_layer_surface_v1_destroy(), which is what calls the appropriate unmap and destroy callbacks. The former case doesn't cause any problems, since we haven't even allocated a sway_layer_surface at that point or registered any callbacks. The latter case, however, currently triggers a crash (#6120) if a popup is visible, since our popup_handle_unmap() implementation can't handle a NULL output. To fix this issue, keep output set until right before we free the sway_layer_surface. All we need to do is remove some of the cleanup logic from handle_output_destroy(), since as of commit c9060bcc12d0 ("layer-shell: replace close() with destroy()") that same logic is guaranteed to be happen later when wlroots calls handle_destroy() as part of wlr_layer_surface_v1_destroy(). This lets us remove some NULL checks from other unmap/destroy callbacks, which is nice. We also don't need to check that the wlr_output points to a valid sway_output anymore, since we unset that pointer after disabling the output as of commit a0bbe67076b8 ("Address emersions comments on output re-enabling") Just to be safe, I've added assertions that the wlr_output is non-NULL wherever we use it. Fixes #6120.
* Upgrade for wlroots surface refactoringLibravatar Simon Ser2022-01-13
| | | | | | See [1] for details. [1]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3412
* Destroy sub-surfaces with parent layer-shell surfaceLibravatar Simon Ser2022-01-08
| | | | Closes: https://github.com/swaywm/sway/issues/6337
* output: change output::destroy to output::disableLibravatar Ronan Pigott2021-12-17
| | | | | This changes output::destroy to output::disable and emits it only once when an output is disabled, instead of twice in succession.
* sway: replace noop_output by fallback_outputLibravatar Simon Zeni2021-11-25
| | | | | wlroots removed the support for the noop backend. Instead we rely on the headless backend to provide the fallback output.
* Chase wlr_xdg_surface breaking changesLibravatar Simon Ser2021-10-01
| | | | | | See [1]. [1]: https://github.com/swaywm/wlroots/pull/3106
* layer-shell: fix commit handlerLibravatar Kirill Primak2021-09-25
| | | | | | | This commit makes sure the extents are kept up-to-date, fixes not damaging the surface if its layer shell-specific state didn't change, and adds a check if the layer shell-specific state didn't change but the surface got mapped/unmapped, which could affect keyboard focus.
* layer-shell: check `committed` bitmaskLibravatar Kirill Primak2021-09-24
| | | | This avoids infinite configure-ack_configure-commit loop.
* layer-shell: chase wlr layer surface refactorLibravatar Kirill Primak2021-09-23
|
* layer-shell: replace close() with destroy()Libravatar Simon Ser2021-08-14
| | | | | | Update for the wlroots breaking change in [1]. [1]: https://github.com/swaywm/wlroots/pull/3108
* layer_shell: damage previous area when a surface shrinksLibravatar Ronan Pigott2021-08-12
| | | | | | | When a layer surface shrinks we need to damage the area it previously occupied, but we don't know the location of all its subsurfaces in the previous state, so instead damage a rectangle that encloses the entire previous extent.
* Update wlr_box includesLibravatar Simon Ser2021-07-07
| | | | | | Update for the breaking change in [1]. [1]: https://github.com/swaywm/wlroots/pull/3011
* desktop/layer_shell: fix centering for opposing anchorsLibravatar fwsmit2021-04-12
|
* desktop/layer_shell.c: Fix misspelled "exclusive"Libravatar Elyes HAOUAS2021-04-12
| | | | Signed-off-by: Elyes HAOUAS <ehaouas@noos.fr>
* desktop/layer_shell: Fix allocation type mismatchLibravatar Manuel Stoeckl2021-01-30
|
* 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
* Fix incorrect format specifiersLibravatar Antonin Décimo2020-07-30
|
* 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".
* Revert "Don't apply exclusive zones of unmapped layer-shell surfaces"Libravatar Brian Ashworth2020-02-25
| | | | This reverts commit e1eda8a09c15780e7f6ab0b6a1ab7e811a3d8764.
* Don't apply exclusive zones of unmapped layer-shell surfacesLibravatar Simon Ser2020-02-24
| | | | | | Backport of [1]. [1]: https://github.com/emersion/rootston/pull/15/files
* Fix seat_set_focus_layer crash when disabling outputLibravatar Simon Ser2020-02-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes the following crash: #0 0x00007f7daac3af25 in raise () at /usr/lib/libc.so.6 #1 0x00007f7daac24897 in abort () at /usr/lib/libc.so.6 #2 0x00007f7daac24767 in _nl_load_domain.cold () at /usr/lib/libc.so.6 #3 0x00007f7daac33526 in () at /usr/lib/libc.so.6 #4 0x0000555bfbc35029 in seat_set_focus_layer (seat=0x555bfd76d860, layer=0x555bfdda2ff0) at ../sway/input/seat.c:1164 __PRETTY_FUNCTION__ = "seat_set_focus_layer" __PRETTY_FUNCTION__ = "seat_set_focus_layer" #5 0x0000555bfbc35029 in seat_set_focus_layer (seat=seat@entry=0x555bfd76d860, layer=0x555bfdda2ff0) at ../sway/input/seat.c:1164 __PRETTY_FUNCTION__ = "seat_set_focus_layer" #6 0x0000555bfbc25899 in handle_output_destroy (listener=0x555bfdb90688, data=<optimized out>) at ../sway/desktop/layer_shell.c:263 layer = 0x555bfdd6b040 sway_layer = 0x555bfdb90610 seat = 0x555bfd76d860 client = 0x555bfdb76d70 set_focus = <optimized out> #7 0x0000555bfbc5b669 in wl_signal_emit (data=0x555bfd795930, signal=0x555bfd795ae0) at /usr/include/wayland-server-core.h:472 l = <optimized out> next = 0x555bfdb6a3e8 __PRETTY_FUNCTION__ = "output_disable" index = <optimized out> #8 0x0000555bfbc5b669 in output_disable (output=output@entry=0x555bfd795930) at ../sway/tree/output.c:263 __PRETTY_FUNCTION__ = "output_disable" index = <optimized out> #9 0x0000555bfbc3b890 in apply_output_config (oc=0x555bfd7d73d0, output=output@entry=0x555bfd795930) at ../sway/config/output.c:321 wlr_output = 0x555bfd7afaf0 scale = <optimized out> output_box = <optimized out> #10 0x0000555bfbc28309 in handle_output_manager_apply (listener=0x555bfbc7f148 <server+488>, data=0x555bfdca6eb0) at ../sway/desktop/output.c:936 wlr_output = <optimized out> output = 0x555bfd795930 oc = <optimized out> server = 0x555bfbc7ef60 <server> config = 0x555bfdca6eb0 config_head = 0x555bfdb79350 ok = true #11 0x00007f7dab4fbf7c in wlr_signal_emit_safe (signal=<optimized out>, data=0x555bfdca6eb0) at ../subprojects/wlroots/util/signal.c:29 pos = 0x555bfbc7f148 <server+488> l = 0x555bfbc7f148 <server+488> cursor = {link = {prev = 0x555bfbc7f148 <server+488>, next = 0x7fff238a8390}, notify = 0x7f7dab4fbef0 <handle_noop>} end = {link = {prev = 0x7fff238a8370, next = 0x555bfd7419f8}, notify = 0x7f7dab4fbef0 <handle_noop>} #12 0x00007f7daa45469a in ffi_call_unix64 () at /usr/lib/libffi.so.6 #13 0x00007f7daa453fb6 in ffi_call () at /usr/lib/libffi.so.6 #14 0x00007f7daae6f82f in () at /usr/lib/libwayland-server.so.0 #15 0x00007f7daae6c193 in () at /usr/lib/libwayland-server.so.0 #16 0x00007f7daae6d7f2 in wl_event_loop_dispatch () at /usr/lib/libwayland-server.so.0 #17 0x00007f7daae6c39c in wl_display_run () at /usr/lib/libwayland-server.so.0 This crash happens because focus can only be set on mapped surfaces.
* layer-shell: refocus if keyboard interactive lostLibravatar Brian Ashworth2019-12-27
| | | | | | | | When arranging layer-shell layers, verify that the currently focused layer, if any, for each seat is still keyboard interactive. If the layer is no longer keyboard interactive and there is not a keyboard interactive overlay or top layer to change the focus to, refocus the focus inactive node for the seat.
* layer-shell: unfocus output-less layer on unmapLibravatar Brian Ashworth2019-12-10
| | | | | | | | | If a layer is focused by any seat, it needs to be unfocused on unmap. If the unmap was due to an output being disabled, there would not be a sway_output and unmap would do an early return. This results in a use-after-free if the layer was focused by any seat prior to being unmapped. This change just moves the refocusing code above the early returns.
* Handle layer changes for layer shell surfacesLibravatar Simon Ser2019-10-27
| | | | | Closes: https://github.com/swaywm/sway/issues/4644 References: https://github.com/emersion/rootston/commit/1982106c9b0fbd48ee9fe20e013524125f6ca3cf
* Updates per wlroots layer shell changesLibravatar Drew DeVault2019-10-16
|
* layer-shell: Fix damage tracking of nested popupsLibravatar Sebastian Krzyszkowiak2019-09-29
| | | | | | Popups are positioned relative to local surface coordinates of the parent surface. There's no need to consider values set with xdg_surface.set_window_geometry for parent surfaces.