summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorq234rty2022-10-29 18:41:37 +0800
committerq234rty2022-10-29 18:41:37 +0800
commit3eace3523206e06ca14de750e16ae6041ad09441 (patch)
tree5ca932ecc0fa8432efd3921217d9a225101487ef
parent5cb85908fc84e2981b3773bf743af143f1e442c2 (diff)
downloadaur-3eace3523206e06ca14de750e16ae6041ad09441.tar.gz
Sync with extra
-rw-r--r--.SRCINFO4
-rw-r--r--0002_Revert_Aggregate_scroll_axis_events_to_fix_kinetic_scrolling.patch237
-rw-r--r--PKGBUILD9
3 files changed, 246 insertions, 4 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 86a9faa488d6..297794e4cbe1 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = xorg-xwayland-hidpi-xprop
pkgdesc = run X clients under wayland, with !733 HiDPI patch
pkgver = 22.1.4
- pkgrel = 1
+ pkgrel = 2
url = https://xorg.freedesktop.org
arch = x86_64
license = custom
@@ -35,10 +35,12 @@ pkgbase = xorg-xwayland-hidpi-xprop
source = https://xorg.freedesktop.org/archive/individual/xserver/xwayland-22.1.4.tar.xz.sig
source = hidpi.patch
source = 0001_Do_not_ignore_leave_events.patch::https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/987.patch
+ source = 0002_Revert_Aggregate_scroll_axis_events_to_fix_kinetic_scrolling.patch::https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/988.patch
validpgpkeys = 67DC86F2623FC5FD4BB5225D14706DBE1E4B4540
sha512sums = a1301df1687ac276172565c98b1fb3d5f35f67d47f625b81fce485d1818cf4896f88c2750b4e93596fa6f7fd515e258d201ca3d0cc39943b576f2d2c3f9be8cd
sha512sums = SKIP
sha512sums = 7132c44d9bbf1c5f93906ef301a6e946f0909da0b9273f397281e681ad0da77d62b960a9dd0a640c7209548192fefba9bde03c493f3a89d08cd73a12844bb518
sha512sums = d0c87face4485050db134e5ed14d930bdae05d81149b2b573b97fc6dd96d9234e709d6f0523221747293da20cbd012e1e1da00e12b227f98597ffa320bcd3e3c
+ sha512sums = fea7abdd962fd0a8e653069f7926508d2dd90a0a6632d4aae2265a221267f1777fba4aeaaf494dc6f3e4a11a15a7eabd524ca16f948e0d3fee05c6a4b8a69fd4
pkgname = xorg-xwayland-hidpi-xprop
diff --git a/0002_Revert_Aggregate_scroll_axis_events_to_fix_kinetic_scrolling.patch b/0002_Revert_Aggregate_scroll_axis_events_to_fix_kinetic_scrolling.patch
new file mode 100644
index 000000000000..d5433960c9bd
--- /dev/null
+++ b/0002_Revert_Aggregate_scroll_axis_events_to_fix_kinetic_scrolling.patch
@@ -0,0 +1,237 @@
+From eca138fff0f2344fdf02f6749f6b4c900fb52357 Mon Sep 17 00:00:00 2001
+From: Olivier Fourdan <ofourdan@redhat.com>
+Date: Fri, 28 Oct 2022 11:08:16 +0200
+Subject: [PATCH] Revert "xwayland: Aggregate scroll axis events to fix kinetic
+ scrolling"
+
+This reverts commit 2db46363542bfd0f62f20f5a898fef07424ffccc.
+
+Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1392
+---
+ hw/xwayland/xwayland-input.c | 116 +++++++++++++++--------------------
+ hw/xwayland/xwayland-input.h | 10 +--
+ 2 files changed, 51 insertions(+), 75 deletions(-)
+
+diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
+index aa08586bc..ec40d110c 100644
+--- a/hw/xwayland/xwayland-input.c
++++ b/hw/xwayland/xwayland-input.c
+@@ -50,6 +50,12 @@
+ #include "pointer-gestures-unstable-v1-client-protocol.h"
+ #include "xwayland-keyboard-grab-unstable-v1-client-protocol.h"
+
++struct axis_discrete_pending {
++ struct xorg_list l;
++ uint32_t axis;
++ int32_t discrete;
++};
++
+ struct sync_pending {
+ struct xorg_list l;
+ DeviceIntPtr pending_dev;
+@@ -607,36 +613,6 @@ dispatch_relative_motion(struct xwl_seat *xwl_seat)
+ POINTER_RAWONLY, &mask);
+ }
+
+-static void
+-dispatch_scroll_motion(struct xwl_seat *xwl_seat)
+-{
+- ValuatorMask mask;
+- const int divisor = 10;
+- wl_fixed_t dy = xwl_seat->pending_pointer_event.scroll_dy;
+- wl_fixed_t dx = xwl_seat->pending_pointer_event.scroll_dx;
+- int32_t discrete_dy = xwl_seat->pending_pointer_event.scroll_discrete_dy;
+- int32_t discrete_dx = xwl_seat->pending_pointer_event.scroll_discrete_dx;
+-
+- valuator_mask_zero(&mask);
+- if (xwl_seat->pending_pointer_event.has_vertical_scroll)
+- valuator_mask_set_double(&mask,
+- 3,
+- wl_fixed_to_double(dy) / divisor);
+- else if (xwl_seat->pending_pointer_event.has_vertical_scroll_discrete)
+- valuator_mask_set(&mask, 3, discrete_dy);
+-
+- if (xwl_seat->pending_pointer_event.has_horizontal_scroll)
+- valuator_mask_set_double(&mask,
+- 2,
+- wl_fixed_to_double(dx) / divisor);
+- else if (xwl_seat->pending_pointer_event.has_horizontal_scroll_discrete)
+- valuator_mask_set(&mask, 2, discrete_dx);
+-
+- QueuePointerEvents(get_pointer_device(xwl_seat),
+- MotionNotify, 0, POINTER_RELATIVE, &mask);
+-}
+-
+-
+ static void
+ dispatch_pointer_motion_event(struct xwl_seat *xwl_seat)
+ {
+@@ -653,18 +629,8 @@ dispatch_pointer_motion_event(struct xwl_seat *xwl_seat)
+ dispatch_absolute_motion(xwl_seat);
+ }
+
+- if (xwl_seat->pending_pointer_event.has_vertical_scroll ||
+- xwl_seat->pending_pointer_event.has_horizontal_scroll ||
+- xwl_seat->pending_pointer_event.has_vertical_scroll_discrete ||
+- xwl_seat->pending_pointer_event.has_horizontal_scroll_discrete)
+- dispatch_scroll_motion(xwl_seat);
+-
+ xwl_seat->pending_pointer_event.has_absolute = FALSE;
+ xwl_seat->pending_pointer_event.has_relative = FALSE;
+- xwl_seat->pending_pointer_event.has_vertical_scroll = FALSE;
+- xwl_seat->pending_pointer_event.has_horizontal_scroll = FALSE;
+- xwl_seat->pending_pointer_event.has_vertical_scroll_discrete = FALSE;
+- xwl_seat->pending_pointer_event.has_horizontal_scroll_discrete = FALSE;
+ }
+
+ static void
+@@ -721,17 +687,42 @@ pointer_handle_axis(void *data, struct wl_pointer *pointer,
+ uint32_t time, uint32_t axis, wl_fixed_t value)
+ {
+ struct xwl_seat *xwl_seat = data;
++ int index;
++ const int divisor = 10;
++ ValuatorMask mask;
++ struct axis_discrete_pending *pending = NULL;
++ struct axis_discrete_pending *iter;
+
+ switch (axis) {
+ case WL_POINTER_AXIS_VERTICAL_SCROLL:
+- xwl_seat->pending_pointer_event.has_vertical_scroll = TRUE;
+- xwl_seat->pending_pointer_event.scroll_dy = value;
++ index = 3;
+ break;
+ case WL_POINTER_AXIS_HORIZONTAL_SCROLL:
+- xwl_seat->pending_pointer_event.has_horizontal_scroll = TRUE;
+- xwl_seat->pending_pointer_event.scroll_dx = value;
++ index = 2;
+ break;
++ default:
++ return;
++ }
++
++ xorg_list_for_each_entry(iter, &xwl_seat->axis_discrete_pending, l) {
++ if (iter->axis == axis) {
++ pending = iter;
++ break;
++ }
+ }
++
++ valuator_mask_zero(&mask);
++
++ if (pending) {
++ valuator_mask_set(&mask, index, pending->discrete);
++ xorg_list_del(&pending->l);
++ free(pending);
++ } else {
++ valuator_mask_set_double(&mask, index, wl_fixed_to_double(value) / divisor);
++ }
++
++ QueuePointerEvents(get_pointer_device(xwl_seat),
++ MotionNotify, 0, POINTER_RELATIVE, &mask);
+ }
+
+ static void
+@@ -754,18 +745,6 @@ static void
+ pointer_handle_axis_stop(void *data, struct wl_pointer *wl_pointer,
+ uint32_t time, uint32_t axis)
+ {
+- struct xwl_seat *xwl_seat = data;
+-
+- switch (axis) {
+- case WL_POINTER_AXIS_VERTICAL_SCROLL:
+- xwl_seat->pending_pointer_event.has_vertical_scroll = TRUE;
+- xwl_seat->pending_pointer_event.scroll_dy = 0;
+- break;
+- case WL_POINTER_AXIS_HORIZONTAL_SCROLL:
+- xwl_seat->pending_pointer_event.has_horizontal_scroll = TRUE;
+- xwl_seat->pending_pointer_event.scroll_dx = 0;
+- break;
+- }
+ }
+
+ static void
+@@ -774,16 +753,14 @@ pointer_handle_axis_discrete(void *data, struct wl_pointer *wl_pointer,
+ {
+ struct xwl_seat *xwl_seat = data;
+
+- switch (axis) {
+- case WL_POINTER_AXIS_VERTICAL_SCROLL:
+- xwl_seat->pending_pointer_event.has_vertical_scroll_discrete = TRUE;
+- xwl_seat->pending_pointer_event.scroll_discrete_dy = discrete;
+- break;
+- case WL_POINTER_AXIS_HORIZONTAL_SCROLL:
+- xwl_seat->pending_pointer_event.has_horizontal_scroll_discrete = TRUE;
+- xwl_seat->pending_pointer_event.scroll_discrete_dx = discrete;
+- break;
+- }
++ struct axis_discrete_pending *pending = malloc(sizeof *pending);
++ if (!pending)
++ return;
++
++ pending->axis = axis;
++ pending->discrete = discrete;
++
++ xorg_list_add(&pending->l, &xwl_seat->axis_discrete_pending);
+ }
+
+ static const struct wl_pointer_listener pointer_listener = {
+@@ -1759,6 +1736,7 @@ create_input_device(struct xwl_screen *xwl_screen, uint32_t id, uint32_t version
+ wl_array_init(&xwl_seat->keys);
+
+ xorg_list_init(&xwl_seat->touches);
++ xorg_list_init(&xwl_seat->axis_discrete_pending);
+ xorg_list_init(&xwl_seat->sync_pending);
+ }
+
+@@ -1767,6 +1745,7 @@ xwl_seat_destroy(struct xwl_seat *xwl_seat)
+ {
+ struct xwl_touch *xwl_touch, *next_xwl_touch;
+ struct sync_pending *p, *npd;
++ struct axis_discrete_pending *ad, *ad_next;
+
+ xorg_list_for_each_entry_safe(xwl_touch, next_xwl_touch,
+ &xwl_seat->touches, link_touch) {
+@@ -1779,6 +1758,11 @@ xwl_seat_destroy(struct xwl_seat *xwl_seat)
+ free (p);
+ }
+
++ xorg_list_for_each_entry_safe(ad, ad_next, &xwl_seat->axis_discrete_pending, l) {
++ xorg_list_del(&ad->l);
++ free(ad);
++ }
++
+ release_tablet_manager_seat(xwl_seat);
+
+ release_grab(xwl_seat);
+diff --git a/hw/xwayland/xwayland-input.h b/hw/xwayland/xwayland-input.h
+index 4fd175b13..dbe215bdb 100644
+--- a/hw/xwayland/xwayland-input.h
++++ b/hw/xwayland/xwayland-input.h
+@@ -93,6 +93,7 @@ struct xwl_seat {
+ char *keymap;
+ struct wl_surface *keyboard_focus;
+
++ struct xorg_list axis_discrete_pending;
+ struct xorg_list sync_pending;
+
+ struct xwl_pointer_warp_emulator *pointer_warp_emulator;
+@@ -110,15 +111,6 @@ struct xwl_seat {
+ double dy;
+ double dx_unaccel;
+ double dy_unaccel;
+-
+- wl_fixed_t scroll_dy;
+- wl_fixed_t scroll_dx;
+- int32_t scroll_discrete_dy;
+- int32_t scroll_discrete_dx;
+- Bool has_vertical_scroll;
+- Bool has_horizontal_scroll;
+- Bool has_vertical_scroll_discrete;
+- Bool has_horizontal_scroll_discrete;
+ } pending_pointer_event;
+
+ struct xorg_list tablets;
+--
+GitLab
+
diff --git a/PKGBUILD b/PKGBUILD
index ef9f78bee13f..860f00f613c2 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=xorg-xwayland-hidpi-xprop
pkgver=22.1.4
-pkgrel=1
+pkgrel=2
arch=('x86_64')
license=('custom')
url="https://xorg.freedesktop.org"
@@ -19,11 +19,13 @@ makedepends=('meson' 'xorgproto' 'xtrans' 'libxkbfile' 'dbus'
'egl-wayland'
)
source=(https://xorg.freedesktop.org/archive/individual/xserver/xwayland-$pkgver.tar.xz{,.sig} hidpi.patch
- 0001_Do_not_ignore_leave_events.patch::https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/987.patch )
+ 0001_Do_not_ignore_leave_events.patch::https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/987.patch
+ 0002_Revert_Aggregate_scroll_axis_events_to_fix_kinetic_scrolling.patch::https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/988.patch)
sha512sums=('a1301df1687ac276172565c98b1fb3d5f35f67d47f625b81fce485d1818cf4896f88c2750b4e93596fa6f7fd515e258d201ca3d0cc39943b576f2d2c3f9be8cd'
'SKIP'
'7132c44d9bbf1c5f93906ef301a6e946f0909da0b9273f397281e681ad0da77d62b960a9dd0a640c7209548192fefba9bde03c493f3a89d08cd73a12844bb518'
- 'd0c87face4485050db134e5ed14d930bdae05d81149b2b573b97fc6dd96d9234e709d6f0523221747293da20cbd012e1e1da00e12b227f98597ffa320bcd3e3c')
+ 'd0c87face4485050db134e5ed14d930bdae05d81149b2b573b97fc6dd96d9234e709d6f0523221747293da20cbd012e1e1da00e12b227f98597ffa320bcd3e3c'
+ 'fea7abdd962fd0a8e653069f7926508d2dd90a0a6632d4aae2265a221267f1777fba4aeaaf494dc6f3e4a11a15a7eabd524ca16f948e0d3fee05c6a4b8a69fd4')
provides=('xorg-server-xwayland' 'xorg-xwayland')
conflicts=('xorg-server-xwayland' 'xorg-xwayland')
replaces=('xorg-server-xwayland')
@@ -34,6 +36,7 @@ options=('debug' 'strip')
prepare() {
cd ${srcdir}/xwayland-$pkgver
patch -Np1 -i ../0001_Do_not_ignore_leave_events.patch
+ patch -Np1 -i ../0002_Revert_Aggregate_scroll_axis_events_to_fix_kinetic_scrolling.patch
patch -Np1 -i ../hidpi.patch
}