Commit 8e0540e5 authored by Sam Lantinga's avatar Sam Lantinga

Date: Sat, 14 Dec 2002 13:33:05 -0500

From: Darrell Walisser
Subject: Re: crash in SDL / OSX

> Yes, compose keys and other "dead" keys should have unicode 0.
> As a hack, if you get multiple composed characters, you can send the
> sequence with a valid unicode and a keysym of 0.  It's because of
> things like this that I'm separating the key and char events in SDL 2.0

I've done this and here's the patch.

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40562
parent e2cbed54
...@@ -206,25 +206,51 @@ static void QZ_InitOSKeymap (_THIS) { ...@@ -206,25 +206,51 @@ static void QZ_InitOSKeymap (_THIS) {
static void QZ_DoKey (_THIS, int state, NSEvent *event) { static void QZ_DoKey (_THIS, int state, NSEvent *event) {
NSString *chars; NSString *chars;
int i; unsigned int numChars;
SDL_keysym key; SDL_keysym key;
/* /*
An event can contain multiple characters A key event can contain multiple characters,
I'll ignore this fact for now, since there or no characters at all. In most cases, it
is only one virtual key code per event, so will contain a single character. If it contains
no good way to handle this. 0 characters, we'll use 0 as the unicode. If it
contains multiple characters, we'll use 0 as
the scancode/keysym.
*/ */
chars = [ event characters ]; chars = [ event characters ];
for (i =0; i < 1 /*[ chars length ] */; i++) { numChars = [ chars length ];
if (numChars == 1) {
key.scancode = [ event keyCode ];
key.sym = keymap [ key.scancode ];
key.unicode = [ chars characterAtIndex:0 ];
key.mod = KMOD_NONE;
SDL_PrivateKeyboard (state, &key);
}
else if (numChars == 0) {
key.scancode = [ event keyCode ]; key.scancode = [ event keyCode ];
key.sym = keymap [ key.scancode ]; key.sym = keymap [ key.scancode ];
key.unicode = [ chars characterAtIndex:i]; key.unicode = 0;
key.mod = KMOD_NONE; key.mod = KMOD_NONE;
SDL_PrivateKeyboard (state, &key); SDL_PrivateKeyboard (state, &key);
} }
else /* (numChars > 1) */ {
int i;
for (i = 0; i < numChars; i++) {
key.scancode = 0;
key.sym = 0;
key.unicode = [ chars characterAtIndex:i];
key.mod = KMOD_NONE;
SDL_PrivateKeyboard (state, &key);
}
}
} }
static void QZ_DoModifiers (_THIS, unsigned int newMods) { static void QZ_DoModifiers (_THIS, unsigned int newMods) {
......
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
#include <OpenGL/OpenGL.h> #include <OpenGL/OpenGL.h>
#include <Carbon/Carbon.h> #include <Carbon/Carbon.h>
#include <QuickTime/QuickTime.h> #include <QuickTime/QuickTime.h>
#include <IOKit/IOKitLib.h> /* For powersave handling */
#include "SDL_video.h" #include "SDL_video.h"
#include "SDL_error.h" #include "SDL_error.h"
...@@ -308,4 +309,4 @@ static SDL_GrabMode QZ_GrabInput (_THIS, SDL_GrabMode grab_mode); ...@@ -308,4 +309,4 @@ static SDL_GrabMode QZ_GrabInput (_THIS, SDL_GrabMode grab_mode);
/* YUV functions */ /* YUV functions */
static SDL_Overlay* QZ_CreateYUVOverlay (_THIS, int width, int height, static SDL_Overlay* QZ_CreateYUVOverlay (_THIS, int width, int height,
Uint32 format, SDL_Surface *display); Uint32 format, SDL_Surface *display);
\ No newline at end of file
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