mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2026-01-09 01:51:42 +01:00
JBR-4673 Focus moves to another application on file dialog closing
(cherry picked from commit7468974488) (cherry picked from commit72a74312b7)
This commit is contained in:
@@ -114,12 +114,7 @@ final class GtkFileDialogPeer extends XDialogPeer implements FileDialogPeer {
|
||||
try {
|
||||
quit = !b;
|
||||
if (b) {
|
||||
Runnable task = () -> {
|
||||
showNativeDialog();
|
||||
standaloneWindow = 0;
|
||||
fd.setVisible(false);
|
||||
};
|
||||
new Thread(null, task, "ShowDialog", 0, false).start();
|
||||
new Thread(null, this::showNativeDialog, "ShowDialog", 0, false).start();
|
||||
} else {
|
||||
quit();
|
||||
fd.setVisible(false);
|
||||
@@ -209,4 +204,13 @@ final class GtkFileDialogPeer extends XDialogPeer implements FileDialogPeer {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by native code when GTK dialog is closing.
|
||||
*/
|
||||
private void onClose() {
|
||||
widget = 0;
|
||||
standaloneWindow = 0;
|
||||
fd.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,7 @@ static jmethodID filenameFilterCallbackMethodID = NULL;
|
||||
static jmethodID setFileInternalMethodID = NULL;
|
||||
static jfieldID widgetFieldID = NULL;
|
||||
static jmethodID setWindowMethodID = NULL;
|
||||
static jmethodID onCloseMethodID = NULL;
|
||||
|
||||
JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_initIDs
|
||||
(JNIEnv *env, jclass cx)
|
||||
@@ -66,6 +67,9 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_initIDs
|
||||
|
||||
setWindowMethodID = (*env)->GetMethodID(env, cx, "setWindow", "(J)Z");
|
||||
DASSERT(setWindowMethodID != NULL);
|
||||
|
||||
onCloseMethodID = (*env)->GetMethodID(env, cx, "onClose", "()V");
|
||||
DASSERT(onCloseMethodID != NULL);
|
||||
}
|
||||
|
||||
static gboolean filenameFilterCallback(const GtkFileFilterInfo * filter_info, gpointer obj)
|
||||
@@ -92,6 +96,8 @@ static void quit(JNIEnv * env, jobject jpeer, gboolean isSignalHandler)
|
||||
GtkWidget * dialog = (GtkWidget*)jlong_to_ptr(
|
||||
(*env)->GetLongField(env, jpeer, widgetFieldID));
|
||||
|
||||
(*env)->CallVoidMethod(env, jpeer, onCloseMethodID);
|
||||
|
||||
if (dialog != NULL)
|
||||
{
|
||||
// Callbacks from GTK signals are made within the GTK lock
|
||||
@@ -106,8 +112,6 @@ static void quit(JNIEnv * env, jobject jpeer, gboolean isSignalHandler)
|
||||
|
||||
gtk->gtk_main_quit ();
|
||||
|
||||
(*env)->SetLongField(env, jpeer, widgetFieldID, 0);
|
||||
|
||||
if (!isSignalHandler) {
|
||||
gtk->gdk_threads_leave();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user