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
This commit is contained in:
parent
e2cbed54eb
commit
8e0540e5cf
2 changed files with 38 additions and 11 deletions
|
@ -206,25 +206,51 @@ static void QZ_InitOSKeymap (_THIS) {
|
|||
static void QZ_DoKey (_THIS, int state, NSEvent *event) {
|
||||
|
||||
NSString *chars;
|
||||
int i;
|
||||
unsigned int numChars;
|
||||
SDL_keysym key;
|
||||
|
||||
|
||||
/*
|
||||
An event can contain multiple characters
|
||||
I'll ignore this fact for now, since there
|
||||
is only one virtual key code per event, so
|
||||
no good way to handle this.
|
||||
A key event can contain multiple characters,
|
||||
or no characters at all. In most cases, it
|
||||
will contain a single character. If it contains
|
||||
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 ];
|
||||
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:i];
|
||||
key.mod = KMOD_NONE;
|
||||
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.sym = keymap [ key.scancode ];
|
||||
key.unicode = 0;
|
||||
key.mod = KMOD_NONE;
|
||||
|
||||
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) {
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
#include <OpenGL/OpenGL.h>
|
||||
#include <Carbon/Carbon.h>
|
||||
#include <QuickTime/QuickTime.h>
|
||||
#include <IOKit/IOKitLib.h> /* For powersave handling */
|
||||
|
||||
#include "SDL_video.h"
|
||||
#include "SDL_error.h"
|
||||
|
@ -308,4 +309,4 @@ static SDL_GrabMode QZ_GrabInput (_THIS, SDL_GrabMode grab_mode);
|
|||
|
||||
/* YUV functions */
|
||||
static SDL_Overlay* QZ_CreateYUVOverlay (_THIS, int width, int height,
|
||||
Uint32 format, SDL_Surface *display);
|
||||
Uint32 format, SDL_Surface *display);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue