vcl/win/window/salframe.cxx | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-)
New commits: commit ce9e6972148c657994beb74f671e51bec5be6689 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Wed Jun 30 15:58:57 2021 +0100 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Wed Jun 30 21:48:05 2021 +0200 tdf#70633 unset Alt if detected as AltGr in both KeyInput branches we are unsetting Alt if the modifier is AltGr in one SalEvent::KeyInput case but not in another. If I replicate the unset of Alt if AlrGr in the other place then both UTF-16 parts of the codepoint get accepted and the described input case works Change-Id: Ifa8a5afbb1853ef3d5f388fd5e7bd3bbc048e260 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118170 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/win/window/salframe.cxx b/vcl/win/window/salframe.cxx index 8e4abcdbd66e..45361d8baef0 100644 --- a/vcl/win/window/salframe.cxx +++ b/vcl/win/window/salframe.cxx @@ -3353,6 +3353,16 @@ bool WinSalFrame::MapUnicodeToKeyCode( sal_Unicode aUnicode, LanguageType aLangT return bRet; } +static void UnsetAltIfAltGr(SalKeyEvent& rKeyEvt, sal_uInt16 nModCode) +{ + if ((nModCode & (KEY_MOD1 | KEY_MOD2)) == (KEY_MOD1 | KEY_MOD2) && + rKeyEvt.mnCharCode) + { + // this is actually AltGr and should not be handled as Alt + rKeyEvt.mnCode &= ~(KEY_MOD1 | KEY_MOD2); + } +} + static bool ImplHandleKeyMsg( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam, LRESULT& rResult ) { @@ -3441,8 +3451,12 @@ static bool ImplHandleKeyMsg( HWND hWnd, UINT nMsg, aKeyEvt.mnCode |= nModCode; aKeyEvt.mnCharCode = ImplGetCharCode( pFrame, wParam ); aKeyEvt.mnRepeat = nRepeat; + + UnsetAltIfAltGr(aKeyEvt, nModCode); + nLastChar = 0; nLastVKChar = 0; + bool nRet = pFrame->CallCallback( SalEvent::KeyInput, &aKeyEvt ); pFrame->CallCallback( SalEvent::KeyUp, &aKeyEvt ); return nRet; @@ -3593,12 +3607,7 @@ static bool ImplHandleKeyMsg( HWND hWnd, UINT nMsg, aKeyEvt.mnCode |= nModCode; aKeyEvt.mnRepeat = nRepeat; - if ((nModCode & (KEY_MOD1 | KEY_MOD2)) == (KEY_MOD1 | KEY_MOD2) && - aKeyEvt.mnCharCode) - { - // this is actually AltGr and should not be handled as Alt - aKeyEvt.mnCode &= ~(KEY_MOD1 | KEY_MOD2); - } + UnsetAltIfAltGr(aKeyEvt, nModCode); bIgnoreCharMsg = bCharPeek; bool nRet = pFrame->CallCallback( nEvent, &aKeyEvt ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits