[Libreoffice-commits] core.git: vcl/source

Katarina Behrens Katarina.Behrens at cib.de
Thu Feb 4 08:20:59 UTC 2016


 vcl/source/window/winproc.cxx |   26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

New commits:
commit 8d53d01f38b856f177aca3ed4d3cba3db10f24a5
Author: Katarina Behrens <Katarina.Behrens at cib.de>
Date:   Wed Jan 27 15:46:41 2016 +0100

    tdf#96739: Send Ctrl-Left/RightShift events to correct window
    
    Another regression from commit 74407aef94b6d8df. SystemWindow should
    consume only Alt pressed/released events and let key input window
    handle the rest of modkey events
    
    Change-Id: I304701fe63ee86bad534ba003ea05991d06f433d
    Reviewed-on: https://gerrit.libreoffice.org/21854
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Katarina Behrens <Katarina.Behrens at cib.de>

diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx
index 4fb5c9c..48604b8 100644
--- a/vcl/source/window/winproc.cxx
+++ b/vcl/source/window/winproc.cxx
@@ -2098,20 +2098,30 @@ static void ImplHandleSalKeyMod( vcl::Window* pWindow, SalKeyModEvent* pEvent )
     }
 
     // #105224# send commandevent to allow special treatment of Ctrl-LeftShift/Ctrl-RightShift etc.
+    // + auto-accelerator feature, tdf#92630
 
-    // find window - first look to see if the system window is available
-    vcl::Window* pChild = pWindow->ImplGetWindowImpl()->mpFirstChild;
+    vcl::Window *pChild = nullptr;
 
-    while ( pChild )
+    // Alt pressed or released => give SystemWindow a chance to handle auto-accelerator
+    if ( pEvent->mnCode == KEY_MOD2 || (pEvent->mnModKeyCode & MODKEY_MOD2) != 0 )
     {
-        if ( pChild->ImplGetWindowImpl()->mbSysWin )
-            break;
-        pChild = pChild->ImplGetWindowImpl()->mpNext;
+        // find window - first look to see if the system window is available
+        pChild = pWindow->ImplGetWindowImpl()->mpFirstChild;
+
+        while ( pChild )
+        {
+            if ( pChild->ImplGetWindowImpl()->mbSysWin )
+                break;
+            pChild = pChild->ImplGetWindowImpl()->mpNext;
+        }
     }
+
     //...if not, try to find a key input window...
-    if (!pChild) ImplGetKeyInputWindow( pWindow );
+    if (!pChild)
+        pChild = ImplGetKeyInputWindow( pWindow );
     //...otherwise fail safe...
-    if (!pChild) pChild = pWindow;
+    if (!pChild)
+        pChild = pWindow;
 
     CommandModKeyData data( pEvent->mnModKeyCode );
     ImplCallCommand( pChild, CommandEventId::ModKeyChange, &data );


More information about the Libreoffice-commits mailing list