From 45b04c9b247313c2b48771c91ebeebe2dfb2fc54 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 19 Jan 2010 07:28:51 +0000 Subject: [PATCH] From: Jjgod Jiang Date: Mon, 18 Jan 2010 17:46:35 +0800 Subject: [PATCH] Polish text input handling for Mac OS X - Prevent crash caused by uninitialized video data - Prevent beeping caused by unhandled Cocoa selectors (like moveUp: moveDown:, etc.) --- src/video/SDL_video.c | 6 +++--- src/video/cocoa/SDL_cocoaevents.m | 1 - src/video/cocoa/SDL_cocoakeyboard.m | 16 ++++++++++------ 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index fd9ab5c44..f43361a29 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -3580,7 +3580,7 @@ SDL_GetWindowWMInfo(SDL_WindowID windowID, struct SDL_SysWMinfo *info) void SDL_StartTextInput(void) { - if (_this->StartTextInput) { + if (_this && _this->StartTextInput) { _this->StartTextInput(_this); } SDL_EventState(SDL_TEXTINPUT, SDL_ENABLE); @@ -3590,7 +3590,7 @@ SDL_StartTextInput(void) void SDL_StopTextInput(void) { - if (_this->StopTextInput) { + if (_this && _this->StopTextInput) { _this->StopTextInput(_this); } SDL_EventState(SDL_TEXTINPUT, SDL_DISABLE); @@ -3600,7 +3600,7 @@ SDL_StopTextInput(void) void SDL_SetTextInputRect(SDL_Rect *rect) { - if (_this->SetTextInputRect) { + if (_this && _this->SetTextInputRect) { _this->SetTextInputRect(_this, rect); } } diff --git a/src/video/cocoa/SDL_cocoaevents.m b/src/video/cocoa/SDL_cocoaevents.m index befe3a9e9..d833400e9 100644 --- a/src/video/cocoa/SDL_cocoaevents.m +++ b/src/video/cocoa/SDL_cocoaevents.m @@ -212,7 +212,6 @@ - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sende case NSFlagsChanged: Cocoa_HandleKeyEvent(_this, event); /* Fall through to pass event to NSApp; er, nevermind... */ - /* FIXME: Find a way to stop the beeping, using delegate */ /* Add to support system-wide keyboard shortcuts like CMD+Space */ if (([event modifierFlags] & NSCommandKeyMask) || [event type] == NSFlagsChanged) diff --git a/src/video/cocoa/SDL_cocoakeyboard.m b/src/video/cocoa/SDL_cocoakeyboard.m index 2721cca37..7dd4e154c 100644 --- a/src/video/cocoa/SDL_cocoakeyboard.m +++ b/src/video/cocoa/SDL_cocoakeyboard.m @@ -99,7 +99,9 @@ - (void) insertText:(id) aString - (void) doCommandBySelector:(SEL) myselector { - [super doCommandBySelector: myselector]; + // No need to do anything since we are not using Cocoa + // selectors to handle special keys, instead we use SDL + // key events to do the same job. } - (BOOL) hasMarkedText @@ -649,11 +651,13 @@ - (NSArray *) validAttributesForMarkedText { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - [data->fieldEdit removeFromSuperview]; - [data->fieldEdit release]; - data->fieldEdit = nil; - [pool release]; + if (data && data->fieldEdit) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + [data->fieldEdit removeFromSuperview]; + [data->fieldEdit release]; + data->fieldEdit = nil; + [pool release]; + } } void