[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