Commit 37d1b35d authored by Sam Lantinga's avatar Sam Lantinga

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.)

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404436
parent 257e8dec
......@@ -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);
}
}
......
......@@ -212,7 +212,6 @@ Cocoa_PumpEvents(_THIS)
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)
......
......@@ -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 @@ Cocoa_StopTextInput(_THIS)
{
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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment