From b9b46847401ff26e19a79399790614450b9442ea Mon Sep 17 00:00:00 2001 From: Tom Schoonjans Date: Mon, 31 Jul 2017 21:28:42 +0100 Subject: [PATCH] GtkFileChooserNativeQuartz: restore parent focus after closing dialog Tested for both modal and non-modal dialogs https://bugzilla.gnome.org/show_bug.cgi?id=785306 --- gtk/gtkfilechoosernativequartz.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/gtk/gtkfilechoosernativequartz.c b/gtk/gtkfilechoosernativequartz.c index f210c1db94..65f2579b90 100644 --- a/gtk/gtkfilechoosernativequartz.c +++ b/gtk/gtkfilechoosernativequartz.c @@ -48,6 +48,7 @@ typedef struct { NSSavePanel *panel; NSWindow *parent; + NSWindow *key_window; gboolean skip_response; gboolean save; gboolean folder; @@ -350,6 +351,16 @@ filechooser_quartz_launch (FileChooserQuartzData *data) self->mode_data = NULL; + if (data->parent) + { + [data->panel orderOut:nil]; + [data->parent makeKeyAndOrderFront:nil]; + } + else + { + [data->key_window makeKeyAndOrderFront:nil]; + } + if (!data->skip_response) { g_slist_free_full (self->custom_files, g_object_unref); @@ -365,12 +376,10 @@ filechooser_quartz_launch (FileChooserQuartzData *data) if (data->parent != NULL && data->modal) { - [data->panel setLevel:NSModalPanelWindowLevel]; [data->panel beginSheetModalForWindow:data->parent completionHandler:handler]; } else { - [data->panel setLevel:NSModalPanelWindowLevel]; [data->panel beginWithCompletionHandler:handler]; } @@ -543,6 +552,8 @@ gtk_file_chooser_native_quartz_show (GtkFileChooserNative *self) data->current_name = g_strdup (self->current_name); } + data->key_window = [NSApp keyWindow]; + return filechooser_quartz_launch(data); } @@ -560,8 +571,15 @@ gtk_file_chooser_native_quartz_hide (GtkFileChooserNative *self) [data->panel orderBack:nil]; [data->panel close]; + if (data->parent) - [data->parent orderFront:nil]; + { + [data->parent makeKeyAndOrderFront:nil]; + } + else + { + [data->key_window makeKeyAndOrderFront:nil]; + } data->panel = NULL; }