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

Armin Le Grand alg at apache.org
Tue Jun 10 05:42:46 PDT 2014


 sd/source/ui/func/fuinsert.cxx |    8 ++++++++
 svx/source/svdraw/svdedtv.cxx  |   23 +++++++++++++++++++++++
 2 files changed, 31 insertions(+)

New commits:
commit b8de5aa4195fbb2f1fbf1312cb8a6e6c3c8b9852
Author: Armin Le Grand <alg at apache.org>
Date:   Mon Feb 17 15:48:54 2014 +0000

    Resolves: fdo#78404 #i123468# Added SdrEndTextEdit before replacing...
    
    EmptyPresObj, also secured ReplaceObjectAtView to check for active TextEdit,
    assert this and make an emergency correction
    
    (cherry picked from commit 623cd778689bd0851652b2db00b24c308dfb657a)
    
    Conflicts:
    	svx/source/svdraw/svdedtv.cxx
    
    (cherry picked from commit 3b729ab35b5064dcd21f125dfd0aa7d7e709fd9f)
    
    Change-Id: I0e9ae1b1cd84e04c37c4de38aca7752804782384
    Reviewed-on: https://gerrit.libreoffice.org/9482
    Tested-by: David Tardon <dtardon at redhat.com>
    Reviewed-by: David Tardon <dtardon at redhat.com>

diff --git a/sd/source/ui/func/fuinsert.cxx b/sd/source/ui/func/fuinsert.cxx
index 9f50702..886be34 100644
--- a/sd/source/ui/func/fuinsert.cxx
+++ b/sd/source/ui/func/fuinsert.cxx
@@ -338,6 +338,14 @@ void FuInsertOLE::DoExecute( SfxRequest& rReq )
                     pPage->InsertPresObj( pOleObj, ePresObjKind );
                     pOleObj->SetUserCall(pPickObj->GetUserCall());
                 }
+
+                // #i123468# we need to end text edit before replacing the object. There cannot yet
+                // being text typed (else it would not be an EmptyPresObj anymore), but it may be
+                // in text edit mode
+                if (mpView->IsTextEdit())
+                {
+                    mpView->SdrEndTextEdit();
+                }
             }
 
             bool bRet = true;
diff --git a/svx/source/svdraw/svdedtv.cxx b/svx/source/svdraw/svdedtv.cxx
index a872d42..602bf19 100644
--- a/svx/source/svdraw/svdedtv.cxx
+++ b/svx/source/svdraw/svdedtv.cxx
@@ -33,6 +33,7 @@
 #include "svx/svdglob.hxx"
 #include <svx/e3dsceneupdater.hxx>
 #include <rtl/strbuf.hxx>
+#include <svx/svdview.hxx>
 
 // #i13033#
 #include <clonelist.hxx>
@@ -987,6 +988,28 @@ sal_Bool SdrEditView::InsertObjectAtView(SdrObject* pObj, SdrPageView& rPV, sal_
 
 void SdrEditView::ReplaceObjectAtView(SdrObject* pOldObj, SdrPageView& rPV, SdrObject* pNewObj, sal_Bool bMark)
 {
+    if(IsTextEdit())
+    {
+#ifdef DBG_UTIL
+        if(pOldObj && dynamic_cast< SdrTextObj* >(pOldObj) && static_cast< SdrTextObj* >(pOldObj)->IsTextEditActive())
+        {
+            OSL_ENSURE(false, "OldObject is in TextEdit mode, this has to be ended before replacing it usnig SdrEndTextEdit (!)");
+        }
+
+        if(pNewObj && dynamic_cast< SdrTextObj* >(pNewObj) && static_cast< SdrTextObj* >(pNewObj)->IsTextEditActive())
+        {
+            OSL_ENSURE(false, "NewObject is in TextEdit mode, this has to be ended before replacing it usnig SdrEndTextEdit (!)");
+        }
+#endif
+
+        // #i123468# emergency repair situation, needs to cast up to a class derived from
+        // this one; (aw080 has a mechanism for that and the view hierarchy is secured to
+        // always be a SdrView)
+        SdrView *pSdrView = dynamic_cast<SdrView*>(this);
+        if (pSdrView)
+            pSdrView->SdrEndTextEdit();
+    }
+
     SdrObjList* pOL=pOldObj->GetObjList();
     const bool bUndo = IsUndoEnabled();
     if( bUndo  )


More information about the Libreoffice-commits mailing list