diff options
author | David Tardon <dtardon@redhat.com> | 2016-07-11 11:59:41 +0200 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2016-07-11 13:00:23 +0200 |
commit | b0535f3944975c1f6cdadc149d70502843331f86 (patch) | |
tree | 114ed61a5eb79b0989bda39201c74912c0ea5d20 /sd | |
parent | db1be55072a792c536841f02af0bc7da362aa4fc (diff) |
rhbz#1351292 correctly set edit mode
... when switching between different shells, e.g., from Outline to Slide
master.
Change-Id: I22ef6f6cac73c52fb1bedd97e653b4b57c5a7a24
Diffstat (limited to 'sd')
-rw-r--r-- | sd/source/ui/framework/tools/FrameworkHelper.cxx | 57 |
1 files changed, 40 insertions, 17 deletions
diff --git a/sd/source/ui/framework/tools/FrameworkHelper.cxx b/sd/source/ui/framework/tools/FrameworkHelper.cxx index 6b08f37548be..15740f03755c 100644 --- a/sd/source/ui/framework/tools/FrameworkHelper.cxx +++ b/sd/source/ui/framework/tools/FrameworkHelper.cxx @@ -518,6 +518,41 @@ OUString FrameworkHelper::GetViewURL (ViewShell::ShellType eType) } } +namespace +{ + +void updateEditMode(const Reference<XView> &xView, FrameworkHelper* const pHelper, const EditMode eEMode, bool updateFrameView) +{ + // Ensure we have the expected edit mode + // The check is only for DrawViewShell as OutlineViewShell + // and SlideSorterViewShell have no master mode + const ::std::shared_ptr<ViewShell> pCenterViewShell (pHelper->GetViewShell(xView)); + DrawViewShell* pDrawViewShell + = dynamic_cast<DrawViewShell*>(pCenterViewShell.get()); + if (pDrawViewShell != nullptr) + { + pCenterViewShell->Broadcast ( + ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_START)); + + pDrawViewShell->ChangeEditMode(eEMode, pDrawViewShell->IsLayerModeActive()); + if (updateFrameView) + pDrawViewShell->WriteFrameViewData(); + + pCenterViewShell->Broadcast ( + ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_END)); + } +} + +void asyncUpdateEditMode(FrameworkHelper* const pHelper, const EditMode eEMode) +{ + Reference<XResourceId> xPaneId ( + FrameworkHelper::CreateResourceId(framework::FrameworkHelper::msCenterPaneURL)); + Reference<XView> xView (pHelper->GetView(xPaneId)); + updateEditMode(xView, pHelper, eEMode, true); +} + +} + void FrameworkHelper::HandleModeChangeSlot ( sal_uLong nSlotId, SfxRequest& rRequest) @@ -552,7 +587,6 @@ void FrameworkHelper::HandleModeChangeSlot ( Reference<XResourceId> xPaneId ( CreateResourceId(framework::FrameworkHelper::msCenterPaneURL)); Reference<XView> xView (GetView(xPaneId)); - ::std::shared_ptr<ViewShell> pCenterViewShell (GetViewShell(xView)); // Compute requested view OUString sRequestedView; @@ -595,26 +629,15 @@ void FrameworkHelper::HandleModeChangeSlot ( if (!(xView.is() && xView->getResourceId()->getResourceURL().equals(sRequestedView))) { + const auto xId = CreateResourceId(sRequestedView, msCenterPaneURL); mxConfigurationController->requestResourceActivation( - CreateResourceId(sRequestedView, msCenterPaneURL), + xId, ResourceActivationMode_REPLACE); + RunOnResourceActivation(xId, std::bind(&asyncUpdateEditMode, this, eEMode)); } - - // Ensure we have the expected edit mode - // The check is only for DrawViewShell as OutlineViewShell - // and SlideSorterViewShell have no master mode - DrawViewShell* pDrawViewShell - = dynamic_cast<DrawViewShell*>(pCenterViewShell.get()); - if (pDrawViewShell != nullptr) + else { - pCenterViewShell->Broadcast ( - ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_START)); - - pDrawViewShell->ChangeEditMode ( - eEMode, pDrawViewShell->IsLayerModeActive()); - - pCenterViewShell->Broadcast ( - ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_END)); + updateEditMode(xView, this, eEMode, false); } } catch (RuntimeException&) |