summaryrefslogtreecommitdiffstats
path: root/macosx/tkMacOSXKeyEvent.c
diff options
context:
space:
mode:
authormarc_culler <marc.culler@gmail.com>2020-04-29 18:40:54 (GMT)
committermarc_culler <marc.culler@gmail.com>2020-04-29 18:40:54 (GMT)
commitfb718bb804556da3691f5945793c4a0da75a85dd (patch)
tree943f6fc29f9bf372c143f657c79408d4917423e3 /macosx/tkMacOSXKeyEvent.c
parent373c3b707cea33b1eabb9e1d417d9003a2e8a051 (diff)
downloadtk-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.c36
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
/*