From 6f9ce98bd0b33e4823f1f99314a478efb9ce0638 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Tue, 1 Nov 2016 21:25:17 +0000 Subject: [PATCH] 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 --- vcl/source/window/winproc.cxx | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx index 43e5692c396b..170e94665a4d 100644 --- a/vcl/source/window/winproc.cxx +++ b/vcl/source/window/winproc.cxx @@ -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(pChild)->GrabsFocus() ) ) - pChild = pWindow->ImplGetWindowImpl()->mpFrameData->mpFocusWin; - else - pChild = pChild->ImplGetWindowImpl()->mpFrameData->mpFocusWin; + while (pChild) + { + if (pChild->ImplGetWindowImpl()->mbFloatWin) + { + if (static_cast(pChild)->GrabsFocus()) + break; + } + pChild = pChild->GetParent(); + } + + if (!pChild) + pChild = pWindow; + + pChild = pChild->ImplGetWindowImpl()->mpFrameData->mpFocusWin; // no child - than no input if ( !pChild )