diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-04-04 14:46:29 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-04-04 18:53:15 +0200 |
commit | b9f7535e499002706f276c0275c1e6c3c7b6bdd4 (patch) | |
tree | 02f7fb26e7ccf9bbb8a56c743b9651b83096a278 /sw | |
parent | b080ff8dbf1ac899a04b6f9690956f11feee01a4 (diff) |
tdf#116789 sw: fix caching of the SwXCell UNO wrapper
Commit 9af3a0d44f5f3208c490eeacbc4a9a87af915d7c (unify with a template
class, 2015-03-28) extracted a common FindUnoInstanceHint from
FindXCellHint/FindXRowHint, but failed to still check for the UNO
wrapper in the condition, not the core object.
This resulted in handing out multiple SwXCell instances for the same
underlying SwTableBox, which means that if you had an UNO-level
selection listener and you wanted to know if your selection is in the
same XText as the XText of a bookmark, then that comparison (by ptr
value) failed in case the bookmark and the selection was in a table
cell.
Change-Id: I1d618cf150d515a9db51b1fe5d38cf262fd46af4
Reviewed-on: https://gerrit.libreoffice.org/52379
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
Diffstat (limited to 'sw')
-rw-r--r-- | sw/qa/extras/uiwriter/data/tdf116789.fodt | 27 | ||||
-rw-r--r-- | sw/qa/extras/uiwriter/uiwriter.cxx | 22 | ||||
-rw-r--r-- | sw/source/core/unocore/unotbl.cxx | 2 |
3 files changed, 50 insertions, 1 deletions
diff --git a/sw/qa/extras/uiwriter/data/tdf116789.fodt b/sw/qa/extras/uiwriter/data/tdf116789.fodt new file mode 100644 index 000000000000..87caf309ff25 --- /dev/null +++ b/sw/qa/extras/uiwriter/data/tdf116789.fodt @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:body> + <office:text> + <table:table table:name="Table1"> + <table:table-column table:number-columns-repeated="2"/> + <table:table-row> + <table:table-cell office:value-type="string"> + <text:p><text:bookmark-start text:name="Bookmark 1"/>hello<text:bookmark-end text:name="Bookmark 1"/></text:p> + </table:table-cell> + <table:table-cell office:value-type="string"> + <text:p/> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell office:value-type="string"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="string"> + <text:p/> + </table:table-cell> + </table:table-row> + </table:table> + <text:p text:style-name="Standard"/> + </office:text> + </office:body> +</office:document> diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx index 33ecdadaa6a2..20e559088dd6 100644 --- a/sw/qa/extras/uiwriter/uiwriter.cxx +++ b/sw/qa/extras/uiwriter/uiwriter.cxx @@ -314,6 +314,7 @@ public: void testXDrawPagesSupplier(); void testTdf116403(); void testHtmlCopyImages(); + void testTdf116789(); CPPUNIT_TEST_SUITE(SwUiWriterTest); CPPUNIT_TEST(testReplaceForward); @@ -501,6 +502,7 @@ public: CPPUNIT_TEST(testXDrawPagesSupplier); CPPUNIT_TEST(testTdf116403); CPPUNIT_TEST(testHtmlCopyImages); + CPPUNIT_TEST(testTdf116789); CPPUNIT_TEST_SUITE_END(); private: @@ -6136,6 +6138,26 @@ void SwUiWriterTest::testHtmlCopyImages() CPPUNIT_ASSERT(aImage.startsWith("file:///")); } +void SwUiWriterTest::testTdf116789() +{ + createDoc("tdf116789.fodt"); + uno::Reference<text::XBookmarksSupplier> xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<text::XText> xText1; + uno::Reference<text::XText> xText2; + { + uno::Reference<text::XTextContent> xBookmark( + xBookmarksSupplier->getBookmarks()->getByName("Bookmark 1"), uno::UNO_QUERY); + xText1 = xBookmark->getAnchor()->getText(); + } + { + uno::Reference<text::XTextContent> xBookmark( + xBookmarksSupplier->getBookmarks()->getByName("Bookmark 1"), uno::UNO_QUERY); + xText2 = xBookmark->getAnchor()->getText(); + } + // This failed, we got two different SwXCell for the same bookmark anchor text. + CPPUNIT_ASSERT_EQUAL(xText1, xText2); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index 1f5b1811b282..21f44c5e34fd 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -1148,7 +1148,7 @@ void SwXCell::SwClientNotify(const SwModify& rModify, const SfxHint& rHint) { if(auto pFindHint = dynamic_cast<const FindUnoInstanceHint<SwTableBox, SwXCell>*>(&rHint)) { - if(!pFindHint->m_pCore && pFindHint->m_pCore == GetTableBox()) + if(!pFindHint->m_pResult && pFindHint->m_pCore == GetTableBox()) pFindHint->m_pResult = this; } else |