21 #include "../../SDL_internal.h"
23 #if SDL_VIDEO_DRIVER_COCOA
30 @interface SDLMessageBoxPresenter : NSObject {
36 - (
void) alertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(
void *)contextInfo;
39 @implementation SDLMessageBoxPresenter
57 - (
void)showAlert:(NSAlert*)alert
60 #ifdef MAC_OS_X_VERSION_10_9
61 if ([alert respondsToSelector:
@selector(beginSheetModalForWindow:completionHandler:)]) {
62 [alert beginSheetModalForWindow:nswindow completionHandler:^(NSModalResponse returnCode) {
68 #if MAC_OS_X_VERSION_MIN_REQUIRED < 1090
69 [alert beginSheetModalForWindow:nswindow modalDelegate:self didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) contextInfo:nil];
80 clicked = [alert runModal];
84 - (
void) alertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(
void *)contextInfo
99 NSAlert* alert = [[[NSAlert alloc] init] autorelease];
102 [alert setAlertStyle:NSAlertStyleCritical];
104 [alert setAlertStyle:NSAlertStyleWarning];
106 [alert setAlertStyle:NSAlertStyleInformational];
109 [alert setMessageText:[NSString stringWithUTF8String:messageboxdata->title]];
110 [alert setInformativeText:[NSString stringWithUTF8String:messageboxdata->message]];
119 sdlButton = &messageboxdata->buttons[messageboxdata->numbuttons - 1 - i];
121 sdlButton = &messageboxdata->buttons[i];
124 button = [alert addButtonWithTitle:[NSString stringWithUTF8String:sdlButton->
text]];
126 [button setKeyEquivalent:
@"\r"];
128 [button setKeyEquivalent:
@"\033"];
130 [button setKeyEquivalent:
@""];
134 SDLMessageBoxPresenter* presenter = [[[SDLMessageBoxPresenter alloc] initWithParentWindow:messageboxdata->window] autorelease];
136 [presenter performSelectorOnMainThread:@selector(showAlert:)
141 NSInteger clicked = presenter->clicked;
142 if (clicked >= NSAlertFirstButtonReturn) {
143 clicked -= NSAlertFirstButtonReturn;
145 clicked = messageboxdata->numbuttons - 1 - clicked;
147 *buttonid = buttons[clicked].buttonid;
149 returnValue =
SDL_SetError(
"Did not get a valid `clicked button' id: %ld", (
long)clicked);