[Libreoffice-commits] .: 2 commits - sw/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Wed Aug 22 14:16:05 PDT 2012
sw/source/core/unocore/unocoll.cxx | 74 ++++++++++++++++++++++++++++++-------
sw/source/ui/index/cnttab.cxx | 10 ++---
2 files changed, 64 insertions(+), 20 deletions(-)
New commits:
commit 45be3ac8151d63ccb61879f876696704542a4ce7
Author: Michael Stahl <mstahl at redhat.com>
Date: Wed Aug 22 23:04:34 2012 +0200
fdo#51514: SwXBookmarks: only consider real bookmarks:
Since CWS swrefactormarks2 the SwXBookmarks collection handles not only
bookmarks but at least cross-ref marks as well, which then bother users
when they show up in the Insert->Hyperlink dialog; remove non-bookmarks
again.
(regression from df6d312ca537402463e4eb0530f22b956600fc02)
Change-Id: I6a64ba8a43468dd3ce1569e944371d3ef71f8824
diff --git a/sw/source/core/unocore/unocoll.cxx b/sw/source/core/unocore/unocoll.cxx
index ba6570c..57ac3b5 100644
--- a/sw/source/core/unocore/unocoll.cxx
+++ b/sw/source/core/unocore/unocoll.cxx
@@ -86,6 +86,7 @@
#include <vbahelper/vbaaccesshelper.hxx>
#include <basic/basmgr.hxx>
#include <comphelper/processfactory.hxx>
+#include <comphelper/sequenceasvector.hxx>
using ::rtl::OUString;
using namespace ::com::sun::star;
@@ -1643,7 +1644,20 @@ sal_Int32 SwXBookmarks::getCount(void)
SolarMutexGuard aGuard;
if(!IsValid())
throw uno::RuntimeException();
- return GetDoc()->getIDocumentMarkAccess()->getBookmarksCount();
+
+ sal_Int32 count(0);
+ IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess();
+ for (IDocumentMarkAccess::const_iterator_t ppMark =
+ pMarkAccess->getBookmarksBegin();
+ ppMark != pMarkAccess->getBookmarksEnd(); ++ppMark)
+ {
+ if (IDocumentMarkAccess::BOOKMARK ==
+ IDocumentMarkAccess::GetType(**ppMark))
+ {
+ ++count; // only count real bookmarks
+ }
+ }
+ return count;
}
uno::Any SwXBookmarks::getByIndex(sal_Int32 nIndex)
@@ -1656,12 +1670,26 @@ uno::Any SwXBookmarks::getByIndex(sal_Int32 nIndex)
if(nIndex < 0 || nIndex >= pMarkAccess->getBookmarksCount())
throw IndexOutOfBoundsException();
- uno::Any aRet;
- ::sw::mark::IMark* pBkmk = pMarkAccess->getBookmarksBegin()[nIndex].get();
- const uno::Reference< text::XTextContent > xRef =
- SwXBookmark::CreateXBookmark(*GetDoc(), *pBkmk);
- aRet <<= xRef;
- return aRet;
+ sal_Int32 count(0);
+ for (IDocumentMarkAccess::const_iterator_t ppMark =
+ pMarkAccess->getBookmarksBegin();
+ ppMark != pMarkAccess->getBookmarksEnd(); ++ppMark)
+ {
+ if (IDocumentMarkAccess::BOOKMARK ==
+ IDocumentMarkAccess::GetType(**ppMark))
+ {
+ if (count == nIndex)
+ {
+ uno::Any aRet;
+ const uno::Reference< text::XTextContent > xRef =
+ SwXBookmark::CreateXBookmark(*GetDoc(), **ppMark);
+ aRet <<= xRef;
+ return aRet;
+ }
+ ++count; // only count real bookmarks
+ }
+ }
+ throw IndexOutOfBoundsException();
}
uno::Any SwXBookmarks::getByName(const rtl::OUString& rName)
@@ -1690,13 +1718,19 @@ uno::Sequence< OUString > SwXBookmarks::getElementNames(void)
if(!IsValid())
throw uno::RuntimeException();
+ ::comphelper::SequenceAsVector< ::rtl::OUString > ret;
IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess();
- uno::Sequence<OUString> aSeq(pMarkAccess->getBookmarksCount());
- sal_Int32 nCnt = 0;
- for(IDocumentMarkAccess::const_iterator_t ppMark = pMarkAccess->getBookmarksBegin();
- ppMark != pMarkAccess->getBookmarksEnd();)
- aSeq[nCnt++] = (*ppMark++)->GetName();
- return aSeq;
+ for (IDocumentMarkAccess::const_iterator_t ppMark =
+ pMarkAccess->getBookmarksBegin();
+ ppMark != pMarkAccess->getBookmarksEnd(); ++ppMark)
+ {
+ if (IDocumentMarkAccess::BOOKMARK ==
+ IDocumentMarkAccess::GetType(**ppMark))
+ {
+ ret.push_back((*ppMark)->GetName()); // only add real bookmarks
+ }
+ }
+ return ret.getAsConstList();
}
sal_Bool SwXBookmarks::hasByName(const OUString& rName)
@@ -1722,7 +1756,19 @@ sal_Bool SwXBookmarks::hasElements(void)
SolarMutexGuard aGuard;
if(!IsValid())
throw uno::RuntimeException();
- return GetDoc()->getIDocumentMarkAccess()->getBookmarksCount() != 0;
+
+ IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess();
+ for (IDocumentMarkAccess::const_iterator_t ppMark =
+ pMarkAccess->getBookmarksBegin();
+ ppMark != pMarkAccess->getBookmarksEnd(); ++ppMark)
+ {
+ if (IDocumentMarkAccess::BOOKMARK ==
+ IDocumentMarkAccess::GetType(**ppMark))
+ {
+ return true;
+ }
+ }
+ return false;
}
SwXNumberingRulesCollection::SwXNumberingRulesCollection( SwDoc* _pDoc ) :
commit c47505a4525c342694ba4196544715467c2bdb8e
Author: Michael Stahl <mstahl at redhat.com>
Date: Wed Aug 22 21:45:27 2012 +0200
SwTokenWindow::InsertAtSelection: fix STL assertion:
error: attempt to copy-construct an iterator from a singular iterator.
(regression from 39b8a5f87f55abe53488c9c3c35b65fb0df84cde)
Change-Id: Iab29f4c356ea1cb5ca0f687bcfc5e54f185fbba3
diff --git a/sw/source/ui/index/cnttab.cxx b/sw/source/ui/index/cnttab.cxx
index 94bf14f..30425bf 100644
--- a/sw/source/ui/index/cnttab.cxx
+++ b/sw/source/ui/index/cnttab.cxx
@@ -3141,13 +3141,11 @@ void SwTokenWindow::InsertAtSelection(
ctrl_iterator iterActive = std::find(aControlList.begin(),
aControlList.end(), pActiveCtrl);
- ctrl_iterator iterInsert = iterActive;
-
Size aControlSize(GetOutputSizePixel());
if( WINDOW_EDIT == pActiveCtrl->GetType())
{
- ++iterInsert;
+ ++iterActive;
Selection aSel = ((SwTOXEdit*)pActiveCtrl)->GetSelection();
aSel.Justify();
@@ -3163,7 +3161,7 @@ void SwTokenWindow::InsertAtSelection(
SwFormToken aTmpToken(TOKEN_TEXT);
SwTOXEdit* pEdit = new SwTOXEdit(&aCtrlParentWin, this, aTmpToken);
- iterInsert = aControlList.insert(iterInsert, pEdit);
+ iterActive = aControlList.insert(iterActive, pEdit);
pEdit->SetText(sRight);
pEdit->SetSizePixel(aControlSize);
@@ -3175,7 +3173,7 @@ void SwTokenWindow::InsertAtSelection(
}
else
{
- aControlList.erase(iterActive);
+ iterActive = aControlList.erase(iterActive);
pActiveCtrl->Hide();
delete pActiveCtrl;
}
@@ -3183,7 +3181,7 @@ void SwTokenWindow::InsertAtSelection(
//now the new button
SwTOXButton* pButton = new SwTOXButton(&aCtrlParentWin, this, aToInsertToken);
- aControlList.insert(iterInsert, pButton);
+ aControlList.insert(iterActive, pButton);
pButton->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemBtnHdl));
pButton->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusBtnHdl));
More information about the Libreoffice-commits
mailing list