sax/source/fastparser/fastparser.cxx | 6 ++- sw/qa/extras/uiwriter/uiwriter.cxx | 36 ++++++++++++++++++++ sw/source/core/crsr/bookmrk.cxx | 12 ++++++ sw/source/core/doc/docbm.cxx | 16 ++++++++ sw/source/core/inc/UndoBookmark.hxx | 25 +++++++++++++ sw/source/core/inc/bookmrk.hxx | 4 +- sw/source/core/undo/unbkmk.cxx | 63 +++++++++++++++++++++++++++++++++++ sw/source/core/unocore/unobkm.cxx | 23 ------------ 8 files changed, 159 insertions(+), 26 deletions(-)
New commits: commit 95b7cf6cef5edc920adee62c18fd97668a9ed3a8 Author: Matúš Kukan <matus.ku...@collabora.com> Date: Thu Dec 11 15:24:40 2014 +0100 Add undo operation for deleting a bookmark + unit test, related fdo#51741 (cherry picked from commit 9338bea6e8dfab8d360fe8ab19dd5d75071bfc2a) Conflicts: sw/qa/extras/uiwriter/uiwriter.cxx sw/source/core/undo/unbkmk.cxx Change-Id: I79d8d3c30b6b0b2cc253963fdd50019aec033e12 diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx index 2ed5298..23b1e7d 100644 --- a/sw/qa/extras/uiwriter/uiwriter.cxx +++ b/sw/qa/extras/uiwriter/uiwriter.cxx @@ -57,6 +57,7 @@ public: void testChineseConversionTraditionalToSimplified(); void testChineseConversionSimplifiedToTraditional(); void testFdo85554(); + void testBookmarkUndo(); CPPUNIT_TEST_SUITE(SwUiWriterTest); CPPUNIT_TEST(testReplaceForward); @@ -80,6 +81,7 @@ public: CPPUNIT_TEST(testChineseConversionTraditionalToSimplified); CPPUNIT_TEST(testChineseConversionSimplifiedToTraditional); CPPUNIT_TEST(testFdo85554); + CPPUNIT_TEST(testBookmarkUndo); CPPUNIT_TEST_SUITE_END(); @@ -586,6 +588,40 @@ void SwUiWriterTest::testFdo85554() CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xDrawPage->getCount()); } +void SwUiWriterTest::testBookmarkUndo() +{ + SwDoc* pDoc = createDoc(); + sw::UndoManager& rUndoManager = pDoc->GetUndoManager(); + IDocumentMarkAccess* const pMarkAccess = pDoc->getIDocumentMarkAccess(); + SwPaM aPaM( SwNodeIndex(pDoc->GetNodes().GetEndOfContent(), -1) ); + + pMarkAccess->makeMark(aPaM, OUString("Mark"), IDocumentMarkAccess::BOOKMARK); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount()); + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pMarkAccess->getAllMarksCount()); + rUndoManager.Redo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount()); + + IDocumentMarkAccess::const_iterator_t ppBkmk = pMarkAccess->findMark("Mark"); + CPPUNIT_ASSERT(ppBkmk != pMarkAccess->getAllMarksEnd()); + + pMarkAccess->renameMark(ppBkmk->get(), "Mark_"); + CPPUNIT_ASSERT(pMarkAccess->findMark("Mark") == pMarkAccess->getAllMarksEnd()); + CPPUNIT_ASSERT(pMarkAccess->findMark("Mark_") != pMarkAccess->getAllMarksEnd()); + rUndoManager.Undo(); + CPPUNIT_ASSERT(pMarkAccess->findMark("Mark") != pMarkAccess->getAllMarksEnd()); + CPPUNIT_ASSERT(pMarkAccess->findMark("Mark_") == pMarkAccess->getAllMarksEnd()); + rUndoManager.Redo(); + CPPUNIT_ASSERT(pMarkAccess->findMark("Mark") == pMarkAccess->getAllMarksEnd()); + CPPUNIT_ASSERT(pMarkAccess->findMark("Mark_") != pMarkAccess->getAllMarksEnd()); + + pMarkAccess->deleteMark( pMarkAccess->findMark("Mark_") ); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pMarkAccess->getAllMarksCount()); + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount()); + rUndoManager.Redo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pMarkAccess->getAllMarksCount()); +} CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx index d79fffc..666a118 100644 --- a/sw/source/core/crsr/bookmrk.cxx +++ b/sw/source/core/crsr/bookmrk.cxx @@ -276,7 +276,11 @@ namespace sw { namespace mark { DdeBookmark::DeregisterFromDoc(io_pDoc); - // fdo#51741 Bookmark should mark document as modified when deleted + if (io_pDoc->GetIDocumentUndoRedo().DoesUndo()) + { + io_pDoc->GetIDocumentUndoRedo().AppendUndo( + new SwUndoDeleteBookmark(*this)); + } io_pDoc->getIDocumentState().SetModified(); } diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx index d6d3d27..9567c3a 100644 --- a/sw/source/core/doc/docbm.cxx +++ b/sw/source/core/doc/docbm.cxx @@ -29,6 +29,7 @@ #include <doc.hxx> #include <IDocumentRedlineAccess.hxx> #include <IDocumentState.hxx> +#include <IDocumentUndoRedo.hxx> #include <docary.hxx> #include <xmloff/odffields.hxx> #include <editsh.hxx> @@ -49,6 +50,7 @@ #include <sfx2/linkmgr.hxx> #include <swserv.hxx> #include <swundo.hxx> +#include <UndoBookmark.hxx> #include <unocrsr.hxx> #include <viscrs.hxx> #include <edimp.hxx> @@ -550,12 +552,18 @@ namespace sw { namespace mark return false; if (::sw::mark::MarkBase* pMarkBase = dynamic_cast< ::sw::mark::MarkBase* >(io_pMark)) { - m_aMarkNamesSet.erase(pMarkBase->GetName()); + const OUString sOldName(pMarkBase->GetName()); + m_aMarkNamesSet.erase(sOldName); m_aMarkNamesSet.insert(rNewName); pMarkBase->SetName(rNewName); - // fdo#51741 Bookmark should mark document as modified when renamed - if (dynamic_cast< ::sw::mark::Bookmark* >(io_pMark)) { + if (dynamic_cast< ::sw::mark::Bookmark* >(io_pMark)) + { + if (m_pDoc->GetIDocumentUndoRedo().DoesUndo()) + { + m_pDoc->GetIDocumentUndoRedo().AppendUndo( + new SwUndoRenameBookmark(sOldName, rNewName)); + } m_pDoc->getIDocumentState().SetModified(); } } diff --git a/sw/source/core/inc/UndoBookmark.hxx b/sw/source/core/inc/UndoBookmark.hxx index eaa0fcb..c4215e2 100644 --- a/sw/source/core/inc/UndoBookmark.hxx +++ b/sw/source/core/inc/UndoBookmark.hxx @@ -67,15 +67,22 @@ public: virtual void RedoImpl( ::sw::UndoRedoContext & ) SAL_OVERRIDE; }; +class SwUndoDeleteBookmark : public SwUndoBookmark +{ +public: + SwUndoDeleteBookmark( const ::sw::mark::IMark& ); + + virtual void UndoImpl( ::sw::UndoRedoContext & ) SAL_OVERRIDE; + virtual void RedoImpl( ::sw::UndoRedoContext & ) SAL_OVERRIDE; +}; + class SwUndoRenameBookmark : public SwUndo { const OUString m_sOldName; const OUString m_sNewName; - const sal_uLong m_nNode; - const sal_Int32 m_nCntnt; public: - SwUndoRenameBookmark( const ::sw::mark::IMark&, const OUString& rNewName ); + SwUndoRenameBookmark( const OUString& rOldName, const OUString& rNewName ); virtual ~SwUndoRenameBookmark(); private: diff --git a/sw/source/core/undo/unbkmk.cxx b/sw/source/core/undo/unbkmk.cxx index 3501ed5..ef0ad13 100644 --- a/sw/source/core/undo/unbkmk.cxx +++ b/sw/source/core/undo/unbkmk.cxx @@ -86,12 +86,25 @@ void SwUndoInsBookmark::RedoImpl(::sw::UndoRedoContext & rContext) SetInDoc( &rContext.GetDoc() ); } -SwUndoRenameBookmark::SwUndoRenameBookmark( const ::sw::mark::IMark& rBkmk, const OUString& rOldName ) +SwUndoDeleteBookmark::SwUndoDeleteBookmark( const ::sw::mark::IMark& rBkmk ) + : SwUndoBookmark( UNDO_DELBOOKMARK, rBkmk ) +{ +} + +void SwUndoDeleteBookmark::UndoImpl(::sw::UndoRedoContext & rContext) +{ + SetInDoc( &rContext.GetDoc() ); +} + +void SwUndoDeleteBookmark::RedoImpl(::sw::UndoRedoContext & rContext) +{ + ResetInDoc( &rContext.GetDoc() ); +} + +SwUndoRenameBookmark::SwUndoRenameBookmark( const OUString& rOldName, const OUString& rNewName ) : SwUndo( UNDO_BOOKMARK_RENAME ) , m_sOldName( rOldName ) - , m_sNewName( rBkmk.GetName() ) - , m_nNode( rBkmk.GetMarkPos().nNode.GetIndex() ) - , m_nCntnt( rBkmk.GetMarkPos().nContent.GetIndex() ) + , m_sNewName( rNewName ) { } diff --git a/sw/source/core/unocore/unobkm.cxx b/sw/source/core/unocore/unobkm.cxx index f42beb3..2f252f9 100644 --- a/sw/source/core/unocore/unobkm.cxx +++ b/sw/source/core/unocore/unobkm.cxx @@ -24,7 +24,6 @@ #include <vcl/svapp.hxx> #include <TextCursorHelper.hxx> -#include <UndoBookmark.hxx> #include <unotextrange.hxx> #include <unomap.hxx> #include <unoprnms.hxx> @@ -32,7 +31,6 @@ #include <crossrefbookmark.hxx> #include <doc.hxx> #include <IDocumentState.hxx> -#include <IDocumentUndoRedo.hxx> #include <docary.hxx> #include <swundo.hxx> #include <docsh.hxx> @@ -349,15 +347,7 @@ throw (uno::RuntimeException, std::exception) *aPam.GetMark() = m_pImpl->m_pRegisteredBookmark->GetOtherMarkPos(); } - const OUString sOldName(m_pImpl->m_pRegisteredBookmark->GetName()); - if (pMarkAccess->renameMark(m_pImpl->m_pRegisteredBookmark, rName)) - { - if (m_pImpl->m_pDoc->GetIDocumentUndoRedo().DoesUndo()) - { - m_pImpl->m_pDoc->GetIDocumentUndoRedo().AppendUndo( - new SwUndoRenameBookmark(*m_pImpl->m_pRegisteredBookmark, sOldName)); - } - } + pMarkAccess->renameMark(m_pImpl->m_pRegisteredBookmark, rName); } OUString SAL_CALL commit b4000bac50431b75d9e1157b88c2fb137e684591 Author: Renato Ferreira <renato.w...@gmail.com> Date: Sat Nov 15 00:22:57 2014 -0500 fdo#51741 Mark document as modified on bookmark rename / delete Change-Id: I378037ea546d0f2dc4ab9e0b0e6f9bf65c8db5b4 Deletion: overrided DdeBookmark::DeregisterFromDoc in Bookmark Renaming: in MarkManager::renameMark Reviewed-on: https://gerrit.libreoffice.org/12436 Reviewed-by: Michael Stahl <mst...@redhat.com> Tested-by: Michael Stahl <mst...@redhat.com> (cherry picked from commit f0c4cd51cb160492d78c2796f71ecd88da25fa59) diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx index 35fc43e..d79fffc 100644 --- a/sw/source/core/crsr/bookmrk.cxx +++ b/sw/source/core/crsr/bookmrk.cxx @@ -272,6 +272,14 @@ namespace sw { namespace mark io_pDoc->getIDocumentState().SetModified(); } + void Bookmark::DeregisterFromDoc(SwDoc* const io_pDoc) + { + DdeBookmark::DeregisterFromDoc(io_pDoc); + + // fdo#51741 Bookmark should mark document as modified when deleted + io_pDoc->getIDocumentState().SetModified(); + } + ::sfx2::IXmlIdRegistry& Bookmark::GetRegistry() { SwDoc *const pDoc( GetMarkPos().GetDoc() ); diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx index b7487ec..d6d3d27 100644 --- a/sw/source/core/doc/docbm.cxx +++ b/sw/source/core/doc/docbm.cxx @@ -28,6 +28,7 @@ #include <dcontact.hxx> #include <doc.hxx> #include <IDocumentRedlineAccess.hxx> +#include <IDocumentState.hxx> #include <docary.hxx> #include <xmloff/odffields.hxx> #include <editsh.hxx> @@ -552,6 +553,11 @@ namespace sw { namespace mark m_aMarkNamesSet.erase(pMarkBase->GetName()); m_aMarkNamesSet.insert(rNewName); pMarkBase->SetName(rNewName); + + // fdo#51741 Bookmark should mark document as modified when renamed + if (dynamic_cast< ::sw::mark::Bookmark* >(io_pMark)) { + m_pDoc->getIDocumentState().SetModified(); + } } return true; } diff --git a/sw/source/core/inc/bookmrk.hxx b/sw/source/core/inc/bookmrk.hxx index b5eef56..d5bc95c 100644 --- a/sw/source/core/inc/bookmrk.hxx +++ b/sw/source/core/inc/bookmrk.hxx @@ -152,7 +152,7 @@ namespace sw { void SetRefObject( SwServerObject* pObj ); - void DeregisterFromDoc(SwDoc* const pDoc); + virtual void DeregisterFromDoc(SwDoc* const pDoc); virtual ~DdeBookmark(); private: @@ -171,6 +171,8 @@ namespace sw { const OUString& rShortName); virtual void InitDoc(SwDoc* const io_Doc) SAL_OVERRIDE; + virtual void DeregisterFromDoc(SwDoc* const io_pDoc) SAL_OVERRIDE; + virtual const OUString& GetShortName() const SAL_OVERRIDE { return m_sShortName; } virtual const vcl::KeyCode& GetKeyCode() const SAL_OVERRIDE diff --git a/sw/source/core/unocore/unobkm.cxx b/sw/source/core/unocore/unobkm.cxx index 3697649..f42beb3 100644 --- a/sw/source/core/unocore/unobkm.cxx +++ b/sw/source/core/unocore/unobkm.cxx @@ -357,7 +357,6 @@ throw (uno::RuntimeException, std::exception) m_pImpl->m_pDoc->GetIDocumentUndoRedo().AppendUndo( new SwUndoRenameBookmark(*m_pImpl->m_pRegisteredBookmark, sOldName)); } - m_pImpl->m_pDoc->getIDocumentState().SetModified(); } } commit 68420e81edb7275cc66bae110d7279b24a8913a6 Author: Matúš Kukan <matus.ku...@collabora.com> Date: Mon Dec 1 13:32:05 2014 +0100 Add message to exception Change-Id: I0e7cf850b51343e4afc1ea0a0409ad2c4e596435 (cherry picked from commit 373daf55d98ba706d3dea131e755da3a00eb259f) diff --git a/sax/source/fastparser/fastparser.cxx b/sax/source/fastparser/fastparser.cxx index d0d6979..fc1f5a9 100644 --- a/sax/source/fastparser/fastparser.cxx +++ b/sax/source/fastparser/fastparser.cxx @@ -661,7 +661,8 @@ sal_Int32 FastSaxParserImpl::GetTokenWithPrefix( const xmlChar* pPrefix, int nPr } if( !nNamespace ) - throw SAXException(); // prefix that has no defined namespace url + throw SAXException("No namespace defined for " + OUString(XML_CAST(pPrefix), + nPrefixLen, RTL_TEXTENCODING_UTF8), Reference< XInterface >(), Any()); } if( nNamespaceToken != FastToken::DONTKNOW ) @@ -694,7 +695,8 @@ OUString FastSaxParserImpl::GetNamespaceURL( const OString& rPrefix ) throw (SAX return rEntity.maNamespaceDefines[nNamespace]->maNamespaceURL; } - throw SAXException(); // prefix that has no defined namespace url + throw SAXException("No namespace defined for " + OUString::fromUtf8(rPrefix), + Reference< XInterface >(), Any()); } sal_Int32 FastSaxParserImpl::GetTokenWithContextNamespace( sal_Int32 nNamespaceToken, const xmlChar* pName, int nNameLen ) commit 7b5184a8a19fe080f4b897e62bed99460b64002a Author: Matúš Kukan <matus.ku...@collabora.com> Date: Wed Nov 26 21:26:06 2014 +0100 Use IDocumentMarkAccess::findMark here Presumably, the names should be unique, so it's the same. Change-Id: I74907b97bc25f9512d4f7514162360e8b21ad4a5 (cherry picked from commit 43a803ccf8d392561bd168dc3b64695c4dcf93ce) diff --git a/sw/source/core/undo/unbkmk.cxx b/sw/source/core/undo/unbkmk.cxx index eb11aa9..3501ed5 100644 --- a/sw/source/core/undo/unbkmk.cxx +++ b/sw/source/core/undo/unbkmk.cxx @@ -118,17 +118,10 @@ SwRewriter SwUndoRenameBookmark::GetRewriter() const void SwUndoRenameBookmark::Rename(::sw::UndoRedoContext & rContext, const OUString& sFrom, const OUString& sTo) { IDocumentMarkAccess* const pMarkAccess = rContext.GetDoc().getIDocumentMarkAccess(); - for ( IDocumentMarkAccess::const_iterator_t ppBkmk = pMarkAccess->getAllMarksBegin(); - ppBkmk != pMarkAccess->getAllMarksEnd(); - ++ppBkmk ) + IDocumentMarkAccess::const_iterator_t ppBkmk = pMarkAccess->findMark(sFrom); + if (ppBkmk != pMarkAccess->getAllMarksEnd()) { - if ( m_nNode == ppBkmk->get()->GetMarkPos().nNode.GetIndex() - && m_nCntnt == ppBkmk->get()->GetMarkPos().nContent.GetIndex() - && sFrom == ppBkmk->get()->GetName() ) - { - pMarkAccess->renameMark( ppBkmk->get(), sTo ); - break; - } + pMarkAccess->renameMark( ppBkmk->get(), sTo ); } } commit acf5d1693c184ee480c1663dd3bdfabcd49ef802 Author: Matúš Kukan <matus.ku...@collabora.com> Date: Wed Nov 26 11:58:13 2014 +0100 Writer: Set document as modified and add undo when renaming bookmarks Change-Id: Id0d4695b6a7c5eae0493e679345bd41d4687d6d7 (cherry picked from commit c7fa6687e544e7f9702da23aadbd31c1f2e0115e) diff --git a/sw/source/core/inc/UndoBookmark.hxx b/sw/source/core/inc/UndoBookmark.hxx index b7e0d56..eaa0fcb 100644 --- a/sw/source/core/inc/UndoBookmark.hxx +++ b/sw/source/core/inc/UndoBookmark.hxx @@ -67,6 +67,24 @@ public: virtual void RedoImpl( ::sw::UndoRedoContext & ) SAL_OVERRIDE; }; +class SwUndoRenameBookmark : public SwUndo +{ + const OUString m_sOldName; + const OUString m_sNewName; + const sal_uLong m_nNode; + const sal_Int32 m_nCntnt; + +public: + SwUndoRenameBookmark( const ::sw::mark::IMark&, const OUString& rNewName ); + virtual ~SwUndoRenameBookmark(); + +private: + virtual SwRewriter GetRewriter() const SAL_OVERRIDE; + void Rename( ::sw::UndoRedoContext &, const OUString& sFrom, const OUString& sTo ); + virtual void UndoImpl( ::sw::UndoRedoContext & ) SAL_OVERRIDE; + virtual void RedoImpl( ::sw::UndoRedoContext & ) SAL_OVERRIDE; +}; + #endif // INCLUDED_SW_SOURCE_CORE_INC_UNDOBOOKMARK_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/undo/unbkmk.cxx b/sw/source/core/undo/unbkmk.cxx index 569fe21..eb11aa9 100644 --- a/sw/source/core/undo/unbkmk.cxx +++ b/sw/source/core/undo/unbkmk.cxx @@ -19,6 +19,7 @@ #include <UndoBookmark.hxx> +#include <comcore.hrc> #include "doc.hxx" #include "docary.hxx" #include "swundo.hxx" @@ -85,4 +86,60 @@ void SwUndoInsBookmark::RedoImpl(::sw::UndoRedoContext & rContext) SetInDoc( &rContext.GetDoc() ); } +SwUndoRenameBookmark::SwUndoRenameBookmark( const ::sw::mark::IMark& rBkmk, const OUString& rOldName ) + : SwUndo( UNDO_BOOKMARK_RENAME ) + , m_sOldName( rOldName ) + , m_sNewName( rBkmk.GetName() ) + , m_nNode( rBkmk.GetMarkPos().nNode.GetIndex() ) + , m_nCntnt( rBkmk.GetMarkPos().nContent.GetIndex() ) +{ +} + +SwUndoRenameBookmark::~SwUndoRenameBookmark() +{ +} + +static OUString lcl_QuoteName(const OUString& rName) +{ + static const OUString sStart = SW_RES(STR_START_QUOTE); + static const OUString sEnd = SW_RES(STR_END_QUOTE); + return sStart + rName + sEnd; +} + +SwRewriter SwUndoRenameBookmark::GetRewriter() const +{ + SwRewriter aRewriter; + aRewriter.AddRule(UndoArg1, lcl_QuoteName(m_sOldName)); + aRewriter.AddRule(UndoArg2, SW_RES(STR_YIELDS)); + aRewriter.AddRule(UndoArg3, lcl_QuoteName(m_sNewName)); + return aRewriter; +} + +void SwUndoRenameBookmark::Rename(::sw::UndoRedoContext & rContext, const OUString& sFrom, const OUString& sTo) +{ + IDocumentMarkAccess* const pMarkAccess = rContext.GetDoc().getIDocumentMarkAccess(); + for ( IDocumentMarkAccess::const_iterator_t ppBkmk = pMarkAccess->getAllMarksBegin(); + ppBkmk != pMarkAccess->getAllMarksEnd(); + ++ppBkmk ) + { + if ( m_nNode == ppBkmk->get()->GetMarkPos().nNode.GetIndex() + && m_nCntnt == ppBkmk->get()->GetMarkPos().nContent.GetIndex() + && sFrom == ppBkmk->get()->GetName() ) + { + pMarkAccess->renameMark( ppBkmk->get(), sTo ); + break; + } + } +} + +void SwUndoRenameBookmark::UndoImpl(::sw::UndoRedoContext & rContext) +{ + Rename(rContext, m_sNewName, m_sOldName); +} + +void SwUndoRenameBookmark::RedoImpl(::sw::UndoRedoContext & rContext) +{ + Rename(rContext, m_sOldName, m_sNewName); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/unocore/unobkm.cxx b/sw/source/core/unocore/unobkm.cxx index 569fcd2..3697649 100644 --- a/sw/source/core/unocore/unobkm.cxx +++ b/sw/source/core/unocore/unobkm.cxx @@ -24,17 +24,17 @@ #include <vcl/svapp.hxx> #include <TextCursorHelper.hxx> +#include <UndoBookmark.hxx> #include <unotextrange.hxx> #include <unomap.hxx> #include <unoprnms.hxx> #include <IMark.hxx> #include <crossrefbookmark.hxx> #include <doc.hxx> +#include <IDocumentState.hxx> #include <IDocumentUndoRedo.hxx> #include <docary.hxx> #include <swundo.hxx> -#include <comcore.hrc> -#include <SwRewriter.hxx> #include <docsh.hxx> #include <xmloff/odffields.hxx> #include <comphelper/servicehelper.hxx> @@ -42,16 +42,6 @@ using namespace ::sw::mark; using namespace ::com::sun::star; -namespace -{ - static OUString lcl_QuoteName(const OUString& rName) - { - static const OUString sStart = SW_RES(STR_START_QUOTE); - static const OUString sEnd = SW_RES(STR_END_QUOTE); - return sStart + rName + sEnd; - } -} - class SwXBookmark::Impl : public SwClient { @@ -359,16 +349,16 @@ throw (uno::RuntimeException, std::exception) *aPam.GetMark() = m_pImpl->m_pRegisteredBookmark->GetOtherMarkPos(); } - SwRewriter aRewriter; - aRewriter.AddRule(UndoArg1, lcl_QuoteName(getName())); - aRewriter.AddRule(UndoArg2, SW_RES(STR_YIELDS)); - aRewriter.AddRule(UndoArg3, lcl_QuoteName(rName)); - - m_pImpl->m_pDoc->GetIDocumentUndoRedo().StartUndo( - UNDO_BOOKMARK_RENAME, &aRewriter); - pMarkAccess->renameMark(m_pImpl->m_pRegisteredBookmark, rName); - m_pImpl->m_pDoc->GetIDocumentUndoRedo().EndUndo( - UNDO_BOOKMARK_RENAME, &aRewriter); + const OUString sOldName(m_pImpl->m_pRegisteredBookmark->GetName()); + if (pMarkAccess->renameMark(m_pImpl->m_pRegisteredBookmark, rName)) + { + if (m_pImpl->m_pDoc->GetIDocumentUndoRedo().DoesUndo()) + { + m_pImpl->m_pDoc->GetIDocumentUndoRedo().AppendUndo( + new SwUndoRenameBookmark(*m_pImpl->m_pRegisteredBookmark, sOldName)); + } + m_pImpl->m_pDoc->getIDocumentState().SetModified(); + } } OUString SAL_CALL
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits