[Libreoffice-commits] core.git: Branch 'distro/lhm/libreoffice-6-4+backports' - 13 commits - i18npool/source jvmfwk/plugins oox/source sc/source sd/qa sd/source sfx2/source svx/source sw/source

Michael Weghorn (via logerrit) logerrit at kemper.freedesktop.org
Tue Apr 7 08:31:01 UTC 2020


 i18npool/source/localedata/data/vi_VN.xml               |   10 +--
 jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx     |   12 ++++
 oox/source/ppt/pptshape.cxx                             |    4 +
 sc/source/ui/unoobj/chart2uno.cxx                       |    5 +
 sd/qa/unit/data/pptx/tdf131554.pptx                     |binary
 sd/qa/unit/export-tests-ooxml2.cxx                      |   11 ++++
 sd/source/ui/animations/CustomAnimationPane.cxx         |    2 
 sfx2/source/view/viewprn.cxx                            |    5 +
 svx/source/dialog/srchdlg.cxx                           |    2 
 sw/source/core/doc/DocumentContentOperationsManager.cxx |   42 +++++++++++++---
 sw/source/core/docnode/node.cxx                         |    2 
 sw/source/core/inc/txtfrm.hxx                           |    2 
 sw/source/core/layout/frmtool.cxx                       |   32 ++++++++++++
 sw/source/core/layout/paintfrm.cxx                      |    8 +--
 sw/source/core/text/redlnitr.cxx                        |    3 -
 sw/source/core/text/txtfrm.cxx                          |    2 
 sw/source/core/undo/undel.cxx                           |   25 ---------
 17 files changed, 122 insertions(+), 45 deletions(-)

New commits:
commit 3e1f891a9f733f0b0a6d4f16e1455dd015661f7e
Merge: 931fcb444a46 eb40f8ba7d55
Author:     Michael Weghorn <m.weghorn at posteo.de>
AuthorDate: Tue Apr 7 10:29:28 2020 +0200
Commit:     Michael Weghorn <m.weghorn at posteo.de>
CommitDate: Tue Apr 7 10:29:28 2020 +0200

    Merge branch 'libreoffice-6-4'
    
    into distro/lhm/libreoffice-6-4+backports
    
    Change-Id: Ie9592c8a69a5fd404a95e9ea113784767b797ce2

commit eb40f8ba7d55489bd8bc2f8940dc5829402cded8
Author:     Michael Weghorn <m.weghorn at posteo.de>
AuthorDate: Fri Apr 3 11:54:42 2020 +0200
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue Apr 7 10:18:42 2020 +0200

    tdf#131849 Handle changed doc print options when printer changed
    
    Previously, the SfxPrinterChangeFlags::OPTIONS flag was
    only set for the case that the printer itself was considered
    unchanged ('else' case below).
    
    However, this also needs to be done when the printer is
    considered to have changed, so the flag is properly
    passed in the call to 'SetPrinter' below, to make
    sure that changes in document-specific options are
    properly propagated.
    
    Change-Id: Id91ebbbf40888e52149b40ac25f188af4be425f3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91626
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.weghorn at posteo.de>
    (cherry picked from commit 21fc54777d5dedc33d6bfa23b9f1072a6667eebe)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91519
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sfx2/source/view/viewprn.cxx b/sfx2/source/view/viewprn.cxx
index 2347f69584c4..8ee3fe18de04 100644
--- a/sfx2/source/view/viewprn.cxx
+++ b/sfx2/source/view/viewprn.cxx
@@ -542,6 +542,11 @@ void SfxViewShell::SetPrinter_Impl( VclPtr<SfxPrinter>& pNewPrinter )
     if ( (aTempPrtName != aDocPrtName) || (pDocPrinter->IsDefPrinter() != pNewPrinter->IsDefPrinter()) )
     {
         nChangedFlags |= SfxPrinterChangeFlags::PRINTER|SfxPrinterChangeFlags::JOBSETUP;
+        if ( ! (pNewPrinter->GetOptions() == pDocPrinter->GetOptions()) )
+        {
+            nChangedFlags |= SfxPrinterChangeFlags::OPTIONS;
+        }
+
         pDocPrinter = pNewPrinter;
     }
     else
commit f8d0f77de20d6adf6f532d13003a96856a98f69b
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Thu Apr 2 18:59:40 2020 +0200
Commit:     Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Mon Apr 6 14:37:17 2020 +0200

    (related: tdf#130685) sw_redlinehide: fix update of pLastNode/pParaPropsNode
    
    If you Select All, Cut then move the cursor around a bit then paste, then this happens:
    
    sw/source/core/text/txtfrm.cxx:3461: void SwTextFrame::CalcAdditionalFirstLineOffset(): Assertion `pTextNode->IsNumbered(getRootFrame()) == pTextNode->IsNumbered(nullptr)' failed.
    
    The reason is this borked MergedPara, which really only has 1 node it's listening on, but pLastNode and pParaPropsNode point to a node that is actually part of a different MergedPara now.
    
    $6 = {
      listener = {
        m_rToTell = @0x6c02700,
        m_vDepends = std::__debug::vector of length 1, capacity 256 = {{
            <SwClient> = {
              m_pRegisteredIn = 0x6af5f20
            },
          }}
      },
      extents = std::__debug::vector of length 0, capacity 0,
      mergedText = "",
      pParaPropsNode = 0x6d1c390,
      pFirstNode = 0x6af5f20,
      pLastNode = 0x6d1c390
    }
    
    The reason is that SwContentNode::DelFrames() doesn't update these members properly; at the time when it's called for the previous pLastNode, the offending node has Merge::NonFirst set already in the call of CheckParaRedlineMerge() so it sets the wrong new pLastNode.
    
    Fix this by iterating DelFrames() loop backward.
    
    (regression from sw_redlinehide)
    
    Change-Id: I508fd25af385a25ba9ed78d71aa3d1f02a7ac7a3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91597
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>
    (cherry picked from commit 520b0e1679d7a97aa3d91cfc95ca647339da7e84)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91524
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sw/source/core/docnode/node.cxx b/sw/source/core/docnode/node.cxx
index 37083c1d7fbc..955e113f2768 100644
--- a/sw/source/core/docnode/node.cxx
+++ b/sw/source/core/docnode/node.cxx
@@ -1385,6 +1385,7 @@ void SwContentNode::DelFrames(SwRootFrame const*const pLayout)
                                 break;
                             }
                         }
+                        assert(pMerged->listener.IsListeningTo(pMerged->pParaPropsNode));
                     }
                     assert(GetIndex() <= pMerged->pLastNode->GetIndex());
                     if (this == pMerged->pLastNode)
@@ -1406,6 +1407,7 @@ void SwContentNode::DelFrames(SwRootFrame const*const pLayout)
                             }
                         }
                         assert(pMerged->pFirstNode->GetIndex() <= pMerged->pLastNode->GetIndex());
+                        assert(pMerged->listener.IsListeningTo(pMerged->pLastNode));
                     }
                     // avoid re-parenting mess (ModifyChangedHint)
                     pMerged->listener.EndListening(this);
diff --git a/sw/source/core/text/redlnitr.cxx b/sw/source/core/text/redlnitr.cxx
index 8ea8b5916202..9ddfc4873dd9 100644
--- a/sw/source/core/text/redlnitr.cxx
+++ b/sw/source/core/text/redlnitr.cxx
@@ -277,7 +277,8 @@ CheckParaRedlineMerge(SwTextFrame & rFrame, SwTextNode & rTextNode,
         }
         // unfortunately DelFrames() must be done before StartListening too,
         // otherwise footnotes cannot be deleted by SwTextFootnote::DelFrames!
-        for (auto iter = ++nodes.begin(); iter != nodes.end(); ++iter)
+        auto const end(--nodes.rend());
+        for (auto iter = nodes.rbegin(); iter != end; ++iter)
         {
             (**iter).DelFrames(rFrame.getRootFrame());
         }
commit fd95dfdbe28d033596d65c517e12ee91e49c8a7c
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Sun Apr 5 20:33:31 2020 +0100
Commit:     Michael Stahl <michael.stahl at cib.de>
CommitDate: Mon Apr 6 11:28:04 2020 +0200

    attempt to deref end() iterator
    
    seen when dragging last animation in animation pane up one position
    
    Change-Id: I2c5163a58bb67fc7982c41546559207977e8b7c5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91714
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>

diff --git a/sd/source/ui/animations/CustomAnimationPane.cxx b/sd/source/ui/animations/CustomAnimationPane.cxx
index c63e4d0e8712..8a839475f3ec 100644
--- a/sd/source/ui/animations/CustomAnimationPane.cxx
+++ b/sd/source/ui/animations/CustomAnimationPane.cxx
@@ -2457,7 +2457,7 @@ void CustomAnimationPane::onDragNDropComplete(std::vector< CustomAnimationEffect
             mpMainSequence->moveToBeforeEffect( pEffect, pEffectInsertBefore );
 
             // Done moving effect and its hidden sub-effects when *next* effect is visible.
-            if ( mpCustomAnimationList->isVisible( *aIter ) )
+            if (aIter != aEnd && mpCustomAnimationList->isVisible(*aIter))
                 break;
         }
 
commit e53bf1716a4ed3be7abbf07a22a3ca55bc88ff34
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Sat Apr 4 19:27:41 2020 +0100
Commit:     Michael Stahl <michael.stahl at cib.de>
CommitDate: Mon Apr 6 11:23:42 2020 +0200

    rhbz#1820868 deref of null xLayoutManager
    
    Change-Id: Ib396ef9f5b019b08a181eeb5a8eb983bdb401db4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91710
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>

diff --git a/svx/source/dialog/srchdlg.cxx b/svx/source/dialog/srchdlg.cxx
index 01274ced7f7b..5f2b426e759d 100644
--- a/svx/source/dialog/srchdlg.cxx
+++ b/svx/source/dialog/srchdlg.cxx
@@ -2437,6 +2437,8 @@ OUString SvxSearchDialogWrapper::GetSearchLabel()
             pViewFrame->GetFrame().GetFrameInterface(), css::uno::UNO_QUERY_THROW);
     css::uno::Reference< css::frame::XLayoutManager > xLayoutManager;
     xPropSet->getPropertyValue("LayoutManager") >>= xLayoutManager;
+    if (!xLayoutManager.is())
+        return OUString();
     css::uno::Reference< css::ui::XUIElement > xUIElement =
         xLayoutManager->getElement("private:resource/toolbar/findbar");
     if (!xUIElement.is())
commit 431dd62b7d1a4f8ca1a1833aa33c1f5f08a900a0
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Thu Apr 2 17:21:32 2020 +0200
Commit:     Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Sun Apr 5 00:26:12 2020 +0200

    (related: tdf#130685) sw: adapt definition of sw_redlinehide index 0
    
    ... to the change to use the last node - not the first node - for
    paragraph properties.
    
    The problem is that if you move the cursor around at some step of reproducing the bug, this happens:
    sw/source/core/crsr/crsrsh.cxx:544: bool SwCursorShell::LRMargin(bool, bool): Assertion `sw::GetParaPropsNode(*GetLayout(), GetCursor_()->GetPoint()->nNode) == pTextNd' failed.
    
    For a fully deleted range, it looks more plausible to map index 0 to the end of the last node instead of the start of the first node now.
    
    This means that text will be inserted at the end of the last node too.
    
    (regression from fa5eb82b398e29ae033f7b7c8c8195dfc10cf5b0)
    
    Change-Id: Ica891aea658b85211397320a44c9c10b48ca2659
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91598
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>
    (cherry picked from commit 58353884dc86bdb3c1464f8bbf8c3e131584b78a)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91525
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx
index f47402d1b211..6d86d2253631 100644
--- a/sw/source/core/text/txtfrm.cxx
+++ b/sw/source/core/text/txtfrm.cxx
@@ -1178,7 +1178,7 @@ MapViewToModel(MergedPara const& rMerged, TextFrameIndex const i_nIndex)
     assert(nIndex == 0 && "view index out of bounds");
     return pExtent
         ? std::make_pair(pExtent->pNode, pExtent->nEnd) //1-past-the-end index
-        : std::make_pair(rMerged.pFirstNode, sal_Int32(0));
+        : std::make_pair(const_cast<SwTextNode*>(rMerged.pLastNode), rMerged.pLastNode->Len());
 }
 
 TextFrameIndex MapModelToView(MergedPara const& rMerged, SwTextNode const*const pNode, sal_Int32 const nIndex)
commit 27b775647e8fd557d5581b6416f3f35f5ae02b4d
Author:     Serge Krot <Serge.Krot at cib.de>
AuthorDate: Wed Apr 1 21:08:29 2020 +0200
Commit:     Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Sun Apr 5 00:23:52 2020 +0200

    tdf#131004 fix unstable paint of writer consecutive section frames
    
    Change-Id: I565129dcd077ddbfccedb37dfbf1b9e1acf4eb95
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91532
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    (cherry picked from commit 8666dfecbaac69b9dc9a9c23a05654d847608907)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91521

diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx
index 1ca2e28d858e..60b25866d073 100644
--- a/sw/source/core/layout/paintfrm.cxx
+++ b/sw/source/core/layout/paintfrm.cxx
@@ -836,8 +836,8 @@ void SwSubsRects::RemoveSuperfluousSubsidiaryLines( const SwLineRects &rRects, S
 
 void SwLineRects::LockLines( bool bLock )
 {
-    for (iterator it = aLineRects.begin(); it != aLineRects.end(); ++it)
-       (*it).Lock( bLock );
+    for (SwLineRect& rLRect : aLineRects)
+       rLRect.Lock( bLock );
 }
 
 static void lcl_DrawDashedRect( OutputDevice * pOut, SwLineRect const & rLRect )
@@ -1016,7 +1016,7 @@ void SwSubsRects::PaintSubsidiary( OutputDevice *pOut,
                                  ((nLi < rLk.Left() && nLi+21 > rLk.Left()) ||
                                   (nLk < rLi.Left() && nLk+21 > rLi.Left())))
                             {
-                                aLineRects.erase(aLineRects.begin() + k);
+                                aLineRects.erase(aLineRects.begin() + i);
                                 // don't continue with inner loop any more:
                                 // the array may shrink!
                                 --i;
@@ -1031,7 +1031,7 @@ void SwSubsRects::PaintSubsidiary( OutputDevice *pOut,
                                  ((nLi < rLk.Top() && nLi+21 > rLk.Top()) ||
                                   (nLk < rLi.Top() && nLk+21 > rLi.Top())))
                             {
-                                aLineRects.erase(aLineRects.begin() + k);
+                                aLineRects.erase(aLineRects.begin() + i);
                                 // don't continue with inner loop any more:
                                 // the array may shrink!
                                 --i;
commit f7aa951014c283bc629eaea14da2ca0d68f99431
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Thu Apr 2 17:18:37 2020 +0200
Commit:     Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Sun Apr 5 00:23:34 2020 +0200

    tdf#130685 sw_redlinehide: fix copying to position following redline
    
    In DocumentContentOperationsManager::CopyWithFlyInFly(), first
    CopyNodes() also creates all layout frames, then SaveRedlEndPosForRestore
    fixes the end position of all redlines that were moved by CopyNodes()
    (they were moved not by changing their position but by inserting
    new nodes before their end position).
    
    Of course this means that the layout frames are created with redlines
    that have only a temporary end position, and then things go wrong when
    the end positions are adjusted, so add something similar to
    SwUndoDelete::UndoImpl() to recreate the frames in CopyWithFlyInFly().
    
    This hit the assert:
    sw/source/core/text/redlnitr.cxx:94: std::unique_ptr<sw::MergedPara> sw::CheckParaRedlineMerge(SwTextFrame&, SwTextNode&, sw::FrameMode): Assertion `pNode != &rTextNode || &pStart->nNode.GetNode() == &rTextNode' failed.
    
    (regression from ... sw_redlinehide)
    
    Change-Id: I82e0f5b320cab201e762f58800f83e08f4f01048
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91596
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>
    (cherry picked from commit 166b5010b402a41b192b1659093a25acf9065fd9)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91523
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index e677c60ec9b2..727311ec7d09 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -44,6 +44,7 @@
 #include <redline.hxx>
 #include <txtfrm.hxx>
 #include <rootfrm.hxx>
+#include <frmtool.hxx>
 #include <unocrsr.hxx>
 #include <mvsave.hxx>
 #include <ndtxt.hxx>
@@ -3403,22 +3404,43 @@ void DocumentContentOperationsManager::CopyWithFlyInFly(
     assert(!pCopiedPaM || pCopiedPaM->second.nNode <= rInsPos);
 
     SwDoc* pDest = rInsPos.GetNode().GetDoc();
-    SwNodeIndex aSavePos( rInsPos, -1 );
-    bool bEndIsEqualEndPos = rInsPos == rRg.aEnd;
+    SwNodeIndex aSavePos( rInsPos );
 
     if (rRg.aStart != rRg.aEnd)
     {
+        bool bEndIsEqualEndPos = rInsPos == rRg.aEnd;
+        --aSavePos;
         SaveRedlEndPosForRestore aRedlRest( rInsPos, 0 );
 
         // insert behind the already copied start node
-        m_rDoc.GetNodes().CopyNodes( rRg, rInsPos, bMakeNewFrames, true );
+        m_rDoc.GetNodes().CopyNodes( rRg, rInsPos, false, true );
         aRedlRest.Restore();
+        if (bMakeNewFrames) // tdf#130685 only after aRedlRest
+        {   // recreate from previous node (could be merged now)
+            if (SwTextNode *const pNode = aSavePos.GetNode().GetTextNode())
+            {
+                sw::RecreateStartTextFrames(*pNode);
+            }
+        }
+        bool const isAtStartOfSection(aSavePos.GetNode().IsStartNode());
+        ++aSavePos;
+        if (bMakeNewFrames)
+        {
+            // it's possible that CheckParaRedlineMerge() deleted frames
+            // on rInsPos so have to include it, but it must not be included
+            // if it was the first node in the document so that MakeFrames()
+            // will find the existing (wasn't deleted) frame on it
+            SwNodeIndex const end(rInsPos,
+                    (rInsPos.GetNode().IsEndNode() || isAtStartOfSection)
+                    ? 0 : +1);
+            ::MakeFrames(pDest, aSavePos, end);
+        }
+        if (bEndIsEqualEndPos)
+        {
+            const_cast<SwNodeIndex&>(rRg.aEnd) = aSavePos;
+        }
     }
 
-    ++aSavePos;
-    if( bEndIsEqualEndPos )
-        const_cast<SwNodeIndex&>(rRg.aEnd) = aSavePos;
-
 #if OSL_DEBUG_LEVEL > 0
     {
         //JP 17.06.99: Bug 66973 - check count only if the selection is in
diff --git a/sw/source/core/inc/txtfrm.hxx b/sw/source/core/inc/txtfrm.hxx
index 0a1d75d12153..6bf44794cbaf 100644
--- a/sw/source/core/inc/txtfrm.hxx
+++ b/sw/source/core/inc/txtfrm.hxx
@@ -142,6 +142,8 @@ bool IsMarkHidden(SwRootFrame const& rLayout, ::sw::mark::IMark const& rMark);
 bool IsMarkHintHidden(SwRootFrame const& rLayout,
         SwTextNode const& rNode, SwTextAttrEnd const& rHint);
 
+void RecreateStartTextFrames(SwTextNode & rNode);
+
 } // namespace sw
 
 /// Represents the visualization of a paragraph. Typical upper is an
diff --git a/sw/source/core/layout/frmtool.cxx b/sw/source/core/layout/frmtool.cxx
index eafc4fd48a49..5c6e6cc4dd44 100644
--- a/sw/source/core/layout/frmtool.cxx
+++ b/sw/source/core/layout/frmtool.cxx
@@ -1356,6 +1356,38 @@ void AppendAllObjs(const SwFrameFormats* pTable, const SwFrame* pSib)
     }
 }
 
+namespace sw {
+
+void RecreateStartTextFrames(SwTextNode & rNode)
+{
+    std::vector<SwTextFrame*> frames;
+    SwIterator<SwTextFrame, SwTextNode, sw::IteratorMode::UnwrapMulti> aIter(rNode);
+    for (SwTextFrame* pFrame = aIter.First(); pFrame; pFrame = aIter.Next())
+    {
+        if (pFrame->getRootFrame()->IsHideRedlines())
+        {
+            frames.push_back(pFrame);
+        }
+    }
+    auto eMode(sw::FrameMode::Existing);
+    for (SwTextFrame * pFrame : frames)
+    {
+        // SplitNode could have moved the original frame to the start node
+        // & created a new one on end, or could have created new frame on
+        // start node... grab start node's frame and recreate MergedPara.
+        SwTextNode & rFirstNode(pFrame->GetMergedPara()
+            ? *pFrame->GetMergedPara()->pFirstNode
+            : rNode);
+        assert(rFirstNode.GetIndex() <= rNode.GetIndex());
+        pFrame->SetMergedPara(sw::CheckParaRedlineMerge(
+                    *pFrame, rFirstNode, eMode));
+        eMode = sw::FrameMode::New; // Existing is not idempotent!
+        // note: this may or may not delete frames on the end node
+    }
+}
+
+} // namespace sw
+
 /** local method to set 'working' position for newly inserted frames
 
     OD 12.08.2003 #i17969#
diff --git a/sw/source/core/undo/undel.cxx b/sw/source/core/undo/undel.cxx
index ab32dff0901c..47793ff5ba3e 100644
--- a/sw/source/core/undo/undel.cxx
+++ b/sw/source/core/undo/undel.cxx
@@ -1085,30 +1085,7 @@ void SwUndoDelete::UndoImpl(::sw::UndoRedoContext & rContext)
         // frames
         SwTextNode *const pStartNode(aIdx.GetNodes()[m_nSttNode]->GetTextNode());
         assert(pStartNode);
-        std::vector<SwTextFrame*> frames;
-        SwIterator<SwTextFrame, SwTextNode, sw::IteratorMode::UnwrapMulti> aIter(*pStartNode);
-        for (SwTextFrame* pFrame = aIter.First(); pFrame; pFrame = aIter.Next())
-        {
-            if (pFrame->getRootFrame()->IsHideRedlines())
-            {
-                frames.push_back(pFrame);
-            }
-        }
-        auto eMode(sw::FrameMode::Existing);
-        for (SwTextFrame * pFrame : frames)
-        {
-            // SplitNode could have moved the original frame to the start node
-            // & created a new one on end, or could have created new frame on
-            // start node... grab start node's frame and recreate MergedPara.
-            SwTextNode & rFirstNode(pFrame->GetMergedPara()
-                ? *pFrame->GetMergedPara()->pFirstNode
-                : *pStartNode);
-            assert(rFirstNode.GetIndex() <= pStartNode->GetIndex());
-            pFrame->SetMergedPara(sw::CheckParaRedlineMerge(
-                        *pFrame, rFirstNode, eMode));
-            eMode = sw::FrameMode::New; // Existing is not idempotent!
-            // note: this may or may not delete frames on the end node
-        }
+        sw::RecreateStartTextFrames(*pStartNode);
     }
 
     // create frames after SetSaveData has recreated redlines
commit c7c157c905b8b70aa3e426a6e4d2ba40963caf1a
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Tue Mar 31 17:37:51 2020 +0200
Commit:     Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Sun Apr 5 00:23:15 2020 +0200

    (related: tdf#130685) sw: fix ~SwIndexReg asserts from ...
    
    ... lcl_DeleteRedlines(), if there are redlines immediately consecutive
    that get deleted; merge the SwPaM ring in that case which should help.
    
    Change-Id: I07b67413ad6ee52bc81b89facc40202d0ca75e2a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91595
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>
    (cherry picked from commit 27aa4b16bf704d0246595750daf57b57ff2577b3)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91522
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index aeafeea3dc2e..e677c60ec9b2 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -382,6 +382,12 @@ namespace
                                 lcl_SetCpyPos( *pREnd, *pStt, *pCpyStt,
                                                 *pDelPam->GetPoint(), nDelCount );
                             }
+
+                            if (pDelPam->GetNext() && *pDelPam->GetNext()->End() == *pDelPam->Start())
+                            {
+                                *pDelPam->GetNext()->End() = *pDelPam->End();
+                                pDelPam.reset(pDelPam->GetNext());
+                            }
                         }
                     }
                 }
commit 0d631aad92e874a95d9cd31ab50c63085fcabced
Author:     Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Thu Apr 2 11:14:59 2020 +0200
Commit:     Eike Rathke <erack at redhat.com>
CommitDate: Fri Apr 3 17:10:20 2020 +0200

    use mdds position hint (tdf#131716)
    
    Otherwise this is the usual case of possible quadratic mdds slowness.
    
    Change-Id: I5b33df65e127702c011517d79b9cd41a7e820ca0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91553
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lunak at collabora.com>
    (cherry picked from commit 55220e7bc6576a7575c675ba425e757a3aefa243)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91517
    Reviewed-by: Eike Rathke <erack at redhat.com>

diff --git a/sc/source/ui/unoobj/chart2uno.cxx b/sc/source/ui/unoobj/chart2uno.cxx
index 0f404ba5d780..8916ee2cf09d 100644
--- a/sc/source/ui/unoobj/chart2uno.cxx
+++ b/sc/source/ui/unoobj/chart2uno.cxx
@@ -42,6 +42,7 @@
 #include <tokenarray.hxx>
 #include <scmatrix.hxx>
 #include <brdcst.hxx>
+#include <mtvelements.hxx>
 
 #include <formula/opcode.hxx>
 #include <svl/sharedstring.hxx>
@@ -2453,6 +2454,8 @@ void ScChart2DataSequence::BuildDataCache()
             {
                 for (SCCOL nCol = aRange.aStart.Col(); nCol <= aRange.aEnd.Col(); ++nCol)
                 {
+                    sc::ColumnBlockPosition hint;
+                    m_pDocument->InitColumnBlockPosition( hint, nTab, nCol );
                     for (SCROW nRow = aRange.aStart.Row(); nRow <= aRange.aEnd.Row(); ++nRow)
                     {
                         bool bColHidden = m_pDocument->ColHidden(nCol, nTab, nullptr, &nLastCol);
@@ -2472,7 +2475,7 @@ void ScChart2DataSequence::BuildDataCache()
                         ScAddress aAdr(nCol, nRow, nTab);
                         aItem.maString = m_pDocument->GetString(aAdr);
 
-                        ScRefCellValue aCell(*m_pDocument, aAdr);
+                        ScRefCellValue aCell(*m_pDocument, aAdr, hint);
                         switch (aCell.meType)
                         {
                             case CELLTYPE_VALUE:
commit 7a302dee87224d02853a5955cc6f715a40186803
Author:     Eike Rathke <erack at redhat.com>
AuthorDate: Thu Apr 2 18:14:14 2020 +0200
Commit:     Adolfo Jayme Barrientos <fitojb at ubuntu.com>
CommitDate: Fri Apr 3 10:35:13 2020 +0200

    Resolves: tdf#131829 [vi-VN] set currency VND decimals to 0
    
    Change-Id: I865d6b3dcb7f3bff037a4015aa98db2fa2578672
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91593
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Jenkins
    (cherry picked from commit 28ccea8b7feed20d33e2ca7d6197d947dbbad848)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91516
    Reviewed-by: Adolfo Jayme Barrientos <fitojb at ubuntu.com>

diff --git a/i18npool/source/localedata/data/vi_VN.xml b/i18npool/source/localedata/data/vi_VN.xml
index 86f149dba1ca..945cf65cc707 100644
--- a/i18npool/source/localedata/data/vi_VN.xml
+++ b/i18npool/source/localedata/data/vi_VN.xml
@@ -90,19 +90,19 @@
       <FormatCode>#.##0 [CURRENCY];-#.##0 [CURRENCY]</FormatCode>
     </FormatElement>
     <FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
-      <FormatCode>#.##0,00 [CURRENCY];-#.##0,00 [CURRENCY]</FormatCode>
+      <FormatCode>#.##0 [CURRENCY];-#.##0 [CURRENCY]</FormatCode>
     </FormatElement>
     <FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
       <FormatCode>#.##0 [CURRENCY];[RED]-#.##0 [CURRENCY]</FormatCode>
     </FormatElement>
     <FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
-      <FormatCode>#.##0,00 [CURRENCY];[RED]-#.##0,00 [CURRENCY]</FormatCode>
+      <FormatCode>#.##0 [CURRENCY];[RED]-#.##0 [CURRENCY]</FormatCode>
     </FormatElement>
     <FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
-      <FormatCode>#.##0,00 CCC</FormatCode>
+      <FormatCode>#.##0 CCC</FormatCode>
     </FormatElement>
     <FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
-      <FormatCode>#.##0,-- [CURRENCY];[RED]-#.##0,-- [CURRENCY]</FormatCode>
+      <FormatCode>#.##0 [CURRENCY];[RED]-#.##0 [CURRENCY]</FormatCode>
     </FormatElement>
     <FormatElement msgid="DateFormatskey1" default="true" type="short" usage="DATE" formatindex="18">
       <FormatCode>D/M/YY</FormatCode>
@@ -339,7 +339,7 @@
       <CurrencySymbol>₫</CurrencySymbol>
       <BankSymbol>VND</BankSymbol>
       <CurrencyName>Việt Nam Đồng</CurrencyName>
-      <DecimalPlaces>2</DecimalPlaces>
+      <DecimalPlaces>0</DecimalPlaces>
     </Currency>
   </LC_CURRENCY>
   <LC_TRANSLITERATION>
commit 44a40091ae960a10ef88f16f04138989366017fd
Author:     ilhan <ilhanyesil at gmx.de>
AuthorDate: Wed Mar 25 11:18:09 2020 +0100
Commit:     Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Thu Apr 2 21:41:44 2020 +0200

    tdf#131399 Update java settings after slight java version change
    
    Under linux, the version is now also checked for changes at startup
    of libreoffice.
    
    Change-Id: I572f718cf5afc83a70d98a6897f1d3d6877644f7
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91037
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>
    (cherry picked from commit 6b6af620ff53209487a146aa3977db328c3a6300)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91405
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
index 128de9b352b0..4760ab629313 100644
--- a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
+++ b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
@@ -867,6 +867,18 @@ javaPluginError jfw_plugin_existJRE(const JavaInfo *pInfo, bool *exist)
             *exist = true;
             JFW_TRACE2("Java runtime library exist: " << sRuntimeLib);
 
+            // Check version
+            rtl::Reference<VendorBase> aVendorInfo = getJREInfoByPath(sLocation);
+            if (!aVendorInfo.is())
+            {
+                *exist = false;
+                JFW_TRACE2("JRE or supported vendor not accessible at location: " << sLocation);
+            }
+            else if(pInfo->sVersion!=aVendorInfo->getVersion())
+            {
+                *exist = false;
+                JFW_TRACE2("Mismatch between version number in libreoffice settings and installed JRE:  " << pInfo->sVersion <<" != " << aVendorInfo->getVersion());
+            }
         }
         else if (::osl::File::E_NOENT == rc_itemRt)
         {
commit 55d423e8f371e914c51f9aa18aacede46355b133
Author:     nd101 <Fong at nd.com.cn>
AuthorDate: Wed Mar 25 13:17:48 2020 +0800
Commit:     Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Thu Apr 2 21:40:50 2020 +0200

    tdf#131554 placeholder iteration fails to stop when a match is found
    
    Wrong placeholder is returned due to iteration not stopping
    when a match is found. It causes a text element position
    to be incorrectly set.
    
    Change-Id: I58be6825cec7a61f48b46418bdf28964c1afe4ce
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91023
    Reviewed-by: Xisco Faulí <xiscofauli at libreoffice.org>
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>
    Tested-by: Jenkins
    Signed-off-by: Xisco Fauli <xiscofauli at libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91472
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/oox/source/ppt/pptshape.cxx b/oox/source/ppt/pptshape.cxx
index 0088c1e51673..39b0c2eb4abc 100644
--- a/oox/source/ppt/pptshape.cxx
+++ b/oox/source/ppt/pptshape.cxx
@@ -424,6 +424,8 @@ namespace
 // 3. ph with nSecondSubType and the same oSubTypeIndex
 // 4. ph with nSecondSubType
 // 5. ph with the same oSubTypeIndex
+// It appears 3 and 1 has the same highest prority.
+
 oox::drawingml::ShapePtr PPTShape::findPlaceholder( sal_Int32 nFirstSubType, sal_Int32 nSecondSubType,
     const OptValue< sal_Int32 >& oSubTypeIndex, std::vector< oox::drawingml::ShapePtr >& rShapes, bool bMasterOnly )
 {
@@ -473,7 +475,7 @@ oox::drawingml::ShapePtr PPTShape::findPlaceholder( sal_Int32 nFirstSubType, sal
                     aChoiceShapePtr3 = aChoiceShapePtr4;
             }
         }
-        if (aShapePtr.get())
+        if (aShapePtr.get() || aChoiceShapePtr2.get())
             break;
         ++aRevIter;
     }
diff --git a/sd/qa/unit/data/pptx/tdf131554.pptx b/sd/qa/unit/data/pptx/tdf131554.pptx
new file mode 100644
index 000000000000..a65f423add39
Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf131554.pptx differ
diff --git a/sd/qa/unit/export-tests-ooxml2.cxx b/sd/qa/unit/export-tests-ooxml2.cxx
index 78452a763f01..d0ef2dac0eb7 100644
--- a/sd/qa/unit/export-tests-ooxml2.cxx
+++ b/sd/qa/unit/export-tests-ooxml2.cxx
@@ -182,6 +182,7 @@ public:
     void testTdf127372();
     void testTdf127379();
     void testTdf98603();
+    void testTdf131554();
 
     CPPUNIT_TEST_SUITE(SdOOXMLExportTest2);
 
@@ -282,6 +283,7 @@ public:
     CPPUNIT_TEST(testTdf127372);
     CPPUNIT_TEST(testTdf127379);
     CPPUNIT_TEST(testTdf98603);
+    CPPUNIT_TEST(testTdf131554);
 
     CPPUNIT_TEST_SUITE_END();
 
@@ -2633,6 +2635,15 @@ void SdOOXMLExportTest2::testTdf98603()
     CPPUNIT_ASSERT_EQUAL(OUString("IL"), aLocale.Country);
 }
 
+void SdOOXMLExportTest2::testTdf131554()
+{
+    ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/pptx/tdf131554.pptx"), PPTX);
+    xDocShRef = saveAndReload( xDocShRef.get(), PPTX );
+    uno::Reference<drawing::XShape> xShape(getShapeFromPage(1, 0, xDocShRef), uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(5622), xShape->getPosition().X);
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(13251), xShape->getPosition().Y);
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SdOOXMLExportTest2);
 
 CPPUNIT_PLUGIN_IMPLEMENT();


More information about the Libreoffice-commits mailing list