From 13b86598e842b3041fb4a8dfc843dc7fd43438d3 Mon Sep 17 00:00:00 2001 From: Heilig Benedek Date: Wed, 13 Sep 2017 01:26:31 +0200 Subject: [PATCH] don't show osr dummy window when dialog is shown on mac --- .../browser/atom_javascript_dialog_manager.cc | 3 ++- atom/browser/ui/message_box_mac.mm | 23 ++++++++++++------- lib/browser/rpc-server.js | 16 +++++++++---- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/atom/browser/atom_javascript_dialog_manager.cc b/atom/browser/atom_javascript_dialog_manager.cc index c593b2bfba1d..23a7ee71298d 100644 --- a/atom/browser/atom_javascript_dialog_manager.cc +++ b/atom/browser/atom_javascript_dialog_manager.cc @@ -41,7 +41,8 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( buttons.push_back("Cancel"); } - atom::ShowMessageBox(NativeWindow::FromWebContents(web_contents), + atom::ShowMessageBox(api_web_contents_->IsOffScreen() ? nullptr : + NativeWindow::FromWebContents(web_contents), atom::MessageBoxType::MESSAGE_BOX_TYPE_NONE, buttons, -1, 0, atom::MessageBoxOptions::MESSAGE_BOX_NONE, "", base::UTF16ToUTF8(message_text), "", "", false, diff --git a/atom/browser/ui/message_box_mac.mm b/atom/browser/ui/message_box_mac.mm index f752f2945c2e..3429b667e735 100644 --- a/atom/browser/ui/message_box_mac.mm +++ b/atom/browser/ui/message_box_mac.mm @@ -181,15 +181,22 @@ void ShowMessageBox(NativeWindow* parent_window, NSAlert* alert = CreateNSAlert(parent_window, type, buttons, default_id, cancel_id, title, message, detail, checkbox_label, checkbox_checked, icon); - ModalDelegate* delegate = [[ModalDelegate alloc] initWithCallback:callback - andAlert:alert - callEndModal:false]; - NSWindow* window = parent_window ? parent_window->GetNativeWindow() : nil; - [alert beginSheetModalForWindow:window - modalDelegate:delegate - didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) - contextInfo:nil]; + // Use runModal for synchronous alert without parent, since we don't have a + // window to wait for. + if (!parent_window || !parent_window->GetNativeWindow()) { + [[alert autorelease] runModal]; + } else { + ModalDelegate* delegate = [[ModalDelegate alloc] initWithCallback:callback + andAlert:alert + callEndModal:false]; + + NSWindow* window = parent_window ? parent_window->GetNativeWindow() : nil; + [alert beginSheetModalForWindow:window + modalDelegate:delegate + didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) + contextInfo:nil]; + } } void ShowErrorBox(const base::string16& title, const base::string16& content) { diff --git a/lib/browser/rpc-server.js b/lib/browser/rpc-server.js index 623827cd2a3f..fc8f31e1f291 100644 --- a/lib/browser/rpc-server.js +++ b/lib/browser/rpc-server.js @@ -443,11 +443,15 @@ ipcMain.on('ELECTRON_BROWSER_WINDOW_ALERT', function (event, message, title) { if (message == null) message = '' if (title == null) title = '' - event.returnValue = electron.dialog.showMessageBox(event.sender.getOwnerBrowserWindow(), { + const dialogProperties = { message: `${message}`, title: `${title}`, buttons: ['OK'] - }) + } + event.returnValue = event.sender.isOffscreen() ? + electron.dialog.showMessageBox(dialogProperties) : + electron.dialog.showMessageBox( + event.sender.getOwnerBrowserWindow(), dialogProperties) }) // Implements window.confirm(message, title) @@ -455,12 +459,16 @@ ipcMain.on('ELECTRON_BROWSER_WINDOW_CONFIRM', function (event, message, title) { if (message == null) message = '' if (title == null) title = '' - event.returnValue = !electron.dialog.showMessageBox(event.sender.getOwnerBrowserWindow(), { + const dialogProperties = { message: `${message}`, title: `${title}`, buttons: ['OK', 'Cancel'], cancelId: 1 - }) + } + event.returnValue = !(event.sender.isOffscreen() ? + electron.dialog.showMessageBox(dialogProperties) : + electron.dialog.showMessageBox( + event.sender.getOwnerBrowserWindow(), dialogProperties)) }) // Implements window.close()