Skip to content

Commit 7f7574a

Browse files
committed
Linux leaveNestedEventLoop now behaves like Mac and Windows
1 parent d0bb5c5 commit 7f7574a

File tree

4 files changed

+22
-1
lines changed

4 files changed

+22
-1
lines changed

modules/javafx.graphics/src/main/native-glass/gtk/GlassApplication.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ static gboolean call_runnable (gpointer data)
7171
javaVM->DetachCurrentThread();
7272
}
7373

74+
glass_maybe_leave_nested_event_loop();
75+
7476
return FALSE;
7577
}
7678

@@ -304,6 +306,7 @@ JNIEXPORT void JNICALL Java_com_sun_glass_ui_gtk_GtkApplication_enterNestedEvent
304306
(void)env;
305307
(void)obj;
306308

309+
glass_set_leave_nested_event_loop(false);
307310
gtk_main();
308311
}
309312

@@ -318,7 +321,7 @@ JNIEXPORT void JNICALL Java_com_sun_glass_ui_gtk_GtkApplication_leaveNestedEvent
318321
(void)env;
319322
(void)obj;
320323

321-
gtk_main_quit();
324+
glass_set_leave_nested_event_loop(true);
322325
}
323326

324327
/*

modules/javafx.graphics/src/main/native-glass/gtk/GlassTimer.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ static gboolean call_runnable_in_timer
9797
if (envStatus == JNI_EDETACHED) {
9898
javaVM->DetachCurrentThread();
9999
}
100+
101+
glass_maybe_leave_nested_event_loop();
100102
}
101103
return TRUE;
102104
}

modules/javafx.graphics/src/main/native-glass/gtk/glass_general.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,19 @@ gboolean check_and_clear_exception(JNIEnv *env) {
462462
return FALSE;
463463
}
464464

465+
static bool should_leave_nested_event_loop = false;
466+
467+
void glass_set_leave_nested_event_loop(bool v) {
468+
should_leave_nested_event_loop = v;
469+
}
470+
471+
void glass_maybe_leave_nested_event_loop() {
472+
if (should_leave_nested_event_loop) {
473+
gtk_main_quit();
474+
should_leave_nested_event_loop = false;
475+
}
476+
}
477+
465478
// The returned string should be freed with g_free().
466479
gchar* get_application_name() {
467480
gchar* ret = NULL;

modules/javafx.graphics/src/main/native-glass/gtk/glass_general.h

+3
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,9 @@ struct jni_exception: public std::exception {
277277

278278
#define LOG_EXCEPTION(env) check_and_clear_exception(env);
279279

280+
void glass_set_leave_nested_event_loop(bool v);
281+
void glass_maybe_leave_nested_event_loop();
282+
280283
gchar* get_application_name();
281284
void glass_throw_exception(JNIEnv * env,
282285
const char * exceptionClass,

0 commit comments

Comments
 (0)