summaryrefslogtreecommitdiff
path: root/sfx2
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-08-10 15:51:51 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-08-10 14:23:32 +0000
commitd6e8d4f773d970b69baedd8523a426f18a8d8eef (patch)
treed7243d096d5ad56c22b18f7f9a6159545b000b50 /sfx2
parentf3346b1fc568f044aa02b01758a9598aed0c95e7 (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.cxx10
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;
}
}