diff options
author | Simon Long <simon@raspberrypi.org> | 2015-07-08 18:02:50 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2015-07-09 15:07:24 +0000 |
commit | 74407aef94b6d8dfdd69891c4a6e578587ef3e71 (patch) | |
tree | cc8c8f9cde981f90760cb7fdaa02688713989f83 /vcl/source/window/winproc.cxx | |
parent | 40ade8d04380083e383d6a6e50e5c254fcde2b2f (diff) |
tdf#92630 Enable auto-accelerator behaviour for gtk
Change-Id: I671177dd1f9e535c28a29bcbd6b74f1c789371ea
Reviewed-on: https://gerrit.libreoffice.org/16883
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/source/window/winproc.cxx')
-rw-r--r-- | vcl/source/window/winproc.cxx | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx index c1b31962b6a5..280db2325733 100644 --- a/vcl/source/window/winproc.cxx +++ b/vcl/source/window/winproc.cxx @@ -2165,17 +2165,22 @@ static void ImplHandleSalKeyMod( vcl::Window* pWindow, SalKeyModEvent* pEvent ) // #105224# send commandevent to allow special treatment of Ctrl-LeftShift/Ctrl-RightShift etc. - // find window - vcl::Window* pChild = ImplGetKeyInputWindow( pWindow ); - if ( !pChild ) - return; + // find window - first look to see if the system window is available + vcl::Window* pChild = pWindow->ImplGetWindowImpl()->mpFirstChild; - // send modkey events only if useful data is available - if( pEvent->mnModKeyCode != 0 ) + while ( pChild ) { - CommandModKeyData data( pEvent->mnModKeyCode ); - ImplCallCommand( pChild, CommandEventId::ModKeyChange, &data ); + if ( pChild->ImplGetWindowImpl()->mbSysWin ) + break; + pChild = pChild->ImplGetWindowImpl()->mpNext; } + //...if not, try to find a key input window... + if (!pChild) ImplGetKeyInputWindow( pWindow ); + //...otherwise fail safe... + if (!pChild) pChild = pWindow; + + CommandModKeyData data( pEvent->mnModKeyCode ); + ImplCallCommand( pChild, CommandEventId::ModKeyChange, &data ); } static void ImplHandleInputLanguageChange( vcl::Window* pWindow ) |