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
This commit is contained in:
parent
257e8decfd
commit
37d1b35d66
3 changed files with 13 additions and 10 deletions
|
@ -3580,7 +3580,7 @@ SDL_GetWindowWMInfo(SDL_WindowID windowID, struct SDL_SysWMinfo *info)
|
||||||
void
|
void
|
||||||
SDL_StartTextInput(void)
|
SDL_StartTextInput(void)
|
||||||
{
|
{
|
||||||
if (_this->StartTextInput) {
|
if (_this && _this->StartTextInput) {
|
||||||
_this->StartTextInput(_this);
|
_this->StartTextInput(_this);
|
||||||
}
|
}
|
||||||
SDL_EventState(SDL_TEXTINPUT, SDL_ENABLE);
|
SDL_EventState(SDL_TEXTINPUT, SDL_ENABLE);
|
||||||
|
@ -3590,7 +3590,7 @@ SDL_StartTextInput(void)
|
||||||
void
|
void
|
||||||
SDL_StopTextInput(void)
|
SDL_StopTextInput(void)
|
||||||
{
|
{
|
||||||
if (_this->StopTextInput) {
|
if (_this && _this->StopTextInput) {
|
||||||
_this->StopTextInput(_this);
|
_this->StopTextInput(_this);
|
||||||
}
|
}
|
||||||
SDL_EventState(SDL_TEXTINPUT, SDL_DISABLE);
|
SDL_EventState(SDL_TEXTINPUT, SDL_DISABLE);
|
||||||
|
@ -3600,7 +3600,7 @@ SDL_StopTextInput(void)
|
||||||
void
|
void
|
||||||
SDL_SetTextInputRect(SDL_Rect *rect)
|
SDL_SetTextInputRect(SDL_Rect *rect)
|
||||||
{
|
{
|
||||||
if (_this->SetTextInputRect) {
|
if (_this && _this->SetTextInputRect) {
|
||||||
_this->SetTextInputRect(_this, rect);
|
_this->SetTextInputRect(_this, rect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -212,7 +212,6 @@ Cocoa_PumpEvents(_THIS)
|
||||||
case NSFlagsChanged:
|
case NSFlagsChanged:
|
||||||
Cocoa_HandleKeyEvent(_this, event);
|
Cocoa_HandleKeyEvent(_this, event);
|
||||||
/* Fall through to pass event to NSApp; er, nevermind... */
|
/* 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 */
|
/* Add to support system-wide keyboard shortcuts like CMD+Space */
|
||||||
if (([event modifierFlags] & NSCommandKeyMask) || [event type] == NSFlagsChanged)
|
if (([event modifierFlags] & NSCommandKeyMask) || [event type] == NSFlagsChanged)
|
||||||
|
|
|
@ -99,7 +99,9 @@
|
||||||
|
|
||||||
- (void) doCommandBySelector:(SEL) myselector
|
- (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
|
- (BOOL) hasMarkedText
|
||||||
|
@ -649,11 +651,13 @@ Cocoa_StopTextInput(_THIS)
|
||||||
{
|
{
|
||||||
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
|
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
|
||||||
|
|
||||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
if (data && data->fieldEdit) {
|
||||||
[data->fieldEdit removeFromSuperview];
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||||
[data->fieldEdit release];
|
[data->fieldEdit removeFromSuperview];
|
||||||
data->fieldEdit = nil;
|
[data->fieldEdit release];
|
||||||
[pool release];
|
data->fieldEdit = nil;
|
||||||
|
[pool release];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue