Mac: [NSApp keyWindow] is not valid in windowDidBecomeKey:

This fixes weird behavior on Mac where our first responder reverts to the window
itself, rather than the SDLTranslatorResponder, after the window has lost focus
once. This causes Escape to call cancelOperation: on the NSWindow, which by
default removes our fullscreen-ness.

When someone has turned off SDL_TEXTINPUT we should probably set another initial
responder that handles the Escape behavior, so that SDL_TEXTINPUT doesn't change
fullscreen behavior (and possibly other behavior) like it does now.
This commit is contained in:
J?rgen P. Tjern? 2014-01-29 18:37:23 -08:00
parent 109fe0e0dc
commit 366b1727bb
1 changed files with 7 additions and 2 deletions

View File

@ -506,7 +506,12 @@ Cocoa_StartTextInput(_THIS)
{ {
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSView *parentView = [[NSApp keyWindow] contentView]; SDL_Window *window = SDL_GetKeyboardFocus();
NSWindow *nswindow = nil;
if (window)
nswindow = ((SDL_WindowData*)window->driverdata)->nswindow;
NSView *parentView = [nswindow contentView];
/* We only keep one field editor per process, since only the front most /* We only keep one field editor per process, since only the front most
* window can receive text input events, so it make no sense to keep more * window can receive text input events, so it make no sense to keep more
@ -523,7 +528,7 @@ Cocoa_StartTextInput(_THIS)
/* DEBUG_IME(@"add fieldEdit to window contentView"); */ /* DEBUG_IME(@"add fieldEdit to window contentView"); */
[data->fieldEdit removeFromSuperview]; [data->fieldEdit removeFromSuperview];
[parentView addSubview: data->fieldEdit]; [parentView addSubview: data->fieldEdit];
[[NSApp keyWindow] makeFirstResponder: data->fieldEdit]; [nswindow makeFirstResponder: data->fieldEdit];
} }
[pool release]; [pool release];