aboutsummaryrefslogtreecommitdiffstats
path: root/sway/input/seat.c
Commit message (Collapse)AuthorAge
* seat: Fix reloading cursor theme after changeLibravatar Lina Banik2023-11-21
| | | | | | | | | | | | | This reverts commit afde6369 "seat: avoid unneeded reloading xcursor theme". Always avoiding to reload the xcursor theme prevents reloading the cursor even when this is desired. Instead seat_configure_xcursor can determine whether a full reload is necessary. To stay with the spirit of the reverted change, cursors are only fully reloaded, if the theme has changed. Fixes #6931
* Only reconfigure input mappings on output changeLibravatar Simon Ser2023-11-16
| | | | | | Fully reconfiguring all input devices on output change takes a loooong time. Let's just reconfigure what we need: only mappings depend on outputs.
* input/seat: rename seat_apply_input_configLibravatar Simon Ser2023-11-16
| | | | seat_apply_input_mapping is a lot more descriptive.
* input/seat: don't configure mappings for switchesLibravatar Simon Ser2023-11-16
| | | | | Switch devices cannot be mapped to an output/region, stop trying to do so.
* Drop support for KDE's idle protocolLibravatar Simon Ser2023-10-05
| | | | We support the standard idle-notify protocol since Sway 1.8.
* Deprecate seat idle_wakeLibravatar Simon Ser2023-07-19
| | | | | | | | | | | | | | | | | | | | | | | Sway has two knobs to control idling: - seat idle_inhibit: when the seat is active (ie. not idle), this extends the active state. When the seat is idle, this is ignored. - seat idle_wake: when the seat is idle, this wakes up the seat. When the seat is active, this is ignored. The motivation for the deprecation is two-fold: - The concept of "seat idle state" is ill-defined. Each idle-notify-v1 client will pass a different idle timeout. With the old logic, a seat was declared idle if and only if all idle-notify-v1 timeouts have expired. However, if only a portion of the timeouts have expired, then some clients would wake up, and the rest would stay active. This is inconsistent with the definition of idle_inhibit/idle_wake: idle_inhibit was used for clients which are waking up. - It never worked properly with the new idle-notify-v1 protocol and no-one noticed. Only the legacy KDE idle protocol is taken into account, but that protocol is not used anymore.
* Use "default" XCursor instead of "left_ptr"Libravatar Simon Ser2023-06-25
| | | | | "left_ptr" is the legacy XCursor name. "default" is the cursor spec name.
* 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
|
* Add support for touch cancel eventsLibravatar hrdl2023-05-04
|
* render: pass rendering state together in a structLibravatar Alexander Orzechowski2023-05-02
| | | | This lets us easily add rendering state that we need in the future
* Constify pixman_region32_t for rendering functionsLibravatar Simon Ser2023-02-22
|
* Implement seatop_touchLibravatar Stacy Harper2023-02-20
| | | | | | | | | | Atm we got issue with the touch position sent to the clients. While holding contact, leaving the initial container will continue to send motion event to the client but with the new local position from the new container. This seatop goal is to send the position of the touch event, relatively to the initial container layout position.
* Fix pointer events for ext-session-lock surfacesLibravatar Simon Ser2023-01-18
| | | | | We were never sending any pointer event to ext-session-lock surfaces.
* input/tablet: handle focusing NULL surfaceLibravatar Kirill Primak2023-01-16
| | | | | Additionally, rename the function responsible for switching focus to match its behavior better.
* seat: Avoid sending redundant keymaps on reloadLibravatar Kenny Levinsen2022-12-04
| | | | | | | | | | | | | | | | | | | When we reload the config, we reset every input device and re-apply configuration from the config file. This means that the keyboard keymap is updated at least once during config reload, more if the config file contains keyboard configuration. When they keyboard keymap changes and is updated through wlr_seat, the keymap ends up sent to every keyboard bound in every client, seemingly multiple times. On an x230 of mine with a keyboard layout set in the config file, I see 42 keymap events sent to foot on config reload. Reduce events from keyboard configurations by skipping all but the currently active keyboard for the seat, and by clearing the active keyboard during input manager device reset. After this change, I only see a single just-in-time keymap event. Fixes: https://github.com/swaywm/sway/issues/6654
* Make libinput backend optionalLibravatar Simon Ser2022-11-28
|
* input/seat: locally compute drag icon offsetLibravatar Simon Ser2022-11-15
| | | | References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3861
* Fix focus tracking when session lock is activeLibravatar Daniel De Graaf2022-10-28
| | | | | | | | | Remove the incorrect attempt to block focus changes when an input grab is present and replace it with the same logic used for layer_shell-based screen lockers: restore the focus after changing it. This fixes a use-after-free of seat->workspace if outputs are destroyed while a screen lock is enabled.
* Rework session lock keyboard focus handlingLibravatar Daniel De Graaf2022-10-28
| | | | | | | When removing outputs, it is possible to end up in a situation where none of the session lock client's surfaces have keyboard focus, resulting in it not receiving keyboard events. Track the focused surface and update it as needed on surface destroy.
* Add support for ext-idle-notify-v1Libravatar Simon Ser2022-10-14
| | | | References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3753
* Use keyboard_state.focused_surface directlyLibravatar Ferdinand Schober2022-10-09
|
* use seat directlyLibravatar Ferdinand Schober2022-10-09
|
* allow pointer_constraints on layer_shell surfacesLibravatar Ferdinand Schober2022-10-09
|
* Remove access to wlr_input_device unionLibravatar Simon Ser2022-06-22
| | | | | References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3626 Closes: https://github.com/swaywm/sway/issues/7077
* sway: add bindgesture commandLibravatar Florian Franzen2022-05-30
| | | | Co-authored-by: Michael Weiser <michael.weiser@gmx.de>
* Avoid inspecting a NULL view in seat_set_focusLibravatar Daniel De Graaf2022-04-30
| | | | Fixes #6968
* Implement ext-session-lock-v1Libravatar Daniel De Graaf2022-04-29
|
* sway/input: wlr_seat_keyboard() now takes wlr_keyboardLibravatar Leonardo Hernández Hernández2022-03-23
|
* sway/input: fix bad position of wlr_dragLibravatar Leonardo Hernández Hernández2022-03-22
|
* sway/input: follow up wlroots input device events renamingLibravatar Simon Zeni2022-03-17
|
* sway/input/seat: take output name from specialized input deviceLibravatar Simon Zeni2022-03-17
|
* sway/input: destroy sway_switch properlyLibravatar Moon Sungjoon2022-03-05
| | | | | Fix: #6861 Added seat_device_destroy function to seat_device_destroy function.
* Remove some erroneous apostrophes in commentsLibravatar Thomas Hebb2022-02-22
|
* input/seat: unset has_focus when focus_stack becomes emptyLibravatar Thomas Hebb2022-01-07
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We currently track the focus of a seat in two ways: we use a list called focus_stack to track the order in which nodes have been focused, with the first node representing what's currently focused, and we use a variable called has_focus to indicate whether anything has focus--i.e. whether we should actually treat that first node as focused at any given time. In a number of places, we treat has_focus as implying that a focused node exists. If it's true, we attempt to dereference the return value of seat_get_focus(), our helper function for getting the first node in focus_list, with no further checks. But this isn't quite correct with the current implementation of seat_get_focus(): not only does it return NULL when has_focus is false, it also returns NULL when focus_stack contains no items. In most cases, focus_stack never becomes empty and so this doesn't matter at all. Since focus_stack stores a history of focused nodes, we rarely remove nodes from it. The exception to this is when a node itself goes away. In that case, we call seat_node_destroy() to remove it from focus_stack and free it. But we don't unset has_focus if we've removed the final node! This lets us get into a state where has_focus is true but seat_get_focus() returns NULL, leading to a segfault when we try to dereference it. Fix the issue both by updating has_focus in seat_node_destroy() and by adding an assertion in seat_get_focus() that ensures focus_stack and has_focus are in sync, which will make it easier to track down similar issues in the future. Fixes #6395. [1] There's some discussion in #1585 from when this was implemented about whether has_focus is actually necessary; it's possible we could remove it entirely, but for the moment this is the architecture we have.
* use node_is_viewLibravatar siikamiika2021-10-10
|
* focus: beyond fullscreen when focused explicitlyLibravatar lbonn2021-02-25
| | | | | | | When issuing a focus command on a specific container, users expect to proceed it even if is hidden by a fullscreen window. This matches the behavior of i3.
* Automatically map built-in touchscreens/tablets to built-in panelsLibravatar Simon Ser2021-02-25
| | | | | Detect whether an output is built-in via its type. Detect whether a touchscreen or tablet tool is built-in via its ID_PATH property.
* container: Move pending state to state structLibravatar Kenny Levinsen2021-02-16
| | | | | | | | | 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.
* text_input: Add support for focusing layer-shell surfacesLibravatar Tadeo Kondrak2021-02-15
|
* input/seat: Reset command handler context in seat_destroy()Libravatar Andri Yngvason2021-01-01
| | | | This fixes a dangling reference which causes a use-after-free.
* input/seat: Clean up focus_stack in seat_destroy()Libravatar Andri Yngvason2021-01-01
| | | | This fixes use-after-free when seat_destroy() has been called.
* input: Clean up input_method_relay in seat_destoy()Libravatar Andri Yngvason2021-01-01
| | | | | This fixes a crash that happens when input_method_new or text_method_new events are emitted after the seat has been freed.
* input/cursor: unhide cursor on synthetic inputLibravatar Tudor Brindus2020-12-06
| | | | Fixes #5847.
* tree/container: introduce `container_is_sticky[_or_child]` functionsLibravatar Tudor Brindus2020-11-11
| | | | | | | | | | To query whether a container is sticky, checking `con->is_sticky` is insufficient. `container_is_floating_or_child` must also return true; this led to a lot of repetition. This commit introduces `container_is_sticky[_or_child]` functions, and switches all stickiness checks to use them. (Including ones where the container is already known to be floating, for consistency.)
* commands/focus: force container warp when fulfilling `focus mode_toggle`Libravatar Tudor Brindus2020-11-01
| | | | | | | This commit switches focusing behavior to force a warp when executing `focus mode_toggle`. Fixes #5772.
* input: remove motion deltas from seatop callbacksLibravatar Tudor Brindus2020-10-31
| | | | Straightforward cleanup, they haven't been used for a while.
* seat: use default output mapping if there is no input configLibravatar Ronan Pigott2020-10-16
|
* cursor: update hide timer during config applyLibravatar Rouven Czerwinski2020-09-16
| | | | | | | | | We can't arm the timer during cursor creation since the config may not be ready yet. Instead arm the timer while applying the input configuration, by this time the configuration has been parsed and we can arm the hide timer. Fixes #5686
* input/cursor: reset event source after unhideLibravatar Rouven Czerwinski2020-09-14
| | | | | | | | Reset the event source after unhiding the cursor, to ensure that the timeout starts after showing the cursor. Also remove the open coded variant in seat_consider_warp_to_focus(). Fixes #5679