diff options
author | Caolán McNamara <caolanm@redhat.com> | 2021-05-19 17:36:48 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2021-05-19 21:38:06 +0200 |
commit | feb17e47bc04e2af6b4ecf7202764ce980f83242 (patch) | |
tree | b7008c444a4eea937c705ebdd3f1723f64e9552a /chart2 | |
parent | 9e27ac3ed8f2405a94bf07519ca7941731025e37 (diff) |
tdf#142364 exception thrown during destruction
Change-Id: I4e06ac82108e5381cd11fbd6407e1ce1e85c3ac6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115822
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'chart2')
14 files changed, 100 insertions, 65 deletions
diff --git a/chart2/source/controller/sidebar/ChartAreaPanel.cxx b/chart2/source/controller/sidebar/ChartAreaPanel.cxx index 51e71e22cf33..0378f7bbda6f 100644 --- a/chart2/source/controller/sidebar/ChartAreaPanel.cxx +++ b/chart2/source/controller/sidebar/ChartAreaPanel.cxx @@ -289,12 +289,7 @@ ChartAreaPanel::ChartAreaPanel(weld::Widget* pParent, ChartAreaPanel::~ChartAreaPanel() { - css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW); - xBroadcaster->removeModifyListener(mxListener); - - css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier(mxModel->getCurrentController(), css::uno::UNO_QUERY); - if (xSelectionSupplier.is()) - xSelectionSupplier->removeSelectionChangeListener(mxSelectionListener); + doUpdateModel(nullptr); } void ChartAreaPanel::Initialize() @@ -512,23 +507,25 @@ void ChartAreaPanel::selectionChanged(bool bCorrectType) updateData(); } -void ChartAreaPanel::updateModel( - css::uno::Reference<css::frame::XModel> xModel) +void ChartAreaPanel::doUpdateModel(css::uno::Reference<css::frame::XModel> xModel) { if (mbModelValid) { css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW); xBroadcaster->removeModifyListener(mxListener); - } - css::uno::Reference<css::view::XSelectionSupplier> oldSelectionSupplier( - mxModel->getCurrentController(), css::uno::UNO_QUERY); - if (oldSelectionSupplier.is()) { - oldSelectionSupplier->removeSelectionChangeListener(mxSelectionListener); + css::uno::Reference<css::view::XSelectionSupplier> oldSelectionSupplier( + mxModel->getCurrentController(), css::uno::UNO_QUERY); + if (oldSelectionSupplier.is()) { + oldSelectionSupplier->removeSelectionChangeListener(mxSelectionListener); + } } mxModel = xModel; - mbModelValid = true; + mbModelValid = mxModel.is(); + + if (!mbModelValid) + return; css::uno::Reference<css::util::XModifyBroadcaster> xBroadcasterNew(mxModel, css::uno::UNO_QUERY_THROW); xBroadcasterNew->addModifyListener(mxListener); @@ -538,6 +535,11 @@ void ChartAreaPanel::updateModel( xSelectionSupplier->addSelectionChangeListener(mxSelectionListener); } +void ChartAreaPanel::updateModel( css::uno::Reference<css::frame::XModel> xModel) +{ + doUpdateModel(xModel); +} + } diff --git a/chart2/source/controller/sidebar/ChartAreaPanel.hxx b/chart2/source/controller/sidebar/ChartAreaPanel.hxx index 01fb9077a178..110132ca4356 100644 --- a/chart2/source/controller/sidebar/ChartAreaPanel.hxx +++ b/chart2/source/controller/sidebar/ChartAreaPanel.hxx @@ -72,6 +72,7 @@ private: rtl::Reference<ChartSidebarSelectionListener> mxSelectionListener; void Initialize(); + void doUpdateModel(css::uno::Reference<css::frame::XModel> xModel); bool mbUpdate; bool mbModelValid; diff --git a/chart2/source/controller/sidebar/ChartAxisPanel.cxx b/chart2/source/controller/sidebar/ChartAxisPanel.cxx index f35a57bdf232..ccab43770b8f 100644 --- a/chart2/source/controller/sidebar/ChartAxisPanel.cxx +++ b/chart2/source/controller/sidebar/ChartAxisPanel.cxx @@ -222,12 +222,7 @@ ChartAxisPanel::ChartAxisPanel( ChartAxisPanel::~ChartAxisPanel() { - css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW); - xBroadcaster->removeModifyListener(mxModifyListener); - - css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier(mxModel->getCurrentController(), css::uno::UNO_QUERY); - if (xSelectionSupplier.is()) - xSelectionSupplier->removeSelectionChangeListener(mxSelectionListener); + doUpdateModel(nullptr); mxCBShowLabel.reset(); mxCBReverse.reset(); @@ -311,23 +306,25 @@ void ChartAxisPanel::modelInvalid() mbModelValid = false; } -void ChartAxisPanel::updateModel( - css::uno::Reference<css::frame::XModel> xModel) +void ChartAxisPanel::doUpdateModel(css::uno::Reference<css::frame::XModel> xModel) { if (mbModelValid) { css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW); xBroadcaster->removeModifyListener(mxModifyListener); - } - css::uno::Reference<css::view::XSelectionSupplier> oldSelectionSupplier( - mxModel->getCurrentController(), css::uno::UNO_QUERY); - if (oldSelectionSupplier.is()) { - oldSelectionSupplier->removeSelectionChangeListener(mxSelectionListener); + css::uno::Reference<css::view::XSelectionSupplier> oldSelectionSupplier( + mxModel->getCurrentController(), css::uno::UNO_QUERY); + if (oldSelectionSupplier.is()) { + oldSelectionSupplier->removeSelectionChangeListener(mxSelectionListener); + } } mxModel = xModel; - mbModelValid = true; + mbModelValid = mxModel.is(); + + if (!mbModelValid) + return; css::uno::Reference<css::util::XModifyBroadcaster> xBroadcasterNew(mxModel, css::uno::UNO_QUERY_THROW); xBroadcasterNew->addModifyListener(mxModifyListener); @@ -337,6 +334,11 @@ void ChartAxisPanel::updateModel( xSelectionSupplier->addSelectionChangeListener(mxSelectionListener); } +void ChartAxisPanel::updateModel(css::uno::Reference<css::frame::XModel> xModel) +{ + doUpdateModel(xModel); +} + void ChartAxisPanel::selectionChanged(bool bCorrectType) { if (bCorrectType) diff --git a/chart2/source/controller/sidebar/ChartAxisPanel.hxx b/chart2/source/controller/sidebar/ChartAxisPanel.hxx index b5f36d90ad89..4134b76c20dd 100644 --- a/chart2/source/controller/sidebar/ChartAxisPanel.hxx +++ b/chart2/source/controller/sidebar/ChartAxisPanel.hxx @@ -81,6 +81,7 @@ private: bool mbModelValid; void Initialize(); + void doUpdateModel(css::uno::Reference<css::frame::XModel> xModel); DECL_LINK(CheckBoxHdl, weld::ToggleButton&, void); DECL_LINK(ListBoxHdl, weld::ComboBox&, void); diff --git a/chart2/source/controller/sidebar/ChartElementsPanel.cxx b/chart2/source/controller/sidebar/ChartElementsPanel.cxx index 582ac621ee12..59afe8cbb7d4 100644 --- a/chart2/source/controller/sidebar/ChartElementsPanel.cxx +++ b/chart2/source/controller/sidebar/ChartElementsPanel.cxx @@ -339,8 +339,8 @@ ChartElementsPanel::ChartElementsPanel( ChartElementsPanel::~ChartElementsPanel() { - css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW); - xBroadcaster->removeModifyListener(mxListener); + doUpdateModel(nullptr); + mxCBTitle.reset(); mxEditTitle.reset(); mxCBSubtitle.reset(); @@ -563,8 +563,7 @@ void ChartElementsPanel::modelInvalid() mbModelValid = false; } -void ChartElementsPanel::updateModel( - css::uno::Reference<css::frame::XModel> xModel) +void ChartElementsPanel::doUpdateModel(css::uno::Reference<css::frame::XModel> xModel) { if (mbModelValid) { @@ -573,12 +572,20 @@ void ChartElementsPanel::updateModel( } mxModel = xModel; - mbModelValid = true; + mbModelValid = mxModel.is(); + + if (!mbModelValid) + return; css::uno::Reference<css::util::XModifyBroadcaster> xBroadcasterNew(mxModel, css::uno::UNO_QUERY_THROW); xBroadcasterNew->addModifyListener(mxListener); } +void ChartElementsPanel::updateModel(css::uno::Reference<css::frame::XModel> xModel) +{ + doUpdateModel(xModel); +} + IMPL_LINK(ChartElementsPanel, CheckBoxHdl, weld::ToggleButton&, rCheckBox, void) { bool bChecked = rCheckBox.get_active(); diff --git a/chart2/source/controller/sidebar/ChartElementsPanel.hxx b/chart2/source/controller/sidebar/ChartElementsPanel.hxx index 801b40efdb72..b53aa715f583 100644 --- a/chart2/source/controller/sidebar/ChartElementsPanel.hxx +++ b/chart2/source/controller/sidebar/ChartElementsPanel.hxx @@ -102,6 +102,7 @@ private: OUString maTextSubTitle; void Initialize(); + void doUpdateModel(css::uno::Reference<css::frame::XModel> xModel); void setTitleVisible(TitleHelper::eTitleType eTitle, bool bVisible); diff --git a/chart2/source/controller/sidebar/ChartErrorBarPanel.cxx b/chart2/source/controller/sidebar/ChartErrorBarPanel.cxx index 943abdbdd66c..1b3f35551382 100644 --- a/chart2/source/controller/sidebar/ChartErrorBarPanel.cxx +++ b/chart2/source/controller/sidebar/ChartErrorBarPanel.cxx @@ -251,8 +251,7 @@ ChartErrorBarPanel::ChartErrorBarPanel(weld::Widget* pParent, ChartController* p ChartErrorBarPanel::~ChartErrorBarPanel() { - css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW); - xBroadcaster->removeModifyListener(mxListener); + doUpdateModel(nullptr); mxRBPosAndNeg.reset(); mxRBPos.reset(); @@ -371,8 +370,7 @@ void ChartErrorBarPanel::modelInvalid() mbModelValid = false; } -void ChartErrorBarPanel::updateModel( - css::uno::Reference<css::frame::XModel> xModel) +void ChartErrorBarPanel::doUpdateModel(css::uno::Reference<css::frame::XModel> xModel) { if (mbModelValid) { @@ -381,12 +379,20 @@ void ChartErrorBarPanel::updateModel( } mxModel = xModel; - mbModelValid = true; + mbModelValid = mxModel.is(); + + if (!mbModelValid) + return; css::uno::Reference<css::util::XModifyBroadcaster> xBroadcasterNew(mxModel, css::uno::UNO_QUERY_THROW); xBroadcasterNew->addModifyListener(mxListener); } +void ChartErrorBarPanel::updateModel(css::uno::Reference<css::frame::XModel> xModel) +{ + doUpdateModel(xModel); +} + IMPL_LINK_NOARG(ChartErrorBarPanel, RadioBtnHdl, weld::ToggleButton&, void) { OUString aCID = getCID(mxModel); diff --git a/chart2/source/controller/sidebar/ChartErrorBarPanel.hxx b/chart2/source/controller/sidebar/ChartErrorBarPanel.hxx index 0b95a565bf01..e87a65d845b9 100644 --- a/chart2/source/controller/sidebar/ChartErrorBarPanel.hxx +++ b/chart2/source/controller/sidebar/ChartErrorBarPanel.hxx @@ -78,6 +78,7 @@ private: bool mbModelValid; void Initialize(); + void doUpdateModel(css::uno::Reference<css::frame::XModel> xModel); DECL_LINK(RadioBtnHdl, weld::ToggleButton&, void); DECL_LINK(ListBoxHdl, weld::ComboBox&, void); diff --git a/chart2/source/controller/sidebar/ChartLinePanel.cxx b/chart2/source/controller/sidebar/ChartLinePanel.cxx index d36c1bf7ce31..1de557ec5aba 100644 --- a/chart2/source/controller/sidebar/ChartLinePanel.cxx +++ b/chart2/source/controller/sidebar/ChartLinePanel.cxx @@ -143,12 +143,7 @@ ChartLinePanel::ChartLinePanel(weld::Widget* pParent, ChartLinePanel::~ChartLinePanel() { - css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW); - xBroadcaster->removeModifyListener(mxListener); - - css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier(mxModel->getCurrentController(), css::uno::UNO_QUERY); - if (xSelectionSupplier.is()) - xSelectionSupplier->removeSelectionChangeListener(mxSelectionListener); + doUpdateModel(nullptr); } void ChartLinePanel::Initialize() @@ -205,23 +200,25 @@ void ChartLinePanel::selectionChanged(bool bCorrectType) updateData(); } -void ChartLinePanel::updateModel( - css::uno::Reference<css::frame::XModel> xModel) +void ChartLinePanel::doUpdateModel(css::uno::Reference<css::frame::XModel> xModel) { if (mbModelValid) { css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW); xBroadcaster->removeModifyListener(mxListener); - } - css::uno::Reference<css::view::XSelectionSupplier> oldSelectionSupplier( - mxModel->getCurrentController(), css::uno::UNO_QUERY); - if (oldSelectionSupplier.is()) { - oldSelectionSupplier->removeSelectionChangeListener(mxSelectionListener); + css::uno::Reference<css::view::XSelectionSupplier> oldSelectionSupplier( + mxModel->getCurrentController(), css::uno::UNO_QUERY); + if (oldSelectionSupplier.is()) { + oldSelectionSupplier->removeSelectionChangeListener(mxSelectionListener); + } } mxModel = xModel; - mbModelValid = true; + mbModelValid = mxModel.is(); + + if (!mbModelValid) + return; maLineStyleWrapper.updateModel(mxModel); maLineColorWrapper.updateModel(mxModel); @@ -234,6 +231,11 @@ void ChartLinePanel::updateModel( xSelectionSupplier->addSelectionChangeListener(mxSelectionListener); } +void ChartLinePanel::updateModel(css::uno::Reference<css::frame::XModel> xModel) +{ + doUpdateModel(xModel); +} + void ChartLinePanel::setLineJoint(const XLineJointItem* pItem) { css::uno::Reference<css::beans::XPropertySet> xPropSet = diff --git a/chart2/source/controller/sidebar/ChartLinePanel.hxx b/chart2/source/controller/sidebar/ChartLinePanel.hxx index b46452467fec..c1348c7ac481 100644 --- a/chart2/source/controller/sidebar/ChartLinePanel.hxx +++ b/chart2/source/controller/sidebar/ChartLinePanel.hxx @@ -74,6 +74,7 @@ private: rtl::Reference<ChartSidebarSelectionListener> mxSelectionListener; void Initialize(); + void doUpdateModel(css::uno::Reference<css::frame::XModel> xModel); bool mbUpdate; bool mbModelValid; diff --git a/chart2/source/controller/sidebar/ChartSeriesPanel.cxx b/chart2/source/controller/sidebar/ChartSeriesPanel.cxx index 4ce23d66811c..fe2452572985 100644 --- a/chart2/source/controller/sidebar/ChartSeriesPanel.cxx +++ b/chart2/source/controller/sidebar/ChartSeriesPanel.cxx @@ -300,11 +300,7 @@ ChartSeriesPanel::ChartSeriesPanel( ChartSeriesPanel::~ChartSeriesPanel() { - css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW); - xBroadcaster->removeModifyListener(mxListener); - css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier(mxModel->getCurrentController(), css::uno::UNO_QUERY); - if (xSelectionSupplier.is()) - xSelectionSupplier->removeSelectionChangeListener(mxSelectionListener); + doUpdateModel(nullptr); mxCBLabel.reset(); mxCBTrendline.reset(); @@ -409,8 +405,7 @@ void ChartSeriesPanel::modelInvalid() mbModelValid = false; } -void ChartSeriesPanel::updateModel( - css::uno::Reference<css::frame::XModel> xModel) +void ChartSeriesPanel::doUpdateModel(css::uno::Reference<css::frame::XModel> xModel) { if (mbModelValid) { @@ -425,7 +420,10 @@ void ChartSeriesPanel::updateModel( } mxModel = xModel; - mbModelValid = true; + mbModelValid = mxModel.is(); + + if (!mbModelValid) + return; css::uno::Reference<css::util::XModifyBroadcaster> xBroadcasterNew(mxModel, css::uno::UNO_QUERY_THROW); xBroadcasterNew->addModifyListener(mxListener); @@ -435,6 +433,11 @@ void ChartSeriesPanel::updateModel( xSelectionSupplier->addSelectionChangeListener(mxSelectionListener); } +void ChartSeriesPanel::updateModel(css::uno::Reference<css::frame::XModel> xModel) +{ + doUpdateModel(xModel); +} + void ChartSeriesPanel::selectionChanged(bool bCorrectType) { if (bCorrectType) diff --git a/chart2/source/controller/sidebar/ChartSeriesPanel.hxx b/chart2/source/controller/sidebar/ChartSeriesPanel.hxx index 2844051001fe..64bc5315bfaa 100644 --- a/chart2/source/controller/sidebar/ChartSeriesPanel.hxx +++ b/chart2/source/controller/sidebar/ChartSeriesPanel.hxx @@ -98,6 +98,7 @@ private: bool mbModelValid; void Initialize(); + void doUpdateModel(css::uno::Reference<css::frame::XModel> xModel); DECL_LINK(CheckBoxHdl, weld::ToggleButton&, void); DECL_LINK(RadioBtnHdl, weld::ToggleButton&, void); diff --git a/chart2/source/controller/sidebar/ChartTypePanel.cxx b/chart2/source/controller/sidebar/ChartTypePanel.cxx index 8ff15267760b..2fca2443807f 100644 --- a/chart2/source/controller/sidebar/ChartTypePanel.cxx +++ b/chart2/source/controller/sidebar/ChartTypePanel.cxx @@ -121,9 +121,7 @@ ChartTypePanel::ChartTypePanel(weld::Widget* pParent, ::chart::ChartController* ChartTypePanel::~ChartTypePanel() { - css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, - css::uno::UNO_QUERY_THROW); - xBroadcaster->removeModifyListener(mxListener); + doUpdateModel(nullptr); //delete all dialog controller m_aChartTypeDialogControllerList.clear(); @@ -264,7 +262,7 @@ void ChartTypePanel::HandleContextChange(const vcl::EnumContext& rContext) void ChartTypePanel::modelInvalid() { mbModelValid = false; } -void ChartTypePanel::updateModel(css::uno::Reference<css::frame::XModel> xModel) +void ChartTypePanel::doUpdateModel(css::uno::Reference<css::frame::XModel> xModel) { if (mbModelValid) { @@ -274,13 +272,21 @@ void ChartTypePanel::updateModel(css::uno::Reference<css::frame::XModel> xModel) } mxModel = xModel; - mbModelValid = true; + mbModelValid = mxModel.is(); + + if (!mbModelValid) + return; css::uno::Reference<css::util::XModifyBroadcaster> xBroadcasterNew(mxModel, css::uno::UNO_QUERY_THROW); xBroadcasterNew->addModifyListener(mxListener); } +void ChartTypePanel::updateModel(css::uno::Reference<css::frame::XModel> xModel) +{ + doUpdateModel(xModel); +} + uno::Reference<css::chart2::XChartTypeTemplate> ChartTypePanel::getCurrentTemplate() const { if (m_pCurrentMainType && m_xChartModel.is()) diff --git a/chart2/source/controller/sidebar/ChartTypePanel.hxx b/chart2/source/controller/sidebar/ChartTypePanel.hxx index 6a9036ebaa02..9610ce3520e9 100644 --- a/chart2/source/controller/sidebar/ChartTypePanel.hxx +++ b/chart2/source/controller/sidebar/ChartTypePanel.hxx @@ -96,6 +96,7 @@ private: bool mbModelValid; void Initialize(); + void doUpdateModel(css::uno::Reference<css::frame::XModel> xModel); std::unique_ptr<Dim3DLookResourceGroup> m_pDim3DLookResourceGroup; std::unique_ptr<StackingResourceGroup> m_pStackingResourceGroup; |