mirror of
https://github.com/swaywm/sway.git
synced 2026-04-25 06:46:24 -04:00
swaybar: Implement pointer gesture swipe support
After previous commits, swaybar bindsym statements would already accept
the new pseudo button names for swipe gestures. Also, sway itself would
not handle swipes when executed while the pointer was above a bar.
Add the necessary handling for three- and four-finger swipe pointer
gestures in swaybar. Cancel ongoing swipes when the pointer leaves the
bar as to not confuse successive swipes with focus changes inbetween
them. Add the pointer gestures protocol in client and server variants
to the meson build file to make the necessary definitions available.
Bind to the global interface on startup, instantiate a swipe gesture and
add a listener on seat setup as well as destroy it on seat shutdown.
Extend the sway-bar manual page as necessary.
Test-plan:
- add workspace switching to config like so:
bar bar-0 {
swaybar_command swaybar
bindsym release SWIPE_3_LEFT workspace prev_on_output
bindsym release SWIPE_4_RIGHT workspace next_on_output
bindsym --release SWIPE_3_LEFT exec yad --text foo
bindsym --release SWIPE_4_UP exec yad --text bar
}
- start sway and open two workspaces
- position pointer above a bar surface
- switch back and forth using horizontal three- and four-finger swipes,
observing that different finger counts are necessary per direction
- observe that the --release binding for left swipes is ignored because
there is an on-press binding already
- observe that the --release binding for upward swipes is honoured
because there is no on-press binding
- move pointer away from bar surface
- observe that switching by swipe no longer works
Signed-off-by: Michael Weiser <michael.weiser@gmx.de>
This commit is contained in:
parent
41488b0fdb
commit
d4482400f1
6 changed files with 160 additions and 0 deletions
|
|
@ -13,6 +13,15 @@
|
|||
#define SWAY_CONTINUOUS_SCROLL_TIMEOUT 1000
|
||||
#define SWAY_CONTINUOUS_SCROLL_THRESHOLD 10000
|
||||
|
||||
#define SWAY_SWIPE_DIR_UP 0
|
||||
#define SWAY_SWIPE_DIR_DOWN 1
|
||||
#define SWAY_SWIPE_DIR_LEFT 2
|
||||
#define SWAY_SWIPE_DIR_RIGHT 3
|
||||
#define SWAY_SWIPE_DIR_COUNT 4
|
||||
|
||||
#define SWAY_SWIPE_3 SWAY_SCROLL_RIGHT + 1
|
||||
#define SWAY_SWIPE_4 SWAY_SWIPE_3 + SWAY_SWIPE_DIR_COUNT
|
||||
|
||||
struct swaybar;
|
||||
struct swaybar_output;
|
||||
|
||||
|
|
@ -39,6 +48,13 @@ struct swaybar_touch {
|
|||
struct touch_slot slots[16];
|
||||
};
|
||||
|
||||
struct swaybar_swipe {
|
||||
struct zwp_pointer_gesture_swipe_v1 *swipe;
|
||||
bool swiping;
|
||||
uint8_t fingers;
|
||||
double travel_x, travel_y;
|
||||
};
|
||||
|
||||
enum hotspot_event_handling {
|
||||
HOTSPOT_IGNORE,
|
||||
HOTSPOT_PROCESS,
|
||||
|
|
@ -66,6 +82,7 @@ struct swaybar_seat {
|
|||
struct wl_seat *wl_seat;
|
||||
struct swaybar_pointer pointer;
|
||||
struct swaybar_touch touch;
|
||||
struct swaybar_swipe swipe;
|
||||
struct wl_list link; // swaybar_seat:link
|
||||
struct swaybar_scroll_axis axis[2];
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue