sw/qa/core/txtnode/txtnode.cxx | 12 ++++++++++++ sw/source/core/txtnode/thints.cxx | 7 +++++-- 2 files changed, 17 insertions(+), 2 deletions(-)
New commits: commit 51eb7b837996384d0155c0841bf69cf068bbe367 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Thu Jun 9 14:23:11 2022 +0200 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Thu Jun 9 15:48:59 2022 +0200 sw content controls: fix crash on trying to insert nested dropdown This went wrong in commit 3dd4f3691458ea537bc1867386269694775cfbcb (sw content controls: add document model, 2022-03-30). Change-Id: I8040e02975d1f98cc01ef6f8a22745f27afa5276 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135554 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Jenkins diff --git a/sw/qa/core/txtnode/txtnode.cxx b/sw/qa/core/txtnode/txtnode.cxx index ed8759112ae1..ad44a12f7c9b 100644 --- a/sw/qa/core/txtnode/txtnode.cxx +++ b/sw/qa/core/txtnode/txtnode.cxx @@ -24,6 +24,7 @@ #include <wrtsh.hxx> #include <unotxdoc.hxx> #include <docsh.hxx> +#include <formatcontentcontrol.hxx> constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/core/txtnode/data/"; @@ -208,6 +209,17 @@ CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testSplitNodeSuperscriptCopy) CPPUNIT_ASSERT(!aSet.HasItem(RES_CHRATR_ESCAPEMENT)); } +CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testInsertDropDownContentControlTwice) +{ + // Given an already selected dropdown content control: + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->InsertContentControl(SwContentControlType::DROP_DOWN_LIST); + + // When trying to insert an inner one, make sure that we don't crash: + pWrtShell->InsertContentControl(SwContentControlType::DROP_DOWN_LIST); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/txtnode/thints.cxx b/sw/source/core/txtnode/thints.cxx index 0af7bc8c16ef..b5e0cbeaa565 100644 --- a/sw/source/core/txtnode/thints.cxx +++ b/sw/source/core/txtnode/thints.cxx @@ -106,11 +106,14 @@ SwpHints::SwpHints(const SwTextNode& rParent) static void TextAttrDelete( SwDoc & rDoc, SwTextAttr * const pAttr ) { if (RES_TXTATR_META == pAttr->Which() || - RES_TXTATR_METAFIELD == pAttr->Which() || - pAttr->Which() == RES_TXTATR_CONTENTCONTROL) + RES_TXTATR_METAFIELD == pAttr->Which()) { static_txtattr_cast<SwTextMeta *>(pAttr)->ChgTextNode(nullptr); // prevents ASSERT } + else if (pAttr->Which() == RES_TXTATR_CONTENTCONTROL) + { + static_txtattr_cast<SwTextContentControl*>(pAttr)->ChgTextNode(nullptr); + } SwTextAttr::Destroy( pAttr, rDoc.GetAttrPool() ); }