From c320a42c365f3df9c9fe550e7dd6239f1def73bb Mon Sep 17 00:00:00 2001 From: attila Date: Thu, 11 Jan 2024 20:04:44 +0100 Subject: [PATCH] Linux: Make ComponentPeer::getCurrentModifiersRealtime() update shift and ctrl modifiers --- .../native/juce_XWindowSystem_linux.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/juce_gui_basics/native/juce_XWindowSystem_linux.cpp b/modules/juce_gui_basics/native/juce_XWindowSystem_linux.cpp index 026bdffea5..31fafd61cd 100644 --- a/modules/juce_gui_basics/native/juce_XWindowSystem_linux.cpp +++ b/modules/juce_gui_basics/native/juce_XWindowSystem_linux.cpp @@ -2514,7 +2514,7 @@ ModifierKeys XWindowSystem::getNativeRealtimeModifiers() const ::Window root, child; int x, y, winx, winy; unsigned int mask; - int mouseMods = 0; + int mouseMods = 0, keyboardMods = 0, keyboardClearMods = 0; XWindowSystemUtilities::ScopedXLock xLock; @@ -2526,9 +2526,15 @@ ModifierKeys XWindowSystem::getNativeRealtimeModifiers() const if ((mask & Button1Mask) != 0) mouseMods |= ModifierKeys::leftButtonModifier; if ((mask & Button2Mask) != 0) mouseMods |= ModifierKeys::middleButtonModifier; if ((mask & Button3Mask) != 0) mouseMods |= ModifierKeys::rightButtonModifier; + + ((mask & ShiftMask) != 0 ? keyboardMods : keyboardClearMods) |= ModifierKeys::shiftModifier; + ((mask & ControlMask) != 0 ? keyboardMods : keyboardClearMods) |= ModifierKeys::ctrlModifier; } - ModifierKeys::currentModifiers = ModifierKeys::currentModifiers.withoutMouseButtons().withFlags (mouseMods); + ModifierKeys::currentModifiers = ModifierKeys::currentModifiers.withoutMouseButtons() + .withFlags (mouseMods) + .withoutFlags (keyboardClearMods) + .withFlags (keyboardMods); // We are keeping track of the state of modifier keys and mouse buttons with the assumption that // for every mouse down we are going to receive a mouse up etc.