diff options
Diffstat (limited to 'cui/source/options/treeopt.cxx')
-rw-r--r-- | cui/source/options/treeopt.cxx | 53 |
1 files changed, 36 insertions, 17 deletions
diff --git a/cui/source/options/treeopt.cxx b/cui/source/options/treeopt.cxx index 42154b213a2f..2267d16775ad 100644 --- a/cui/source/options/treeopt.cxx +++ b/cui/source/options/treeopt.cxx @@ -291,7 +291,7 @@ void MailMergeCfg_Impl::Notify( const com::sun::star::uno::Sequence< OUString >& } //typedef SfxTabPage* (*FNCreateTabPage)( vcl::Window *pParent, const SfxItemSet &rAttrSet ); -SfxTabPage* CreateGeneralTabPage( sal_uInt16 nId, vcl::Window* pParent, const SfxItemSet& rSet ) +VclPtr<SfxTabPage> CreateGeneralTabPage( sal_uInt16 nId, vcl::Window* pParent, const SfxItemSet& rSet ) { CreateTabPage fnCreate = 0; switch(nId) @@ -332,7 +332,7 @@ SfxTabPage* CreateGeneralTabPage( sal_uInt16 nId, vcl::Window* pParent, const Sf #endif } - SfxTabPage* pRet = fnCreate ? (*fnCreate)( pParent, &rSet ) : NULL; + VclPtr<SfxTabPage> pRet = fnCreate ? (*fnCreate)( pParent, &rSet ) : nullptr; return pRet; } @@ -465,11 +465,11 @@ static bool lcl_isOptionHidden( sal_uInt16 _nPageId, const SvtOptionsDialogOptio struct OptionsPageInfo { - SfxTabPage* m_pPage; + ScopedVclPtr<SfxTabPage> m_pPage; sal_uInt16 m_nPageId; OUString m_sPageURL; OUString m_sEventHdl; - ExtensionsTabPage* m_pExtPage; + VclPtr<ExtensionsTabPage> m_pExtPage; OptionsPageInfo( sal_uInt16 nId ) : m_pPage( NULL ), m_nPageId( nId ), m_pExtPage( NULL ) {} }; @@ -483,7 +483,7 @@ struct OptionsGroupInfo sal_uInt16 m_nDialogId; // Id of the former dialog bool m_bLoadError; // load fails? OUString m_sPageURL; - ExtensionsTabPage* m_pExtPage; + VclPtr<ExtensionsTabPage> m_pExtPage; OptionsGroupInfo( SfxShell* pSh, SfxModule* pMod, sal_uInt16 nId ) : m_pInItemSet( NULL ), m_pOutItemSet( NULL ), m_pShell( pSh ), @@ -552,8 +552,13 @@ OfaTreeOptionsDialog::OfaTreeOptionsDialog( vcl::Window* pParent, const OUString OfaTreeOptionsDialog::~OfaTreeOptionsDialog() { + disposeOnce(); +} + +void OfaTreeOptionsDialog::dispose() +{ pCurrentPageEntry = NULL; - SvTreeListEntry* pEntry = pTreeLB->First(); + SvTreeListEntry* pEntry = pTreeLB ? pTreeLB->First() : NULL; // first children while(pEntry) { @@ -570,7 +575,7 @@ OfaTreeOptionsDialog::~OfaTreeOptionsDialog() SvtViewOptions aTabPageOpt( E_TABPAGE, OUString::number( pPageInfo->m_nPageId) ); SetViewOptUserItem( aTabPageOpt, aPageData ); } - delete pPageInfo->m_pPage; + pPageInfo->m_pPage.disposeAndClear(); } if (pPageInfo->m_nPageId == RID_SFXPAGE_LINGU) @@ -583,7 +588,7 @@ OfaTreeOptionsDialog::~OfaTreeOptionsDialog() } } - delete pPageInfo->m_pExtPage; + pPageInfo->m_pExtPage.disposeAndClear(); delete pPageInfo; } @@ -591,20 +596,27 @@ OfaTreeOptionsDialog::~OfaTreeOptionsDialog() } // and parents - pEntry = pTreeLB->First(); + pEntry = pTreeLB ? pTreeLB->First() : NULL; while(pEntry) { if(!pTreeLB->GetParent(pEntry)) { OptionsGroupInfo* pGroupInfo = static_cast<OptionsGroupInfo*>(pEntry->GetUserData()); - if ( pGroupInfo && pGroupInfo->m_pExtPage ) - delete pGroupInfo->m_pExtPage; + if ( pGroupInfo ) + pGroupInfo->m_pExtPage.disposeAndClear(); delete pGroupInfo; } pEntry = pTreeLB->Next(pEntry); } delete pColorPageItemSet; + pColorPageItemSet = NULL; deleteGroupNames(); + pOkPB.clear(); + pBackPB.clear(); + pTreeLB.clear(); + pTabBox.clear(); + mpColorPage.clear(); + SfxModalDialog::dispose(); } OptionsPageInfo* OfaTreeOptionsDialog::AddTabPage( @@ -1038,17 +1050,17 @@ void OfaTreeOptionsDialog::SelectHdl_Impl() if(pPageInfo->m_nPageId == RID_SVXPAGE_COLOR) { - pPageInfo->m_pPage = ::CreateGeneralTabPage( - pPageInfo->m_nPageId, pTabBox, *pColorPageItemSet ); - mpColorPage = static_cast<SvxColorTabPage*>(pPageInfo->m_pPage); + pPageInfo->m_pPage.reset( ::CreateGeneralTabPage( + pPageInfo->m_nPageId, pTabBox, *pColorPageItemSet ) ); + mpColorPage = static_cast<SvxColorTabPage*>(pPageInfo->m_pPage.get()); mpColorPage->SetupForViewFrame( SfxViewFrame::Current() ); } else { - pPageInfo->m_pPage = ::CreateGeneralTabPage(pPageInfo->m_nPageId, pTabBox, *pGroupInfo->m_pInItemSet ); + pPageInfo->m_pPage.reset( ::CreateGeneralTabPage(pPageInfo->m_nPageId, pTabBox, *pGroupInfo->m_pInItemSet ) ); if(!pPageInfo->m_pPage && pGroupInfo->m_pModule) - pPageInfo->m_pPage = pGroupInfo->m_pModule->CreateTabPage(pPageInfo->m_nPageId, pTabBox, *pGroupInfo->m_pInItemSet); + pPageInfo->m_pPage.reset( pGroupInfo->m_pModule->CreateTabPage(pPageInfo->m_nPageId, pTabBox, *pGroupInfo->m_pInItemSet) ); } @@ -1076,7 +1088,8 @@ void OfaTreeOptionsDialog::SelectHdl_Impl() m_xContainerWinProvider = awt::ContainerWindowProvider::create( ::comphelper::getProcessComponentContext() ); } - pPageInfo->m_pExtPage = new ExtensionsTabPage( + pPageInfo->m_pExtPage = VclPtr<ExtensionsTabPage>::Create( + pTabBox, 0, pPageInfo->m_sPageURL, pPageInfo->m_sEventHdl, m_xContainerWinProvider ); } @@ -2156,6 +2169,11 @@ ExtensionsTabPage::ExtensionsTabPage( ExtensionsTabPage::~ExtensionsTabPage() { + disposeOnce(); +} + +void ExtensionsTabPage::dispose() +{ Hide(); DeactivatePage(); @@ -2174,6 +2192,7 @@ ExtensionsTabPage::~ExtensionsTabPage() } m_xPage.clear(); } + TabPage::dispose(); } |