From 75fb7fb8c2dace82ea7183b070e8fb7dde84f1d1 Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Wed, 30 Oct 2019 16:44:18 +0100 Subject: [PATCH] GL: Pass also Ctrl-modified keys --- src/video_display/gl.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/video_display/gl.cpp b/src/video_display/gl.cpp index 41dda7d36..d1735be5f 100644 --- a/src/video_display/gl.cpp +++ b/src/video_display/gl.cpp @@ -970,6 +970,11 @@ static void glut_idle_callback(void) } static int64_t translate_glut_to_ug(int key, bool is_special) { +#ifdef FREEGLUT + if (is_special && (key == GLUT_KEY_CTRL_L || key == GLUT_KEY_CTRL_R)) { + return 0; + } +#endif // defined FREEGLUT if (!is_special) { return key; } @@ -984,7 +989,7 @@ static int64_t translate_glut_to_ug(int key, bool is_special) { static void glut_key_callback(int key, bool is_special) { - log_msg(LOG_LEVEL_VERBOSE, MODULE_NAME "%s %d pressed\n", is_special ? "Special key " : "Key ", key); + log_msg(LOG_LEVEL_VERBOSE, MODULE_NAME "%s %d pressed\n", is_special ? "Special key" : "Key", key); switch (key | (is_special ? 0x10000LL : 0)) { // prefix special keys case 'f': gl->fs = !gl->fs; @@ -1029,10 +1034,16 @@ static void glut_key_callback(int key, bool is_special) gl->window_size_factor); break; default: - if (translate_glut_to_ug(key, is_special) != -1) { - keycontrol_send_key(get_root_module(&gl->mod), translate_glut_to_ug(key, is_special)); - } else { - log_msg(LOG_LEVEL_WARNING, MODULE_NAME "Cannot translate%s key %d!\n", is_special ? " special" : "", key); + { + int64_t ugk = translate_glut_to_ug(key, is_special); + if (ugk > 0) { + if (glutGetModifiers() == GLUT_ACTIVE_CTRL) { + ugk = K_CTRL(ugk); + } + keycontrol_send_key(get_root_module(&gl->mod), ugk); + } else if (ugk != 0) { + log_msg(LOG_LEVEL_WARNING, MODULE_NAME "Cannot translate%s key %d!\n", is_special ? " special" : "", key); + } } } }