sd/source/ui/framework/tools/FrameworkHelper.cxx | 57 ++++++++++++++++------- 1 file changed, 40 insertions(+), 17 deletions(-)
New commits: commit 570ad81bcbc56b1d20378c6342c27458fcee430c Author: David Tardon <dtar...@redhat.com> Date: Mon Jul 11 11:59:41 2016 +0200 rhbz#1351292 correctly set edit mode ... when switching between different shells, e.g., from Outline to Slide master. Change-Id: I22ef6f6cac73c52fb1bedd97e653b4b57c5a7a24 (cherry picked from commit b0535f3944975c1f6cdadc149d70502843331f86) Reviewed-on: https://gerrit.libreoffice.org/27110 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/sd/source/ui/framework/tools/FrameworkHelper.cxx b/sd/source/ui/framework/tools/FrameworkHelper.cxx index 842df16..ed74b7e 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&)
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits