diff --git a/src/Main/FGManipulator.cxx b/src/Main/FGManipulator.cxx index 0586419..191f6fd 100644 --- a/src/Main/FGManipulator.cxx +++ b/src/Main/FGManipulator.cxx @@ -276,5 +276,23 @@ void FGManipulator::handleKey(const osgGA::GUIEventAdapter& ea, int& key, currentModifiers = modifiers; if (eventType == osgGA::GUIEventAdapter::KEYUP) modifiers |= KEYMOD_RELEASED; + + if (key >= 0 && key < sizeof(release_keys)) { + if (modifiers & KEYMOD_RELEASED) { + key = release_keys[key]; + } else { + release_keys[key] = key; + if (key >= 1 && key <= 26) { + release_keys[key + '@'] = key; + release_keys[key + '`'] = key; + } else if (key >= 'A' && key <= 'Z') { + release_keys[key - '@'] = key; + release_keys[tolower(key)] = key; + } else if (key >= 'a' && key <= 'z') { + release_keys[key - '`'] = key; + release_keys[toupper(key)] = key; + } + } + } } × diff --git a/src/Main/FGManipulator.hxx b/src/Main/FGManipulator.hxx index 4ad190d..edfcd9f 100644 --- a/src/Main/FGManipulator.hxx +++ b/src/Main/FGManipulator.hxx @@ -139,5 +139,6 @@ protected: bool mouseWarped; // workaround for osgViewer double scroll events bool scrollButtonPressed; + int release_keys[128]; }; #endif