chore: replace usage of deprecated beginSheetModalForWindow API (#16994)

This commit is contained in:
Samuel Attard 2019-02-27 10:23:17 -08:00 коммит произвёл GitHub
Родитель 1bbb47be5b
Коммит e01c3615c4
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 14 добавлений и 65 удалений

Просмотреть файл

@ -13,43 +13,6 @@
#include "skia/ext/skia_utils_mac.h"
#include "ui/gfx/image/image_skia.h"
@interface ModalDelegate : NSObject {
@private
atom::MessageBoxCallback callback_;
NSAlert* alert_;
bool callEndModal_;
}
- (id)initWithCallback:(const atom::MessageBoxCallback&)callback
andAlert:(NSAlert*)alert
callEndModal:(bool)flag;
@end
@implementation ModalDelegate
- (id)initWithCallback:(const atom::MessageBoxCallback&)callback
andAlert:(NSAlert*)alert
callEndModal:(bool)flag {
if ((self = [super init])) {
callback_ = callback;
alert_ = alert;
callEndModal_ = flag;
}
return self;
}
- (void)alertDidEnd:(NSAlert*)alert
returnCode:(NSInteger)returnCode
contextInfo:(void*)contextInfo {
callback_.Run(returnCode, alert.suppressionButton.state == NSOnState);
[alert_ release];
[self release];
if (callEndModal_)
[NSApp stopModal];
}
@end
namespace atom {
namespace {
@ -125,10 +88,6 @@ NSAlert* CreateNSAlert(NativeWindow* parent_window,
return alert;
}
void SetReturnCode(int* ret_code, int result, bool checkbox_checked) {
*ret_code = result;
}
} // namespace
int ShowMessageBox(NativeWindow* parent_window,
@ -150,20 +109,14 @@ int ShowMessageBox(NativeWindow* parent_window,
if (!parent_window)
return [[alert autorelease] runModal];
int ret_code = -1;
ModalDelegate* delegate = [[ModalDelegate alloc]
initWithCallback:base::Bind(&SetReturnCode, &ret_code)
andAlert:alert
callEndModal:true];
__block int ret_code = -1;
NSWindow* window = parent_window->GetNativeWindow().GetNativeNSWindow();
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[alert beginSheetModalForWindow:window
modalDelegate:delegate
didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:)
contextInfo:nil];
#pragma clang diagnostic pop
completionHandler:^(NSModalResponse response) {
ret_code = response;
[NSApp stopModal];
}];
[NSApp runModalForWindow:window];
return ret_code;
@ -192,21 +145,17 @@ void ShowMessageBox(NativeWindow* parent_window,
int ret = [[alert autorelease] runModal];
callback.Run(ret, alert.suppressionButton.state == NSOnState);
} else {
ModalDelegate* delegate = [[ModalDelegate alloc] initWithCallback:callback
andAlert:alert
callEndModal:false];
NSWindow* window =
parent_window ? parent_window->GetNativeWindow().GetNativeNSWindow()
: nil;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[alert
beginSheetModalForWindow:window
modalDelegate:delegate
didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:)
contextInfo:nil];
#pragma clang diagnostic pop
// Duplicate the callback object here since c is a reference and gcd would
// only store the pointer, by duplication we can force gcd to store a copy.
__block MessageBoxCallback callback_ = callback;
[alert beginSheetModalForWindow:window
completionHandler:^(NSModalResponse response) {
callback_.Run(response,
alert.suppressionButton.state == NSOnState);
}];
}
}

Просмотреть файл

@ -171,7 +171,7 @@ It returns the index of the clicked button.
The `browserWindow` argument allows the dialog to attach itself to a parent window, making it modal.
If a `callback` is passed, the dialog will not block the process. The API call
If the `callback` and `browserWindow` arguments are passed, the dialog will not block the process. The API call
will be asynchronous and the result will be passed via `callback(response)`.
### `dialog.showErrorBox(title, content)`