diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2017-02-09 15:00:33 +0300 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2017-02-09 15:23:32 +0000 |
commit | d48b805794a6317e13826d52bbeaa37576ac57bb (patch) | |
tree | 8f1927139bdd0ff394d261ed3e7b3b26c7c45ed7 /writerfilter | |
parent | 60933220b2b6daa4b6acb177e4639c14519f459b (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.cxx | 14 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapperTableHandler.hxx | 4 |
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) { } }; |