diff options
| author | Po Lu | 2021-12-08 10:04:31 +0800 |
|---|---|---|
| committer | Po Lu | 2021-12-08 10:04:31 +0800 |
| commit | 5671709590e778cb3af83b2aa33bd112e1fd66fe (patch) | |
| tree | 88de24ea921f7efc74215a3088e172ed947ff762 /src | |
| parent | 176c63287ffdf56634984494f6610102737f393e (diff) | |
| download | emacs-5671709590e778cb3af83b2aa33bd112e1fd66fe.tar.gz emacs-5671709590e778cb3af83b2aa33bd112e1fd66fe.zip | |
Send scroll stop events to xwidgets correctly
* src/xterm.c (handle_one_xevent): Record stop events manually.
* src/xwidget.h (xwidget_scroll):
* src/xwidget.c (xwidget_scroll): New parameter `stop_p'.
Diffstat (limited to 'src')
| -rw-r--r-- | src/xterm.c | 9 | ||||
| -rw-r--r-- | src/xwidget.c | 7 | ||||
| -rw-r--r-- | src/xwidget.h | 2 |
3 files changed, 11 insertions, 7 deletions
diff --git a/src/xterm.c b/src/xterm.c index 3f7b9560345..ae0daa79f31 100644 --- a/src/xterm.c +++ b/src/xterm.c | |||
| @@ -9851,6 +9851,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, | |||
| 9851 | XIValuatorState *states; | 9851 | XIValuatorState *states; |
| 9852 | double *values; | 9852 | double *values; |
| 9853 | bool found_valuator = false; | 9853 | bool found_valuator = false; |
| 9854 | bool any_stop_p = false; | ||
| 9854 | 9855 | ||
| 9855 | /* A fake XMotionEvent for x_note_mouse_movement. */ | 9856 | /* A fake XMotionEvent for x_note_mouse_movement. */ |
| 9856 | XMotionEvent ev; | 9857 | XMotionEvent ev; |
| @@ -10003,9 +10004,13 @@ handle_one_xevent (struct x_display_info *dpyinfo, | |||
| 10003 | if (val->horizontal) | 10004 | if (val->horizontal) |
| 10004 | xv_total_x += delta; | 10005 | xv_total_x += delta; |
| 10005 | else | 10006 | else |
| 10006 | xv_total_y += -delta; | 10007 | xv_total_y += delta; |
| 10007 | 10008 | ||
| 10008 | found_valuator = true; | 10009 | found_valuator = true; |
| 10010 | |||
| 10011 | if (delta == 0.0) | ||
| 10012 | any_stop_p = true; | ||
| 10013 | |||
| 10009 | continue; | 10014 | continue; |
| 10010 | } | 10015 | } |
| 10011 | #endif | 10016 | #endif |
| @@ -10092,7 +10097,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, | |||
| 10092 | if (found_valuator) | 10097 | if (found_valuator) |
| 10093 | xwidget_scroll (xv, xev->event_x, xev->event_y, | 10098 | xwidget_scroll (xv, xev->event_x, xev->event_y, |
| 10094 | xv_total_x, xv_total_y, xev->mods.effective, | 10099 | xv_total_x, xv_total_y, xev->mods.effective, |
| 10095 | xev->time); | 10100 | xev->time, any_stop_p); |
| 10096 | else | 10101 | else |
| 10097 | xwidget_motion_notify (xv, xev->event_x, xev->event_y, | 10102 | xwidget_motion_notify (xv, xev->event_x, xev->event_y, |
| 10098 | xev->mods.effective, xev->time); | 10103 | xev->mods.effective, xev->time); |
diff --git a/src/xwidget.c b/src/xwidget.c index 9b9f364ce40..d8510ef9286 100644 --- a/src/xwidget.c +++ b/src/xwidget.c | |||
| @@ -1062,7 +1062,8 @@ xwidget_motion_notify (struct xwidget_view *view, | |||
| 1062 | 1062 | ||
| 1063 | void | 1063 | void |
| 1064 | xwidget_scroll (struct xwidget_view *view, double x, double y, | 1064 | xwidget_scroll (struct xwidget_view *view, double x, double y, |
| 1065 | double dx, double dy, uint state, Time time) | 1065 | double dx, double dy, uint state, Time time, |
| 1066 | bool stop_p) | ||
| 1066 | { | 1067 | { |
| 1067 | GdkEvent *xg_event; | 1068 | GdkEvent *xg_event; |
| 1068 | GtkWidget *target; | 1069 | GtkWidget *target; |
| @@ -1097,9 +1098,7 @@ xwidget_scroll (struct xwidget_view *view, double x, double y, | |||
| 1097 | xg_event->scroll.delta_x = dx; | 1098 | xg_event->scroll.delta_x = dx; |
| 1098 | xg_event->scroll.delta_y = dy; | 1099 | xg_event->scroll.delta_y = dy; |
| 1099 | xg_event->scroll.device = find_suitable_pointer (view->frame); | 1100 | xg_event->scroll.device = find_suitable_pointer (view->frame); |
| 1100 | 1101 | xg_event->scroll.is_stop = stop_p; | |
| 1101 | if (!(fabs (dx) > 0) || !(fabs (dy) > 0)) | ||
| 1102 | xg_event->scroll.is_stop = TRUE; | ||
| 1103 | 1102 | ||
| 1104 | g_object_ref (xg_event->any.window); | 1103 | g_object_ref (xg_event->any.window); |
| 1105 | 1104 | ||
diff --git a/src/xwidget.h b/src/xwidget.h index f2d497c0920..a03006fde9a 100644 --- a/src/xwidget.h +++ b/src/xwidget.h | |||
| @@ -199,7 +199,7 @@ extern void xwidget_motion_or_crossing (struct xwidget_view *, | |||
| 199 | extern void xwidget_motion_notify (struct xwidget_view *, double, | 199 | extern void xwidget_motion_notify (struct xwidget_view *, double, |
| 200 | double, uint, Time); | 200 | double, uint, Time); |
| 201 | extern void xwidget_scroll (struct xwidget_view *, double, double, | 201 | extern void xwidget_scroll (struct xwidget_view *, double, double, |
| 202 | double, double, uint, Time); | 202 | double, double, uint, Time, bool); |
| 203 | #endif | 203 | #endif |
| 204 | #endif | 204 | #endif |
| 205 | #else | 205 | #else |