diff options
author | marc_culler <marc.culler@gmail.com> | 2020-04-29 18:40:54 (GMT) |
---|---|---|
committer | marc_culler <marc.culler@gmail.com> | 2020-04-29 18:40:54 (GMT) |
commit | fb718bb804556da3691f5945793c4a0da75a85dd (patch) | |
tree | 943f6fc29f9bf372c143f657c79408d4917423e3 /macosx/tkMacOSXKeyEvent.c | |
parent | 373c3b707cea33b1eabb9e1d417d9003a2e8a051 (diff) | |
download | tk-fb718bb804556da3691f5945793c4a0da75a85dd.zip tk-fb718bb804556da3691f5945793c4a0da75a85dd.tar.gz tk-fb718bb804556da3691f5945793c4a0da75a85dd.tar.bz2 |
Deal with <Oslash> ~ <Shift-oslash> ~ <Shift-Option-o> ~ <Shift-Option-O> ~ <Option-O> ... and fix <BackSpace> and improve injection of key NSEvents.
Diffstat (limited to 'macosx/tkMacOSXKeyEvent.c')
-rw-r--r-- | macosx/tkMacOSXKeyEvent.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/macosx/tkMacOSXKeyEvent.c b/macosx/tkMacOSXKeyEvent.c index b25f2a5..c2445b9 100644 --- a/macosx/tkMacOSXKeyEvent.c +++ b/macosx/tkMacOSXKeyEvent.c @@ -17,9 +17,10 @@ #include "tkMacOSXInt.h" #include "tkMacOSXConstants.h" #include "tkMacOSXWm.h" -#define IS_PRINTABLE(keychar) ((keychar >= 0x20) && \ - (keychar != 0x7f) && \ - (keychar < 0xF700)) + +/* + * See tkMacOSXPrivate.h for the definition of IS_PRINTABLE. + */ /* #ifdef TK_MAC_DEBUG @@ -118,7 +119,7 @@ static void setXEventPoint(XEvent *xEvent, Tk_Window tkwin, NSWindow *w); has_modifiers = xEvent.xkey.state & XEVENT_MOD_MASK; focusWinPtr = TkFocusKeyEvent(winPtr, &xEvent); if (focusWinPtr == NULL) { - + TKContentView *contentView = [w contentView]; /* * This NSEvent is being sent to a window which no longer has focus. * This has been observed to happen when the user deactivates the Tk @@ -127,7 +128,7 @@ static void setXEventPoint(XEvent *xEvent, Tk_Window tkwin, NSWindow *w); * operation and discard the event. */ - [[w contentView] cancelComposingText]; + [contentView cancelComposingText]; return theEvent; } can_input_text = ((focusWinPtr->flags & TK_CAN_INPUT_TEXT) != 0); @@ -331,10 +332,12 @@ static void setXEventPoint(XEvent *xEvent, Tk_Window tkwin, NSWindow *w); */ for (i = 0; i < len; i++) { - TkUtfAtIndex(str, i, xEvent.xkey.trans_chars, &xEvent.xkey.keycode); - if (xEvent.xkey.keycode > 0xffff){ + unsigned int code; + TkUtfAtIndex(str, i, xEvent.xkey.trans_chars, &code); + if (code > 0xFFFF){ i++; } + xEvent.xkey.keycode = code; xEvent.xany.type = KeyPress; Tk_QueueWindowEvent(&xEvent, TCL_QUEUE_TAIL); } @@ -421,15 +424,6 @@ static void setXEventPoint(XEvent *xEvent, Tk_Window tkwin, NSWindow *w); return rng; } -- (void)cancelComposingText -{ - if (NS_KEYLOG) { - TKLog(@"cancelComposingText"); - } - [self deleteWorkingText]; - processingCompose = NO; -} - - (void)unmarkText { if (NS_KEYLOG) { @@ -552,6 +546,16 @@ static void setXEventPoint(XEvent *xEvent, Tk_Window tkwin, NSWindow *w); } } } + +- (void)cancelComposingText +{ + if (NS_KEYLOG) { + TKLog(@"cancelComposingText"); + } + [self deleteWorkingText]; + processingCompose = NO; +} + @end /* |