[Libreoffice-commits] core.git: vcl/source
Caolán McNamara
caolanm at redhat.com
Wed Nov 2 14:03:41 UTC 2016
vcl/source/window/winproc.cxx | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
New commits:
commit 6f9ce98bd0b33e4823f1f99314a478efb9ce0638
Author: Caolán McNamara <caolanm at redhat.com>
Date: Tue Nov 1 21:25:17 2016 +0000
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
diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx
index 43e5692..170e946 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<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 )
More information about the Libreoffice-commits
mailing list