diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-08-10 15:51:51 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-08-10 14:23:32 +0000 |
commit | d6e8d4f773d970b69baedd8523a426f18a8d8eef (patch) | |
tree | d7243d096d5ad56c22b18f7f9a6159545b000b50 /sfx2 | |
parent | f3346b1fc568f044aa02b01758a9598aed0c95e7 (diff) |
sfx2: make SfxLokHelper::setView() set also the active frame
Without this, comphelper::dispatchCommand() doesn't work on the current
frame. This causes e.g. undo not working when only a given view is
allowed to do undo.
In the desktop case vcl::Window::ImplGrabFocus() calls both
SfxViewFrame::MakeActive_Impl() and
framework::Desktop::setActiveFrame(), but in the LOK case the first was
called directly, that's how the active frame was outdated.
Change-Id: If97a9de316b4c8dd49e55cd273bdb2dfe9866f38
Reviewed-on: https://gerrit.libreoffice.org/28032
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/source/view/lokhelper.cxx | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sfx2/source/view/lokhelper.cxx b/sfx2/source/view/lokhelper.cxx index 856a007a4206..41131604709a 100644 --- a/sfx2/source/view/lokhelper.cxx +++ b/sfx2/source/view/lokhelper.cxx @@ -11,12 +11,17 @@ #include <boost/property_tree/json_parser.hpp> +#include <com/sun/star/frame/Desktop.hpp> + +#include <comphelper/processfactory.hxx> #include <sfx2/viewsh.hxx> #include <sfx2/request.hxx> #include <sfx2/viewfrm.hxx> #include <shellimpl.hxx> +using namespace com::sun::star; + int SfxLokHelper::createView() { SfxViewFrame* pViewFrame = SfxViewFrame::GetFirst(); @@ -59,6 +64,11 @@ void SfxLokHelper::setView(int nId) SfxViewFrame* pViewFrame = pViewShell->GetViewFrame(); pViewFrame->MakeActive_Impl(false); + + // Make comphelper::dispatchCommand() find the correct frame. + uno::Reference<frame::XFrame> xFrame = pViewFrame->GetFrame().GetFrameInterface(); + uno::Reference<frame::XDesktop2> xDesktop = frame::Desktop::create(comphelper::getProcessComponentContext()); + xDesktop->setActiveFrame(xFrame); return; } } |