Kaydet (Commit) 77419fec authored tarafından Mike Kaganski's avatar Mike Kaganski Kaydeden (comit) Andras Timar

tdf#119015: don't call TableModel::optimize in CellCursor::merge()

Better do that explicitly in the SvxTableController::MergeRange, so
that the UI-driven operation still optimizes the table, but import
code gets the initial column count, and not throw trying to access
the deleted column.

Change-Id: Ib4b4d716935ec2036ccb839c36f1be5b0cb878d5
Reviewed-on: https://gerrit.libreoffice.org/58359
Tested-by: Jenkins
Reviewed-by: 's avatarMike Kaganski <mike.kaganski@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/58371Reviewed-by: 's avatarAndras Timar <andras.timar@collabora.com>
Tested-by: 's avatarAndras Timar <andras.timar@collabora.com>
üst dcc385e5
...@@ -177,6 +177,7 @@ public: ...@@ -177,6 +177,7 @@ public:
bool checkPattern(sd::DrawDocShellRef const & rDocRef, int nShapeNumber, std::vector<sal_uInt8>& rExpected); bool checkPattern(sd::DrawDocShellRef const & rDocRef, int nShapeNumber, std::vector<sal_uInt8>& rExpected);
void testPatternImport(); void testPatternImport();
void testTdf119015();
CPPUNIT_TEST_SUITE(SdImportTest); CPPUNIT_TEST_SUITE(SdImportTest);
...@@ -253,6 +254,7 @@ public: ...@@ -253,6 +254,7 @@ public:
CPPUNIT_TEST(testTdf116899); CPPUNIT_TEST(testTdf116899);
CPPUNIT_TEST(testTdf116266); CPPUNIT_TEST(testTdf116266);
CPPUNIT_TEST(testTdf114821); CPPUNIT_TEST(testTdf114821);
CPPUNIT_TEST(testTdf119015);
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
}; };
...@@ -2448,6 +2450,28 @@ void SdImportTest::testTdf116266() ...@@ -2448,6 +2450,28 @@ void SdImportTest::testTdf116266()
CPPUNIT_ASSERT_EQUAL(size_t(1), rLinkManager->GetLinks().size()); CPPUNIT_ASSERT_EQUAL(size_t(1), rLinkManager->GetLinks().size());
} }
void SdImportTest::testTdf119015()
{
::sd::DrawDocShellRef xDocShRef
= loadURL(m_directories.getURLFromSrc("/sd/qa/unit/data/pptx/tdf119015.pptx"), PPTX);
const SdrPage* pPage = GetPage(1, xDocShRef);
sdr::table::SdrTableObj* pTableObj = dynamic_cast<sdr::table::SdrTableObj*>(pPage->GetObj(0));
CPPUNIT_ASSERT(pTableObj);
// The position was previously not properly initialized: (0, 0, 100, 100)
CPPUNIT_ASSERT_EQUAL(tools::Rectangle(Point(6991, 6902), Size(14099, 1999)),
pTableObj->GetLogicRect());
uno::Reference<table::XTable> xTable(pTableObj->getTable());
// Test that we actually have three cells: this threw css.lang.IndexOutOfBoundsException
uno::Reference<text::XTextRange> xTextRange(xTable->getCellByPosition(2, 0),
uno::UNO_QUERY_THROW);
CPPUNIT_ASSERT_EQUAL(OUString("A3"), xTextRange->getString());
xDocShRef->DoClose();
}
CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest); CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest);
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();
......
...@@ -251,7 +251,6 @@ void SAL_CALL CellCursor::merge( ) ...@@ -251,7 +251,6 @@ void SAL_CALL CellCursor::merge( )
try try
{ {
mxTable->merge( aStart.mnCol, aStart.mnRow, aEnd.mnCol - aStart.mnCol + 1, aEnd.mnRow - aStart.mnRow + 1 ); mxTable->merge( aStart.mnCol, aStart.mnRow, aEnd.mnCol - aStart.mnCol + 1, aEnd.mnRow - aStart.mnRow + 1 );
mxTable->optimize();
mxTable->setModified(true); mxTable->setModified(true);
} }
catch( Exception& ) catch( Exception& )
......
...@@ -1807,6 +1807,7 @@ void SvxTableController::MergeRange( sal_Int32 nFirstCol, sal_Int32 nFirstRow, s ...@@ -1807,6 +1807,7 @@ void SvxTableController::MergeRange( sal_Int32 nFirstCol, sal_Int32 nFirstRow, s
} }
xRange->merge(); xRange->merge();
mxTable->optimize();
if( bUndo ) if( bUndo )
mpModel->EndUndo(); mpModel->EndUndo();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment