summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2017-02-09 15:00:33 +0300
committerMike Kaganski <mike.kaganski@collabora.com>2017-02-09 15:23:32 +0000
commitd48b805794a6317e13826d52bbeaa37576ac57bb (patch)
tree8f1927139bdd0ff394d261ed3e7b3b26c7c45ed7 /writerfilter
parent60933220b2b6daa4b6acb177e4639c14519f459b (diff)
tdf#105852: don't merge cells if there were no merge continuation
In RTF, it's possible to start a cells merge using \clmgf, and simply omit following cells in the row - they must merge automatically. This makes HorizontallyMergedCell::m_nLastCol/Row uninitialized. Previously, the uninitialized values arrived as 0,0 - thus the first range's cell got merged with cell 0,0. This change prevents the merge; in scenario above, absence of additional cells in row will create merged cell automatically. Change-Id: I68b84b7ec70d9512c541a077689369fa4a8dc0c5 Reviewed-on: https://gerrit.libreoffice.org/34079 Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Tested-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.cxx14
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.hxx4
2 files changed, 11 insertions, 7 deletions
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
index 975f6d8e6039..2ce6301e6570 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
@@ -1042,12 +1042,16 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTab
uno::Reference<table::XCellRange> xCellRange(xTable, uno::UNO_QUERY_THROW);
uno::Reference<beans::XPropertySet> xCell(xCellRange->getCellByPosition(it->m_nFirstCol, it->m_nFirstRow), uno::UNO_QUERY_THROW);
OUString aFirst = xCell->getPropertyValue("CellName").get<OUString>();
- xCell.set(xCellRange->getCellByPosition(it->m_nLastCol, it->m_nLastRow), uno::UNO_QUERY_THROW);
- OUString aLast = xCell->getPropertyValue("CellName").get<OUString>();
+ // tdf#105852: Only try to merge if m_nLastCol is set (i.e. there were some merge continuation cells)
+ if (it->m_nLastCol != -1)
+ {
+ xCell.set(xCellRange->getCellByPosition(it->m_nLastCol, it->m_nLastRow), uno::UNO_QUERY_THROW);
+ OUString aLast = xCell->getPropertyValue("CellName").get<OUString>();
- uno::Reference<text::XTextTableCursor> xCursor = xTable->createCursorByCellName(aFirst);
- xCursor->gotoCellByName(aLast, true);
- xCursor->mergeRange();
+ uno::Reference<text::XTextTableCursor> xCursor = xTable->createCursorByCellName(aFirst);
+ xCursor->gotoCellByName(aLast, true);
+ xCursor->mergeRange();
+ }
}
}
}
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
index 6097be342902..83dafa49a776 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
@@ -50,8 +50,8 @@ struct HorizontallyMergedCell
HorizontallyMergedCell(sal_Int32 nFirstRow, sal_Int32 nFirstCol)
: m_nFirstRow(nFirstRow)
, m_nFirstCol(nFirstCol)
- , m_nLastRow(0)
- , m_nLastCol(0)
+ , m_nLastRow(nFirstRow)
+ , m_nLastCol(-1)
{
}
};