Skip to content

Commit

Permalink
Date: Sat, 14 Dec 2002 13:33:05 -0500
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
slouken committed Dec 15, 2002
1 parent bd20fb3 commit d97fab8
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 11 deletions.
46 changes: 36 additions & 10 deletions src/video/quartz/SDL_QuartzEvents.m
Expand Up @@ -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:0 ];
key.mod = KMOD_NONE;

SDL_PrivateKeyboard (state, &key);
}
else if (numChars == 0) {

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 = 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) {
Expand Down
3 changes: 2 additions & 1 deletion src/video/quartz/SDL_QuartzVideo.h
Expand Up @@ -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"
Expand Down Expand Up @@ -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);

0 comments on commit d97fab8

Please sign in to comment.