From 6eeb6b0232d22a4734879df695e30a6844227123 Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Fri, 9 Feb 2024 10:05:22 +0100 Subject: [PATCH] move performClick implementation to WrapperWidget --- src/api-impl-jni/widgets/WrapperWidget.c | 19 +++++++++++++++++++ .../widgets/android_widget_LinearLayout.c | 16 +--------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/api-impl-jni/widgets/WrapperWidget.c b/src/api-impl-jni/widgets/WrapperWidget.c index 31b9e144..df62a96d 100644 --- a/src/api-impl-jni/widgets/WrapperWidget.c +++ b/src/api-impl-jni/widgets/WrapperWidget.c @@ -139,6 +139,17 @@ void wrapper_widget_queue_draw(WrapperWidget *wrapper) gtk_widget_queue_allocate(GTK_WIDGET(wrapper)); } +static bool on_click(GtkGestureClick *gesture, int n_press, double x, double y, jobject this) +{ + JNIEnv *env = get_jni_env(); + + bool ret = (*env)->CallBooleanMethod(env, this, handle_cache.view.performClick); + if((*env)->ExceptionCheck(env)) + (*env)->ExceptionDescribe(env); + + return ret; +} + void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject jobj) { JavaVM *jvm; @@ -167,6 +178,14 @@ void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject job if (computeScroll_method != handle_cache.view.computeScroll) { wrapper->computeScroll_method = computeScroll_method; } + + jmethodID performClick_method = _METHOD(_CLASS(jobj), "performClick", "()Z"); + if (performClick_method != handle_cache.view.performClick) { + GtkEventController *controller = GTK_EVENT_CONTROLLER(gtk_gesture_click_new()); + + g_signal_connect(controller, "released", G_CALLBACK(on_click), _REF(jobj)); + gtk_widget_add_controller(wrapper->child, controller); + } } void wrapper_widget_set_layout_params(WrapperWidget *wrapper, int width, int height) diff --git a/src/api-impl-jni/widgets/android_widget_LinearLayout.c b/src/api-impl-jni/widgets/android_widget_LinearLayout.c index fc319d42..d8c12279 100644 --- a/src/api-impl-jni/widgets/android_widget_LinearLayout.c +++ b/src/api-impl-jni/widgets/android_widget_LinearLayout.c @@ -8,15 +8,6 @@ #include "../generated_headers/android_widget_LinearLayout.h" #include "../generated_headers/android_view_ViewGroup.h" -static void on_click(GtkGestureClick *gesture, int n_press, double x, double y, jobject this) -{ - JNIEnv *env = get_jni_env(); - - (*env)->CallBooleanMethod(env, this, handle_cache.view.performClick); - if((*env)->ExceptionCheck(env)) - (*env)->ExceptionDescribe(env); -} - JNIEXPORT jlong JNICALL Java_android_widget_LinearLayout_native_1constructor(JNIEnv *env, jobject this, jobject context, jobject attrs) { int orientation = attribute_set_get_int(env, attrs, "orientation", NULL, 0); @@ -25,17 +16,12 @@ JNIEXPORT jlong JNICALL Java_android_widget_LinearLayout_native_1constructor(JNI GtkWidget *box = gtk_box_new(orientation ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL, 0); // spacing of 0 gtk_box_set_homogeneous(GTK_BOX(box), TRUE); wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), box); + wrapper_widget_set_jobject(WRAPPER_WIDGET(wrapper), env, this); gtk_widget_set_name(GTK_WIDGET(box), "LinearLayout"); if (!attrs) { gtk_widget_set_hexpand_set(box, true); // FIXME: to counteract expand on drawing areas gtk_widget_set_vexpand_set(box, true); // XXX } - if (_METHOD(_CLASS(this), "performClick", "()Z") != handle_cache.view.performClick) { - GtkEventController *controller = GTK_EVENT_CONTROLLER(gtk_gesture_click_new()); - - g_signal_connect(controller, "released", G_CALLBACK(on_click), _REF(this)); - gtk_widget_add_controller(box, controller); - } return _INTPTR(box); // struct ninepatch_t *ninepatch = ninepatch_new("/home/Mis012/Github_and_other_sources/org.happysanta.gd_29_src.tar.gz/res/drawable-mdpi/btn_br_down.9.png");