From: Jjgod Jiang
authorSam Lantinga <slouken@libsdl.org>
Tue, 19 Jan 2010 07:28:51 +0000
changeset 3683 4c5ab6841fdc
parent 3682 e4009cea0e82
child 3684 cc564f08884f
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
src/video/cocoa/SDL_cocoaevents.m
src/video/cocoa/SDL_cocoakeyboard.m
--- a/src/video/SDL_video.c	Tue Jan 19 05:31:16 2010 +0000
+++ b/src/video/SDL_video.c	Tue Jan 19 07:28:51 2010 +0000
@@ -3580,7 +3580,7 @@
 void
 SDL_StartTextInput(void)
 {
-    if (_this->StartTextInput) {
+    if (_this && _this->StartTextInput) {
         _this->StartTextInput(_this);
     }
     SDL_EventState(SDL_TEXTINPUT, SDL_ENABLE);
@@ -3590,7 +3590,7 @@
 void
 SDL_StopTextInput(void)
 {
-    if (_this->StopTextInput) {
+    if (_this && _this->StopTextInput) {
         _this->StopTextInput(_this);
     }
     SDL_EventState(SDL_TEXTINPUT, SDL_DISABLE);
@@ -3600,7 +3600,7 @@
 void
 SDL_SetTextInputRect(SDL_Rect *rect)
 {
-    if (_this->SetTextInputRect) {
+    if (_this && _this->SetTextInputRect) {
         _this->SetTextInputRect(_this, rect);
     }
 }
--- a/src/video/cocoa/SDL_cocoaevents.m	Tue Jan 19 05:31:16 2010 +0000
+++ b/src/video/cocoa/SDL_cocoaevents.m	Tue Jan 19 07:28:51 2010 +0000
@@ -212,7 +212,6 @@
         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)
--- a/src/video/cocoa/SDL_cocoakeyboard.m	Tue Jan 19 05:31:16 2010 +0000
+++ b/src/video/cocoa/SDL_cocoakeyboard.m	Tue Jan 19 07:28:51 2010 +0000
@@ -99,7 +99,9 @@
 
 - (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 @@
 {
     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