Kaydet (Commit) b0535f39 authored tarafından David Tardon's avatar David Tardon

rhbz#1351292 correctly set edit mode

... when switching between different shells, e.g., from Outline to Slide
master.

Change-Id: I22ef6f6cac73c52fb1bedd97e653b4b57c5a7a24
üst db1be550
...@@ -518,6 +518,41 @@ OUString FrameworkHelper::GetViewURL (ViewShell::ShellType eType) ...@@ -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 ( void FrameworkHelper::HandleModeChangeSlot (
sal_uLong nSlotId, sal_uLong nSlotId,
SfxRequest& rRequest) SfxRequest& rRequest)
...@@ -552,7 +587,6 @@ void FrameworkHelper::HandleModeChangeSlot ( ...@@ -552,7 +587,6 @@ void FrameworkHelper::HandleModeChangeSlot (
Reference<XResourceId> xPaneId ( Reference<XResourceId> xPaneId (
CreateResourceId(framework::FrameworkHelper::msCenterPaneURL)); CreateResourceId(framework::FrameworkHelper::msCenterPaneURL));
Reference<XView> xView (GetView(xPaneId)); Reference<XView> xView (GetView(xPaneId));
::std::shared_ptr<ViewShell> pCenterViewShell (GetViewShell(xView));
// Compute requested view // Compute requested view
OUString sRequestedView; OUString sRequestedView;
...@@ -595,26 +629,15 @@ void FrameworkHelper::HandleModeChangeSlot ( ...@@ -595,26 +629,15 @@ void FrameworkHelper::HandleModeChangeSlot (
if (!(xView.is() && xView->getResourceId()->getResourceURL().equals(sRequestedView))) if (!(xView.is() && xView->getResourceId()->getResourceURL().equals(sRequestedView)))
{ {
const auto xId = CreateResourceId(sRequestedView, msCenterPaneURL);
mxConfigurationController->requestResourceActivation( mxConfigurationController->requestResourceActivation(
CreateResourceId(sRequestedView, msCenterPaneURL), xId,
ResourceActivationMode_REPLACE); ResourceActivationMode_REPLACE);
RunOnResourceActivation(xId, std::bind(&asyncUpdateEditMode, this, eEMode));
} }
else
// 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)
{ {
pCenterViewShell->Broadcast ( updateEditMode(xView, this, eEMode, false);
ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_START));
pDrawViewShell->ChangeEditMode (
eEMode, pDrawViewShell->IsLayerModeActive());
pCenterViewShell->Broadcast (
ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_END));
} }
} }
catch (RuntimeException&) catch (RuntimeException&)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment