|
From: John M M. <jo...@us...> - 2004-01-07 05:25:42
|
Update of /cvsroot/squeak/squeak/platforms/Mac OS/vm
In directory sc8-pr-cvs1:/tmp/cvs-serv331/squeak/platforms/Mac OS/vm
Modified Files:
sqMacUIEvents.c
Log Message:
* 3.7.1b2 Rework character posting to respect MacRoman high bit ascii
Index: sqMacUIEvents.c
===================================================================
RCS file: /cvsroot/squeak/squeak/platforms/Mac OS/vm/sqMacUIEvents.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -d -r1.19 -r1.20
*** sqMacUIEvents.c 2 Dec 2003 04:48:24 -0000 1.19
--- sqMacUIEvents.c 7 Jan 2004 05:25:39 -0000 1.20
***************
*** 1701,1705 ****
char macCharCode;
UniCharCount uniCharCount;
! UniChar uniChar, modifiedUniChar, *uniCharBufPtr, *uniCharBuf;
sqKeyboardEvent *evt, *extra;
OSErr err;
--- 1701,1705 ----
char macCharCode;
UniCharCount uniCharCount;
! UniChar modifiedUniChar, *uniCharBufPtr, *uniCharBuf;
sqKeyboardEvent *evt, *extra;
OSErr err;
***************
*** 1743,1747 ****
typeUnicodeText, NULL, actualSize, NULL, uniCharBuf);
! uniChar = modifiedUniChar = *uniCharBufPtr;
buttonState = modifierBits =ModifierStateCarbon(actualEvent,0); //Capture option states
if (((modifierBits >> 3) & 0x9) == 0x9) { /* command and shift */
--- 1743,1747 ----
typeUnicodeText, NULL, actualSize, NULL, uniCharBuf);
! modifiedUniChar = *uniCharBufPtr;
buttonState = modifierBits =ModifierStateCarbon(actualEvent,0); //Capture option states
if (((modifierBits >> 3) & 0x9) == 0x9) { /* command and shift */
***************
*** 1753,1778 ****
pthread_mutex_lock(&gEventQueueLock);
- evt = (sqKeyboardEvent*) nextEventPut();
-
- /* first the basics */
- evt->type = EventTypeKeyboard;
- evt->timeStamp = ioMSecs() & 536870911;
- /* now the key code */
- /* press code must differentiate */
- evt->charCode = uniChar;
- evt->pressCode = EventKeyDown;
- evt->modifiers = modifierBits >> 3;
- /* clean up reserved */
- evt->reserved1 = 0;
- evt->reserved2 = 0;
/* Put sqKeyboardEvent in actualSize times */
uniCharCount = actualSize / sizeof(UniChar);
for (i=0; i<uniCharCount; i++) {
/* generate extra character event */
extra = (sqKeyboardEvent*)nextEventPut();
extra->type = EventTypeKeyboard;
extra->timeStamp = ioMSecs() & 536870911;
! extra->charCode = modifiedUniChar;
extra->pressCode = EventKeyChar;
extra->modifiers = modifierBits >> 3;
--- 1753,1788 ----
pthread_mutex_lock(&gEventQueueLock);
/* Put sqKeyboardEvent in actualSize times */
uniCharCount = actualSize / sizeof(UniChar);
for (i=0; i<uniCharCount; i++) {
+ CFStringRef theString;
+ unsigned char macRomanString[2];
+ int macRomanCode;
+
+ theString = CFStringCreateWithCharacters (nil, &modifiedUniChar, (CFIndex) 1);
+ CFStringGetCString (theString,&macRomanString,2, kCFStringEncodingMacRoman);
+ macRomanCode = macRomanString[0];
+ CFRelease(theString);
+
+ evt = (sqKeyboardEvent*) nextEventPut();
+
+ /* first the basics */
+ evt->type = EventTypeKeyboard;
+ evt->timeStamp = ioMSecs() & 536870911;
+ /* now the key code */
+ /* press code must differentiate */
+ evt->charCode = modifiedUniChar;
+ evt->pressCode = EventKeyDown;
+ evt->modifiers = modifierBits >> 3;
+ /* clean up reserved */
+ evt->reserved1 = 0;
+ evt->reserved2 = 0;
+
/* generate extra character event */
extra = (sqKeyboardEvent*)nextEventPut();
extra->type = EventTypeKeyboard;
extra->timeStamp = ioMSecs() & 536870911;
! extra->charCode = macRomanCode;
extra->pressCode = EventKeyChar;
extra->modifiers = modifierBits >> 3;
***************
*** 1782,1786 ****
/* keystate: low byte is the ascii character; next 8 bits are modifier bits */
! keystate = (evt->modifiers << 8) | (unsigned char) uniChar;
if (keystate == getInterruptKeycode()) {
/* Note: interrupt key is "meta"; it not reported as a keystroke */
--- 1792,1796 ----
/* keystate: low byte is the ascii character; next 8 bits are modifier bits */
! keystate = (evt->modifiers << 8) | (unsigned char) macRomanCode;
if (keystate == getInterruptKeycode()) {
/* Note: interrupt key is "meta"; it not reported as a keystroke */
***************
*** 1797,1804 ****
}
}
- uniCharBufPtr++;
- modifiedUniChar = *uniCharBufPtr;
- }
-
/* Put the sqKeyboardEvent for KeyUp */
evt = (sqKeyboardEvent*) nextEventPut();
--- 1807,1810 ----
***************
*** 1808,1817 ****
/* now the key code */
/* press code must differentiate */
! evt->charCode = uniChar;
! evt->pressCode = EventKeyUp;
! evt->modifiers = modifierBits >> 3;
! /* clean up reserved */
! evt->reserved1 = 0;
! evt->reserved2 = 0;
free(uniCharBuf);
--- 1814,1828 ----
/* now the key code */
/* press code must differentiate */
! evt->charCode = modifiedUniChar;
! evt->pressCode = EventKeyUp;
! evt->modifiers = modifierBits >> 3;
! /* clean up reserved */
! evt->reserved1 = 0;
! evt->reserved2 = 0;
!
! uniCharBufPtr++;
! modifiedUniChar = *uniCharBufPtr;
! }
!
free(uniCharBuf);
|