Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/neutrinolabs/xrdp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsefler <sefler@126.com>2022-09-12 08:29:11 +0300
committersefler <sefler@126.com>2022-09-15 18:53:26 +0300
commitc4d671497933ff5df718430ec35d7074fe458510 (patch)
tree5d8c858101c6bd16d3138a53255785f15173620c
parentd80d096e321985f1f334badcd29be399e01eb59e (diff)
touchpad scrolling works now
-rw-r--r--common/xrdp_constants.h4
-rw-r--r--xrdp/xrdp_wm.c43
2 files changed, 45 insertions, 2 deletions
diff --git a/common/xrdp_constants.h b/common/xrdp_constants.h
index 1e844697..7824b318 100644
--- a/common/xrdp_constants.h
+++ b/common/xrdp_constants.h
@@ -270,6 +270,10 @@
#define WM_BUTTON8DOWN 116
#define WM_BUTTON9UP 117
#define WM_BUTTON9DOWN 118
+
+#define WM_TOUCH_VSCROLL 140
+#define WM_TOUCH_HSCROLL 141
+
#define WM_INVALIDATE 200
#define CB_ITEMCHANGE 300
diff --git a/xrdp/xrdp_wm.c b/xrdp/xrdp_wm.c
index 61261a97..828d0a72 100644
--- a/xrdp/xrdp_wm.c
+++ b/xrdp/xrdp_wm.c
@@ -1232,6 +1232,28 @@ xrdp_wm_clear_popup(struct xrdp_wm *self)
/*****************************************************************************/
int
+xrdp_wm_mouse_touch(struct xrdp_wm *self, int gesture, int param)
+{
+ LOG(LOG_LEVEL_INFO, "mouse touch event gesture %d param %d", gesture, param);
+
+ switch (gesture) {
+ // vertical scroll
+ case 0:
+ self->mm->mod->mod_event(self->mm->mod, WM_TOUCH_VSCROLL,
+ self->mouse_x, self->mouse_y, param, 0);
+ break;
+ // horizantal scroll
+ case 1:
+ self->mm->mod->mod_event(self->mm->mod, WM_TOUCH_HSCROLL,
+ self->mouse_x, self->mouse_y, param, 0);
+ break;
+ }
+
+ return 0;
+}
+
+/*****************************************************************************/
+int
xrdp_wm_mouse_click(struct xrdp_wm *self, int x, int y, int but, int down)
{
struct xrdp_bitmap *control;
@@ -1775,13 +1797,30 @@ xrdp_wm_process_input_mouse(struct xrdp_wm *self, int device_flags,
/* vertical mouse wheel */
if (device_flags & PTRFLAGS_WHEEL)
{
+ int delta = 0;
if (device_flags & PTRFLAGS_WHEEL_NEGATIVE)
{
- xrdp_wm_mouse_click(self, 0, 0, 5, 0);
+ delta = (device_flags & WheelRotationMask) | ~WheelRotationMask;
+ if (delta != 0)
+ {
+ xrdp_wm_mouse_touch(self, 0, delta);
+ }
+ else
+ {
+ xrdp_wm_mouse_click(self, 0, 0, 5, 0);
+ }
}
else
{
- xrdp_wm_mouse_click(self, 0, 0, 4, 0);
+ delta = device_flags & WheelRotationMask;
+ if (delta != 0)
+ {
+ xrdp_wm_mouse_touch(self, 0, delta);
+ }
+ else
+ {
+ xrdp_wm_mouse_click(self, 0, 0, 4, 0);
+ }
}
}