diff options
author | Caolán McNamara <caolanm@redhat.com> | 2016-05-23 20:48:57 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-05-23 21:05:44 +0100 |
commit | d1182223dcd3aca6b0922f1b27bc1537bceca7ae (patch) | |
tree | 15e0aa76f0bde89cee647fe3622187c516621333 | |
parent | 015456844faa8bfc848e3ed933d694c3a2fd8fbf (diff) |
like menus do, restore focus to prev control when floatingwindow popdowns
in the FloatWinPopupFlags::GrabFocus case
Change-Id: Ibebf23c83133f74f00e5dbb2540f108a383462cc
-rw-r--r-- | include/vcl/floatwin.hxx | 1 | ||||
-rw-r--r-- | vcl/source/window/floatwin.cxx | 7 |
2 files changed, 5 insertions, 3 deletions
diff --git a/include/vcl/floatwin.hxx b/include/vcl/floatwin.hxx index 92ca7937d4a0..d22602deac90 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 024d726da3f6..82283c94337e 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 ) |