accessibility/source/standard/vclxaccessiblebox.cxx | 12 +++++----- compilerplugins/clang/vclwidgets.cxx | 22 ++++++-------------- include/vcl/layout.hxx | 1 include/vcl/window.hxx | 2 - vcl/source/app/dbggui.cxx | 4 ++- vcl/source/window/layout.cxx | 5 ++++ vcl/unx/generic/app/i18n_status.cxx | 1 vcl/workben/svpclient.cxx | 1 8 files changed, 25 insertions(+), 23 deletions(-)
New commits: commit ad81db2f9d8419cba0f5e388ce8c365667fb8f9c Author: Noel Grandin <n...@peralex.com> Date: Tue Mar 17 08:55:36 2015 +0200 vclwidget: make sure we have an explicit destructor Change-Id: I50490ad8957e8069e72e855f0f5a3b694218fd6b diff --git a/accessibility/source/standard/vclxaccessiblebox.cxx b/accessibility/source/standard/vclxaccessiblebox.cxx index aa4995c..d83e13a 100644 --- a/accessibility/source/standard/vclxaccessiblebox.cxx +++ b/accessibility/source/standard/vclxaccessiblebox.cxx @@ -76,7 +76,7 @@ void VCLXAccessibleBox::ProcessWindowChildEvent( const VclWindowEvent& rVclWindo if (m_aBoxType==COMBOBOX) { VclPtr< ComboBox > pComboBox = GetAs< ComboBox >(); - if ( ( pComboBox != NULL ) && ( pChildWindow != NULL ) ) + if ( ( pComboBox != nullptr ) && ( pChildWindow != NULL ) ) if (pChildWindow == pComboBox->GetSubEdit()) { if (rVclWindowEvent.GetId() == VCLEVENT_WINDOW_SHOW) @@ -336,7 +336,7 @@ Reference<XAccessible> SAL_CALL VCLXAccessibleBox::getAccessibleChild (sal_Int32 if (m_aBoxType==COMBOBOX) { VclPtr< ComboBox > pComboBox = GetAs< ComboBox >(); - if (pComboBox!=NULL && pComboBox->GetSubEdit()!=NULL) + if (pComboBox!=nullptr && pComboBox->GetSubEdit()!=NULL) //Set the edit's acc name the same as parent { pComboBox->GetSubEdit()->SetAccessibleName(getAccessibleName()); @@ -407,7 +407,7 @@ sal_Bool SAL_CALL VCLXAccessibleBox::doAccessibleAction (sal_Int32 nIndex) if (m_aBoxType == COMBOBOX) { VclPtr< ComboBox > pComboBox = GetAs< ComboBox >(); - if (pComboBox != NULL) + if (pComboBox != nullptr) { pComboBox->ToggleDropDown(); bNotify = true; @@ -416,7 +416,7 @@ sal_Bool SAL_CALL VCLXAccessibleBox::doAccessibleAction (sal_Int32 nIndex) else if (m_aBoxType == LISTBOX) { VclPtr< ListBox > pListBox = GetAs< ListBox >(); - if (pListBox != NULL) + if (pListBox != nullptr) { pListBox->ToggleDropDown(); bNotify = true; @@ -541,7 +541,7 @@ void VCLXAccessibleBox::FillAccessibleStateSet( utl::AccessibleStateSetHelper& r OUString sText; sal_Int32 nEntryCount = 0; VclPtr< ComboBox > pComboBox = GetAs< ComboBox >(); - if (pComboBox != NULL) + if (pComboBox != nullptr) { Edit* pSubEdit = pComboBox->GetSubEdit(); if ( pSubEdit) @@ -555,7 +555,7 @@ void VCLXAccessibleBox::FillAccessibleStateSet( utl::AccessibleStateSetHelper& r { sal_Int32 nSelectedEntryCount = 0; VclPtr< ListBox > pListBox = GetAs< ListBox >(); - if (pListBox != NULL && pListBox->GetEntryCount() > 0) + if (pListBox != nullptr && pListBox->GetEntryCount() > 0) { nSelectedEntryCount = pListBox->GetSelectEntryCount(); if ( nSelectedEntryCount == 0) diff --git a/compilerplugins/clang/vclwidgets.cxx b/compilerplugins/clang/vclwidgets.cxx index 7686297..9de6af8 100644 --- a/compilerplugins/clang/vclwidgets.cxx +++ b/compilerplugins/clang/vclwidgets.cxx @@ -270,6 +270,13 @@ bool VCLWidgets::VisitFieldDecl(const FieldDecl * fieldDecl) { fieldDecl->getLocation()) << fieldDecl->getSourceRange(); } + if (!pParentRecordDecl->hasUserDeclaredDestructor()) { + report( + DiagnosticsEngine::Warning, + "vcl::Window subclass with a VclPtr field MUST have an explicit destructor.", + fieldDecl->getLocation()) + << fieldDecl->getSourceRange(); + } } return true; @@ -294,13 +301,6 @@ bool VCLWidgets::VisitParmVarDecl(ParmVarDecl const * pvDecl) { return true; } - if (!pvDecl->getType()->isReferenceType() && pvDecl->getType().getAsString().find("VclPtr") != std::string::npos) { - report( - DiagnosticsEngine::Warning, - "vcl::Window subclass passed as a VclPtr parameter, should be passed as a raw pointer.", - pvDecl->getCanonicalDecl()->getLocation()) - << pvDecl->getCanonicalDecl()->getSourceRange(); - } return true; } @@ -363,14 +363,6 @@ bool VCLWidgets::VisitFunctionDecl( const FunctionDecl* functionDecl ) && pMethodDecl->getParent()->getQualifiedNameAsString() == "vcl::Window") { return true; } - QualType t1 { compat::getReturnType(*functionDecl) }; - if (t1.getAsString().find("VclPtr") == 0) { - report( - DiagnosticsEngine::Warning, - "VclPtr declared as a return type from a method/function, should be passed as a raw pointer.", - functionDecl->getLocation()) - << functionDecl->getSourceRange(); - } if (functionDecl->hasBody() && pMethodDecl && isDerivedFromWindow(pMethodDecl->getParent())) { // check the last thing that the dispose() method does, is to call into the superclass dispose method if (pMethodDecl->getNameAsString() == "dispose") { diff --git a/include/vcl/layout.hxx b/include/vcl/layout.hxx index 40a4593..776b8ce 100644 --- a/include/vcl/layout.hxx +++ b/include/vcl/layout.hxx @@ -626,6 +626,7 @@ private: VclPtr<EventBoxHelper> m_aEventBoxHelper; protected: virtual void dispose() SAL_OVERRIDE; + virtual ~VclEventBox(); public: VclEventBox(vcl::Window* pParent) : VclBin(pParent) diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx index 5f0be55..143f953 100644 --- a/include/vcl/window.hxx +++ b/include/vcl/window.hxx @@ -486,7 +486,7 @@ public: protected: /** This is intended to be used to clear any locally held references to other Window-subclass objects */ - virtual void dispose(); + virtual void dispose() SAL_OVERRIDE; SAL_DLLPRIVATE void ImplInit( vcl::Window* pParent, WinBits nStyle, SystemParentData* pSystemParentData ); diff --git a/vcl/source/app/dbggui.cxx b/vcl/source/app/dbggui.cxx index bcbaee6e..1cc0698 100644 --- a/vcl/source/app/dbggui.cxx +++ b/vcl/source/app/dbggui.cxx @@ -218,6 +218,7 @@ public: void SetInfoText( const OUString& rStr ); private: virtual void dispose() SAL_OVERRIDE; + virtual ~DbgInfoDialog() { disposeOnce(); } }; class DbgDialog : public ModalDialog @@ -239,6 +240,7 @@ public: void RequestHelp( const HelpEvent& rHEvt ) SAL_OVERRIDE; private: virtual void dispose() SAL_OVERRIDE; + virtual ~DbgDialog() { disposeOnce(); } }; DbgDialog::DbgDialog() : @@ -832,7 +834,7 @@ void DbgGUIStart() if ( pData ) { - boost::scoped_ptr<DbgDialog> pDialog(new DbgDialog); + VclPtr<DbgDialog> pDialog(new DbgDialog); // we switch off dialog tests for the debug dialog sal_uLong nOldFlags = pData->nTestFlags; pData->nTestFlags &= ~DBG_TEST_DIALOG; diff --git a/vcl/source/window/layout.cxx b/vcl/source/window/layout.cxx index 08e61eb..d176356 100644 --- a/vcl/source/window/layout.cxx +++ b/vcl/source/window/layout.cxx @@ -1889,6 +1889,11 @@ void VclEventBox::Command(const CommandEvent&) //discard events by default to block them reaching children } +VclEventBox::~VclEventBox() +{ + disposeOnce(); +} + void VclEventBox::dispose() { m_aEventBoxHelper.disposeAndClear(); diff --git a/vcl/unx/generic/app/i18n_status.cxx b/vcl/unx/generic/app/i18n_status.cxx index b92759b..bd5157a 100644 --- a/vcl/unx/generic/app/i18n_status.cxx +++ b/vcl/unx/generic/app/i18n_status.cxx @@ -316,6 +316,7 @@ public: virtual void setText( const OUString & ) SAL_OVERRIDE; virtual void show( bool bShow, I18NStatus::ShowReason eReason ) SAL_OVERRIDE; virtual void toggle( bool bOn ) SAL_OVERRIDE; + virtual ~IIIMPStatusWindow() { disposeOnce(); } virtual void dispose() SAL_OVERRIDE; void layout(); diff --git a/vcl/workben/svpclient.cxx b/vcl/workben/svpclient.cxx index 0bb5875..ce6edb1 100644 --- a/vcl/workben/svpclient.cxx +++ b/vcl/workben/svpclient.cxx @@ -108,6 +108,7 @@ public: virtual void Resize() SAL_OVERRIDE; virtual bool Close() SAL_OVERRIDE; + virtual ~MyWin() { disposeOnce(); } virtual void dispose() SAL_OVERRIDE; void parseList( const OString& rList ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits