parent
188f064fca
commit
6168b26e0c
@ -1,203 +0,0 @@
|
|||||||
From 135bdf4ef1a5d256f00bebf1b734ae44544d757c Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
|
||||||
Date: Fri, 14 Mar 2014 20:28:10 +0000
|
|
||||||
Subject: [PATCH] Related: rhbz#1076264 intermittent a11y crash in calc
|
|
||||||
|
|
||||||
http://retrace.fedoraproject.org/faf/reports/338291/
|
|
||||||
|
|
||||||
this crash refuses to be captured alive. But seeing as
|
|
||||||
we sometimes check mpViewShell against NULL and sometimes check
|
|
||||||
GetViewData against NULL its worth making those checks everytime
|
|
||||||
for consistency
|
|
||||||
|
|
||||||
see also...
|
|
||||||
|
|
||||||
rhbz#923993 rhbz#896711 rhbz#602273 rhbz#577595 lp#811057 lp#760665
|
|
||||||
|
|
||||||
(cherry picked from commit fae1e19af05e664364c55d4f686aaab860fd538d)
|
|
||||||
|
|
||||||
Conflicts:
|
|
||||||
sc/source/ui/Accessibility/AccessibleDocument.cxx
|
|
||||||
|
|
||||||
Change-Id: I5553848018f500b63ade60bcfc756a736b27c64f
|
|
||||||
---
|
|
||||||
sc/source/ui/Accessibility/AccessibleDocument.cxx | 70 ++++++++++++++---------
|
|
||||||
1 file changed, 43 insertions(+), 27 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/sc/source/ui/Accessibility/AccessibleDocument.cxx b/sc/source/ui/Accessibility/AccessibleDocument.cxx
|
|
||||||
index 6d3b7f8..14ac8fe 100644
|
|
||||||
--- a/sc/source/ui/Accessibility/AccessibleDocument.cxx
|
|
||||||
+++ b/sc/source/ui/Accessibility/AccessibleDocument.cxx
|
|
||||||
@@ -337,13 +337,14 @@ ScChildrenShapes::ScChildrenShapes(ScAccessibleDocument* pAccessibleDocument, Sc
|
|
||||||
}
|
|
||||||
if (pViewShell)
|
|
||||||
{
|
|
||||||
- SfxBroadcaster* pDrawBC = pViewShell->GetViewData()->GetDocument()->GetDrawBroadcaster();
|
|
||||||
+ ScViewData *pViewData = pViewShell->GetViewData();
|
|
||||||
+ SfxBroadcaster* pDrawBC = pViewData ? pViewData->GetDocument()->GetDrawBroadcaster() : NULL;
|
|
||||||
if (pDrawBC)
|
|
||||||
{
|
|
||||||
StartListening(*pDrawBC);
|
|
||||||
|
|
||||||
- maShapeTreeInfo.SetModelBroadcaster( new ScDrawModelBroadcaster(pViewShell->GetViewData()->GetDocument()->GetDrawLayer()) );
|
|
||||||
- maShapeTreeInfo.SetSdrView(pViewShell->GetViewData()->GetScDrawView());
|
|
||||||
+ maShapeTreeInfo.SetModelBroadcaster( new ScDrawModelBroadcaster(pViewData->GetDocument()->GetDrawLayer()) );
|
|
||||||
+ maShapeTreeInfo.SetSdrView(pViewData->GetScDrawView());
|
|
||||||
maShapeTreeInfo.SetController(NULL);
|
|
||||||
maShapeTreeInfo.SetWindow(pViewShell->GetWindowByPos(meSplitPos));
|
|
||||||
maShapeTreeInfo.SetViewForwarder(mpAccessibleDocument);
|
|
||||||
@@ -356,7 +357,8 @@ ScChildrenShapes::~ScChildrenShapes()
|
|
||||||
std::for_each(maZOrderedShapes.begin(), maZOrderedShapes.end(), Destroy());
|
|
||||||
if (mpViewShell)
|
|
||||||
{
|
|
||||||
- SfxBroadcaster* pDrawBC = mpViewShell->GetViewData()->GetDocument()->GetDrawBroadcaster();
|
|
||||||
+ ScViewData *pViewData = mpViewShell->GetViewData();
|
|
||||||
+ SfxBroadcaster* pDrawBC = pViewData ? pViewData->GetDocument()->GetDrawBroadcaster() : NULL;
|
|
||||||
if (pDrawBC)
|
|
||||||
EndListening(*pDrawBC);
|
|
||||||
}
|
|
||||||
@@ -366,13 +368,14 @@ void ScChildrenShapes::SetDrawBroadcaster()
|
|
||||||
{
|
|
||||||
if (mpViewShell)
|
|
||||||
{
|
|
||||||
- SfxBroadcaster* pDrawBC = mpViewShell->GetViewData()->GetDocument()->GetDrawBroadcaster();
|
|
||||||
+ ScViewData *pViewData = mpViewShell->GetViewData();
|
|
||||||
+ SfxBroadcaster* pDrawBC = pViewData ? pViewData->GetDocument()->GetDrawBroadcaster() : NULL;
|
|
||||||
if (pDrawBC)
|
|
||||||
{
|
|
||||||
StartListening(*pDrawBC, sal_True);
|
|
||||||
|
|
||||||
- maShapeTreeInfo.SetModelBroadcaster( new ScDrawModelBroadcaster(mpViewShell->GetViewData()->GetDocument()->GetDrawLayer()) );
|
|
||||||
- maShapeTreeInfo.SetSdrView(mpViewShell->GetViewData()->GetScDrawView());
|
|
||||||
+ maShapeTreeInfo.SetModelBroadcaster( new ScDrawModelBroadcaster(pViewData->GetDocument()->GetDrawLayer()) );
|
|
||||||
+ maShapeTreeInfo.SetSdrView(pViewData->GetScDrawView());
|
|
||||||
maShapeTreeInfo.SetController(NULL);
|
|
||||||
maShapeTreeInfo.SetWindow(mpViewShell->GetWindowByPos(meSplitPos));
|
|
||||||
maShapeTreeInfo.SetViewForwarder(mpAccessibleDocument);
|
|
||||||
@@ -827,7 +830,8 @@ SdrPage* ScChildrenShapes::GetDrawPage() const
|
|
||||||
SdrPage* pDrawPage = NULL;
|
|
||||||
if (mpViewShell)
|
|
||||||
{
|
|
||||||
- ScDocument* pDoc = mpViewShell->GetViewData()->GetDocument();
|
|
||||||
+ ScViewData *pViewData = mpViewShell->GetViewData();
|
|
||||||
+ ScDocument* pDoc = pViewData ? pViewData->GetDocument() : NULL;
|
|
||||||
if (pDoc && pDoc->GetDrawLayer())
|
|
||||||
{
|
|
||||||
ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer();
|
|
||||||
@@ -1239,9 +1243,10 @@ ScAccessibleDocument::ScAccessibleDocument(
|
|
||||||
AddChild( pChildWin->GetAccessible(), false );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- if (pViewShell->GetViewData()->HasEditView( eSplitPos ))
|
|
||||||
+ ScViewData *pViewData = pViewShell->GetViewData();
|
|
||||||
+ if (pViewData && pViewData->HasEditView(eSplitPos))
|
|
||||||
{
|
|
||||||
- uno::Reference<XAccessible> xAcc = new ScAccessibleEditObject(this, pViewShell->GetViewData()->GetEditView(eSplitPos),
|
|
||||||
+ uno::Reference<XAccessible> xAcc = new ScAccessibleEditObject(this, pViewData->GetEditView(eSplitPos),
|
|
||||||
pViewShell->GetWindowByPos(eSplitPos), GetCurrentCellName(), GetCurrentCellDescription(),
|
|
||||||
ScAccessibleEditObject::CellInEditMode);
|
|
||||||
AddChild(xAcc, false);
|
|
||||||
@@ -1382,9 +1387,10 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
|
|
||||||
}
|
|
||||||
else if ((rRef.GetId() == SC_HINT_ACC_ENTEREDITMODE)) // this event comes only on creating edit field of a cell
|
|
||||||
{
|
|
||||||
- if (mpViewShell && mpViewShell->GetViewData()->HasEditView(meSplitPos))
|
|
||||||
+ ScViewData *pViewData = mpViewShell ? mpViewShell->GetViewData() : NULL;
|
|
||||||
+ if (pViewData && pViewData->HasEditView(meSplitPos))
|
|
||||||
{
|
|
||||||
- mpTempAccEdit = new ScAccessibleEditObject(this, mpViewShell->GetViewData()->GetEditView(meSplitPos),
|
|
||||||
+ mpTempAccEdit = new ScAccessibleEditObject(this, pViewData->GetEditView(meSplitPos),
|
|
||||||
mpViewShell->GetWindowByPos(meSplitPos), GetCurrentCellName(),
|
|
||||||
OUString(ScResId(STR_ACC_EDITLINE_DESCR)), ScAccessibleEditObject::CellInEditMode);
|
|
||||||
uno::Reference<XAccessible> xAcc = mpTempAccEdit;
|
|
||||||
@@ -1639,7 +1645,7 @@ void SAL_CALL
|
|
||||||
SolarMutexGuard aGuard;
|
|
||||||
IsObjectValid();
|
|
||||||
|
|
||||||
- if (mpChildrenShapes)
|
|
||||||
+ if (mpChildrenShapes && mpViewShell)
|
|
||||||
{
|
|
||||||
sal_Int32 nCount(mpChildrenShapes->GetCount()); //all shapes and the table
|
|
||||||
if (mxTempAcc.is())
|
|
||||||
@@ -1782,7 +1788,7 @@ void SAL_CALL
|
|
||||||
SolarMutexGuard aGuard;
|
|
||||||
IsObjectValid();
|
|
||||||
|
|
||||||
- if (mpChildrenShapes)
|
|
||||||
+ if (mpChildrenShapes && mpViewShell)
|
|
||||||
{
|
|
||||||
sal_Int32 nCount(mpChildrenShapes->GetCount()); //all shapes and the table
|
|
||||||
if (mxTempAcc.is())
|
|
||||||
@@ -1861,14 +1867,21 @@ Rectangle ScAccessibleDocument::GetVisibleArea_Impl() const
|
|
||||||
{
|
|
||||||
Rectangle aVisRect(GetBoundingBox());
|
|
||||||
|
|
||||||
- Point aPoint(mpViewShell->GetViewData()->GetPixPos(meSplitPos)); // returns a negative Point
|
|
||||||
- aPoint.setX(-aPoint.getX());
|
|
||||||
- aPoint.setY(-aPoint.getY());
|
|
||||||
- aVisRect.SetPos(aPoint);
|
|
||||||
+ if (mpViewShell)
|
|
||||||
+ {
|
|
||||||
+ ScViewData *pViewData = mpViewShell->GetViewData();
|
|
||||||
+ if (pViewData)
|
|
||||||
+ {
|
|
||||||
+ Point aPoint(pViewData->GetPixPos(meSplitPos)); // returns a negative Point
|
|
||||||
+ aPoint.setX(-aPoint.getX());
|
|
||||||
+ aPoint.setY(-aPoint.getY());
|
|
||||||
+ aVisRect.SetPos(aPoint);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- ScGridWindow* pWin = static_cast<ScGridWindow*>(mpViewShell->GetWindowByPos(meSplitPos));
|
|
||||||
- if (pWin)
|
|
||||||
- aVisRect = pWin->PixelToLogic(aVisRect, pWin->GetDrawMapMode());
|
|
||||||
+ ScGridWindow* pWin = static_cast<ScGridWindow*>(mpViewShell->GetWindowByPos(meSplitPos));
|
|
||||||
+ if (pWin)
|
|
||||||
+ aVisRect = pWin->PixelToLogic(aVisRect, pWin->GetDrawMapMode());
|
|
||||||
+ }
|
|
||||||
|
|
||||||
return aVisRect;
|
|
||||||
}
|
|
||||||
@@ -1989,8 +2002,9 @@ Rectangle ScAccessibleDocument::GetBoundingBox() const
|
|
||||||
SCTAB ScAccessibleDocument::getVisibleTable() const
|
|
||||||
{
|
|
||||||
SCTAB nVisibleTable(0);
|
|
||||||
- if (mpViewShell && mpViewShell->GetViewData())
|
|
||||||
- nVisibleTable = mpViewShell->GetViewData()->GetTabNo();
|
|
||||||
+ ScViewData *pViewData = mpViewShell ? mpViewShell->GetViewData() : NULL;
|
|
||||||
+ if (pViewData)
|
|
||||||
+ nVisibleTable = pViewData->GetTabNo();
|
|
||||||
return nVisibleTable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -2020,11 +2034,12 @@ void ScAccessibleDocument::FreeAccessibleSpreadsheet()
|
|
||||||
sal_Bool ScAccessibleDocument::IsTableSelected() const
|
|
||||||
{
|
|
||||||
sal_Bool bResult (false);
|
|
||||||
- if(mpViewShell)
|
|
||||||
+ ScViewData *pViewData = mpViewShell ? mpViewShell->GetViewData() : NULL;
|
|
||||||
+ if(pViewData)
|
|
||||||
{
|
|
||||||
SCTAB nTab(getVisibleTable());
|
|
||||||
//#103800#; use a copy of MarkData
|
|
||||||
- ScMarkData aMarkData(mpViewShell->GetViewData()->GetMarkData());
|
|
||||||
+ ScMarkData aMarkData(pViewData->GetMarkData());
|
|
||||||
aMarkData.MarkToMulti();
|
|
||||||
if (aMarkData.IsAllMarked(ScRange(ScAddress(0, 0, nTab),ScAddress(MAXCOL, MAXROW, nTab))))
|
|
||||||
bResult = sal_True;
|
|
||||||
@@ -2084,10 +2099,11 @@ void ScAccessibleDocument::RemoveChild(const uno::Reference<XAccessible>& xAcc,
|
|
||||||
OUString ScAccessibleDocument::GetCurrentCellName() const
|
|
||||||
{
|
|
||||||
OUString sName(SC_RESSTR(STR_ACC_CELL_NAME));
|
|
||||||
- if (mpViewShell)
|
|
||||||
+ ScViewData *pViewData = mpViewShell ? mpViewShell->GetViewData() : NULL;
|
|
||||||
+ if (pViewData)
|
|
||||||
{
|
|
||||||
// Document not needed, because only the cell address, but not the tablename is needed
|
|
||||||
- OUString sAddress(mpViewShell->GetViewData()->GetCurPos().Format(SCA_VALID, NULL));
|
|
||||||
+ OUString sAddress(pViewData->GetCurPos().Format(SCA_VALID, NULL));
|
|
||||||
sName = sName.replaceFirst("%1", sAddress);
|
|
||||||
}
|
|
||||||
return sName;
|
|
||||||
--
|
|
||||||
1.8.5.3
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
|||||||
From 88c2785c8fd4ec9ad9c4b318b91d1835cc04cd26 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
|
||||||
Date: Tue, 25 Mar 2014 12:12:37 +0000
|
|
||||||
Subject: [PATCH] Resolves: rhbz#1077780 crash on loading .docx
|
|
||||||
|
|
||||||
Change-Id: I92670b9c46a2c745ba47c6dcc1b4dd672942cf59
|
|
||||||
---
|
|
||||||
writerfilter/source/dmapper/DomainMapper_Impl.cxx | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
|
|
||||||
index aa0896a..79c1847 100644
|
|
||||||
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
|
|
||||||
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
|
|
||||||
@@ -636,6 +636,8 @@ void lcl_MoveBorderPropertiesToFrame(uno::Sequence<beans::PropertyValue>& rFrame
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
+ if (!xStartTextRange.is()) //rhbz#1077780
|
|
||||||
+ return;
|
|
||||||
uno::Reference<text::XTextCursor> xRangeCursor = xStartTextRange->getText()->createTextCursorByRange( xStartTextRange );
|
|
||||||
xRangeCursor->gotoRange( xEndTextRange, true );
|
|
||||||
|
|
||||||
--
|
|
||||||
1.8.5.3
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
From 783e5a2e149694974fcce79a01144c78f154bfee Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
|
||||||
Date: Tue, 25 Feb 2014 09:55:48 +0000
|
|
||||||
Subject: [PATCH 4/4] explictly list common lang-independant template dir
|
|
||||||
|
|
||||||
Change-Id: I50d8efe46fc2eb3dfe615ad1f6eb7ee03cdcd29a
|
|
||||||
---
|
|
||||||
officecfg/registry/data/org/openoffice/Office/Paths.xcu | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/officecfg/registry/data/org/openoffice/Office/Paths.xcu b/officecfg/registry/data/org/openoffice/Office/Paths.xcu
|
|
||||||
index 2ef605e..2a9eb5c 100644
|
|
||||||
--- a/officecfg/registry/data/org/openoffice/Office/Paths.xcu
|
|
||||||
+++ b/officecfg/registry/data/org/openoffice/Office/Paths.xcu
|
|
||||||
@@ -158,6 +158,7 @@
|
|
||||||
</node>
|
|
||||||
<node oor:name="Template" oor:op="fuse" oor:mandatory="true">
|
|
||||||
<node oor:name="InternalPaths">
|
|
||||||
+ <node oor:name="$(insturl)/@LIBO_SHARE_FOLDER@/template/common" oor:op="fuse"/>
|
|
||||||
<node oor:name="$(insturl)/@LIBO_SHARE_FOLDER@/template/$(vlang)" oor:op="fuse"/>
|
|
||||||
</node>
|
|
||||||
<!--
|
|
||||||
--
|
|
||||||
1.8.5.3
|
|
||||||
|
|
@ -1,170 +0,0 @@
|
|||||||
From e91bacdb67e0993d476611260cdcda9e49b4054a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kohei Yoshida <kohei.yoshida@collabora.com>
|
|
||||||
Date: Fri, 28 Mar 2014 20:50:29 -0400
|
|
||||||
Subject: [PATCH] rhbz#1080196: Delete the destination first then paste.
|
|
||||||
|
|
||||||
Deleting in-between pasting was causing the block iterators to become
|
|
||||||
invalid when the deletion took place, which resulted in a segfault.
|
|
||||||
|
|
||||||
Also cleaned up the bits about handling filtered rows. It was using the
|
|
||||||
old row flag which is empty these days (so it never would have worked).
|
|
||||||
Plus we do bail out earlier if the destination contains a filtered row.
|
|
||||||
|
|
||||||
Change-Id: I78d3ee8bce1647c1c8685f92a3df3c38cc014811
|
|
||||||
---
|
|
||||||
sc/source/core/data/document.cxx | 101 +++++++++++++--------------------------
|
|
||||||
1 file changed, 32 insertions(+), 69 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
|
|
||||||
index ab39965..fe5572f 100644
|
|
||||||
--- a/sc/source/core/data/document.cxx
|
|
||||||
+++ b/sc/source/core/data/document.cxx
|
|
||||||
@@ -2761,21 +2761,6 @@ void ScDocument::CopyFromClip( const ScRange& rDestRange, const ScMarkData& rMar
|
|
||||||
SetAutoCalc( bOldAutoCalc );
|
|
||||||
}
|
|
||||||
|
|
||||||
-static SCROW lcl_getLastNonFilteredRow(
|
|
||||||
- const ScBitMaskCompressedArray<SCROW, sal_uInt8>& rFlags, SCROW nBegRow, SCROW nEndRow,
|
|
||||||
- SCROW nRowCount)
|
|
||||||
-{
|
|
||||||
- SCROW nFilteredRow = rFlags.GetFirstForCondition(
|
|
||||||
- nBegRow, nEndRow, CR_FILTERED, CR_FILTERED);
|
|
||||||
-
|
|
||||||
- SCROW nRow = nFilteredRow - 1;
|
|
||||||
- if (nRow - nBegRow + 1 > nRowCount)
|
|
||||||
- // make sure the row range stays within the data size.
|
|
||||||
- nRow = nBegRow + nRowCount - 1;
|
|
||||||
-
|
|
||||||
- return nRow;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
void ScDocument::CopyMultiRangeFromClip(
|
|
||||||
const ScAddress& rDestPos, const ScMarkData& rMark, sal_uInt16 nInsFlag, ScDocument* pClipDoc,
|
|
||||||
bool bResetCut, bool bAsLink, bool /*bIncludeFiltered*/, bool bSkipAttrForEmpty)
|
|
||||||
@@ -2787,83 +2772,62 @@ void ScDocument::CopyMultiRangeFromClip(
|
|
||||||
// There is nothing in the clip doc to copy.
|
|
||||||
return;
|
|
||||||
|
|
||||||
- bool bOldAutoCalc = GetAutoCalc();
|
|
||||||
- SetAutoCalc( false ); // avoid multiple recalculations
|
|
||||||
+ // Right now, we don't allow pasting into filtered rows, so we don't even handle it here.
|
|
||||||
|
|
||||||
+ sc::AutoCalcSwitch aACSwitch(*this, false); // turn of auto calc temporarily.
|
|
||||||
NumFmtMergeHandler aNumFmtMergeHdl(this, pClipDoc);
|
|
||||||
|
|
||||||
+ ScRange aDestRange;
|
|
||||||
+ rMark.GetMarkArea(aDestRange);
|
|
||||||
+
|
|
||||||
+ bInsertingFromOtherDoc = true; // kein Broadcast/Listener aufbauen bei Insert
|
|
||||||
+
|
|
||||||
SCCOL nCol1 = rDestPos.Col();
|
|
||||||
SCROW nRow1 = rDestPos.Row();
|
|
||||||
ScClipParam& rClipParam = pClipDoc->GetClipParam();
|
|
||||||
|
|
||||||
+ if (!bSkipAttrForEmpty)
|
|
||||||
+ {
|
|
||||||
+ // Do the deletion first.
|
|
||||||
+ sal_uInt16 nDelFlag = IDF_CONTENTS;
|
|
||||||
+ SCCOL nColSize = rClipParam.getPasteColSize();
|
|
||||||
+ SCROW nRowSize = rClipParam.getPasteRowSize();
|
|
||||||
+
|
|
||||||
+ DeleteArea(nCol1, nRow1, nCol1+nColSize-1, nRow1+nRowSize-1, rMark, nDelFlag);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
sc::CopyFromClipContext aCxt(*this, NULL, pClipDoc, nInsFlag, bAsLink, bSkipAttrForEmpty);
|
|
||||||
std::pair<SCTAB,SCTAB> aTabRanges = getMarkedTableRange(maTabs, rMark);
|
|
||||||
aCxt.setTabRange(aTabRanges.first, aTabRanges.second);
|
|
||||||
|
|
||||||
- ScRange aDestRange;
|
|
||||||
- rMark.GetMarkArea(aDestRange);
|
|
||||||
- SCROW nLastMarkedRow = aDestRange.aEnd.Row();
|
|
||||||
-
|
|
||||||
- bInsertingFromOtherDoc = true; // kein Broadcast/Listener aufbauen bei Insert
|
|
||||||
-
|
|
||||||
- SCROW nBegRow = nRow1;
|
|
||||||
- sal_uInt16 nDelFlag = IDF_CONTENTS;
|
|
||||||
- const ScBitMaskCompressedArray<SCROW, sal_uInt8>& rFlags = GetRowFlagsArray(aCxt.getTabStart());
|
|
||||||
-
|
|
||||||
- for ( size_t i = 0, n = rClipParam.maRanges.size(); i < n; ++i )
|
|
||||||
+ for (size_t i = 0, n = rClipParam.maRanges.size(); i < n; ++i)
|
|
||||||
{
|
|
||||||
- ScRange* p = rClipParam.maRanges[ i ];
|
|
||||||
- // The begin row must not be filtered.
|
|
||||||
+ ScRange* p = rClipParam.maRanges[i];
|
|
||||||
|
|
||||||
SCROW nRowCount = p->aEnd.Row() - p->aStart.Row() + 1;
|
|
||||||
-
|
|
||||||
SCsCOL nDx = static_cast<SCsCOL>(nCol1 - p->aStart.Col());
|
|
||||||
- SCsROW nDy = static_cast<SCsROW>(nBegRow - p->aStart.Row());
|
|
||||||
+ SCsROW nDy = static_cast<SCsROW>(nRow1 - p->aStart.Row());
|
|
||||||
SCCOL nCol2 = nCol1 + p->aEnd.Col() - p->aStart.Col();
|
|
||||||
+ SCROW nEndRow = nRow1 + nRowCount - 1;
|
|
||||||
|
|
||||||
- SCROW nEndRow = lcl_getLastNonFilteredRow(rFlags, nBegRow, nLastMarkedRow, nRowCount);
|
|
||||||
-
|
|
||||||
- if (!bSkipAttrForEmpty)
|
|
||||||
- DeleteArea(nCol1, nBegRow, nCol2, nEndRow, rMark, nDelFlag);
|
|
||||||
+ CopyBlockFromClip(aCxt, nCol1, nRow1, nCol2, nEndRow, rMark, nDx, nDy);
|
|
||||||
|
|
||||||
- CopyBlockFromClip(aCxt, nCol1, nBegRow, nCol2, nEndRow, rMark, nDx, nDy);
|
|
||||||
- nRowCount -= nEndRow - nBegRow + 1;
|
|
||||||
-
|
|
||||||
- while (nRowCount > 0)
|
|
||||||
+ switch (rClipParam.meDirection)
|
|
||||||
{
|
|
||||||
- // Get the first non-filtered row.
|
|
||||||
- SCROW nNonFilteredRow = rFlags.GetFirstForCondition(nEndRow+1, nLastMarkedRow, CR_FILTERED, 0);
|
|
||||||
- if (nNonFilteredRow > nLastMarkedRow)
|
|
||||||
- return;
|
|
||||||
-
|
|
||||||
- SCROW nRowsSkipped = nNonFilteredRow - nEndRow - 1;
|
|
||||||
- nDy += nRowsSkipped;
|
|
||||||
-
|
|
||||||
- nBegRow = nNonFilteredRow;
|
|
||||||
- nEndRow = lcl_getLastNonFilteredRow(rFlags, nBegRow, nLastMarkedRow, nRowCount);
|
|
||||||
-
|
|
||||||
- if (!bSkipAttrForEmpty)
|
|
||||||
- DeleteArea(nCol1, nBegRow, nCol2, nEndRow, rMark, nDelFlag);
|
|
||||||
-
|
|
||||||
- CopyBlockFromClip(aCxt, nCol1, nBegRow, nCol2, nEndRow, rMark, nDx, nDy);
|
|
||||||
- nRowCount -= nEndRow - nBegRow + 1;
|
|
||||||
+ case ScClipParam::Row:
|
|
||||||
+ // Begin row for the next range being pasted.
|
|
||||||
+ nRow1 += nRowCount;
|
|
||||||
+ break;
|
|
||||||
+ case ScClipParam::Column:
|
|
||||||
+ nCol1 += p->aEnd.Col() - p->aStart.Col() + 1;
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ ;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- if (rClipParam.meDirection == ScClipParam::Row)
|
|
||||||
- // Begin row for the next range being pasted.
|
|
||||||
- nBegRow = rFlags.GetFirstForCondition(nEndRow+1, nLastMarkedRow, CR_FILTERED, 0);
|
|
||||||
- else
|
|
||||||
- nBegRow = nRow1;
|
|
||||||
-
|
|
||||||
- if (rClipParam.meDirection == ScClipParam::Column)
|
|
||||||
- nCol1 += p->aEnd.Col() - p->aStart.Col() + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
bInsertingFromOtherDoc = false;
|
|
||||||
|
|
||||||
- ScRangeList aRanges;
|
|
||||||
- aRanges.Append(aDestRange);
|
|
||||||
-
|
|
||||||
// Listener aufbauen nachdem alles inserted wurde
|
|
||||||
StartListeningFromClip(aDestRange.aStart.Col(), aDestRange.aStart.Row(),
|
|
||||||
aDestRange.aEnd.Col(), aDestRange.aEnd.Row(), rMark, nInsFlag );
|
|
||||||
@@ -2873,7 +2837,6 @@ void ScDocument::CopyMultiRangeFromClip(
|
|
||||||
|
|
||||||
if (bResetCut)
|
|
||||||
pClipDoc->GetClipParam().mbCutMode = false;
|
|
||||||
- SetAutoCalc( bOldAutoCalc );
|
|
||||||
}
|
|
||||||
|
|
||||||
void ScDocument::SetClipArea( const ScRange& rArea, bool bCut )
|
|
||||||
--
|
|
||||||
1.9.0
|
|
||||||
|
|
Loading…
Reference in new issue