From e477b56decc416b3a3b5aff66b23f95463ca1274 Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Mon, 25 Mar 2024 19:50:29 +0100 Subject: [PATCH] OnTouchListener: attach event controllers to WrapperWidget otherwise, the touch event positions would depend on the scroll offset. This fixes the glitchy vertical scrolling in ViewPager --- src/api-impl-jni/views/android_view_View.c | 2 +- src/api-impl-jni/widgets/WrapperWidget.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/api-impl-jni/views/android_view_View.c b/src/api-impl-jni/views/android_view_View.c index 81383e6d..2fcf4c95 100644 --- a/src/api-impl-jni/views/android_view_View.c +++ b/src/api-impl-jni/views/android_view_View.c @@ -171,7 +171,7 @@ void _setOnTouchListener(JNIEnv *env, jobject this, GtkWidget *widget, jobject o JNIEXPORT void JNICALL Java_android_view_View_setOnTouchListener(JNIEnv *env, jobject this, jobject on_touch_listener) { - GtkWidget *widget = GTK_WIDGET(_PTR(_GET_LONG_FIELD(this, "widget"))); + GtkWidget *widget = gtk_widget_get_parent(GTK_WIDGET(_PTR(_GET_LONG_FIELD(this, "widget")))); _setOnTouchListener(env, this, widget, on_touch_listener); } diff --git a/src/api-impl-jni/widgets/WrapperWidget.c b/src/api-impl-jni/widgets/WrapperWidget.c index df62a96d..ff15888c 100644 --- a/src/api-impl-jni/widgets/WrapperWidget.c +++ b/src/api-impl-jni/widgets/WrapperWidget.c @@ -170,8 +170,7 @@ void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject job jmethodID ontouchevent_method = _METHOD(_CLASS(jobj), "onTouchEvent", "(Landroid/view/MotionEvent;)Z"); if (ontouchevent_method != handle_cache.view.onTouchEvent) { - /* use wrapper->child since the jobject may not have the "widget" variable set yet */ - _setOnTouchListener(env, jobj, wrapper->child, NULL); + _setOnTouchListener(env, jobj, GTK_WIDGET(wrapper), NULL); } jmethodID computeScroll_method = _METHOD(_CLASS(jobj), "computeScroll", "()V");