[Libreoffice-commits] core.git: 2 commits - sw/source vcl/unx
Michael Stahl (via logerrit)
logerrit at kemper.freedesktop.org
Sat Dec 7 19:37:38 UTC 2019
sw/source/core/doc/DocumentContentOperationsManager.cxx | 31 ++++++++++++----
vcl/unx/gtk3/gtk3gtkinst.cxx | 3 +
2 files changed, 26 insertions(+), 8 deletions(-)
New commits:
commit 522ed1b685f5b7eb52efb9d874dfacc02bf82139
Author: Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Fri Dec 6 17:44:26 2019 +0100
Commit: Michael Stahl <michael.stahl at cib.de>
CommitDate: Sat Dec 7 20:36:43 2019 +0100
ofz#18563 sw: fix 2 problems with field marks
* sw::CalcBreaks had a thinko in that a separator that had a start but
no matching end wasn't reported
* DocumentContentOperationsManager::DelFullPara() may apparently be
called with a rPam having just one position, in which case expanding
it doesn't work.
Change-Id: I6503498dd38d188799385aa706ffe7dfccfdba08
Reviewed-on: https://gerrit.libreoffice.org/84662
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl at cib.de>
diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index 50b49232d511..6ead169ec498 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -81,6 +81,8 @@
#include <com/sun/star/i18n/WordType.hpp>
#include <com/sun/star/i18n/XBreakIterator.hpp>
#include <com/sun/star/embed/XEmbeddedObject.hpp>
+
+#include <tuple>
#include <memory>
@@ -494,7 +496,7 @@ namespace sw
SwNodes const& rNodes(rPam.GetPoint()->nNode.GetNodes());
IDocumentMarkAccess const& rIDMA(*rPam.GetDoc()->getIDocumentMarkAccess());
- std::stack<sw::mark::IFieldmark const*> startedFields;
+ std::stack<std::tuple<sw::mark::IFieldmark const*, bool, sal_uLong, sal_Int32>> startedFields;
for (sal_uLong n = nStartNode; n <= nEndNode; ++n)
{
@@ -534,7 +536,7 @@ namespace sw
case CH_TXT_ATR_FIELDSTART:
{
auto const pFieldMark(rIDMA.getFieldmarkAt(SwPosition(rTextNode, i)));
- startedFields.push(pFieldMark);
+ startedFields.emplace(pFieldMark, false, 0, 0);
break;
}
case CH_TXT_ATR_FIELDSEP:
@@ -545,7 +547,10 @@ namespace sw
}
else
{ // no way to find the field via MarkManager...
- assert(startedFields.top()->IsCoveringPosition(SwPosition(rTextNode, i)));
+ assert(std::get<0>(startedFields.top())->IsCoveringPosition(SwPosition(rTextNode, i)));
+ std::get<1>(startedFields.top()) = true;
+ std::get<2>(startedFields.top()) = n;
+ std::get<3>(startedFields.top()) = i;
}
break;
}
@@ -557,7 +562,7 @@ namespace sw
}
else
{ // fieldmarks must not overlap => stack
- assert(startedFields.top() == rIDMA.getFieldmarkAt(SwPosition(rTextNode, i)));
+ assert(std::get<0>(startedFields.top()) == rIDMA.getFieldmarkAt(SwPosition(rTextNode, i)));
startedFields.pop();
}
break;
@@ -579,14 +584,22 @@ namespace sw
}
while (!startedFields.empty())
{
- auto const pField(startedFields.top());
- startedFields.pop();
- SwPosition const& rStart(pField->GetMarkStart());
+ SwPosition const& rStart(std::get<0>(startedFields.top())->GetMarkStart());
std::pair<sal_uLong, sal_Int32> const pos(
rStart.nNode.GetIndex(), rStart.nContent.GetIndex());
auto it = std::lower_bound(rBreaks.begin(), rBreaks.end(), pos);
assert(it == rBreaks.end() || *it != pos);
rBreaks.insert(it, pos);
+ if (std::get<1>(startedFields.top()))
+ {
+ std::pair<sal_uLong, sal_Int32> const posSep(
+ std::get<2>(startedFields.top()),
+ std::get<3>(startedFields.top()));
+ it = std::lower_bound(rBreaks.begin(), rBreaks.end(), posSep);
+ assert(it == rBreaks.end() || *it != posSep);
+ rBreaks.insert(it, posSep);
+ }
+ startedFields.pop();
}
}
}
@@ -1963,6 +1976,10 @@ bool DocumentContentOperationsManager::DelFullPara( SwPaM& rPam )
{
SwPaM temp(rPam, nullptr);
+ if (!temp.HasMark())
+ {
+ temp.SetMark();
+ }
if (SwTextNode *const pNode = temp.Start()->nNode.GetNode().GetTextNode())
{ // rPam may not have nContent set but IsFieldmarkOverlap requires it
pNode->MakeStartIndex(&temp.Start()->nContent);
commit f6080df9e64b6291202e75354f9458fc0895932e
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Fri Dec 6 15:14:09 2019 +0000
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Sat Dec 7 20:36:38 2019 +0100
return blank ident if empty notebook
Change-Id: Icede4b1458fe858cc6d406b4cbae9f8d579d417b
Reviewed-on: https://gerrit.libreoffice.org/84660
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 15a6981a4a8f..fc9a04f14025 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -5893,7 +5893,8 @@ public:
virtual OString get_current_page_ident() const override
{
- return get_page_ident(get_current_page());
+ const int nPage = get_current_page();
+ return nPage != -1 ? get_page_ident(nPage) : OString();
}
virtual weld::Container* get_page(const OString& rIdent) const override
More information about the Libreoffice-commits
mailing list