diff options
| author | Po Lu | 2021-11-21 03:40:36 +0000 |
|---|---|---|
| committer | Po Lu | 2021-11-21 03:40:36 +0000 |
| commit | 677859b7af143e3bb2f8f15bb47ff7b7773dc955 (patch) | |
| tree | c53f05b9ce4fd83df2d07446f7e298a21c2e4aff /src | |
| parent | b6570602cca3fffd8adcd05dadb1d64d2b1442bd (diff) | |
| download | emacs-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.cc | 4 | ||||
| -rw-r--r-- | src/haikuterm.c | 32 |
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; |