From 21627aecad8410392665940a40836d2701b70c8e Mon Sep 17 00:00:00 2001 From: Mis012 Date: Wed, 17 Apr 2024 19:27:16 +0200 Subject: [PATCH] ANativeWindow: make the while loop hack work on main thread --- src/api-impl-jni/android_os_MessageQueue.c | 2 +- src/libandroid/native_window.c | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/api-impl-jni/android_os_MessageQueue.c b/src/api-impl-jni/android_os_MessageQueue.c index 5ee9c6e5..c78e2cf3 100644 --- a/src/api-impl-jni/android_os_MessageQueue.c +++ b/src/api-impl-jni/android_os_MessageQueue.c @@ -16,7 +16,7 @@ struct native_message_queue { bool is_main_thread; }; -static GThread *main_thread_id; +GThread *main_thread_id; void prepare_main_looper(JNIEnv* env) { main_thread_id = g_thread_self(); diff --git a/src/libandroid/native_window.c b/src/libandroid/native_window.c index e35c8376..2f4470cc 100644 --- a/src/libandroid/native_window.c +++ b/src/libandroid/native_window.c @@ -245,6 +245,7 @@ static void on_resize(GtkWidget* self, gint width, gint height, EGLNativeWindowT } } +extern GThread *main_thread_id; ANativeWindow * ANativeWindow_fromSurface(JNIEnv* env, jobject surface) { int width; @@ -265,6 +266,8 @@ ANativeWindow * ANativeWindow_fromSurface(JNIEnv* env, jobject surface) GtkWidget *window = GTK_WIDGET(gtk_widget_get_native(surface_view_widget)); while( (width = gtk_widget_get_width(surface_view_widget)) == 0 ) { // FIXME: UGLY: this loop waits until the SurfaceView widget gets mapped + if(g_thread_self() == main_thread_id) + g_main_context_iteration(g_main_context_default(), false); } height = gtk_widget_get_height(surface_view_widget);