aboutsummaryrefslogtreecommitdiff
path: root/sway/input/seatop_default.c
AgeCommit message (Collapse)Author
2023-06-26input: Move wlr_pointer_gestures_v1 to sway_input_managerMark Bolhuis
On multi-seat configurations a zwp_pointer_gestures_v1 global was created for every seat. Instead, create the global once in the input manager, to be shared across all seats.
2023-06-06Add support for wlr-layer-shell ON_DEMAND keyboard interactivityErik Reider
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.
2023-02-20Implement seatop_touchStacy Harper
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.
2023-02-02Convert to *_try_from_wlr_surface()Simon Ser
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3991
2023-02-01Convert to wlr_xwayland_surface_try_from_wlr_surface()Simon Ser
Accomodate for the breaking changes in [1]. [1]: https://gitlab.freedesktop.org/wlroots/wlroots/-/commit/fbf5982e3838ee28b5345e98832f6956c402b225
2023-01-03Replace math functions that promote float to doubleCarl Smedstad
2022-10-21input: tweak focus behavior to allow focusing parent containersTudor Brindus
Sway focuses the inactive child when focusing split containers. However, there is currently no way to focus the parent container itself by mouse. A user must use the keyboard to do so. This commit maintains the current behavior, but makes it such that a second click on the split container titlebar (i.e., after its children are visible) focuses the split container itself.
2022-10-10input: focus container when scrolling on titlebarTudor Brindus
Fixes #6503.
2022-10-10input: focus floating container when clicked on borderTudor Brindus
Fixes #7209.
2022-07-15input: chase delta_discrete semantics changeKirill Primak
2022-05-30sway: add bindgesture commandFlorian Franzen
Co-authored-by: Michael Weiser <michael.weiser@gmx.de>
2022-03-17sway/input: follow up wlroots input device events renamingSimon Zeni
2022-02-22Remove some erroneous apostrophes in commentsThomas Hebb
2021-09-02seatop_down: End if surface is destroyed or other seatop startsSimon Plakolb
If the surface the pointer started to interact with is destroyed we also want the seatop_down to end. In case a drag is initiated we receive a call to handle_end.
2021-09-02input: Use seatop_down on layer surface clickSimon Plakolb
This solves an issue where layer-shell items would not receive a button release event when the pointer left them while being pressed. The default seatop changes focus immediately while seatop_down defers any focus changes until the pointer is released or seatop_down is destroyed.
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-16Add missing transaction commits to seatop_defaultDavid96
Every seat_set_focus* should be followed by a transaction_commit_dirty. In cases where the focus change is followed by a seatop_begin* this is not needed, as transaction_commit_dirty is then called by the seatop_begin* function. Fixes #6034
2021-02-15input: Commit transactions in seatop_defaultKenny Levinsen
This is needed for focus_follows_mouse, and was accidentally omitted in the previous transaction commit shuffle.
2020-11-05input/seatop_default: consider fullscreen views to have no edgesTudor Brindus
Previously, `find_edge` on a single fullscreen view would occasionally return an edge rather than `WLR_EDGE_NONE`. This would trigger entry into `seatop_resize_tiling`, which doesn't have meaning for a fullscreen view. The result was that the fullscreen container hitbox was considered to be that of where it'd be if it were tiling, so most clicks would not go through. Fixes #5792.
2020-11-01input: fully change focus when scrolling tabs/stacksTudor Brindus
When scrolling on a tabbed/stacked container, i3 focuses its inactive-focused focused child. Sway does the same, but then resets the focus to whatever was focused previously. Ref https://github.com/i3/i3/blob/e5992eed163179f5cd2715c2c212d3d757f04b31/src/click.c#L207-L219
2020-10-31input: remove motion deltas from seatop callbacksTudor Brindus
Straightforward cleanup, they haven't been used for a while.
2020-09-26Make focus_follows_mouse work when hovering a layer-shell surface on another ↵David96
output Fixes #5668
2020-06-25input/pointer: correctly handle bindings for synthetic eventsTudor Brindus
This commit addresses a regression introduced in 8fa74ad. Fixes #5481.
2020-06-16input/pointer: don't trigger pointer bindings for emulated inputTudor Brindus
Prior to this commit, a tablet device could trigger mouse button down bindings if the pen was pressed on a surface that didn't bind tablet handlers -- but it wouldn't if the surface did bind tablet handlers. We should expose consistent behavior to users so that they don't have to care about emulated vs. non-emulated input, so stop triggering bindings for any non-pointer devices.
2020-06-16input/tablet: focus appropriate node on tip downTudor Brindus
This commit makes tablet input more usable when `focus_follows_mouse` is set to `no`. Previously, tapping down on surfaces that bound tablet input would not switch focus, whereas tapping on surfaces that didn't (and hence went through pointer emulation) did.
2020-06-08input: tweak resize behavior to not change tab focus on border clickTudor Brindus
If a resize is triggered on a tabbed or stacked container, change focus to the tab which already had inactive focus, rather than to the tab whose border was clicked -- otherwise, we'd change the active tab when the user probably just wanted to resize.
2020-06-07input/tablet: allow moving tiling tablet v2 surfaces by pen inputTudor Brindus
Closes #5293.
2020-06-07input/tablet: allow moving floating tablet v2 surfaces by pen inputTudor Brindus
Refs #5293.
2020-06-07tree/container: introduce `container_toplevel_ancestor` helperTudor Brindus
This allows us to not have to explicitly write the same while loop everywhere.
2020-06-05Use new wlroots API for clearing keyboard/pointer focus during grabsThomas Hebb
We are not allowed to do what we did in #5222 and pass a `NULL` surface wlr_seat_pointer_notify_enter(), and it's causing crashes when an xdg-shell popup is active (see #5294 and swaywm/wlroots#2161). Instead, solve #5220 using the new wlroots API introduced in swaywm/wlroots#2217.
2020-06-04input/cursor: refactor tablet tool tip events into seatopsTudor Brindus
This commit moves tool tip event generation into seatops. In doing so, some corner cases where we'd erroneously (but likely harmlessly) generate both tablet and pointer events simultaneously are eliminated.
2020-05-28input/pointer: send pointer enter event on confine warpTudor Brindus
The spec has this to say about sending events on confine creation: Whenever the confinement is activated, it is guaranteed that the surface the pointer is confined to will already have received pointer focus and that the pointer will be within the region passed to the request creating this object. ...and on region update: If warped, a wl_pointer.motion event will be emitted, but no wp_relative_pointer.relative_motion event. Prior to this patch, sway did neither, and updated the hardware cursor position without notifying the underlying surface until the next motion event. This led to inconsistent results, especially in applications that draw their own software cursor.
2020-05-25input/tablet: add seatop_down entry for tablet inputTudor Brindus
Currently, when tablet input exits a window during an implicit grab, it passes focus to another window. For instance, this is problematic when trying to drag a scrollbar, and exiting the window &mdash; the scrollbar motion stops. Additionally, without `focus_follows_mouse no`, the tablet passes focus to whatever surface it goes over regardless of if there is an active implicit. If the tablet is over a surface that does not bind tablet handlers, sway will fall back to pointer emulation, and all of this works fine. It probably should have consistent behavior between emulated and not-emulated input, though. This commit adds a condition for entering seatop_down when a tablet's tool tip goes down, and exiting when it goes up. Since events won't be routed through seatop_default, this prevents windows losing focus during implicit grabs. Closes #5302.
2020-05-10input/tablet: simplify parameter plumbing for tablet referencesTudor Brindus
This is a small cleanup commit for removing `sway_tablet` parameters from functions that already accept `sway_tablet_tool`, since the tablet reference can be accessed through `tool->tablet`.
2020-05-02input: rename pointer handlers to be unambiguousTudor Brindus
This commit renames `motion` and `axis` handlers to `pointer_motion` and `pointer_axis`, respectively, to disambiguate them from their tablet (and future touch) handlers. `button` is left as-is, as it is generic across input devices.
2020-05-02input: refactor tablet motion into seatop handlerTudor Brindus
This commit moves tablet motion logic into a seatop handler. As a side-effect of seatop implementations being able to receive tablet motion events, fixes #5232.
2020-05-02input/cursor: make cursor rebasing cursor type-agnosticTudor Brindus
This commit refactors `cursor_rebase` into `cursor_update_image`, and moves sending pointer events to the two existing call sites. This will enable this code to be reused for tablets. Refs #5232
2020-05-01input/seatop_default: properly notify pointer leaveNick Diego Yamane
Currently, clients receive wl_data_device::leave events only when the pointer enters another surface, which leads to issues, such as #5220. This happens because wlr_seat_pointer_notify_enter() is called when handling motion events only for non-NULL surfaces. Fixes #5220
2020-04-15input/seatop_default: release on empty workspaceRouven Czerwinski
Instead of handling presses and releases on empty workspaces as setting focus to the workspace, handle releases by notifying the seat of a pointer action. This way DnDs are correctly released if the button is released over an empty workspace. This is achieved by removing the early return and letting the handle_button() call seat_pointer_notify_button() at the very end. Fixes #3932
2019-12-16input/seatop_default: fix focusing floating titlesBrian Ashworth
When clicking on the titlebar of a floating container (or descendant of a floating container), the top-level floating container was being focused and then allowing you to move the top-level floating container. This made it so you couldn't switch to a different tab/stack within the floating container. With this patch, the focus inactive view for the container that the titlebar is associated with is focused, then the traversal to the top-level floating container is performed to use with the move floating operation.
2019-11-08seatop_default: handle focus for unmanaged xwayland windows lastRonan Pigott
Fixes #4707
2019-11-04seatop_default: handle focus for xwayland_unmanaged viewsRonan Pigott
2019-10-23Fix tiled containers resize with mouseKirill Chibisov
Fixes regression introduced in 2c1a11016ccb7646a74de51eff003c18e5aa7902
2019-09-05Do not search for edges on subsurfaces, fix #4381Versus Void
Subsurfaces (in most cases popups) aren't decorated by sway and will never have any borders, but may be drawn beyond container boundaries producing false positive when searching for edge. So we want to skip edge search when handling mouse event on subsurface.
2019-09-04seatop_default: only focus container on pressBrian Ashworth
This matches i3's behavior of only focusing a container when pressed. This allows for `bindsym button1 nop`, `bindsym BTN_LEFT nop`, or `bindcode 272 nop` to be used to disable focusing when clicking on the title (or with additional flags to bind{code,sym} other portions of the container). Without this additional condition, the user would need both `bindsym button1 nop` and `bindsym --release button1 nop` to override both the pressed and released behavior.
2019-08-12Remove redundant checksAntonin Décimo
2019-08-12input: check pointer against nullptrAntonin Décimo
2019-04-28Fix a silly mistakeAlex Maese
2019-04-28Don't send pointer motion when rebasing the cursorAlex Maese
2019-04-28Clear pointer focus during move and resize seatopsAlex Maese