support unfocused float window inside a focused float window

if a floating window is inside a floating window, go up the floating
windows until we find the first one that accepts focus, rather than
pass the input to the toplevel frame

Change-Id: I6c2a3de02ab436b8441b1fec15d51dec4f96c931
This commit is contained in:
Caolán McNamara 2016-11-01 21:25:17 +00:00
parent b0d1a39e99
commit 6f9ce98bd0

View File

@ -813,12 +813,23 @@ static vcl::Window* ImplGetKeyInputWindow( vcl::Window* pWindow )
// find window - is every time the window which has currently the
// focus or the last time the focus.
// the first floating window always has the focus
// the first floating window always has the focus, try it, or any parent floating windows, first
vcl::Window* pChild = pSVData->maWinData.mpFirstFloat;
if( !pChild || ( pChild->ImplGetWindowImpl()->mbFloatWin && !static_cast<FloatingWindow *>(pChild)->GrabsFocus() ) )
pChild = pWindow->ImplGetWindowImpl()->mpFrameData->mpFocusWin;
else
pChild = pChild->ImplGetWindowImpl()->mpFrameData->mpFocusWin;
while (pChild)
{
if (pChild->ImplGetWindowImpl()->mbFloatWin)
{
if (static_cast<FloatingWindow *>(pChild)->GrabsFocus())
break;
}
pChild = pChild->GetParent();
}
if (!pChild)
pChild = pWindow;
pChild = pChild->ImplGetWindowImpl()->mpFrameData->mpFocusWin;
// no child - than no input
if ( !pChild )