[Libreoffice-commits] core.git: include/vcl vcl/source

Caolán McNamara caolanm at redhat.com
Mon May 23 20:06:10 UTC 2016


 include/vcl/floatwin.hxx       |    1 +
 vcl/source/window/floatwin.cxx |    7 ++++---
 2 files changed, 5 insertions(+), 3 deletions(-)

New commits:
commit d1182223dcd3aca6b0922f1b27bc1537bceca7ae
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon May 23 20:48:57 2016 +0100

    like menus do, restore focus to prev control when floatingwindow popdowns
    
    in the FloatWinPopupFlags::GrabFocus case
    
    Change-Id: Ibebf23c83133f74f00e5dbb2540f108a383462cc

diff --git a/include/vcl/floatwin.hxx b/include/vcl/floatwin.hxx
index 92ca793..d22602d 100644
--- a/include/vcl/floatwin.hxx
+++ b/include/vcl/floatwin.hxx
@@ -91,6 +91,7 @@ class VCL_DLLPUBLIC FloatingWindow : public SystemWindow
 private:
     VclPtr<FloatingWindow>  mpNextFloat;
     VclPtr<vcl::Window>     mpFirstPopupModeWin;
+    VclPtr<vcl::Window>     mxPrevFocusWin;
     ImplData*       mpImplData;
     Rectangle       maFloatRect;
     ImplSVEvent *   mnPostId;
diff --git a/vcl/source/window/floatwin.cxx b/vcl/source/window/floatwin.cxx
index 024d726..82283c9 100644
--- a/vcl/source/window/floatwin.cxx
+++ b/vcl/source/window/floatwin.cxx
@@ -634,7 +634,7 @@ void FloatingWindow::ImplCallPopupModeEnd()
 
     // call Handler asynchronously.
     if ( mpImplData && !mnPostId )
-        mnPostId = Application::PostUserEvent( LINK( this, FloatingWindow, ImplEndPopupModeHdl ), nullptr, true );
+        mnPostId = Application::PostUserEvent( LINK( this, FloatingWindow, ImplEndPopupModeHdl ), mxPrevFocusWin, true );
 }
 
 void FloatingWindow::PopupModeEnd()
@@ -711,10 +711,11 @@ void FloatingWindow::StartPopupMode( const Rectangle& rRect, FloatWinPopupFlags
     ImplSVData* pSVData = ImplGetSVData();
     mpNextFloat = pSVData->maWinData.mpFirstFloat;
     pSVData->maWinData.mpFirstFloat = this;
-    if( nFlags & FloatWinPopupFlags::GrabFocus )
+    if (nFlags & FloatWinPopupFlags::GrabFocus)
     {
         // force key input even without focus (useful for menus)
         mbGrabFocus = true;
+        mxPrevFocusWin = Window::SaveFocus();
         mpWindowImpl->mpFrameData->mbHasFocus = true;
         GrabFocus();
     }
@@ -840,7 +841,7 @@ void FloatingWindow::ImplEndPopupMode( FloatWinPopupEndFlags nFlags, const VclPt
 
 void FloatingWindow::EndPopupMode( FloatWinPopupEndFlags nFlags )
 {
-    ImplEndPopupMode( nFlags );
+    ImplEndPopupMode(nFlags, mxPrevFocusWin);
 }
 
 void FloatingWindow::AddPopupModeWindow( vcl::Window* pWindow )


More information about the Libreoffice-commits mailing list