include/LibreOfficeKit/LibreOfficeKitInit.h  |   10 ++++-----
 include/svl/undo.hxx                         |    5 ++++
 sc/qa/unit/tiledrendering/tiledrendering.cxx |   22 +++++++++++++++++++++
 sc/source/ui/inc/undobase.hxx                |    6 +++++
 sc/source/ui/inc/undodraw.hxx                |    3 ++
 sc/source/ui/undo/undobase.cxx               |   20 +++++++++++++++++--
 sc/source/ui/undo/undodraw.cxx               |   10 ++++++++-
 svl/source/undo/undo.cxx                     |   28 +++++++++++++++++++++++++--
 8 files changed, 94 insertions(+), 10 deletions(-)

New commits:
commit 1dd03826d3c17af500731550e14acd4b694b1bd9
Author: Miklos Vajna <vmik...@collabora.co.uk>
Date:   Thu Aug 4 18:08:34 2016 +0200

    LOK init: avoid non-inline function definition in header file
    
    To prevent possible ODR violations.
    
    Change-Id: Ic9538244a0bf3760808904d2bcf608151c53f899
    Reviewed-on: https://gerrit.libreoffice.org/27883
    Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk>
    Tested-by: Jenkins <c...@libreoffice.org>
    (cherry picked from commit 3f02b2aa51e32c46d5b6610480bc1ba22156a3ec)

diff --git a/include/LibreOfficeKit/LibreOfficeKitInit.h 
b/include/LibreOfficeKit/LibreOfficeKitInit.h
index 2ab7d18..6190d72 100644
--- a/include/LibreOfficeKit/LibreOfficeKitInit.h
+++ b/include/LibreOfficeKit/LibreOfficeKitInit.h
@@ -42,7 +42,7 @@ extern "C"
     #endif
     #define SEPARATOR         '/'
 
-    void *lok_loadlib(const char *pFN)
+    inline void *lok_loadlib(const char *pFN)
     {
         return dlopen(pFN, RTLD_LAZY
 #if defined __clang__ && defined __linux__ \
@@ -54,22 +54,22 @@ extern "C"
                       );
     }
 
-    char *lok_dlerror(void)
+    inline char *lok_dlerror(void)
     {
         return dlerror();
     }
 
-    void *lok_dlsym(void *Hnd, const char *pName)
+    inline void *lok_dlsym(void *Hnd, const char *pName)
     {
         return dlsym(Hnd, pName);
     }
 
-    int lok_dlclose(void *Hnd)
+    inline int lok_dlclose(void *Hnd)
     {
         return dlclose(Hnd);
     }
 
-    void extendUnoPath(const char *pPath)
+    inline void extendUnoPath(const char *pPath)
     {
         (void)pPath;
     }
commit e3d57b2c8219fff9653120558eb363ebc5672e3e
Author: Miklos Vajna <vmik...@collabora.co.uk>
Date:   Thu Aug 4 15:55:45 2016 +0200

    svl: track creation time of SfxUndoAction instances
    
    It's not yet clear how to expose this on the UI, though.
    
    Reviewed-on: https://gerrit.libreoffice.org/27878
    Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk>
    Tested-by: Jenkins <c...@libreoffice.org>
    (cherry picked from commit 33a5ab1eb74d140265b471fb33ca98aca7cfb1a6)
    
    Conflicts:
        svl/source/undo/undo.cxx
    
    Change-Id: Iee6737922d36e896653b4fae557442747dda1b8b

diff --git a/include/svl/undo.hxx b/include/svl/undo.hxx
index 2012df9..95684f5 100644
--- a/include/svl/undo.hxx
+++ b/include/svl/undo.hxx
@@ -21,6 +21,7 @@
 
 #include <svl/svldllapi.h>
 #include <rtl/ustring.hxx>
+#include <tools/datetime.hxx>
 
 #include <limits>
 #include <memory>
@@ -68,11 +69,15 @@ public:
     virtual sal_uInt16  GetId() const;
     /// ID of the view shell that created this undo action.
     virtual sal_Int32 GetViewShellId() const;
+    /// Timestamp when this undo item was created.
+    const DateTime& GetDateTime() const;
     virtual void dumpAsXml(struct _xmlTextWriter* pWriter) const;
 
 private:
     SfxUndoAction( const SfxUndoAction& ) = delete;
     SfxUndoAction& operator=( const SfxUndoAction& ) = delete;
+
+    DateTime m_aDateTime;
 };
 
 
diff --git a/svl/source/undo/undo.cxx b/svl/source/undo/undo.cxx
index 8481ed3..0fa3867 100644
--- a/svl/source/undo/undo.cxx
+++ b/svl/source/undo/undo.cxx
@@ -26,6 +26,7 @@
 #include <comphelper/flagguard.hxx>
 #include <tools/diagnose_ex.h>
 #include <libxml/xmlwriter.h>
+#include <unotools/datetime.hxx>
 
 #include <vector>
 #include <list>
@@ -62,7 +63,8 @@ SfxUndoAction::~SfxUndoAction()
 
 
 SfxUndoAction::SfxUndoAction()
-:   mpSfxLinkUndoAction(nullptr)
+:   mpSfxLinkUndoAction(nullptr),
+    m_aDateTime(DateTime::SYSTEM)
 {
 }
 
@@ -89,6 +91,11 @@ sal_Int32 SfxUndoAction::GetViewShellId() const
     return -1;
 }
 
+const DateTime& SfxUndoAction::GetDateTime() const
+{
+    return m_aDateTime;
+}
+
 OUString SfxUndoAction::GetRepeatComment(SfxRepeatTarget&) const
 {
     return GetComment();
@@ -142,6 +149,7 @@ void SfxUndoAction::dumpAsXml(xmlTextWriterPtr pWriter) 
const
     xmlTextWriterWriteAttribute(pWriter, BAD_CAST("symbol"), 
BAD_CAST(typeid(*this).name()));
     xmlTextWriterWriteAttribute(pWriter, BAD_CAST("comment"), 
BAD_CAST(GetComment().toUtf8().getStr()));
     xmlTextWriterWriteAttribute(pWriter, BAD_CAST("viewShellId"), 
BAD_CAST(OString::number(GetViewShellId()).getStr()));
+    xmlTextWriterWriteAttribute(pWriter, BAD_CAST("dateTime"), 
BAD_CAST(utl::toISO8601(m_aDateTime.GetUNODateTime()).toUtf8().getStr()));
     xmlTextWriterEndElement(pWriter);
 }
 
commit 8094a21526cd46074d529509c00a03d0839fc28e
Author: Miklos Vajna <vmik...@collabora.co.uk>
Date:   Thu Aug 4 12:39:18 2016 +0200

    svl: expose redo actions in SfxUndoManager::dumpAsXml()
    
    To see if an undo action is actually deleted or just moved to the redo
    stack.
    
    Change-Id: I40632ea29353e50b643b8b1831d5ffdf443ca75a
    Reviewed-on: https://gerrit.libreoffice.org/27871
    Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk>
    Tested-by: Jenkins <c...@libreoffice.org>
    (cherry picked from commit ba8fc726ebae7b1ebaf65ae462d56ee0b4af14a3)

diff --git a/svl/source/undo/undo.cxx b/svl/source/undo/undo.cxx
index def0089..8481ed3 100644
--- a/svl/source/undo/undo.cxx
+++ b/svl/source/undo/undo.cxx
@@ -1285,6 +1285,8 @@ void SfxUndoManager::RemoveOldestUndoActions( size_t 
const i_count )
 
 void SfxUndoManager::dumpAsXml(xmlTextWriterPtr pWriter) const
 {
+    UndoManagerGuard aGuard(*m_xData);
+
     bool bOwns = false;
     if (!pWriter)
     {
@@ -1295,9 +1297,23 @@ void SfxUndoManager::dumpAsXml(xmlTextWriterPtr pWriter) 
const
 
     xmlTextWriterStartElement(pWriter, BAD_CAST("sfxUndoManager"));
     xmlTextWriterWriteAttribute(pWriter, BAD_CAST("nUndoActionCount"), 
BAD_CAST(OString::number(GetUndoActionCount()).getStr()));
+    xmlTextWriterWriteAttribute(pWriter, BAD_CAST("nRedoActionCount"), 
BAD_CAST(OString::number(GetRedoActionCount()).getStr()));
 
+    xmlTextWriterStartElement(pWriter, BAD_CAST("undoActions"));
     for (size_t i = 0; i < GetUndoActionCount(); ++i)
-        GetUndoAction(i)->dumpAsXml(pWriter);
+    {
+        const SfxUndoArray* pUndoArray = m_xData->pActUndoArray;
+        pUndoArray->aUndoActions[pUndoArray->nCurUndoAction - 1 - 
i].pAction->dumpAsXml(pWriter);
+    }
+    xmlTextWriterEndElement(pWriter);
+
+    xmlTextWriterStartElement(pWriter, BAD_CAST("redoActions"));
+    for (size_t i = 0; i < GetRedoActionCount(); ++i)
+    {
+        const SfxUndoArray* pUndoArray = m_xData->pActUndoArray;
+        pUndoArray->aUndoActions[pUndoArray->nCurUndoAction + 
i].pAction->dumpAsXml(pWriter);
+    }
+    xmlTextWriterEndElement(pWriter);
 
     xmlTextWriterEndElement(pWriter);
     if (bOwns)
commit 392635220aad1c361897fedeff1c4e7ca5c8476d
Author: Miklos Vajna <vmik...@collabora.co.uk>
Date:   Thu Aug 4 09:13:33 2016 +0200

    sc: implement SfxUndoAction::GetViewShellId() interface ...
    
    ... in SfxUndoAction subclasses
    
    Change-Id: I1504e2cfb0f58ff97e2de7a641d72e4867238164
    Reviewed-on: https://gerrit.libreoffice.org/27861
    Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk>
    Tested-by: Jenkins <c...@libreoffice.org>
    (cherry picked from commit 7cbb0664b94bb9f4587098c1940de98e4f7aae16)

diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx 
b/sc/qa/unit/tiledrendering/tiledrendering.cxx
index f049f4e..8b088ba 100644
--- a/sc/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx
@@ -60,6 +60,7 @@ public:
     void testDocumentSizeChanged();
     void testViewLock();
     void testColRowResize();
+    void testUndoShells();
 
     CPPUNIT_TEST_SUITE(ScTiledRenderingTest);
     CPPUNIT_TEST(testRowColumnSelections);
@@ -71,6 +72,7 @@ public:
     CPPUNIT_TEST(testDocumentSizeChanged);
     CPPUNIT_TEST(testViewLock);
     CPPUNIT_TEST(testColRowResize);
+    CPPUNIT_TEST(testUndoShells);
     CPPUNIT_TEST_SUITE_END();
 
 private:
@@ -560,6 +562,26 @@ void ScTiledRenderingTest::testColRowResize()
     comphelper::LibreOfficeKit::setActive(false);
 }
 
+void ScTiledRenderingTest::testUndoShells()
+{
+    comphelper::LibreOfficeKit::setActive();
+    ScModelObj* pModelObj = createDoc("small.ods");
+    // Clear the currently selected cell.
+    comphelper::dispatchCommand(".uno:ClearContents", {});
+
+    auto pDocShell = dynamic_cast<ScDocShell*>(pModelObj->GetEmbeddedObject());
+    CPPUNIT_ASSERT(pDocShell);
+    ScDocument& rDoc = pDocShell->GetDocument();
+    SfxUndoManager* pUndoManager = rDoc.GetUndoManager();
+    CPPUNIT_ASSERT(pUndoManager);
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), 
pUndoManager->GetUndoActionCount());
+    sal_Int32 nView1 = SfxLokHelper::getView();
+    // This was -1: ScSimpleUndo did not remember what view shell created it.
+    CPPUNIT_ASSERT_EQUAL(nView1, 
pUndoManager->GetUndoAction()->GetViewShellId());
+
+    comphelper::LibreOfficeKit::setActive(false);
+}
+
 }
 
 CPPUNIT_TEST_SUITE_REGISTRATION(ScTiledRenderingTest);
diff --git a/sc/source/ui/inc/undobase.hxx b/sc/source/ui/inc/undobase.hxx
index f501f5b..a9a3ba2 100644
--- a/sc/source/ui/inc/undobase.hxx
+++ b/sc/source/ui/inc/undobase.hxx
@@ -45,10 +45,13 @@ public:
     virtual         ~ScSimpleUndo();
 
     virtual bool    Merge( SfxUndoAction *pNextAction ) override;
+    /// See SfxUndoAction::GetViewShellId().
+    sal_Int32 GetViewShellId() const override;
 
 protected:
     ScDocShell*     pDocShell;
     SfxUndoAction*  pDetectiveUndo;
+    sal_Int32       mnViewShellId;
 
     bool            IsPaintLocked() const { return pDocShell->IsPaintLocked(); 
}
 
@@ -164,6 +167,7 @@ private:
 class ScUndoWrapper: public SfxUndoAction           // for manual merging of 
actions
 {
     SfxUndoAction*  pWrappedUndo;
+    sal_Int32       mnViewShellId;
 
 public:
                             ScUndoWrapper( SfxUndoAction* pUndo );
@@ -182,6 +186,8 @@ public:
     virtual OUString        GetComment() const override;
     virtual OUString        GetRepeatComment(SfxRepeatTarget&) const override;
     virtual sal_uInt16      GetId() const override;
+    /// See SfxUndoAction::GetViewShellId().
+    sal_Int32 GetViewShellId() const override;
 };
 
 #endif
diff --git a/sc/source/ui/inc/undodraw.hxx b/sc/source/ui/inc/undodraw.hxx
index 103b015..bbebad8 100644
--- a/sc/source/ui/inc/undodraw.hxx
+++ b/sc/source/ui/inc/undodraw.hxx
@@ -28,6 +28,7 @@ class ScUndoDraw: public SfxUndoAction
 {
     SfxUndoAction*  pDrawUndo;
     ScDocShell*     pDocShell;
+    sal_Int32       mnViewShellId;
 
     void            UpdateSubShell();
 
@@ -48,6 +49,8 @@ public:
     virtual OUString        GetComment() const override;
     virtual OUString        GetRepeatComment(SfxRepeatTarget&) const override;
     virtual sal_uInt16      GetId() const override;
+    /// See SfxUndoAction::GetViewShellId().
+    sal_Int32 GetViewShellId() const override;
 };
 
 #endif
diff --git a/sc/source/ui/undo/undobase.cxx b/sc/source/ui/undo/undobase.cxx
index 64ce53a..1859b58 100644
--- a/sc/source/ui/undo/undobase.cxx
+++ b/sc/source/ui/undo/undobase.cxx
@@ -38,8 +38,16 @@
 
 ScSimpleUndo::ScSimpleUndo( ScDocShell* pDocSh ) :
     pDocShell( pDocSh ),
-    pDetectiveUndo( nullptr )
+    pDetectiveUndo( nullptr ),
+    mnViewShellId(-1)
 {
+    if (ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell())
+        mnViewShellId = pViewShell->GetViewShellId();
+}
+
+sal_Int32 ScSimpleUndo::GetViewShellId() const
+{
+    return mnViewShellId;
 }
 
 ScSimpleUndo::~ScSimpleUndo()
@@ -562,8 +570,11 @@ void ScDBFuncUndo::EndRedo()
 }
 
 ScUndoWrapper::ScUndoWrapper( SfxUndoAction* pUndo ) :
-    pWrappedUndo( pUndo )
+    pWrappedUndo( pUndo ),
+    mnViewShellId( -1 )
 {
+    if (pWrappedUndo)
+        mnViewShellId = pWrappedUndo->GetViewShellId();
 }
 
 ScUndoWrapper::~ScUndoWrapper()
@@ -583,6 +594,11 @@ OUString ScUndoWrapper::GetComment() const
     return OUString();
 }
 
+sal_Int32 ScUndoWrapper::GetViewShellId() const
+{
+    return mnViewShellId;
+}
+
 OUString ScUndoWrapper::GetRepeatComment(SfxRepeatTarget& rTarget) const
 {
     if (pWrappedUndo)
diff --git a/sc/source/ui/undo/undodraw.cxx b/sc/source/ui/undo/undodraw.cxx
index 5645afb..5b9c0d5 100644
--- a/sc/source/ui/undo/undodraw.cxx
+++ b/sc/source/ui/undo/undodraw.cxx
@@ -26,8 +26,11 @@
 
 ScUndoDraw::ScUndoDraw( SfxUndoAction* pUndo, ScDocShell* pDocSh ) :
     pDrawUndo( pUndo ),
-    pDocShell( pDocSh )
+    pDocShell( pDocSh ),
+    mnViewShellId( -1 )
 {
+    if (ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell())
+        mnViewShellId = pViewShell->GetViewShellId();
 }
 
 ScUndoDraw::~ScUndoDraw()
@@ -47,6 +50,11 @@ OUString ScUndoDraw::GetComment() const
     return OUString();
 }
 
+sal_Int32 ScUndoDraw::GetViewShellId() const
+{
+    return mnViewShellId;
+}
+
 OUString ScUndoDraw::GetRepeatComment(SfxRepeatTarget& rTarget) const
 {
     if (pDrawUndo)
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to