From 15fcaa80fa8659542f075f6eb7d84fb13e11c314 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 1 Oct 2017 13:56:01 -0400 Subject: [PATCH] Do not let X translate control key combinations to key codes for us. --- src/gui/jtk/Jtk_event.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/gui/jtk/Jtk_event.cc b/src/gui/jtk/Jtk_event.cc index 9a21ec0..131fc3e 100644 --- a/src/gui/jtk/Jtk_event.cc +++ b/src/gui/jtk/Jtk_event.cc @@ -23,7 +23,11 @@ static bool ProcessXKeyEvent(XEvent * x_event, Jtk_Event * event) { char buffer; KeySym keysym; - if (XLookupString(&x_event->xkey, &buffer, 1, &keysym, nullptr) > 0) + /* Make a copy of x_event and turn off the ControlMask bit for lookup + * up keycodes. We'll handle control keys ourselves. */ + XEvent x_event_for_key_lookup = *x_event; + x_event_for_key_lookup.xkey.state &= ~ControlMask; + if (XLookupString(&x_event_for_key_lookup.xkey, &buffer, 1, &keysym, nullptr) > 0) { uint8_t mods = 0u; if (x_event->xkey.state & ShiftMask) @@ -38,7 +42,14 @@ static bool ProcessXKeyEvent(XEvent * x_event, Jtk_Event * event) { mods |= JTK_KEY_MODS_CTRL; } - event->key.key = buffer; + if (buffer == '\r') + { + event->key.key = '\n'; + } + else + { + event->key.key = buffer; + } event->key.mods = mods; } else