[Libreoffice-commits] core.git: Branch 'libreoffice-5-2' - sd/source

David Tardon dtardon at redhat.com
Mon Jul 11 15:30:41 UTC 2016


 sd/source/ui/framework/tools/FrameworkHelper.cxx |   57 ++++++++++++++++-------
 1 file changed, 40 insertions(+), 17 deletions(-)

New commits:
commit 8c319b414ed7b4f9a67077f4b1497dc8975536bc
Author: David Tardon <dtardon at 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/27108
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sd/source/ui/framework/tools/FrameworkHelper.cxx b/sd/source/ui/framework/tools/FrameworkHelper.cxx
index 6b08f37..15740f0 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&)


More information about the Libreoffice-commits mailing list