aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPo Lu2021-11-21 03:40:36 +0000
committerPo Lu2021-11-21 03:40:36 +0000
commit677859b7af143e3bb2f8f15bb47ff7b7773dc955 (patch)
treec53f05b9ce4fd83df2d07446f7e298a21c2e4aff /src
parentb6570602cca3fffd8adcd05dadb1d64d2b1442bd (diff)
downloademacs-677859b7af143e3bb2f8f15bb47ff7b7773dc955.tar.gz
emacs-677859b7af143e3bb2f8f15bb47ff7b7773dc955.zip
Add pixel delta support for wheel events on Haiku
* src/haiku_support.cc (EmacsWindow.MessageReceived): Stop adjusting scroll deltas. * src/haikuterm.c (haiku_read_socket): Handle pixel deltas correctly.
Diffstat (limited to 'src')
-rw-r--r--src/haiku_support.cc4
-rw-r--r--src/haikuterm.c32
2 files changed, 16 insertions, 20 deletions
diff --git a/src/haiku_support.cc b/src/haiku_support.cc
index 99d4ee79140..5f9fe7e234f 100644
--- a/src/haiku_support.cc
+++ b/src/haiku_support.cc
@@ -631,8 +631,8 @@ public:
631 if (msg->FindFloat ("be:wheel_delta_x", &dx) == B_OK && 631 if (msg->FindFloat ("be:wheel_delta_x", &dx) == B_OK &&
632 msg->FindFloat ("be:wheel_delta_y", &dy) == B_OK) 632 msg->FindFloat ("be:wheel_delta_y", &dy) == B_OK)
633 { 633 {
634 rq.delta_x = dx * 10; 634 rq.delta_x = dx;
635 rq.delta_y = dy * 10; 635 rq.delta_y = dy;
636 636
637 haiku_write (WHEEL_MOVE_EVENT, &rq); 637 haiku_write (WHEEL_MOVE_EVENT, &rq);
638 }; 638 };
diff --git a/src/haikuterm.c b/src/haikuterm.c
index 05fbd1021b8..6b3c5dbe483 100644
--- a/src/haikuterm.c
+++ b/src/haikuterm.c
@@ -3005,34 +3005,26 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit)
3005 if (signbit (py) != signbit (b->delta_y)) 3005 if (signbit (py) != signbit (b->delta_y))
3006 py = 0; 3006 py = 0;
3007 3007
3008 px += b->delta_x; 3008 px += b->delta_x * pow (FRAME_PIXEL_HEIGHT (f), 2.0 / 3.0);
3009 py += b->delta_y; 3009 py += b->delta_y * pow (FRAME_PIXEL_HEIGHT (f), 2.0 / 3.0);
3010 3010
3011 if (fabsf (py) >= FRAME_LINE_HEIGHT (f)) 3011 if (fabsf (py) >= FRAME_LINE_HEIGHT (f)
3012 || fabsf (px) >= FRAME_COLUMN_WIDTH (f)
3013 || !x_coalesce_scroll_events)
3012 { 3014 {
3013 inev.kind = WHEEL_EVENT; 3015 inev.kind = (fabsf (px) > fabs (py)
3016 ? HORIZ_WHEEL_EVENT
3017 : WHEEL_EVENT);
3014 inev.code = 0; 3018 inev.code = 0;
3015 3019
3016 XSETINT (inev.x, x); 3020 XSETINT (inev.x, x);
3017 XSETINT (inev.y, y); 3021 XSETINT (inev.y, y);
3018 XSETINT (inev.arg, lrint (fabsf (py) / FRAME_LINE_HEIGHT (f))); 3022 inev.arg = list3 (Qnil, make_float (px),
3023 make_float (py));
3019 XSETFRAME (inev.frame_or_window, f); 3024 XSETFRAME (inev.frame_or_window, f);
3020 3025
3021 inev.modifiers |= signbit (py) ? up_modifier : down_modifier; 3026 inev.modifiers |= signbit (py) ? up_modifier : down_modifier;
3022 py = 0.0f; 3027 py = 0.0f;
3023 }
3024
3025 if (fabsf (px) >= FRAME_COLUMN_WIDTH (f))
3026 {
3027 inev2.kind = HORIZ_WHEEL_EVENT;
3028 inev2.code = 0;
3029
3030 XSETINT (inev2.x, x);
3031 XSETINT (inev2.y, y);
3032 XSETINT (inev2.arg, lrint (fabsf (px) / FRAME_COLUMN_WIDTH (f)));
3033 XSETFRAME (inev2.frame_or_window, f);
3034
3035 inev2.modifiers |= signbit (px) ? up_modifier : down_modifier;
3036 px = 0.0f; 3028 px = 0.0f;
3037 } 3029 }
3038 3030
@@ -3548,6 +3540,10 @@ syms_of_haikuterm (void)
3548 doc: /* SKIP: real doc in xterm.c. */); 3540 doc: /* SKIP: real doc in xterm.c. */);
3549 Vx_toolkit_scroll_bars = Qt; 3541 Vx_toolkit_scroll_bars = Qt;
3550 3542
3543 DEFVAR_BOOL ("x-coalesce-scroll-events", x_coalesce_scroll_events,
3544 doc: /* SKIP: real doc in xterm.c. */);
3545 x_coalesce_scroll_events = true;
3546
3551 DEFVAR_BOOL ("haiku-debug-on-fatal-error", haiku_debug_on_fatal_error, 3547 DEFVAR_BOOL ("haiku-debug-on-fatal-error", haiku_debug_on_fatal_error,
3552 doc: /* If non-nil, Emacs will launch the system debugger upon a fatal error. */); 3548 doc: /* If non-nil, Emacs will launch the system debugger upon a fatal error. */);
3553 haiku_debug_on_fatal_error = 1; 3549 haiku_debug_on_fatal_error = 1;