cppuhelper/source/implbase.cxx | 5 +++- dbaccess/source/ui/app/AppIconControl.cxx | 1 dbaccess/source/ui/browser/sbagrid.cxx | 11 ++++++++++ dbaccess/source/ui/inc/sbagrid.hxx | 3 +- include/cppuhelper/interfacecontainer.h | 1 include/svtools/transfer.hxx | 8 +++++-- sc/source/ui/app/inputwin.cxx | 1 sc/source/ui/inc/tabcont.hxx | 1 sc/source/ui/view/tabcont.cxx | 8 +++++++ sd/source/ui/dlg/LayerTabBar.cxx | 7 ++++++ sd/source/ui/inc/LayerTabBar.hxx | 1 sd/source/ui/inc/TabControl.hxx | 1 sd/source/ui/sidebar/LayoutMenu.cxx | 2 + sd/source/ui/view/sdwindow.cxx | 1 sd/source/ui/view/tabcontr.cxx | 8 +++++++ starmath/source/edit.cxx | 1 svtools/source/brwbox/brwbox1.cxx | 2 + svtools/source/brwbox/datwin.cxx | 2 + svtools/source/contnr/treelistbox.cxx | 2 + svtools/source/misc/transfer2.cxx | 31 +++++++++++++++++++++++++----- svx/source/fmcomp/fmgridcl.cxx | 1 sw/source/uibase/docvw/edtwin.cxx | 2 + 22 files changed, 90 insertions(+), 10 deletions(-)
New commits: commit 80c874dc87ad3018df6e6f0edb7cca174f75db37 Author: Noel Grandin <n...@peralex.com> Date: Fri Jun 3 17:15:20 2016 +0200 remove "object is disposed" warning in OBroadcastHelperVar::removeListener doesn't add anything of value. Change-Id: Ie2dea7c43570640284771c992d0072ab61de425e Reviewed-on: https://gerrit.libreoffice.org/25871 Reviewed-by: Noel Grandin <noelgran...@gmail.com> Tested-by: Noel Grandin <noelgran...@gmail.com> diff --git a/cppuhelper/source/implbase.cxx b/cppuhelper/source/implbase.cxx index 147fe82..3252645 100644 --- a/cppuhelper/source/implbase.cxx +++ b/cppuhelper/source/implbase.cxx @@ -284,7 +284,10 @@ void WeakAggComponentImplHelperBase::removeEventListener( Reference< lang::XEventListener > const & xListener ) throw (RuntimeException, std::exception) { - rBHelper.removeListener( cppu::UnoType<decltype(xListener)>::get(), xListener ); + // if we have disposed, then we have cleared the list already + MutexGuard aGuard( rBHelper.rMutex ); + if (!rBHelper.bDisposed) + rBHelper.removeListener( cppu::UnoType<decltype(xListener)>::get(), xListener ); } } diff --git a/dbaccess/source/ui/app/AppIconControl.cxx b/dbaccess/source/ui/app/AppIconControl.cxx index 1298cc9..14d6234 100644 --- a/dbaccess/source/ui/app/AppIconControl.cxx +++ b/dbaccess/source/ui/app/AppIconControl.cxx @@ -77,6 +77,7 @@ void OApplicationIconControl::dispose() pEntry->SetUserData(nullptr); } } + DropTargetHelper::dispose(); SvtIconChoiceCtrl::dispose(); } diff --git a/dbaccess/source/ui/browser/sbagrid.cxx b/dbaccess/source/ui/browser/sbagrid.cxx index 1ae5e20..226eaae 100644 --- a/dbaccess/source/ui/browser/sbagrid.cxx +++ b/dbaccess/source/ui/browser/sbagrid.cxx @@ -562,6 +562,17 @@ SbaGridHeader::SbaGridHeader(BrowseBox* pParent, WinBits nWinBits) { } +SbaGridHeader::~SbaGridHeader() +{ + disposeOnce(); +} + +void SbaGridHeader::dispose() +{ + DragSourceHelper::dispose(); + FmGridHeader::dispose(); +} + void SbaGridHeader::StartDrag( sal_Int8 _nAction, const Point& _rPosPixel ) { SolarMutexGuard aGuard; diff --git a/dbaccess/source/ui/inc/sbagrid.hxx b/dbaccess/source/ui/inc/sbagrid.hxx index 5565311..1972692 100644 --- a/dbaccess/source/ui/inc/sbagrid.hxx +++ b/dbaccess/source/ui/inc/sbagrid.hxx @@ -170,7 +170,8 @@ namespace dbaui { public: SbaGridHeader(BrowseBox* pParent, WinBits nWinBits = WB_STDHEADERBAR | WB_DRAG); - + virtual void dispose() override; + virtual ~SbaGridHeader(); protected: // FmGridHeader overridables diff --git a/include/cppuhelper/interfacecontainer.h b/include/cppuhelper/interfacecontainer.h index f3986bb..07b296e 100644 --- a/include/cppuhelper/interfacecontainer.h +++ b/include/cppuhelper/interfacecontainer.h @@ -476,7 +476,6 @@ struct OBroadcastHelperVar const css::uno::Reference < css::uno::XInterface > & r ) { ::osl::MutexGuard guard( rMutex ); - OSL_ENSURE( !bDisposed, "object is disposed" ); if( ! bInDispose && ! bDisposed ) aLC.removeInterface( key , r ); } diff --git a/include/svtools/transfer.hxx b/include/svtools/transfer.hxx index ea50c8e..37aaf4d 100644 --- a/include/svtools/transfer.hxx +++ b/include/svtools/transfer.hxx @@ -395,8 +395,9 @@ private: friend class DragSourceHelper::DragGestureListener; private: - + osl::Mutex maMutex; css::uno::Reference< css::datatransfer::dnd::XDragGestureRecognizer > mxDragGestureRecognizer; + css::uno::Reference< css::datatransfer::dnd::XDragGestureListener > mxDragGestureListener; DragSourceHelper& operator=( const DragSourceHelper& rDragSourceHelper ) = delete; @@ -408,6 +409,7 @@ public: virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ); DragSourceHelper( vcl::Window* pWindow ); + void dispose(); virtual ~DragSourceHelper(); }; @@ -444,8 +446,9 @@ private: friend class DropTargetHelper::DropTargetListener; private: - + osl::Mutex maMutex; css::uno::Reference< css::datatransfer::dnd::XDropTarget > mxDropTarget; + css::uno::Reference< css::datatransfer::dnd::XDropTargetListener > mxDropTargetListener; DataFlavorExVector* mpFormats; @@ -468,6 +471,7 @@ public: DropTargetHelper( vcl::Window* pWindow ); DropTargetHelper( const css::uno::Reference< css::datatransfer::dnd::XDropTarget >& rxDropTarget ); + void dispose(); virtual ~DropTargetHelper(); // typically called by the application in ::AcceptDrop and ::ExecuteDrop and (see above) diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx index 904c465..e7d4d96 100644 --- a/sc/source/ui/app/inputwin.cxx +++ b/sc/source/ui/app/inputwin.cxx @@ -1440,6 +1440,7 @@ void ScTextWnd::dispose() delete pEditEngine; pEditEngine = nullptr; + DragSourceHelper::dispose(); ScTextWndBase::dispose(); } diff --git a/sc/source/ui/inc/tabcont.hxx b/sc/source/ui/inc/tabcont.hxx index 31503b4..e6f2df0 100644 --- a/sc/source/ui/inc/tabcont.hxx +++ b/sc/source/ui/inc/tabcont.hxx @@ -64,6 +64,7 @@ protected: public: ScTabControl( vcl::Window* pParent, ScViewData* pData ); + virtual void dispose() override; virtual ~ScTabControl(); using TabBar::StartDrag; diff --git a/sc/source/ui/view/tabcont.cxx b/sc/source/ui/view/tabcont.cxx index 8f8eb13..56ef3b6 100644 --- a/sc/source/ui/view/tabcont.cxx +++ b/sc/source/ui/view/tabcont.cxx @@ -111,6 +111,14 @@ IMPL_LINK_TYPED(ScTabControl, ShowPageList, const CommandEvent &, rEvent, void) ScTabControl::~ScTabControl() { + disposeOnce(); +} + +void ScTabControl::dispose() +{ + DragSourceHelper::dispose(); + DropTargetHelper::dispose(); + TabBar::dispose(); } sal_uInt16 ScTabControl::GetMaxId() const diff --git a/sd/source/ui/dlg/LayerTabBar.cxx b/sd/source/ui/dlg/LayerTabBar.cxx index caf7ce5..8f8425b 100644 --- a/sd/source/ui/dlg/LayerTabBar.cxx +++ b/sd/source/ui/dlg/LayerTabBar.cxx @@ -57,6 +57,13 @@ LayerTabBar::LayerTabBar(DrawViewShell* pViewSh, vcl::Window* pParent) LayerTabBar::~LayerTabBar() { + disposeOnce(); +} + +void LayerTabBar::dispose() +{ + DropTargetHelper::dispose(); + TabBar::dispose(); } void LayerTabBar::Select() diff --git a/sd/source/ui/inc/LayerTabBar.hxx b/sd/source/ui/inc/LayerTabBar.hxx index 35dbd18..ac2fab5 100644 --- a/sd/source/ui/inc/LayerTabBar.hxx +++ b/sd/source/ui/inc/LayerTabBar.hxx @@ -38,6 +38,7 @@ public: LayerTabBar ( DrawViewShell* pDrViewSh, vcl::Window* pParent); + virtual void dispose() override; virtual ~LayerTabBar(); /** Inform all listeners of this control that the current layer has been diff --git a/sd/source/ui/inc/TabControl.hxx b/sd/source/ui/inc/TabControl.hxx index 6054b44..53e7622 100644 --- a/sd/source/ui/inc/TabControl.hxx +++ b/sd/source/ui/inc/TabControl.hxx @@ -40,6 +40,7 @@ class TabControl sal_uInt16 RrePageID; public: TabControl (DrawViewShell* pDrViewSh, vcl::Window* pParent); + virtual void dispose() override; virtual ~TabControl(); /** Inform all listeners of this control that the current page has been diff --git a/sd/source/ui/sidebar/LayoutMenu.cxx b/sd/source/ui/sidebar/LayoutMenu.cxx index 539cee5..f9ba5cf6 100644 --- a/sd/source/ui/sidebar/LayoutMenu.cxx +++ b/sd/source/ui/sidebar/LayoutMenu.cxx @@ -200,6 +200,8 @@ void LayoutMenu::dispose() { SAL_INFO("sd.ui", "destroying LayoutMenu at " << this); Dispose(); + DragSourceHelper::dispose(); + DropTargetHelper::dispose(); ValueSet::dispose(); } diff --git a/sd/source/ui/view/sdwindow.cxx b/sd/source/ui/view/sdwindow.cxx index 97c4a5d..2a40cf3 100644 --- a/sd/source/ui/view/sdwindow.cxx +++ b/sd/source/ui/view/sdwindow.cxx @@ -102,6 +102,7 @@ void Window::dispose() pWindowUpdater->UnregisterWindow (this); } mpShareWin.clear(); + DropTargetHelper::dispose(); vcl::Window::dispose(); } diff --git a/sd/source/ui/view/tabcontr.cxx b/sd/source/ui/view/tabcontr.cxx index f258d59..34627e7 100644 --- a/sd/source/ui/view/tabcontr.cxx +++ b/sd/source/ui/view/tabcontr.cxx @@ -78,6 +78,14 @@ TabControl::TabControl(DrawViewShell* pViewSh, vcl::Window* pParent) : TabControl::~TabControl() { + disposeOnce(); +} + +void TabControl::dispose() +{ + DragSourceHelper::dispose(); + DropTargetHelper::dispose(); + TabBar::dispose(); } void TabControl::Select() diff --git a/starmath/source/edit.cxx b/starmath/source/edit.cxx index 2186e99..ba9fda4 100644 --- a/starmath/source/edit.cxx +++ b/starmath/source/edit.cxx @@ -149,6 +149,7 @@ void SmEditWindow::dispose() pVScrollBar.disposeAndClear(); pScrollBox.disposeAndClear(); + DropTargetHelper::dispose(); vcl::Window::dispose(); } diff --git a/svtools/source/brwbox/brwbox1.cxx b/svtools/source/brwbox/brwbox1.cxx index 16cbb63..37deeb5 100644 --- a/svtools/source/brwbox/brwbox1.cxx +++ b/svtools/source/brwbox/brwbox1.cxx @@ -162,6 +162,8 @@ void BrowseBox::dispose() delete pColSel; if ( bMultiSelection ) delete uRow.pSel; + DragSourceHelper::dispose(); + DropTargetHelper::dispose(); Control::dispose(); } diff --git a/svtools/source/brwbox/datwin.cxx b/svtools/source/brwbox/datwin.cxx index 11b43f6..d15817b 100644 --- a/svtools/source/brwbox/datwin.cxx +++ b/svtools/source/brwbox/datwin.cxx @@ -229,6 +229,8 @@ void BrowserDataWin::dispose() pHeaderBar.clear(); pEventWin.clear(); pCornerWin.clear(); + DragSourceHelper::dispose(); + DropTargetHelper::dispose(); Control::dispose(); } diff --git a/svtools/source/contnr/treelistbox.cxx b/svtools/source/contnr/treelistbox.cxx index 29b5ee1..6021d6b 100644 --- a/svtools/source/contnr/treelistbox.cxx +++ b/svtools/source/contnr/treelistbox.cxx @@ -1481,6 +1481,8 @@ void SvTreeListBox::dispose() mpImpl.reset(); } + DropTargetHelper::dispose(); + DragSourceHelper::dispose(); Control::dispose(); } diff --git a/svtools/source/misc/transfer2.cxx b/svtools/source/misc/transfer2.cxx index 5b7a3da..e8fcdc1 100644 --- a/svtools/source/misc/transfer2.cxx +++ b/svtools/source/misc/transfer2.cxx @@ -78,10 +78,21 @@ DragSourceHelper::DragSourceHelper( vcl::Window* pWindow ) : } +void DragSourceHelper::dispose() +{ + Reference<XDragGestureRecognizer> xTmp; + { + osl::MutexGuard aGuard( maMutex ); + xTmp = mxDragGestureRecognizer; + mxDragGestureRecognizer.clear(); + } + if( xTmp.is() ) + xTmp->removeDragGestureListener( mxDragGestureListener ); +} + DragSourceHelper::~DragSourceHelper() { - if( mxDragGestureRecognizer.is() ) - mxDragGestureRecognizer->removeDragGestureListener( mxDragGestureListener ); + dispose(); } @@ -240,11 +251,21 @@ DropTargetHelper::DropTargetHelper( const Reference< XDropTarget >& rxDropTarget } -DropTargetHelper::~DropTargetHelper() +void DropTargetHelper::dispose() { - if( mxDropTarget.is() ) - mxDropTarget->removeDropTargetListener( mxDropTargetListener ); + Reference< XDropTarget > xTmp; + { + osl::MutexGuard aGuard( maMutex ); + xTmp = mxDropTarget; + mxDropTarget.clear(); + } + if( xTmp.is() ) + xTmp->removeDropTargetListener( mxDropTargetListener ); +} +DropTargetHelper::~DropTargetHelper() +{ + dispose(); delete mpFormats; } diff --git a/svx/source/fmcomp/fmgridcl.cxx b/svx/source/fmcomp/fmgridcl.cxx index 45a8fc4..55c1b3a 100644 --- a/svx/source/fmcomp/fmgridcl.cxx +++ b/svx/source/fmcomp/fmgridcl.cxx @@ -142,6 +142,7 @@ void FmGridHeader::dispose() { delete m_pImpl; m_pImpl = nullptr; + DropTargetHelper::dispose(); svt::EditBrowserHeader::dispose(); } diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx index 434ab27..fafaf0e 100644 --- a/sw/source/uibase/docvw/edtwin.cxx +++ b/sw/source/uibase/docvw/edtwin.cxx @@ -5158,6 +5158,8 @@ void SwEditWin::dispose() delete m_pFrameControlsManager; m_pFrameControlsManager = nullptr; + DragSourceHelper::dispose(); + DropTargetHelper::dispose(); vcl::Window::dispose(); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits