summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel@peralex.com>2016-06-20 15:56:35 +0200
committerNoel Grandin <noelgrandin@gmail.com>2016-06-23 06:28:00 +0000
commitaa0d0536a444fb26d9e570bd6bf6c1bdc3596cf3 (patch)
tree8b2a5207e77fa4054a37b33c25378c23a00af8ed
parentb722f3d6fc72877e8caaaae7291d5d736ddc494d (diff)
tdf#97527 - vcl: reference-count Menu
some places are marked with "dodgy"- need to check those to see what is going on, because they are leaving dangling pointers behind in the Menu class Change-Id: I41d5c7c0fec2f70ce9e3ffdc48cd03d26c0a869b Reviewed-on: https://gerrit.libreoffice.org/26516 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
-rw-r--r--accessibility/inc/standard/accessiblemenubasecomponent.hxx3
-rw-r--r--accessibility/inc/standard/accessiblemenuitemcomponent.hxx2
-rw-r--r--basctl/source/basicide/baside2b.cxx10
-rw-r--r--basctl/source/basicide/bastypes.cxx28
-rw-r--r--cui/source/customize/cfg.cxx5
-rw-r--r--cui/source/tabpages/numpages.cxx5
-rw-r--r--cui/source/tabpages/tpline.cxx12
-rw-r--r--dbaccess/source/ui/app/AppController.cxx4
-rw-r--r--dbaccess/source/ui/app/AppController.hxx2
-rw-r--r--dbaccess/source/ui/app/AppDetailPageHelper.cxx8
-rw-r--r--dbaccess/source/ui/app/AppDetailPageHelper.hxx2
-rw-r--r--dbaccess/source/ui/browser/sbagrid.cxx24
-rw-r--r--dbaccess/source/ui/browser/unodatbr.cxx4
-rw-r--r--dbaccess/source/ui/control/dbtreelistbox.cxx6
-rw-r--r--dbaccess/source/ui/control/toolboxcontroller.cxx12
-rw-r--r--dbaccess/source/ui/inc/callbacks.hxx3
-rw-r--r--dbaccess/source/ui/inc/dbtreelistbox.hxx2
-rw-r--r--dbaccess/source/ui/inc/toolboxcontroller.hxx3
-rw-r--r--dbaccess/source/ui/inc/unodatbr.hxx9
-rw-r--r--dbaccess/source/ui/misc/WTypeSelect.cxx6
-rw-r--r--dbaccess/source/ui/querydesign/JoinTableView.cxx4
-rw-r--r--dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx16
-rw-r--r--dbaccess/source/ui/querydesign/TableWindow.cxx4
-rw-r--r--dbaccess/source/ui/tabledesign/TEditControl.cxx28
-rw-r--r--dbaccess/source/ui/tabledesign/TableDesignControl.cxx12
-rw-r--r--desktop/source/deployment/gui/dp_gui_dialog2.cxx14
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedialog.cxx10
-rw-r--r--editeng/source/editeng/editview.cxx34
-rw-r--r--extensions/source/bibliography/toolbar.cxx16
-rw-r--r--extensions/source/bibliography/toolbar.hxx2
-rw-r--r--extensions/source/update/ui/updatecheckui.cxx2
-rw-r--r--fpicker/source/office/RemoteFilesDialog.hxx2
-rw-r--r--fpicker/source/office/iodlgimp.cxx4
-rw-r--r--fpicker/source/office/iodlgimp.hxx2
-rw-r--r--framework/inc/classes/rootactiontriggercontainer.hxx2
-rw-r--r--framework/inc/uielement/generictoolbarcontroller.hxx2
-rw-r--r--framework/inc/uielement/menubarmanager.hxx2
-rw-r--r--framework/inc/uielement/menubarmerger.hxx2
-rw-r--r--framework/source/fwe/classes/addonmenu.cxx42
-rw-r--r--framework/source/fwe/helper/actiontriggerhelper.cxx2
-rw-r--r--framework/source/layoutmanager/layoutmanager.cxx22
-rw-r--r--framework/source/uielement/controlmenucontroller.cxx8
-rw-r--r--framework/source/uielement/generictoolbarcontroller.cxx13
-rw-r--r--framework/source/uielement/menubarmanager.cxx15
-rw-r--r--framework/source/uielement/menubarmerger.cxx6
-rw-r--r--framework/source/uielement/menubarwrapper.cxx4
-rw-r--r--framework/source/uielement/togglebuttontoolbarcontroller.cxx12
-rw-r--r--framework/source/uielement/toolbarmanager.cxx43
-rw-r--r--include/framework/addonmenu.hxx6
-rw-r--r--include/sfx2/sidebar/SidebarController.hxx2
-rw-r--r--include/sfx2/templatedlg.hxx6
-rw-r--r--include/sfx2/viewsh.hxx2
-rw-r--r--include/svtools/treelistbox.hxx2
-rw-r--r--include/svx/clipboardctl.hxx2
-rw-r--r--include/toolkit/awt/vclxmenu.hxx3
-rw-r--r--include/vcl/builder.hxx9
-rw-r--r--include/vcl/edit.hxx3
-rw-r--r--include/vcl/menu.hxx14
-rw-r--r--include/vcl/menubtn.hxx4
-rw-r--r--include/vcl/syswin.hxx2
-rw-r--r--include/vcl/vclevent.hxx8
-rw-r--r--reportdesign/source/ui/dlg/GroupsSorting.cxx6
-rw-r--r--reportdesign/source/ui/dlg/Navigator.cxx18
-rw-r--r--reportdesign/source/ui/report/ReportSection.cxx6
-rw-r--r--sc/source/ui/dbgui/csvgrid.cxx10
-rw-r--r--sc/source/ui/inc/csvgrid.hxx2
-rw-r--r--sc/source/ui/inc/tphfedit.hxx4
-rw-r--r--sc/source/ui/miscdlgs/acredlin.cxx16
-rw-r--r--sc/source/ui/navipi/content.cxx38
-rw-r--r--sc/source/ui/navipi/navipi.cxx8
-rw-r--r--sc/source/ui/navipi/scenwnd.cxx8
-rw-r--r--sc/source/ui/pagedlg/tphfedit.cxx11
-rw-r--r--sc/source/ui/view/tabcont.cxx8
-rw-r--r--sd/source/ui/animations/CustomAnimationDialog.cxx26
-rw-r--r--sd/source/ui/animations/CustomAnimationList.cxx5
-rw-r--r--sd/source/ui/animations/CustomAnimationList.hxx2
-rw-r--r--sd/source/ui/annotations/annotationmanager.cxx2
-rw-r--r--sd/source/ui/app/tmplctrl.cxx8
-rw-r--r--sd/source/ui/dlg/navigatr.cxx6
-rw-r--r--sd/source/ui/sidebar/LayoutMenu.cxx2
-rw-r--r--sd/source/ui/sidebar/MasterPagesSelector.cxx2
-rw-r--r--sd/source/ui/slideshow/slideshowimpl.cxx4
-rw-r--r--sd/source/ui/view/drviews4.cxx8
-rw-r--r--sfx2/source/appl/newhelp.cxx68
-rw-r--r--sfx2/source/control/templatedefaultview.cxx2
-rw-r--r--sfx2/source/control/templatelocalview.cxx2
-rw-r--r--sfx2/source/control/templatesearchview.cxx2
-rw-r--r--sfx2/source/dialog/templdlg.cxx10
-rw-r--r--sfx2/source/doc/templatedlg.cxx6
-rw-r--r--sfx2/source/inc/templdgi.hxx6
-rw-r--r--sfx2/source/sidebar/SidebarController.cxx8
-rw-r--r--sfx2/source/view/viewsh.cxx4
-rw-r--r--starmath/source/edit.cxx7
-rw-r--r--svtools/source/contnr/fileview.cxx7
-rw-r--r--svtools/source/contnr/svimpbox.cxx10
-rw-r--r--svtools/source/contnr/treelistbox.cxx2
-rw-r--r--svtools/source/control/calendar.cxx18
-rw-r--r--svx/source/dialog/imapwnd.cxx46
-rw-r--r--svx/source/dialog/svxruler.cxx28
-rw-r--r--svx/source/fmcomp/fmgridcl.cxx26
-rw-r--r--svx/source/fmcomp/gridctrl.cxx14
-rw-r--r--svx/source/form/datanavi.cxx5
-rw-r--r--svx/source/form/filtnav.cxx17
-rw-r--r--svx/source/form/fmshimp.cxx4
-rw-r--r--svx/source/form/navigatortree.cxx42
-rw-r--r--svx/source/gallery2/galbrws1.cxx18
-rw-r--r--svx/source/gallery2/galbrws2.cxx57
-rw-r--r--svx/source/inc/datanavi.hxx2
-rw-r--r--svx/source/inc/fmshimp.hxx2
-rw-r--r--svx/source/mnuctrls/clipboardctl.cxx5
-rw-r--r--svx/source/mnuctrls/smarttagmenu.cxx9
-rw-r--r--svx/source/stbctrls/pszctrl.cxx6
-rw-r--r--svx/source/stbctrls/selctrl.cxx10
-rw-r--r--svx/source/stbctrls/xmlsecctrl.cxx4
-rw-r--r--svx/source/stbctrls/zoomctrl.cxx8
-rw-r--r--svx/source/tbxctrls/tbcontrl.cxx11
-rw-r--r--sw/inc/AnnotationWin.hxx4
-rw-r--r--sw/qa/extras/odfimport/odfimport.cxx6
-rw-r--r--sw/source/uibase/docvw/AnnotationWin.cxx4
-rw-r--r--sw/source/uibase/docvw/HeaderFooterWin.cxx4
-rw-r--r--sw/source/uibase/docvw/PageBreakWin.cxx5
-rw-r--r--sw/source/uibase/docvw/edtwin.cxx8
-rw-r--r--sw/source/uibase/docvw/romenu.cxx6
-rw-r--r--sw/source/uibase/docvw/romenu.hxx1
-rw-r--r--sw/source/uibase/inc/HeaderFooterWin.hxx2
-rw-r--r--sw/source/uibase/inc/PageBreakWin.hxx2
-rw-r--r--sw/source/uibase/inc/conttree.hxx4
-rw-r--r--sw/source/uibase/inc/inputwin.hxx4
-rw-r--r--sw/source/uibase/inc/redlndlg.hxx2
-rw-r--r--sw/source/uibase/inc/workctrl.hxx2
-rw-r--r--sw/source/uibase/misc/redlndlg.cxx8
-rw-r--r--sw/source/uibase/ribbar/inputwin.cxx4
-rw-r--r--sw/source/uibase/ribbar/workctrl.cxx11
-rw-r--r--sw/source/uibase/uiview/viewling.cxx12
-rw-r--r--sw/source/uibase/utlui/bookctrl.cxx8
-rw-r--r--sw/source/uibase/utlui/content.cxx12
-rw-r--r--sw/source/uibase/utlui/glbltree.cxx18
-rw-r--r--sw/source/uibase/utlui/navipi.cxx8
-rw-r--r--sw/source/uibase/utlui/tmplctrl.cxx8
-rw-r--r--sw/source/uibase/utlui/unotools.cxx23
-rw-r--r--toolkit/source/awt/vclxmenu.cxx10
-rw-r--r--vcl/inc/salmenu.hxx2
-rw-r--r--vcl/inc/svdata.hxx2
-rw-r--r--vcl/inc/toolbox.h2
-rw-r--r--vcl/inc/unx/gtk/gtksalmenu.hxx2
-rw-r--r--vcl/source/app/vclevent.cxx14
-rw-r--r--vcl/source/control/edit.cxx15
-rw-r--r--vcl/source/control/menubtn.cxx2
-rw-r--r--vcl/source/control/tabctrl.cxx10
-rw-r--r--vcl/source/edit/vclmedit.cxx4
-rw-r--r--vcl/source/window/builder.cxx11
-rw-r--r--vcl/source/window/menu.cxx33
-rw-r--r--vcl/source/window/menubarwindow.cxx12
-rw-r--r--vcl/source/window/menubarwindow.hxx4
-rw-r--r--vcl/source/window/menufloatingwindow.cxx16
-rw-r--r--vcl/source/window/menufloatingwindow.hxx6
-rw-r--r--vcl/source/window/menuitemlist.cxx5
-rw-r--r--vcl/source/window/menuitemlist.hxx4
-rw-r--r--vcl/source/window/toolbox2.cxx4
-rw-r--r--vcl/unx/generic/app/i18n_status.cxx6
-rw-r--r--vcl/unx/gtk/gtksalmenu.cxx2
-rw-r--r--vcl/workben/vcldemo.cxx12
162 files changed, 801 insertions, 747 deletions
diff --git a/accessibility/inc/standard/accessiblemenubasecomponent.hxx b/accessibility/inc/standard/accessiblemenubasecomponent.hxx
index 167c957c5aca..9b01b6002c6d 100644
--- a/accessibility/inc/standard/accessiblemenubasecomponent.hxx
+++ b/accessibility/inc/standard/accessiblemenubasecomponent.hxx
@@ -26,6 +26,7 @@
#include <comphelper/accessiblecomponenthelper.hxx>
#include <cppuhelper/implbase2.hxx>
#include <tools/link.hxx>
+#include <vcl/vclptr.hxx>
#include <vector>
@@ -59,7 +60,7 @@ protected:
typedef ::std::vector< css::uno::Reference< css::accessibility::XAccessible > > AccessibleChildren;
AccessibleChildren m_aAccessibleChildren;
- Menu* m_pMenu;
+ VclPtr<Menu> m_pMenu;
bool m_bEnabled;
bool m_bFocused;
diff --git a/accessibility/inc/standard/accessiblemenuitemcomponent.hxx b/accessibility/inc/standard/accessiblemenuitemcomponent.hxx
index 84d0cc22e309..8abeb8ab3cc2 100644
--- a/accessibility/inc/standard/accessiblemenuitemcomponent.hxx
+++ b/accessibility/inc/standard/accessiblemenuitemcomponent.hxx
@@ -31,7 +31,7 @@ class OAccessibleMenuItemComponent : public OAccessibleMenuBaseComponent
friend class OAccessibleMenuBaseComponent;
protected:
- Menu* m_pParent;
+ VclPtr<Menu> m_pParent;
sal_uInt16 m_nItemPos;
OUString m_sAccessibleName;
OUString m_sItemText;
diff --git a/basctl/source/basicide/baside2b.cxx b/basctl/source/basicide/baside2b.cxx
index d1159c878b03..b33e9bd4a771 100644
--- a/basctl/source/basicide/baside2b.cxx
+++ b/basctl/source/basicide/baside2b.cxx
@@ -1479,9 +1479,9 @@ void BreakPointWindow::Command( const CommandEvent& rCEvt )
if ( pBrk )
{
// test if break point is enabled...
- PopupMenu aBrkPropMenu( IDEResId( RID_POPUP_BRKPROPS ) );
- aBrkPropMenu.CheckItem( RID_ACTIV, pBrk->bEnabled );
- switch ( aBrkPropMenu.Execute( this, aPos ) )
+ ScopedVclPtrInstance<PopupMenu> aBrkPropMenu( IDEResId( RID_POPUP_BRKPROPS ) );
+ aBrkPropMenu->CheckItem( RID_ACTIV, pBrk->bEnabled );
+ switch ( aBrkPropMenu->Execute( this, aPos ) )
{
case RID_ACTIV:
{
@@ -1502,8 +1502,8 @@ void BreakPointWindow::Command( const CommandEvent& rCEvt )
}
else
{
- PopupMenu aBrkListMenu( IDEResId( RID_POPUP_BRKDLG ) );
- switch ( aBrkListMenu.Execute( this, aPos ) )
+ ScopedVclPtrInstance<PopupMenu> aBrkListMenu( IDEResId( RID_POPUP_BRKDLG ) );
+ switch ( aBrkListMenu->Execute( this, aPos ) )
{
case RID_BRKDLG:
{
diff --git a/basctl/source/basicide/bastypes.cxx b/basctl/source/basicide/bastypes.cxx
index 1aefb7571677..88c1e9d23801 100644
--- a/basctl/source/basicide/bastypes.cxx
+++ b/basctl/source/basicide/bastypes.cxx
@@ -480,19 +480,19 @@ void TabBar::Command( const CommandEvent& rCEvt )
::TabBar::MouseButtonDown( aMouseEvent ); // base class
}
- PopupMenu aPopup( IDEResId( RID_POPUP_TABBAR ) );
+ ScopedVclPtrInstance<PopupMenu> aPopup( IDEResId( RID_POPUP_TABBAR ) );
if ( GetPageCount() == 0 )
{
- aPopup.EnableItem(SID_BASICIDE_DELETECURRENT, false);
- aPopup.EnableItem(SID_BASICIDE_RENAMECURRENT, false);
- aPopup.EnableItem(SID_BASICIDE_HIDECURPAGE, false);
+ aPopup->EnableItem(SID_BASICIDE_DELETECURRENT, false);
+ aPopup->EnableItem(SID_BASICIDE_RENAMECURRENT, false);
+ aPopup->EnableItem(SID_BASICIDE_HIDECURPAGE, false);
}
if ( StarBASIC::IsRunning() )
{
- aPopup.EnableItem(SID_BASICIDE_DELETECURRENT, false);
- aPopup.EnableItem(SID_BASICIDE_RENAMECURRENT, false);
- aPopup.EnableItem(SID_BASICIDE_MODULEDLG, false);
+ aPopup->EnableItem(SID_BASICIDE_DELETECURRENT, false);
+ aPopup->EnableItem(SID_BASICIDE_RENAMECURRENT, false);
+ aPopup->EnableItem(SID_BASICIDE_MODULEDLG, false);
}
if (Shell* pShell = GetShell())
@@ -504,10 +504,10 @@ void TabBar::Command( const CommandEvent& rCEvt )
if ( ( xModLibContainer.is() && xModLibContainer->hasByName( aOULibName ) && xModLibContainer->isLibraryReadOnly( aOULibName ) ) ||
( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOULibName ) && xDlgLibContainer->isLibraryReadOnly( aOULibName ) ) )
{
- aPopup.EnableItem(aPopup.GetItemId( 0 ), false);
- aPopup.EnableItem(SID_BASICIDE_DELETECURRENT, false);
- aPopup.EnableItem(SID_BASICIDE_RENAMECURRENT, false);
- aPopup.RemoveDisabledEntries();
+ aPopup->EnableItem(aPopup->GetItemId( 0 ), false);
+ aPopup->EnableItem(SID_BASICIDE_DELETECURRENT, false);
+ aPopup->EnableItem(SID_BASICIDE_RENAMECURRENT, false);
+ aPopup->RemoveDisabledEntries();
}
if ( aDocument.isInVBAMode() )
{
@@ -523,8 +523,8 @@ void TabBar::Command( const CommandEvent& rCEvt )
SbModule* pActiveModule = pBasic->FindModule( it->second->GetName() );
if( pActiveModule && ( pActiveModule->GetModuleType() == script::ModuleType::DOCUMENT ) )
{
- aPopup.EnableItem(SID_BASICIDE_DELETECURRENT, false);
- aPopup.EnableItem(SID_BASICIDE_RENAMECURRENT, false);
+ aPopup->EnableItem(SID_BASICIDE_DELETECURRENT, false);
+ aPopup->EnableItem(SID_BASICIDE_RENAMECURRENT, false);
}
}
}
@@ -532,7 +532,7 @@ void TabBar::Command( const CommandEvent& rCEvt )
}
}
if (SfxDispatcher* pDispatcher = GetDispatcher())
- pDispatcher->Execute(aPopup.Execute(this, aPos));
+ pDispatcher->Execute(aPopup->Execute(this, aPos));
}
}
diff --git a/cui/source/customize/cfg.cxx b/cui/source/customize/cfg.cxx
index f3e1b62d62d5..1b08c29ebeea 100644
--- a/cui/source/customize/cfg.cxx
+++ b/cui/source/customize/cfg.cxx
@@ -3134,7 +3134,7 @@ SvxToolbarConfigPage::SvxToolbarConfigPage(vcl::Window *pParent, const SfxItemSe
m_pMoveDownButton->Enable();
m_pMoveUpButton->Enable();
- PopupMenu* pMenu = new PopupMenu( CUI_RES( MODIFY_TOOLBAR ) );
+ VclPtrInstance<PopupMenu> pMenu( CUI_RES( MODIFY_TOOLBAR ) );
pMenu->SetMenuFlags(
pMenu->GetMenuFlags() | MenuFlags::AlwaysShowDisabledEntries );
@@ -3142,8 +3142,7 @@ SvxToolbarConfigPage::SvxToolbarConfigPage(vcl::Window *pParent, const SfxItemSe
m_pModifyTopLevelButton->SetSelectHdl(
LINK( this, SvxToolbarConfigPage, ToolbarSelectHdl ) );
- PopupMenu* pEntry = new PopupMenu(
- CUI_RES( MODIFY_TOOLBAR_CONTENT ) );
+ VclPtrInstance<PopupMenu> pEntry( CUI_RES( MODIFY_TOOLBAR_CONTENT ) );
pEntry->SetMenuFlags(
pEntry->GetMenuFlags() | MenuFlags::AlwaysShowDisabledEntries );
diff --git a/cui/source/tabpages/numpages.cxx b/cui/source/tabpages/numpages.cxx
index 5c5eed24ab99..4eafff907164 100644
--- a/cui/source/tabpages/numpages.cxx
+++ b/cui/source/tabpages/numpages.cxx
@@ -1239,7 +1239,7 @@ SvxNumOptionsTabPage::SvxNumOptionsTabPage(vcl::Window* pParent,
pBitmapMenu->SetHighlightHdl(LINK(this, SvxNumOptionsTabPage, PopupActivateHdl_Impl));
m_nGalleryId = pBitmapMenu->GetItemId("gallery");
assert(m_nGalleryId != MENU_ITEM_NOTFOUND);
- PopupMenu* pPopup = new PopupMenu;
+ VclPtrInstance<PopupMenu> pPopup;
pBitmapMenu->SetPopupMenu(m_nGalleryId, pPopup);
eCoreUnit = rSet.GetPool()->GetMetric(rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE));
@@ -1258,7 +1258,8 @@ void SvxNumOptionsTabPage::dispose()
{
if (m_pBitmapMB)
{
- delete m_pBitmapMB->GetPopupMenu()->GetPopupMenu(m_nGalleryId);
+ VclPtr<PopupMenu> p = m_pBitmapMB->GetPopupMenu()->GetPopupMenu(m_nGalleryId);
+ p.disposeAndClear(); // NoelG: dodgy, this leaves a dangling pointer
}
delete pActNum;
pActNum = nullptr;
diff --git a/cui/source/tabpages/tpline.cxx b/cui/source/tabpages/tpline.cxx
index 4c12af016a0e..ca323ab469ea 100644
--- a/cui/source/tabpages/tpline.cxx
+++ b/cui/source/tabpages/tpline.cxx
@@ -229,10 +229,14 @@ void SvxLineTabPage::dispose()
// Symbols on a line (e.g. StarCharts), dtor new!
if (m_pSymbolMB)
{
- delete m_pSymbolMB->GetPopupMenu()->GetPopupMenu( MN_GALLERY );
+ VclPtr<PopupMenu> p = m_pSymbolMB->GetPopupMenu()->GetPopupMenu( MN_GALLERY );
+ p.disposeAndClear(); // NoelG: dodgy, this leaves a dangling pointer
if(m_pSymbolList)
- delete m_pSymbolMB->GetPopupMenu()->GetPopupMenu( MN_SYMBOLS );
+ {
+ VclPtr<PopupMenu> p2 = m_pSymbolMB->GetPopupMenu()->GetPopupMenu( MN_SYMBOLS );
+ p2.disposeAndClear(); // NoelG: dodgy, this leaves a dangling pointer
+ }
m_pSymbolMB = nullptr;
}
@@ -290,7 +294,7 @@ void SvxLineTabPage::InitSymbols(MenuButton* pButton)
// Get gallery entries
GalleryExplorer::FillObjList(GALLERY_THEME_BULLETS, m_aGrfNames);
- PopupMenu* pPopup = new PopupMenu;
+ VclPtrInstance<PopupMenu> pPopup;
sal_uInt32 i = 0;
m_nNumMenuGalleryItems = m_aGrfNames.size();
for(std::vector<OUString>::iterator it = m_aGrfNames.begin(); it != m_aGrfNames.end(); ++it, ++i)
@@ -363,7 +367,7 @@ void SvxLineTabPage::InitSymbols(MenuButton* pButton)
pView->hideMarkHandles();
pView->ShowSdrPage(pPage);
- PopupMenu* pPopup = new PopupMenu;
+ VclPtrInstance<PopupMenu> pPopup;
// Generate invisible square to give all symbols a
// bitmap size, which is independent from specific glyph
diff --git a/dbaccess/source/ui/app/AppController.cxx b/dbaccess/source/ui/app/AppController.cxx
index c7850b23752c..b6d7c7541af2 100644
--- a/dbaccess/source/ui/app/AppController.cxx
+++ b/dbaccess/source/ui/app/AppController.cxx
@@ -2331,9 +2331,9 @@ bool OApplicationController::interceptUserInput( const NotifyEvent& _rEvent )
return OGenericUnoController::interceptUserInput( _rEvent );
}
-PopupMenu* OApplicationController::getContextMenu( Control& /*_rControl*/ ) const
+VclPtr<PopupMenu> OApplicationController::getContextMenu( Control& /*_rControl*/ ) const
{
- return new PopupMenu( ModuleRes( RID_MENU_APP_EDIT ) );
+ return VclPtr<PopupMenu>::Create( ModuleRes( RID_MENU_APP_EDIT ) );
}
IController& OApplicationController::getCommandController()
diff --git a/dbaccess/source/ui/app/AppController.hxx b/dbaccess/source/ui/app/AppController.hxx
index dec7e2fffd17..2fe7d7ed7b3a 100644
--- a/dbaccess/source/ui/app/AppController.hxx
+++ b/dbaccess/source/ui/app/AppController.hxx
@@ -532,7 +532,7 @@ namespace dbaui
virtual sal_Int8 executeDrop( const ExecuteDropEvent& _rEvt ) override;
// IContextMenuProvider
- virtual PopupMenu* getContextMenu( Control& _rControl ) const override;
+ virtual VclPtr<PopupMenu> getContextMenu( Control& _rControl ) const override;
virtual IController& getCommandController() override;
virtual ::comphelper::OInterfaceContainerHelper2*
getContextMenuInterceptors() override;
diff --git a/dbaccess/source/ui/app/AppDetailPageHelper.cxx b/dbaccess/source/ui/app/AppDetailPageHelper.cxx
index fb4564f203e6..e8c9f37e19ef 100644
--- a/dbaccess/source/ui/app/AppDetailPageHelper.cxx
+++ b/dbaccess/source/ui/app/AppDetailPageHelper.cxx
@@ -187,13 +187,11 @@ OAppDetailPageHelper::OAppDetailPageHelper(vcl::Window* _pParent,OAppBorderWindo
,m_aBorder(VclPtr<Window>::Create(this,WB_BORDER | WB_READONLY))
,m_aPreview(VclPtr<OPreviewWindow>::Create(m_aBorder.get()))
,m_aDocumentInfo(VclPtr< ::svtools::ODocumentInfoPreview>::Create(m_aBorder.get(), WB_LEFT | WB_VSCROLL | WB_READONLY) )
+ ,m_aMenu( VclPtr<PopupMenu>::Create( ModuleRes( RID_MENU_APP_PREVIEW ) ) )
,m_ePreviewMode(_ePreviewMode)
{
-
m_aBorder->SetBorderStyle(WindowBorderStyle::MONO);
- m_aMenu.reset(new PopupMenu( ModuleRes( RID_MENU_APP_PREVIEW ) ));
-
m_aTBPreview->SetOutStyle(TOOLBOX_STYLE_FLAT);
m_aTBPreview->InsertItem(SID_DB_APP_DISABLE_PREVIEW,m_aMenu->GetItemText(SID_DB_APP_DISABLE_PREVIEW),ToolBoxItemBits::LEFT|ToolBoxItemBits::DROPDOWN|ToolBoxItemBits::AUTOSIZE|ToolBoxItemBits::RADIOCHECK);
m_aTBPreview->SetHelpId(HID_APP_VIEW_PREVIEW_CB);
@@ -242,7 +240,7 @@ void OAppDetailPageHelper::dispose()
rpBox.disposeAndClear();
}
}
- m_aMenu.reset();
+ m_aMenu.disposeAndClear();
m_pTablePreview.disposeAndClear();
m_aDocumentInfo.disposeAndClear();
m_aPreview.disposeAndClear();
@@ -1153,7 +1151,7 @@ IMPL_LINK_NOARG_TYPED(OAppDetailPageHelper, OnDropdownClickHdl, ToolBox*, void)
m_aTBPreview->Update();
// execute the menu
- std::unique_ptr<PopupMenu> aMenu(new PopupMenu( ModuleRes( RID_MENU_APP_PREVIEW ) ));
+ ScopedVclPtrInstance<PopupMenu> aMenu( ModuleRes( RID_MENU_APP_PREVIEW ) );
const sal_uInt16 pActions[] = { SID_DB_APP_DISABLE_PREVIEW
, SID_DB_APP_VIEW_DOC_PREVIEW
diff --git a/dbaccess/source/ui/app/AppDetailPageHelper.hxx b/dbaccess/source/ui/app/AppDetailPageHelper.hxx
index 819a521d0c73..8f0d7996653d 100644
--- a/dbaccess/source/ui/app/AppDetailPageHelper.hxx
+++ b/dbaccess/source/ui/app/AppDetailPageHelper.hxx
@@ -86,7 +86,7 @@ namespace dbaui
VclPtr< ::svtools::ODocumentInfoPreview>
m_aDocumentInfo;
VclPtr<vcl::Window> m_pTablePreview;
- ::std::unique_ptr<PopupMenu> m_aMenu;
+ ScopedVclPtr<PopupMenu> m_aMenu;
PreviewMode m_ePreviewMode;
css::uno::Reference < css::frame::XFrame2 >
m_xFrame;
diff --git a/dbaccess/source/ui/browser/sbagrid.cxx b/dbaccess/source/ui/browser/sbagrid.cxx
index 226eaaea6c2c..695a223b1fb2 100644
--- a/dbaccess/source/ui/browser/sbagrid.cxx
+++ b/dbaccess/source/ui/browser/sbagrid.cxx
@@ -650,7 +650,7 @@ void SbaGridHeader::PreExecuteColumnContextMenu(sal_uInt16 nColId, PopupMenu& rM
bool bColAttrs = (nColId != (sal_uInt16)-1) && (nColId != 0);
if ( bColAttrs && !bDBIsReadOnly)
{
- PopupMenu aNewItems(ModuleRes(RID_SBA_GRID_COLCTXMENU));
+ ScopedVclPtrInstance<PopupMenu> aNewItems(ModuleRes(RID_SBA_GRID_COLCTXMENU));
sal_uInt16 nPos = 0;
sal_uInt16 nModelPos = static_cast<SbaGridControl*>(GetParent())->GetModelColumnPos(nColId);
Reference< XPropertySet > xField = static_cast<SbaGridControl*>(GetParent())->getField(nModelPos);
@@ -669,14 +669,14 @@ void SbaGridHeader::PreExecuteColumnContextMenu(sal_uInt16 nColId, PopupMenu& rM
case DataType::REF:
break;
default:
- rMenu.InsertItem(ID_BROWSER_COLATTRSET, aNewItems.GetItemText(ID_BROWSER_COLATTRSET), MenuItemBits::NONE, OString(), nPos++);
- rMenu.SetHelpId(ID_BROWSER_COLATTRSET, aNewItems.GetHelpId(ID_BROWSER_COLATTRSET));
+ rMenu.InsertItem(ID_BROWSER_COLATTRSET, aNewItems->GetItemText(ID_BROWSER_COLATTRSET), MenuItemBits::NONE, OString(), nPos++);
+ rMenu.SetHelpId(ID_BROWSER_COLATTRSET, aNewItems->GetHelpId(ID_BROWSER_COLATTRSET));
rMenu.InsertSeparator(OString(), nPos++);
}
}
- rMenu.InsertItem(ID_BROWSER_COLWIDTH, aNewItems.GetItemText(ID_BROWSER_COLWIDTH), MenuItemBits::NONE, OString(), nPos++);
- rMenu.SetHelpId(ID_BROWSER_COLWIDTH, aNewItems.GetHelpId(ID_BROWSER_COLWIDTH));
+ rMenu.InsertItem(ID_BROWSER_COLWIDTH, aNewItems->GetItemText(ID_BROWSER_COLWIDTH), MenuItemBits::NONE, OString(), nPos++);
+ rMenu.SetHelpId(ID_BROWSER_COLWIDTH, aNewItems->GetHelpId(ID_BROWSER_COLWIDTH));
rMenu.InsertSeparator(OString(), nPos++);
}
}
@@ -751,23 +751,23 @@ void SbaGridControl::PreExecuteRowContextMenu(sal_uInt16 nRow, PopupMenu& rMenu)
{
FmGridControl::PreExecuteRowContextMenu(nRow, rMenu);
- PopupMenu aNewItems(ModuleRes(RID_SBA_GRID_ROWCTXMENU));
+ ScopedVclPtrInstance<PopupMenu> aNewItems(ModuleRes(RID_SBA_GRID_ROWCTXMENU));
sal_uInt16 nPos = 0;
if (!IsReadOnlyDB())
{
- rMenu.InsertItem(ID_BROWSER_TABLEATTR, aNewItems.GetItemText(ID_BROWSER_TABLEATTR), MenuItemBits::NONE, OString(), nPos++);
- rMenu.SetHelpId(ID_BROWSER_TABLEATTR, aNewItems.GetHelpId(ID_BROWSER_TABLEATTR));
+ rMenu.InsertItem(ID_BROWSER_TABLEATTR, aNewItems->GetItemText(ID_BROWSER_TABLEATTR), MenuItemBits::NONE, OString(), nPos++);
+ rMenu.SetHelpId(ID_BROWSER_TABLEATTR, aNewItems->GetHelpId(ID_BROWSER_TABLEATTR));
- rMenu.InsertItem(ID_BROWSER_ROWHEIGHT, aNewItems.GetItemText(ID_BROWSER_ROWHEIGHT), MenuItemBits::NONE, OString(), nPos++);
- rMenu.SetHelpId(ID_BROWSER_ROWHEIGHT, aNewItems.GetHelpId(ID_BROWSER_ROWHEIGHT));
+ rMenu.InsertItem(ID_BROWSER_ROWHEIGHT, aNewItems->GetItemText(ID_BROWSER_ROWHEIGHT), MenuItemBits::NONE, OString(), nPos++);
+ rMenu.SetHelpId(ID_BROWSER_ROWHEIGHT, aNewItems->GetHelpId(ID_BROWSER_ROWHEIGHT));
rMenu.InsertSeparator(OString(), nPos++);
}
if ( GetSelectRowCount() > 0 )
{
- rMenu.InsertItem(ID_BROWSER_COPY, aNewItems.GetItemText(SID_COPY), MenuItemBits::NONE, OString(), nPos++);
- rMenu.SetHelpId(ID_BROWSER_COPY, aNewItems.GetHelpId(SID_COPY));
+ rMenu.InsertItem(ID_BROWSER_COPY, aNewItems->GetItemText(SID_COPY), MenuItemBits::NONE, OString(), nPos++);
+ rMenu.SetHelpId(ID_BROWSER_COPY, aNewItems->GetHelpId(SID_COPY));
rMenu.InsertSeparator(OString(), nPos++);
}
diff --git a/dbaccess/source/ui/browser/unodatbr.cxx b/dbaccess/source/ui/browser/unodatbr.cxx
index f41c7e04de74..bae2bbfe1a23 100644
--- a/dbaccess/source/ui/browser/unodatbr.cxx
+++ b/dbaccess/source/ui/browser/unodatbr.cxx
@@ -3473,14 +3473,14 @@ bool SbaTableQueryBrowser::requestQuickHelp( const SvTreeListEntry* _pEntry, OUS
return false;
}
-PopupMenu* SbaTableQueryBrowser::getContextMenu( Control& _rControl ) const
+VclPtr<PopupMenu> SbaTableQueryBrowser::getContextMenu( Control& _rControl ) const
{
OSL_PRECOND( &m_pTreeView->getListBox() == &_rControl,
"SbaTableQueryBrowser::getContextMenu: where does this come from?" );
if ( &m_pTreeView->getListBox() != &_rControl )
return nullptr;
- return new PopupMenu( ModuleRes( MENU_BROWSER_DEFAULTCONTEXT ) );
+ return VclPtr<PopupMenu>::Create( ModuleRes( MENU_BROWSER_DEFAULTCONTEXT ) );
}
IController& SbaTableQueryBrowser::getCommandController()
diff --git a/dbaccess/source/ui/control/dbtreelistbox.cxx b/dbaccess/source/ui/control/dbtreelistbox.cxx
index 5fefdad6ac18..d212bd2ce689 100644
--- a/dbaccess/source/ui/control/dbtreelistbox.cxx
+++ b/dbaccess/source/ui/control/dbtreelistbox.cxx
@@ -551,9 +551,9 @@ namespace
}
}
-std::unique_ptr<PopupMenu> DBTreeListBox::CreateContextMenu()
+VclPtr<PopupMenu> DBTreeListBox::CreateContextMenu()
{
- ::std::unique_ptr< PopupMenu > pContextMenu;
+ VclPtr< PopupMenu > pContextMenu;
if ( !m_pContextMenuProvider )
return pContextMenu;
@@ -621,7 +621,7 @@ std::unique_ptr<PopupMenu> DBTreeListBox::CreateContextMenu()
if ( bModifiedMenu )
{
// the interceptor(s) modified the menu description => create a new PopupMenu
- PopupMenu* pModifiedMenu = new PopupMenu;
+ VclPtrInstance<PopupMenu> pModifiedMenu;
::framework::ActionTriggerHelper::CreateMenuFromActionTriggerContainer(
pModifiedMenu, aEvent.ActionTriggerContainer );
aEvent.ActionTriggerContainer.clear();
diff --git a/dbaccess/source/ui/control/toolboxcontroller.cxx b/dbaccess/source/ui/control/toolboxcontroller.cxx
index 2f8816e16aec..2208de1ae653 100644
--- a/dbaccess/source/ui/control/toolboxcontroller.cxx
+++ b/dbaccess/source/ui/control/toolboxcontroller.cxx
@@ -159,7 +159,7 @@ namespace dbaui
aFind->second = Event.IsEnabled;
if ( m_aCommandURL == aFind->first && !Event.IsEnabled )
{
- ::std::unique_ptr<PopupMenu> pMenu = getMenu();
+ ScopedVclPtr<PopupMenu> pMenu(getMenu());
sal_uInt16 nCount = pMenu->GetItemCount();
for (sal_uInt16 i = 0; i < nCount; ++i)
{
@@ -177,12 +177,12 @@ namespace dbaui
}
}
}
- ::std::unique_ptr<PopupMenu> OToolboxController::getMenu()
+ VclPtr<PopupMenu> OToolboxController::getMenu()
{
- ::std::unique_ptr<PopupMenu> pMenu;
+ VclPtr<PopupMenu> pMenu;
if ( m_aStates.size() > 2 )
{
- pMenu.reset( new PopupMenu( ModuleRes( RID_MENU_APP_NEW ) ) );
+ pMenu = VclPtr<PopupMenu>::Create( ModuleRes( RID_MENU_APP_NEW ) );
try
{
@@ -217,7 +217,7 @@ namespace dbaui
}
else
{
- pMenu.reset( new PopupMenu( ModuleRes( RID_MENU_REFRESH_DATA ) ) );
+ pMenu = VclPtr<PopupMenu>::Create( ModuleRes( RID_MENU_REFRESH_DATA ) );
}
return pMenu;
}
@@ -229,7 +229,7 @@ namespace dbaui
::osl::MutexGuard aGuard(m_aMutex);
VclPtr< ToolBox > pToolBox = static_cast<ToolBox*>(VCLUnoHelper::GetWindow(getParent()).get());
- ::std::unique_ptr<PopupMenu> pMenu = getMenu();
+ ScopedVclPtr<PopupMenu> pMenu(getMenu());
sal_uInt16 nSelected = pMenu->Execute(pToolBox, pToolBox->GetItemRect( m_nToolBoxId ),PopupMenuFlags::ExecuteDown);
// "cleanup" the toolbox state
diff --git a/dbaccess/source/ui/inc/callbacks.hxx b/dbaccess/source/ui/inc/callbacks.hxx
index 9c2a579a7a51..c9e98ea41e9a 100644
--- a/dbaccess/source/ui/inc/callbacks.hxx
+++ b/dbaccess/source/ui/inc/callbacks.hxx
@@ -22,6 +22,7 @@
#include <sot/exchange.hxx>
#include <sot/formats.hxx>
+#include <vcl/vclptr.hxx>
#include <com/sun/star/container/XContainer.hpp>
class SvTreeListEntry;
@@ -74,7 +75,7 @@ namespace dbaui
The control itself will, using the controller provided by getCommandController,
disable menu entries as needed.
*/
- virtual PopupMenu* getContextMenu( Control& _rControl ) const = 0;
+ virtual VclPtr<PopupMenu> getContextMenu( Control& _rControl ) const = 0;
/** returns the controller which is responsible for providing states of certain features,
and executing them.
diff --git a/dbaccess/source/ui/inc/dbtreelistbox.hxx b/dbaccess/source/ui/inc/dbtreelistbox.hxx
index 21723a70ad7f..9a7413a6f0f0 100644
--- a/dbaccess/source/ui/inc/dbtreelistbox.hxx
+++ b/dbaccess/source/ui/inc/dbtreelistbox.hxx
@@ -111,7 +111,7 @@ namespace dbaui
virtual bool DoubleClickHdl() override;
- virtual std::unique_ptr<PopupMenu> CreateContextMenu() override;
+ virtual VclPtr<PopupMenu> CreateContextMenu() override;
virtual void ExecuteContextMenuAction( sal_uInt16 nSelectedPopupEntry ) override;
void SetEnterKeyHdl(const Link<DBTreeListBox*,void>& rNewHdl) {m_aEnterKeyHdl = rNewHdl;}
diff --git a/dbaccess/source/ui/inc/toolboxcontroller.hxx b/dbaccess/source/ui/inc/toolboxcontroller.hxx
index 3e76fc23c8e9..05fba565f1d5 100644
--- a/dbaccess/source/ui/inc/toolboxcontroller.hxx
+++ b/dbaccess/source/ui/inc/toolboxcontroller.hxx
@@ -22,6 +22,7 @@
#include <svtools/toolboxcontroller.hxx>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <cppuhelper/implbase1.hxx>
+#include <vcl/vclptr.hxx>
#include "apitools.hxx"
#include "moduledbu.hxx"
@@ -41,7 +42,7 @@ namespace dbaui
TCommandState m_aStates;
sal_uInt16 m_nToolBoxId;
- ::std::unique_ptr<PopupMenu> getMenu();
+ VclPtr<PopupMenu> getMenu();
public:
OToolboxController(const css::uno::Reference< css::uno::XComponentContext >& _rxORB);
diff --git a/dbaccess/source/ui/inc/unodatbr.hxx b/dbaccess/source/ui/inc/unodatbr.hxx
index 02673fb6a1fb..68b7acc801af 100644
--- a/dbaccess/source/ui/inc/unodatbr.hxx
+++ b/dbaccess/source/ui/inc/unodatbr.hxx
@@ -230,12 +230,11 @@ namespace dbaui
virtual sal_Int8 executeDrop( const ExecuteDropEvent& _rEvt ) override;
// IContextMenuProvider
- virtual PopupMenu* getContextMenu( Control& _rControl ) const override;
- virtual IController& getCommandController() override;
+ virtual VclPtr<PopupMenu> getContextMenu( Control& _rControl ) const override;
+ virtual IController& getCommandController() override;
virtual ::comphelper::OInterfaceContainerHelper2*
- getContextMenuInterceptors() override;
- virtual css::uno::Any
- getCurrentSelection( Control& _rControl ) const override;
+ getContextMenuInterceptors() override;
+ virtual css::uno::Any getCurrentSelection( Control& _rControl ) const override;
virtual void impl_initialize() override;
diff --git a/dbaccess/source/ui/misc/WTypeSelect.cxx b/dbaccess/source/ui/misc/WTypeSelect.cxx
index 4b85643bd96f..b2b839d7b62b 100644
--- a/dbaccess/source/ui/misc/WTypeSelect.cxx
+++ b/dbaccess/source/ui/misc/WTypeSelect.cxx
@@ -423,7 +423,7 @@ bool OWizTypeSelectList::PreNotify( NotifyEvent& rEvt )
if (pComEvt->IsMouseEvent())
ptWhere = pComEvt->GetMousePosPixel();
- PopupMenu aContextMenu(ModuleRes(RID_SBA_RTF_PKEYPOPUP));
+ ScopedVclPtrInstance<PopupMenu> aContextMenu(ModuleRes(RID_SBA_RTF_PKEYPOPUP));
// Should primary key checkbox be checked?
const sal_Int32 nCount = GetEntryCount();
bool bCheckOk = false;
@@ -443,9 +443,9 @@ bool OWizTypeSelectList::PreNotify( NotifyEvent& rEvt )
}
if (bCheckOk)
- aContextMenu.CheckItem( SID_TABLEDESIGN_TABED_PRIMARYKEY );
+ aContextMenu->CheckItem( SID_TABLEDESIGN_TABED_PRIMARYKEY );
- switch( aContextMenu.Execute( this, ptWhere ) )
+ switch( aContextMenu->Execute( this, ptWhere ) )
{
case SID_TABLEDESIGN_TABED_PRIMARYKEY:
{
diff --git a/dbaccess/source/ui/querydesign/JoinTableView.cxx b/dbaccess/source/ui/querydesign/JoinTableView.cxx
index d12eca785cad..1ea84c316836 100644
--- a/dbaccess/source/ui/querydesign/JoinTableView.cxx
+++ b/dbaccess/source/ui/querydesign/JoinTableView.cxx
@@ -1128,8 +1128,8 @@ bool OJoinTableView::IsAddAllowed()
void OJoinTableView::executePopup(const Point& _aPos, VclPtr<OTableConnection>& rSelConnection)
{
- PopupMenu aContextMenu( ModuleRes( RID_MENU_JOINVIEW_CONNECTION ) );
- switch (aContextMenu.Execute(this, _aPos))
+ ScopedVclPtrInstance<PopupMenu> aContextMenu( ModuleRes( RID_MENU_JOINVIEW_CONNECTION ) );
+ switch (aContextMenu->Execute(this, _aPos))
{
case SID_DELETE:
RemoveConnection(rSelConnection, true);
diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
index cff9469c682b..e9d14ebfd121 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
@@ -1951,8 +1951,8 @@ void OSelectionBrowseBox::Command(const CommandEvent& rEvt)
if (!static_cast<OQueryController&>(getDesignView()->getController()).isReadOnly())
{
- PopupMenu aContextMenu( ModuleRes( RID_QUERYCOLPOPUPMENU ) );
- switch (aContextMenu.Execute(this, aMenuPos))
+ ScopedVclPtrInstance<PopupMenu> aContextMenu( ModuleRes( RID_QUERYCOLPOPUPMENU ) );
+ switch (aContextMenu->Execute(this, aMenuPos))
{
case SID_DELETE:
RemoveField(nColId);
@@ -1968,13 +1968,13 @@ void OSelectionBrowseBox::Command(const CommandEvent& rEvt)
{
if (!static_cast<OQueryController&>(getDesignView()->getController()).isReadOnly())
{
- PopupMenu aContextMenu(ModuleRes(RID_QUERYFUNCTION_POPUPMENU));
- aContextMenu.CheckItem( ID_QUERY_FUNCTION, m_bVisibleRow[BROW_FUNCTION_ROW]);
- aContextMenu.CheckItem( ID_QUERY_TABLENAME, m_bVisibleRow[BROW_TABLE_ROW]);
- aContextMenu.CheckItem( ID_QUERY_ALIASNAME, m_bVisibleRow[BROW_COLUMNALIAS_ROW]);
- aContextMenu.CheckItem( ID_QUERY_DISTINCT, static_cast<OQueryController&>(getDesignView()->getController()).isDistinct());
+ ScopedVclPtrInstance<PopupMenu> aContextMenu(ModuleRes(RID_QUERYFUNCTION_POPUPMENU));
+ aContextMenu->CheckItem( ID_QUERY_FUNCTION, m_bVisibleRow[BROW_FUNCTION_ROW]);
+ aContextMenu->CheckItem( ID_QUERY_TABLENAME, m_bVisibleRow[BROW_TABLE_ROW]);
+ aContextMenu->CheckItem( ID_QUERY_ALIASNAME, m_bVisibleRow[BROW_COLUMNALIAS_ROW]);
+ aContextMenu->CheckItem( ID_QUERY_DISTINCT, static_cast<OQueryController&>(getDesignView()->getController()).isDistinct());
- switch (aContextMenu.Execute(this, aMenuPos))
+ switch (aContextMenu->Execute(this, aMenuPos))
{
case ID_QUERY_FUNCTION:
SetRowVisible(BROW_FUNCTION_ROW, !IsRowVisible(BROW_FUNCTION_ROW));
diff --git a/dbaccess/source/ui/querydesign/TableWindow.cxx b/dbaccess/source/ui/querydesign/TableWindow.cxx
index 10d3fd4e05bc..b699f0d6d20d 100644
--- a/dbaccess/source/ui/querydesign/TableWindow.cxx
+++ b/dbaccess/source/ui/querydesign/TableWindow.cxx
@@ -603,8 +603,8 @@ void OTableWindow::Command(const CommandEvent& rEvt)
ptWhere = m_xTitle->GetPosPixel();
}
- PopupMenu aContextMenu(ModuleRes(RID_MENU_JOINVIEW_TABLE));
- switch (aContextMenu.Execute(this, ptWhere))
+ ScopedVclPtrInstance<PopupMenu> aContextMenu(ModuleRes(RID_MENU_JOINVIEW_TABLE));
+ switch (aContextMenu->Execute(this, ptWhere))
{
case SID_DELETE:
Remove();
diff --git a/dbaccess/source/ui/tabledesign/TEditControl.cxx b/dbaccess/source/ui/tabledesign/TEditControl.cxx
index 04da703df831..7a39f55d1392 100644
--- a/dbaccess/source/ui/tabledesign/TEditControl.cxx
+++ b/dbaccess/source/ui/tabledesign/TEditControl.cxx
@@ -1361,10 +1361,10 @@ void OTableEditorCtrl::Command(const CommandEvent& rEvt)
if ( !IsColumnSelected( nColId ) )
SelectColumnId( nColId );
- PopupMenu aContextMenu( ModuleRes( RID_QUERYCOLPOPUPMENU ) );
- aContextMenu.EnableItem( SID_DELETE, false );
- aContextMenu.RemoveDisabledEntries(true, true);
- switch ( aContextMenu.Execute( this, aMenuPos ) )
+ ScopedVclPtrInstance<PopupMenu> aContextMenu( ModuleRes( RID_QUERYCOLPOPUPMENU ) );
+ aContextMenu->EnableItem( SID_DELETE, false );
+ aContextMenu->RemoveDisabledEntries(true, true);
+ switch ( aContextMenu->Execute( this, aMenuPos ) )
{
case ID_BROWSER_COLWIDTH:
adjustBrowseBoxColumnWidth( this, nColId );
@@ -1375,18 +1375,18 @@ void OTableEditorCtrl::Command(const CommandEvent& rEvt)
}
else
{
- PopupMenu aContextMenu(ModuleRes(RID_TABLEDESIGNROWPOPUPMENU));
+ ScopedVclPtrInstance<PopupMenu> aContextMenu(ModuleRes(RID_TABLEDESIGNROWPOPUPMENU));
- aContextMenu.EnableItem( SID_CUT, IsCutAllowed(nRow) );
- aContextMenu.EnableItem( SID_COPY, IsCopyAllowed(nRow) );
- aContextMenu.EnableItem( SID_PASTE, IsPasteAllowed(nRow) );
- aContextMenu.EnableItem( SID_DELETE, IsDeleteAllowed(nRow) );
- aContextMenu.EnableItem( SID_TABLEDESIGN_TABED_PRIMARYKEY, IsPrimaryKeyAllowed(nRow) );
- aContextMenu.EnableItem( SID_TABLEDESIGN_INSERTROWS, IsInsertNewAllowed(nRow) );
- aContextMenu.CheckItem( SID_TABLEDESIGN_TABED_PRIMARYKEY, IsRowSelected(GetCurRow()) && IsPrimaryKey() );
+ aContextMenu->EnableItem( SID_CUT, IsCutAllowed(nRow) );
+ aContextMenu->EnableItem( SID_COPY, IsCopyAllowed(nRow) );
+ aContextMenu->EnableItem( SID_PASTE, IsPasteAllowed(nRow) );
+ aContextMenu->EnableItem( SID_DELETE, IsDeleteAllowed(nRow) );
+ aContextMenu->EnableItem( SID_TABLEDESIGN_TABED_PRIMARYKEY, IsPrimaryKeyAllowed(nRow) );
+ aContextMenu->EnableItem( SID_TABLEDESIGN_INSERTROWS, IsInsertNewAllowed(nRow) );
+ aContextMenu->CheckItem( SID_TABLEDESIGN_TABED_PRIMARYKEY, IsRowSelected(GetCurRow()) && IsPrimaryKey() );
// remove all the disable entries
- aContextMenu.RemoveDisabledEntries(true, true);
+ aContextMenu->RemoveDisabledEntries(true, true);
if( SetDataPtr(m_nDataPos) )
pDescrWin->SaveData( pActRow->GetActFieldDescr() );
@@ -1394,7 +1394,7 @@ void OTableEditorCtrl::Command(const CommandEvent& rEvt)
// All actions which change the number of rows must be run asynchronously
// otherwise there may be problems between the Context menu and the Browser
m_nDataPos = GetCurRow();
- switch (aContextMenu.Execute(this, aMenuPos))
+ switch (aContextMenu->Execute(this, aMenuPos))
{
case SID_CUT:
cut();
diff --git a/dbaccess/source/ui/tabledesign/TableDesignControl.cxx b/dbaccess/source/ui/tabledesign/TableDesignControl.cxx
index 77f0650e17da..668edcd69958 100644
--- a/dbaccess/source/ui/tabledesign/TableDesignControl.cxx
+++ b/dbaccess/source/ui/tabledesign/TableDesignControl.cxx
@@ -107,13 +107,13 @@ void OTableRowView::Command(const CommandEvent& rEvt)
if ( nColId == HANDLE_ID )
{
- PopupMenu aContextMenu(ModuleRes(RID_TABLEDESIGNROWPOPUPMENU));
+ ScopedVclPtrInstance<PopupMenu> aContextMenu(ModuleRes(RID_TABLEDESIGNROWPOPUPMENU));
long nSelectRowCount = GetSelectRowCount();
- aContextMenu.EnableItem( SID_CUT, nSelectRowCount != 0);
- aContextMenu.EnableItem( SID_COPY, nSelectRowCount != 0);
- aContextMenu.EnableItem( SID_PASTE, m_bClipboardFilled );
- aContextMenu.EnableItem( SID_DELETE, false );
- switch (aContextMenu.Execute(this, rEvt.GetMousePosPixel()))
+ aContextMenu->EnableItem( SID_CUT, nSelectRowCount != 0);
+ aContextMenu->EnableItem( SID_COPY, nSelectRowCount != 0);
+ aContextMenu->EnableItem( SID_PASTE, m_bClipboardFilled );
+ aContextMenu->EnableItem( SID_DELETE, false );
+ switch (aContextMenu->Execute(this, rEvt.GetMousePosPixel()))
{
case SID_CUT:
cut();
diff --git a/desktop/source/deployment/gui/dp_gui_dialog2.cxx b/desktop/source/deployment/gui/dp_gui_dialog2.cxx
index a4a5867fa326..b14650ac1ab8 100644
--- a/desktop/source/deployment/gui/dp_gui_dialog2.cxx
+++ b/desktop/source/deployment/gui/dp_gui_dialog2.cxx
@@ -359,10 +359,10 @@ MENU_COMMAND ExtBoxWithBtns_Impl::ShowPopupMenu( const Point & rPos, const long
if ( nPos >= (long) getItemCount() )
return CMD_NONE;
- PopupMenu aPopup;
+ ScopedVclPtrInstance<PopupMenu> aPopup;
#if ENABLE_EXTENSION_UPDATE
- aPopup.InsertItem( CMD_UPDATE, DialogHelper::getResourceString( RID_CTX_ITEM_CHECK_UPDATE ) );
+ aPopup->InsertItem( CMD_UPDATE, DialogHelper::getResourceString( RID_CTX_ITEM_CHECK_UPDATE ) );
#endif
if ( ! GetEntryData( nPos )->m_bLocked )
@@ -370,17 +370,17 @@ MENU_COMMAND ExtBoxWithBtns_Impl::ShowPopupMenu( const Point & rPos, const long
if ( GetEntryData( nPos )->m_bUser )
{
if ( GetEntryData( nPos )->m_eState == REGISTERED )
- aPopup.InsertItem( CMD_DISABLE, DialogHelper::getResourceString( RID_CTX_ITEM_DISABLE ) );
+ aPopup->InsertItem( CMD_DISABLE, DialogHelper::getResourceString( RID_CTX_ITEM_DISABLE ) );
else if ( GetEntryData( nPos )->m_eState != NOT_AVAILABLE )
- aPopup.InsertItem( CMD_ENABLE, DialogHelper::getResourceString( RID_CTX_ITEM_ENABLE ) );
+ aPopup->InsertItem( CMD_ENABLE, DialogHelper::getResourceString( RID_CTX_ITEM_ENABLE ) );
}
- aPopup.InsertItem( CMD_REMOVE, DialogHelper::getResourceString( RID_CTX_ITEM_REMOVE ) );
+ aPopup->InsertItem( CMD_REMOVE, DialogHelper::getResourceString( RID_CTX_ITEM_REMOVE ) );
}
if ( !GetEntryData( nPos )->m_sLicenseText.isEmpty() )
- aPopup.InsertItem( CMD_SHOW_LICENSE, DialogHelper::getResourceString( RID_STR_SHOW_LICENSE_CMD ) );
+ aPopup->InsertItem( CMD_SHOW_LICENSE, DialogHelper::getResourceString( RID_STR_SHOW_LICENSE_CMD ) );
- return (MENU_COMMAND) aPopup.Execute( this, rPos );
+ return (MENU_COMMAND) aPopup->Execute( this, rPos );
}
diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
index 624a64d987fc..53548167ca85 100644
--- a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
+++ b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
@@ -654,17 +654,17 @@ void UpdateDialog::CheckListBox::handlePopupMenu( const Point &rPos )
if ( ( p->m_eKind == ENABLED_UPDATE ) || ( p->m_eKind == DISABLED_UPDATE ) )
{
- PopupMenu aPopup;
+ ScopedVclPtrInstance<PopupMenu> aPopup;
if ( p->m_bIgnored )
- aPopup.InsertItem( CMD_ENABLE_UPDATE, m_enableUpdate );
+ aPopup->InsertItem( CMD_ENABLE_UPDATE, m_enableUpdate );
else
{
- aPopup.InsertItem( CMD_IGNORE_UPDATE, m_ignoreUpdate );
- aPopup.InsertItem( CMD_IGNORE_ALL_UPDATES, m_ignoreAllUpdates );
+ aPopup->InsertItem( CMD_IGNORE_UPDATE, m_ignoreUpdate );
+ aPopup->InsertItem( CMD_IGNORE_ALL_UPDATES, m_ignoreAllUpdates );
}
- sal_uInt16 aCmd = aPopup.Execute( this, rPos );
+ sal_uInt16 aCmd = aPopup->Execute( this, rPos );
if ( ( aCmd == CMD_IGNORE_UPDATE ) || ( aCmd == CMD_IGNORE_ALL_UPDATES ) )
{
p->m_bIgnored = true;
diff --git a/editeng/source/editeng/editview.cxx b/editeng/source/editeng/editview.cxx
index 84dba195f5f9..0cd9e6feb691 100644
--- a/editeng/source/editeng/editview.cxx
+++ b/editeng/source/editeng/editview.cxx
@@ -765,9 +765,9 @@ void EditView::ExecuteSpellPopup( const Point& rPosPixel, Link<SpellCallbackInfo
ESelection aOldSel = GetSelection();
if ( xSpeller.is() && pImpEditView->IsWrongSpelledWord( aPaM, true ) )
{
- PopupMenu aPopupMenu( EditResId( RID_MENU_SPELL ) );
- PopupMenu *pAutoMenu = aPopupMenu.GetPopupMenu( MN_AUTOCORR );
- PopupMenu *pInsertMenu = aPopupMenu.GetPopupMenu( MN_INSERT ); // add word to user-dictionaries
+ ScopedVclPtrInstance<PopupMenu> aPopupMenu( EditResId( RID_MENU_SPELL ) );
+ PopupMenu *pAutoMenu = aPopupMenu->GetPopupMenu( MN_AUTOCORR );
+ PopupMenu *pInsertMenu = aPopupMenu->GetPopupMenu( MN_INSERT ); // add word to user-dictionaries
pInsertMenu->SetMenuFlags( MenuFlags::NoAutoMnemonics ); //! necessary to retrieve the correct dictionary names later
EditPaM aPaM2( aPaM );
@@ -824,24 +824,24 @@ void EditView::ExecuteSpellPopup( const Point& rPosPixel, Link<SpellCallbackInfo
if (nGuessLangPara == LANGUAGE_NONE)
nGuessLangPara = nGuessLangWord;
- aPopupMenu.InsertSeparator();
+ aPopupMenu->InsertSeparator();
OUString aTmpWord( SvtLanguageTable::GetLanguageString( nGuessLangWord ) );
OUString aTmpPara( SvtLanguageTable::GetLanguageString( nGuessLangPara ) );
OUString aWordStr( EE_RESSTR( RID_STR_WORD ) );
aWordStr = aWordStr.replaceFirst( "%x", aTmpWord );
OUString aParaStr( EE_RESSTR( RID_STR_PARAGRAPH ) );
aParaStr = aParaStr.replaceFirst( "%x", aTmpPara );
- aPopupMenu.InsertItem( MN_WORDLANGUAGE, aWordStr );
- aPopupMenu.SetHelpId( MN_WORDLANGUAGE, HID_EDITENG_SPELLER_WORDLANGUAGE );
- aPopupMenu.InsertItem( MN_PARALANGUAGE, aParaStr );
- aPopupMenu.SetHelpId( MN_PARALANGUAGE, HID_EDITENG_SPELLER_PARALANGUAGE );
+ aPopupMenu->InsertItem( MN_WORDLANGUAGE, aWordStr );
+ aPopupMenu->SetHelpId( MN_WORDLANGUAGE, HID_EDITENG_SPELLER_WORDLANGUAGE );
+ aPopupMenu->InsertItem( MN_PARALANGUAGE, aParaStr );
+ aPopupMenu->SetHelpId( MN_PARALANGUAGE, HID_EDITENG_SPELLER_PARALANGUAGE );
}
// ## Create mnemonics here
if ( Application::IsAutoMnemonicEnabled() )
{
- aPopupMenu.CreateAutoMnemonics();
- aPopupMenu.SetMenuFlags( aPopupMenu.GetMenuFlags() | MenuFlags::NoAutoMnemonics );
+ aPopupMenu->CreateAutoMnemonics();
+ aPopupMenu->SetMenuFlags( aPopupMenu->GetMenuFlags() | MenuFlags::NoAutoMnemonics );
}
// Replace suggestions...
@@ -855,13 +855,13 @@ void EditView::ExecuteSpellPopup( const Point& rPosPixel, Link<SpellCallbackInfo
for ( sal_uInt16 nW = 0; nW < nWords; nW++ )
{
OUString aAlternate( pAlt[nW] );
- aPopupMenu.InsertItem( MN_ALTSTART+nW, aAlternate, MenuItemBits::NONE, OString(), nW );
+ aPopupMenu->InsertItem( MN_ALTSTART+nW, aAlternate, MenuItemBits::NONE, OString(), nW );
pAutoMenu->InsertItem( MN_AUTOSTART+nW, aAlternate, MenuItemBits::NONE, OString(), nW );
}
- aPopupMenu.InsertSeparator(OString(), nWords);
+ aPopupMenu->InsertSeparator(OString(), nWords);
}
else
- aPopupMenu.RemoveItem( MN_AUTOCORR ); // delete?
+ aPopupMenu->RemoveItem( MN_AUTOCORR ); // delete?
SvtLinguConfig aCfg;
@@ -915,18 +915,18 @@ void EditView::ExecuteSpellPopup( const Point& rPosPixel, Link<SpellCallbackInfo
}
}
if ( pInsertMenu->GetItemCount() != 1)
- aPopupMenu.EnableItem( MN_INSERT_SINGLE, false );
+ aPopupMenu->EnableItem( MN_INSERT_SINGLE, false );
if ( pInsertMenu->GetItemCount() < 2 )
- aPopupMenu.EnableItem( MN_INSERT, false );
+ aPopupMenu->EnableItem( MN_INSERT, false );
- aPopupMenu.RemoveDisabledEntries( true, true );
+ aPopupMenu->RemoveDisabledEntries( true, true );
Rectangle aTempRect = pImpEditView->pEditEngine->pImpEditEngine->PaMtoEditCursor( aPaM, GETCRSR_TXTONLY );
Point aScreenPos = pImpEditView->GetWindowPos( aTempRect.TopLeft() );
aScreenPos = pImpEditView->GetWindow()->OutputToScreenPixel( aScreenPos );
aTempRect = pImpEditView->GetWindow()->LogicToPixel( Rectangle(aScreenPos, aTempRect.GetSize() ));
- sal_uInt16 nId = aPopupMenu.Execute( pImpEditView->GetWindow(), aTempRect, PopupMenuFlags::NoMouseUpClose );
+ sal_uInt16 nId = aPopupMenu->Execute( pImpEditView->GetWindow(), aTempRect, PopupMenuFlags::NoMouseUpClose );
if ( nId == MN_IGNORE )
{
OUString aWord = pImpEditView->SpellIgnoreWord();
diff --git a/extensions/source/bibliography/toolbar.cxx b/extensions/source/bibliography/toolbar.cxx
index 3cf37e486b03..65e4010aab6a 100644
--- a/extensions/source/bibliography/toolbar.cxx
+++ b/extensions/source/bibliography/toolbar.cxx
@@ -383,21 +383,21 @@ void BibToolBar::Click()
void BibToolBar::ClearFilterMenu()
{
- aPopupMenu.Clear();
+ pPopupMenu->Clear();
nMenuId=0;
}
sal_uInt16 BibToolBar::InsertFilterItem(const OUString& aMenuEntry)
{
nMenuId++;
- aPopupMenu.InsertItem(nMenuId,aMenuEntry);
+ pPopupMenu->InsertItem(nMenuId,aMenuEntry);
return nMenuId;
}
void BibToolBar::SelectFilterItem(sal_uInt16 nId)
{
- aPopupMenu.CheckItem(nId);
+ pPopupMenu->CheckItem(nId);
nSelMenuItem=nId;
- aQueryField = MnemonicGenerator::EraseAllMnemonicChars( aPopupMenu.GetItemText(nId) );
+ aQueryField = MnemonicGenerator::EraseAllMnemonicChars( pPopupMenu->GetItemText(nId) );
}
void BibToolBar::EnableSourceList(bool bFlag)
@@ -490,15 +490,15 @@ IMPL_LINK_NOARG_TYPED( BibToolBar, MenuHdl, ToolBox*, void)
EndSelection(); // vor SetDropMode (SetDropMode ruft SetItemImage)
SetItemDown(nTBC_BT_AUTOFILTER, true);
- nId = aPopupMenu.Execute(this, GetItemRect(nTBC_BT_AUTOFILTER));
+ nId = pPopupMenu->Execute(this, GetItemRect(nTBC_BT_AUTOFILTER));
if(nId>0)
{
- aPopupMenu.CheckItem(nSelMenuItem,false);
- aPopupMenu.CheckItem(nId);
+ pPopupMenu->CheckItem(nSelMenuItem,false);
+ pPopupMenu->CheckItem(nId);
nSelMenuItem=nId;
- aQueryField = MnemonicGenerator::EraseAllMnemonicChars( aPopupMenu.GetItemText(nId) );
+ aQueryField = MnemonicGenerator::EraseAllMnemonicChars( pPopupMenu->GetItemText(nId) );
Sequence<PropertyValue> aPropVal(2);
PropertyValue* pPropertyVal = const_cast<PropertyValue*>(aPropVal.getConstArray());
pPropertyVal[0].Name = "QueryText";
diff --git a/extensions/source/bibliography/toolbar.hxx b/extensions/source/bibliography/toolbar.hxx
index 9743e2848cd5..97f189cc0618 100644
--- a/extensions/source/bibliography/toolbar.hxx
+++ b/extensions/source/bibliography/toolbar.hxx
@@ -116,7 +116,7 @@ class BibToolBar: public ToolBox
VclPtr<ListBox> aLBSource;
VclPtr<FixedText> aFtQuery;
VclPtr<Edit> aEdQuery;
- PopupMenu aPopupMenu;
+ ScopedVclPtr<PopupMenu> pPopupMenu;
sal_uInt16 nMenuId;
sal_uInt16 nSelMenuItem;
OUString aQueryField;
diff --git a/extensions/source/update/ui/updatecheckui.cxx b/extensions/source/update/ui/updatecheckui.cxx
index f8f9e9f00a10..25f56553dd0c 100644
--- a/extensions/source/update/ui/updatecheckui.cxx
+++ b/extensions/source/update/ui/updatecheckui.cxx
@@ -126,7 +126,7 @@ class UpdateCheckUI : public ::cppu::WeakImplHelper
Image maBubbleImage;
VclPtr<BubbleWindow> mpBubbleWin;
VclPtr<SystemWindow> mpIconSysWin;
- MenuBar* mpIconMBar;
+ VclPtr<MenuBar> mpIconMBar;
ResMgr* mpUpdResMgr;
ResMgr* mpSfxResMgr;
Idle maWaitIdle;
diff --git a/fpicker/source/office/RemoteFilesDialog.hxx b/fpicker/source/office/RemoteFilesDialog.hxx
index a2a7d16fb0c5..84ba1e76e065 100644
--- a/fpicker/source/office/RemoteFilesDialog.hxx
+++ b/fpicker/source/office/RemoteFilesDialog.hxx
@@ -162,7 +162,7 @@ private:
VclPtr< FileViewContainer > m_pContainer;
VclPtr< ListBox > m_pFilter_lb;
VclPtr< AutocompleteEdit > m_pName_ed;
- PopupMenu* m_pAddMenu;
+ VclPtr<PopupMenu> m_pAddMenu;
ImageList m_aImages;
diff --git a/fpicker/source/office/iodlgimp.cxx b/fpicker/source/office/iodlgimp.cxx
index 7aaa3d05bd2e..9cee811117a2 100644
--- a/fpicker/source/office/iodlgimp.cxx
+++ b/fpicker/source/office/iodlgimp.cxx
@@ -91,7 +91,7 @@ SvtFileDialogFilter_Impl::~SvtFileDialogFilter_Impl()
SvtFileDialogURLSelector::SvtFileDialogURLSelector( vcl::Window* _pParent, SvtFileDialog* _pDlg, WinBits nBits, sal_uInt16 _nButtonId )
:MenuButton ( _pParent, nBits )
,m_pDlg ( _pDlg )
- ,m_pMenu ( new PopupMenu )
+ ,m_pMenu ( VclPtr<PopupMenu>::Create() )
{
SetStyle( GetStyle() | WB_NOPOINTERFOCUS | WB_RECTSTYLE | WB_SMALLSTYLE );
SetModeImage( _pDlg->GetButtonImage( _nButtonId ) );
@@ -107,7 +107,7 @@ SvtFileDialogURLSelector::~SvtFileDialogURLSelector()
void SvtFileDialogURLSelector::dispose()
{
- delete m_pMenu;
+ m_pMenu.disposeAndClear();
m_pDlg.clear();
MenuButton::dispose();
}
diff --git a/fpicker/source/office/iodlgimp.hxx b/fpicker/source/office/iodlgimp.hxx
index 1726a394a542..7ad944300e56 100644
--- a/fpicker/source/office/iodlgimp.hxx
+++ b/fpicker/source/office/iodlgimp.hxx
@@ -84,7 +84,7 @@ public:
virtual void dispose() override;
private:
VclPtr<SvtFileDialog> m_pDlg;
- PopupMenu* m_pMenu;
+ VclPtr<PopupMenu> m_pMenu;
protected:
inline SvtFileDialog* GetDialogParent() { return m_pDlg; }
diff --git a/framework/inc/classes/rootactiontriggercontainer.hxx b/framework/inc/classes/rootactiontriggercontainer.hxx
index bc0fa2b204bf..53d009cec6ab 100644
--- a/framework/inc/classes/rootactiontriggercontainer.hxx
+++ b/framework/inc/classes/rootactiontriggercontainer.hxx
@@ -106,7 +106,7 @@ class FWE_DLLPUBLIC RootActionTriggerContainer : public PropertySetContainer,
bool m_bContainerCreated;
bool m_bContainerChanged;
bool m_bInContainerCreation;
- const Menu* m_pMenu;
+ VclPtr<const Menu> m_pMenu;
const OUString* m_pMenuIdentifier;
};
diff --git a/framework/inc/uielement/generictoolbarcontroller.hxx b/framework/inc/uielement/generictoolbarcontroller.hxx
index 805a232f0dca..69f57f7f5e54 100644
--- a/framework/inc/uielement/generictoolbarcontroller.hxx
+++ b/framework/inc/uielement/generictoolbarcontroller.hxx
@@ -70,7 +70,7 @@ class GenericToolbarController : public svt::ToolboxController
class MenuToolbarController : public GenericToolbarController
{
css::uno::Reference< css::container::XIndexAccess > m_xMenuDesc;
- PopupMenu* pMenu;
+ VclPtr<PopupMenu> pMenu;
css::uno::Reference< css::lang::XComponent > m_xMenuManager;
OUString m_aModuleIdentifier;
public:
diff --git a/framework/inc/uielement/menubarmanager.hxx b/framework/inc/uielement/menubarmanager.hxx
index 0405df3afd44..8e30d5dc8c48 100644
--- a/framework/inc/uielement/menubarmanager.hxx
+++ b/framework/inc/uielement/menubarmanager.hxx
@@ -215,7 +215,7 @@ class MenuBarManager : public css::frame::XStatusListener ,
bool m_bHasMenuBar;
OUString m_aMenuItemCommand;
OUString m_aModuleIdentifier;
- Menu* m_pVCLMenu;
+ VclPtr<Menu> m_pVCLMenu;
css::uno::Reference< css::frame::XFrame > m_xFrame;
css::uno::Reference< css::container::XNameAccess > m_xUICommandLabels;
css::uno::Reference< css::frame::XUIControllerFactory > m_xPopupMenuControllerFactory;
diff --git a/framework/inc/uielement/menubarmerger.hxx b/framework/inc/uielement/menubarmerger.hxx
index 354c0fdb6b9e..1cced9978330 100644
--- a/framework/inc/uielement/menubarmerger.hxx
+++ b/framework/inc/uielement/menubarmerger.hxx
@@ -51,7 +51,7 @@ enum RPResultInfo
struct ReferencePathInfo
{
- Menu* pPopupMenu;
+ VclPtr<Menu> pPopupMenu;
sal_uInt16 nPos;
sal_Int32 nLevel;
RPResultInfo eResult;
diff --git a/framework/source/fwe/classes/addonmenu.cxx b/framework/source/fwe/classes/addonmenu.cxx
index f69ae27ee94b..2e20b304bc0b 100644
--- a/framework/source/fwe/classes/addonmenu.cxx
+++ b/framework/source/fwe/classes/addonmenu.cxx
@@ -53,14 +53,12 @@ AddonMenu::AddonMenu( const css::uno::Reference< css::frame::XFrame >& rFrame )
AddonMenu::~AddonMenu()
{
- for ( sal_uInt16 i = 0; i < GetItemCount(); i++ )
- {
- if ( GetItemType( i ) != MenuItemType::SEPARATOR )
- {
- sal_uInt16 nId = GetItemId( i );
- delete GetPopupMenu( nId );
- }
- }
+ disposeOnce();
+}
+
+void AddonMenu::dispose()
+{
+ PopupMenu::dispose();
}
// Check if command URL string has the unique prefix to identify addon popup menus
@@ -101,36 +99,35 @@ bool AddonMenuManager::HasAddonMenuElements()
}
// Factory method to create different Add-On menu types
-PopupMenu* AddonMenuManager::CreatePopupMenuType( MenuType eMenuType, const Reference< XFrame >& rFrame )
+VclPtr<PopupMenu> AddonMenuManager::CreatePopupMenuType( MenuType eMenuType, const Reference< XFrame >& rFrame )
{
if ( eMenuType == ADDON_MENU )
- return new AddonMenu( rFrame );
+ return VclPtr<AddonMenu>::Create( rFrame );
else if ( eMenuType == ADDON_POPUPMENU )
- return new AddonPopupMenu( rFrame );
+ return VclPtr<AddonPopupMenu>::Create( rFrame );
else
return nullptr;
}
// Create the Add-Ons menu
-AddonMenu* AddonMenuManager::CreateAddonMenu( const Reference< XFrame >& rFrame,
+VclPtr<AddonMenu> AddonMenuManager::CreateAddonMenu( const Reference< XFrame >& rFrame,
const Reference< XComponentContext >& rContext )
{
- AddonsOptions aOptions;
- AddonMenu* pAddonMenu = nullptr;
- sal_uInt16 nUniqueMenuId = ADDONMENU_ITEMID_START;
+ AddonsOptions aOptions;
+ VclPtr<AddonMenu> pAddonMenu;
+ sal_uInt16 nUniqueMenuId = ADDONMENU_ITEMID_START;
const Sequence< Sequence< PropertyValue > >& rAddonMenuEntries = aOptions.GetAddonsMenu();
if ( rAddonMenuEntries.getLength() > 0 )
{
- pAddonMenu = static_cast<AddonMenu *>(AddonMenuManager::CreatePopupMenuType( ADDON_MENU, rFrame ));
+ pAddonMenu = static_cast<AddonMenu *>(AddonMenuManager::CreatePopupMenuType( ADDON_MENU, rFrame ).get());
::rtl::OUString aModuleIdentifier = GetModuleIdentifier( rContext, rFrame );
AddonMenuManager::BuildMenu( pAddonMenu, ADDON_MENU, MENU_APPEND, nUniqueMenuId, rAddonMenuEntries, rFrame, aModuleIdentifier );
// Don't return an empty Add-On menu
if ( pAddonMenu->GetItemCount() == 0 )
{
- delete pAddonMenu;
- pAddonMenu = nullptr;
+ pAddonMenu.disposeAndClear();
}
}
@@ -243,7 +240,7 @@ void AddonMenuManager::MergeAddonPopupMenus( const Reference< XFrame >& rFrame,
AddonMenuManager::IsCorrectContext( aModuleIdentifier, aContext ))
{
sal_uInt16 nId = nUniqueMenuId++;
- AddonPopupMenu* pAddonPopupMenu = static_cast<AddonPopupMenu *>(AddonMenuManager::CreatePopupMenuType( ADDON_POPUPMENU, rFrame ));
+ VclPtr<AddonPopupMenu> pAddonPopupMenu = static_cast<AddonPopupMenu *>(AddonMenuManager::CreatePopupMenuType( ADDON_POPUPMENU, rFrame ).get());
AddonMenuManager::BuildMenu( pAddonPopupMenu, ADDON_MENU, MENU_APPEND, nUniqueMenuId, aAddonSubMenu, rFrame, aModuleIdentifier );
@@ -257,7 +254,7 @@ void AddonMenuManager::MergeAddonPopupMenus( const Reference< XFrame >& rFrame,
pMergeMenuBar->SetItemCommand( nId, aURL );
}
else
- delete pAddonPopupMenu;
+ pAddonPopupMenu.disposeAndClear();
}
}
}
@@ -296,7 +293,7 @@ void AddonMenuManager::BuildMenu( PopupMenu* pCurrent
bInsertSeparator = true;
else
{
- PopupMenu* pSubMenu = nullptr;
+ VclPtr<PopupMenu> pSubMenu;
if ( aAddonSubMenu.getLength() > 0 )
{
pSubMenu = AddonMenuManager::CreatePopupMenuType( nSubMenuType, rFrame );
@@ -305,8 +302,7 @@ void AddonMenuManager::BuildMenu( PopupMenu* pCurrent
// Don't create a menu item for an empty sub menu
if ( pSubMenu->GetItemCount() == 0 )
{
- delete pSubMenu;
- pSubMenu = nullptr;
+ pSubMenu.disposeAndClear();
continue;
}
}
diff --git a/framework/source/fwe/helper/actiontriggerhelper.cxx b/framework/source/fwe/helper/actiontriggerhelper.cxx
index 3749606f7c3f..33a171b22d87 100644
--- a/framework/source/fwe/helper/actiontriggerhelper.cxx
+++ b/framework/source/fwe/helper/actiontriggerhelper.cxx
@@ -208,7 +208,7 @@ void InsertSubMenuItems( Menu* pSubMenu, sal_uInt16& nItemId, const Reference< X
if ( xSubContainer.is() )
{
- PopupMenu* pNewSubMenu = new PopupMenu;
+ VclPtr<PopupMenu> pNewSubMenu = VclPtr<PopupMenu>::Create();
// Sub menu (recursive call CreateSubMenu )
InsertSubMenuItems( pNewSubMenu, nItemId, xSubContainer );
diff --git a/framework/source/layoutmanager/layoutmanager.cxx b/framework/source/layoutmanager/layoutmanager.cxx
index 3dfab060f3f4..7d65c33c4c97 100644
--- a/framework/source/layoutmanager/layoutmanager.cxx
+++ b/framework/source/layoutmanager/layoutmanager.cxx
@@ -208,7 +208,7 @@ void LayoutManager::impl_clearUpMenuBar()
}
// reset inplace menubar manager
- Menu *pMenuBar = nullptr;
+ VclPtr<Menu> pMenuBar;
if (m_pInplaceMenuBar)
{
pMenuBar = m_pInplaceMenuBar->GetMenuBar();
@@ -219,7 +219,7 @@ void LayoutManager::impl_clearUpMenuBar()
m_xInplaceMenuBar->dispose();
m_xInplaceMenuBar.clear();
}
- delete pMenuBar;
+ pMenuBar.disposeAndClear();
Reference< XComponent > xComp( m_xMenuBar, UNO_QUERY );
if ( xComp.is() )
@@ -1150,7 +1150,7 @@ throw (uno::RuntimeException, std::exception)
SolarMutexGuard aGuard;
// Reset old inplace menubar!
- Menu *pOldMenuBar = nullptr;
+ VclPtr<Menu> pOldMenuBar;
if (m_pInplaceMenuBar)
{
pOldMenuBar = m_pInplaceMenuBar->GetMenuBar();
@@ -1161,7 +1161,7 @@ throw (uno::RuntimeException, std::exception)
m_xInplaceMenuBar->dispose();
m_xInplaceMenuBar.clear();
}
- delete pOldMenuBar;
+ pOldMenuBar.disposeAndClear();
m_bInplaceMenuSet = false;
@@ -1170,7 +1170,7 @@ throw (uno::RuntimeException, std::exception)
OUString aModuleIdentifier;
Reference< XDispatchProvider > xDispatchProvider;
- MenuBar* pMenuBar = new MenuBar;
+ VclPtr<MenuBar> pMenuBar = VclPtr<MenuBar>::Create();
m_pInplaceMenuBar = new MenuBarManager( m_xContext, m_xFrame, m_xURLTransformer, xDispatchProvider, aModuleIdentifier, pMenuBar, true, true );
m_pInplaceMenuBar->SetItemContainer( xMergedMenuBar );
@@ -1210,7 +1210,7 @@ throw (uno::RuntimeException)
}
// Remove inplace menu bar
- Menu *pMenuBar = nullptr;
+ VclPtr<Menu> pMenuBar;
if (m_pInplaceMenuBar)
{
pMenuBar = m_pInplaceMenuBar->GetMenuBar();
@@ -1221,7 +1221,7 @@ throw (uno::RuntimeException)
m_xInplaceMenuBar->dispose();
m_xInplaceMenuBar.clear();
}
- delete pMenuBar;
+ pMenuBar.disposeAndClear();
}
void SAL_CALL LayoutManager::attachFrame( const Reference< XFrame >& xFrame )
@@ -2830,7 +2830,7 @@ throw( RuntimeException, std::exception )
implts_destroyElements();
impl_clearUpMenuBar();
m_xMenuBar.clear();
- Menu *pMenuBar = nullptr;
+ VclPtr<Menu> pMenuBar;
if (m_pInplaceMenuBar)
{
pMenuBar = m_pInplaceMenuBar->GetMenuBar();
@@ -2841,7 +2841,7 @@ throw( RuntimeException, std::exception )
m_xInplaceMenuBar->dispose();
m_xInplaceMenuBar.clear();
}
- delete pMenuBar;
+ pMenuBar.disposeAndClear();
m_xContainerWindow.clear();
m_xContainerTopWindow.clear();
@@ -2894,7 +2894,7 @@ throw( RuntimeException, std::exception )
}
impl_clearUpMenuBar();
m_xMenuBar.clear();
- Menu *pMenuBar = nullptr;
+ VclPtr<Menu> pMenuBar;
if (m_pInplaceMenuBar)
{
pMenuBar = m_pInplaceMenuBar->GetMenuBar();
@@ -2905,7 +2905,7 @@ throw( RuntimeException, std::exception )
m_xInplaceMenuBar->dispose();
m_xInplaceMenuBar.clear();
}
- delete pMenuBar;
+ pMenuBar.disposeAndClear();
m_xContainerWindow.clear();
m_xContainerTopWindow.clear();
}
diff --git a/framework/source/uielement/controlmenucontroller.cxx b/framework/source/uielement/controlmenucontroller.cxx
index 00e91ace4749..f9852acbceab 100644
--- a/framework/source/uielement/controlmenucontroller.cxx
+++ b/framework/source/uielement/controlmenucontroller.cxx
@@ -233,8 +233,8 @@ private:
void updateImagesPopupMenu( PopupMenu* pPopupMenu );
void fillPopupMenu( uno::Reference< awt::XPopupMenu >& rPopupMenu );
- bool m_bShowMenuImages : 1;
- PopupMenu* m_pResPopupMenu;
+ bool m_bShowMenuImages : 1;
+ VclPtr<PopupMenu> m_pResPopupMenu;
UrlToDispatchMap m_aURLToDispatchMap;
};
@@ -300,7 +300,7 @@ void SAL_CALL ControlMenuController::disposing( const EventObject& ) throw ( Run
if ( m_xPopupMenu.is() )
m_xPopupMenu->removeMenuListener( Reference< css::awt::XMenuListener >(static_cast<OWeakObject *>(this), UNO_QUERY ));
m_xPopupMenu.clear();
- delete m_pResPopupMenu;
+ m_pResPopupMenu.disposeAndClear();
}
// XStatusListener
@@ -398,7 +398,7 @@ void ControlMenuController::impl_setPopupMenu()
aResId.SetRT( RSC_MENU );
if ( pResMgr->IsAvailable( aResId ))
{
- m_pResPopupMenu = new PopupMenu( aResId );
+ m_pResPopupMenu = VclPtr<PopupMenu>::Create( aResId );
updateImagesPopupMenu( m_pResPopupMenu );
}
}
diff --git a/framework/source/uielement/generictoolbarcontroller.cxx b/framework/source/uielement/generictoolbarcontroller.cxx
index 620462b71fdc..46fd4e0f9799 100644
--- a/framework/source/uielement/generictoolbarcontroller.cxx
+++ b/framework/source/uielement/generictoolbarcontroller.cxx
@@ -305,10 +305,8 @@ MenuToolbarController::~MenuToolbarController()
catch( const Exception& ) {}
if ( pMenu )
{
- delete pMenu;
- pMenu = nullptr;
+ pMenu.disposeAndClear();
}
-
}
class Toolbarmenu : public ::PopupMenu
@@ -316,6 +314,7 @@ class Toolbarmenu : public ::PopupMenu
public:
Toolbarmenu();
virtual ~Toolbarmenu();
+ virtual void dispose() override;
};
Toolbarmenu::Toolbarmenu()
@@ -325,7 +324,13 @@ Toolbarmenu::Toolbarmenu()
Toolbarmenu::~Toolbarmenu()
{
+ disposeOnce();
+}
+
+void Toolbarmenu::dispose()
+{
SAL_INFO("fwk.uielement", "destructing Toolbarmenu " << this);
+ ::PopupMenu::dispose();
}
void SAL_CALL MenuToolbarController::click() throw (RuntimeException, std::exception)
@@ -340,7 +345,7 @@ MenuToolbarController::createPopupWindow() throw (css::uno::RuntimeException, st
{
Reference< XDispatchProvider > xDispatch;
Reference< XURLTransformer > xURLTransformer = URLTransformer::create( m_xContext );
- pMenu = new Toolbarmenu();
+ pMenu = VclPtr<Toolbarmenu>::Create();
m_xMenuManager.set( new MenuBarManager( m_xContext, m_xFrame, xURLTransformer, xDispatch, m_aModuleIdentifier, pMenu, true, true, false ) );
if (m_xMenuManager.is())
{
diff --git a/framework/source/uielement/menubarmanager.cxx b/framework/source/uielement/menubarmanager.cxx
index 3007e8a44102..3f1d1c26c66e 100644
--- a/framework/source/uielement/menubarmanager.cxx
+++ b/framework/source/uielement/menubarmanager.cxx
@@ -250,8 +250,7 @@ void MenuBarManager::Destroy()
if ( m_bDeleteMenu )
{
- delete m_pVCLMenu;
- m_pVCLMenu = nullptr;
+ m_pVCLMenu.disposeAndClear();
}
}
}
@@ -1190,7 +1189,7 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, const Reference< XFrame >& rF
Reference< XDispatch > xDispatch;
Reference< XStatusListener > xStatusListener;
- PopupMenu* pPopup = pMenu->GetPopupMenu( nItemId );
+ VclPtr<PopupMenu> pPopup = pMenu->GetPopupMenu( nItemId );
bool bItemShowMenuImages = m_bShowMenuImages;
// overwrite the show icons on menu option?
if (!bItemShowMenuImages)
@@ -1223,7 +1222,7 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, const Reference< XFrame >& rF
pItemHandler->xPopupMenu.set( static_cast<OWeakObject *>(pVCLXPopupMenu), UNO_QUERY );
pItemHandler->aMenuItemURL = aItemCommand;
m_aMenuItemHandlerVector.push_back( pItemHandler );
- delete pPopup;
+ pPopup.disposeAndClear();
if ( bAccessibilityEnabled )
{
@@ -1258,7 +1257,7 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, const Reference< XFrame >& rF
AddonMenuManager::HasAddonMenuElements() )
{
// Create addon popup menu if there exist elements and this is the tools popup menu
- AddonMenu* pSubMenu = AddonMenuManager::CreateAddonMenu(rFrame, m_xContext);
+ VclPtr<AddonMenu> pSubMenu = AddonMenuManager::CreateAddonMenu(rFrame, m_xContext);
if ( pSubMenu && ( pSubMenu->GetItemCount() > 0 ))
{
sal_uInt16 nCount = 0;
@@ -1275,12 +1274,12 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, const Reference< XFrame >& rF
pPopup->SetItemCommand( ITEMID_ADDONLIST, aNewItemCommand );
}
else
- delete pSubMenu;
+ pSubMenu.disposeAndClear();
}
if ( nItemId == ITEMID_ADDONLIST )
{
- AddonMenu* pSubMenu = dynamic_cast< AddonMenu* >( pPopup );
+ AddonMenu* pSubMenu = dynamic_cast< AddonMenu* >( pPopup.get() );
if ( pSubMenu )
{
MenuBarManager* pSubMenuManager = new MenuBarManager( m_xContext, m_xFrame, m_xURLTransformer,pSubMenu, true, false, false );
@@ -1672,7 +1671,7 @@ void MenuBarManager::FillMenu(
if ( xIndexContainer.is() )
{
- PopupMenu* pNewPopupMenu = new PopupMenu;
+ VclPtr<PopupMenu> pNewPopupMenu = VclPtr<PopupMenu>::Create();
pMenu->SetPopupMenu( nId, pNewPopupMenu );
if ( xDispatchProvider.is() )
diff --git a/framework/source/uielement/menubarmerger.cxx b/framework/source/uielement/menubarmerger.cxx
index 47514143a0dd..8adb19f0b28e 100644
--- a/framework/source/uielement/menubarmerger.cxx
+++ b/framework/source/uielement/menubarmerger.cxx
@@ -180,7 +180,7 @@ bool MenuBarMerger::CreateSubMenu(
pSubMenu->SetItemCommand( nItemId, rMenuItem.aURL );
if ( !rMenuItem.aSubMenu.empty() )
{
- PopupMenu* pPopupMenu = new PopupMenu();
+ VclPtr<PopupMenu> pPopupMenu = VclPtr<PopupMenu>::Create();
pSubMenu->SetPopupMenu( nItemId, pPopupMenu );
++nItemId;
@@ -221,7 +221,7 @@ bool MenuBarMerger::MergeMenuItems(
pMenu->SetItemCommand( nItemId, rMenuItem.aURL );
if ( !rMenuItem.aSubMenu.empty() )
{
- PopupMenu* pSubMenu = new PopupMenu();
+ VclPtr<PopupMenu> pSubMenu = VclPtr<PopupMenu>::Create();
pMenu->SetPopupMenu( nItemId, pSubMenu );
++nItemId;
@@ -352,7 +352,7 @@ bool MenuBarMerger::ProcessFallbackOperation(
const OUString aCmd( rReferencePath[nLevel] );
sal_uInt16 nInsPos( MENU_APPEND );
- PopupMenu* pPopupMenu( new PopupMenu );
+ VclPtr<PopupMenu> pPopupMenu = VclPtr<PopupMenu>::Create();
if ( bFirstLevel && ( aRefPathInfo.eResult == RP_MENUITEM_INSTEAD_OF_POPUPMENU_FOUND ))
{
diff --git a/framework/source/uielement/menubarwrapper.cxx b/framework/source/uielement/menubarwrapper.cxx
index 1d202720884f..d420fa14d8b4 100644
--- a/framework/source/uielement/menubarwrapper.cxx
+++ b/framework/source/uielement/menubarwrapper.cxx
@@ -126,11 +126,11 @@ void SAL_CALL MenuBarWrapper::initialize( const Sequence< Any >& aArguments ) th
if ( xFrame.is() && m_xConfigSource.is() )
{
// Create VCL menubar which will be filled with settings data
- MenuBar* pVCLMenuBar = nullptr;
+ VclPtr<MenuBar> pVCLMenuBar;
VCLXMenuBar* pAwtMenuBar = nullptr;
{
SolarMutexGuard aSolarMutexGuard;
- pVCLMenuBar = new MenuBar();
+ pVCLMenuBar = VclPtr<MenuBar>::Create();
}
Reference< XModuleManager2 > xModuleManager = ModuleManager::create( m_xContext );
diff --git a/framework/source/uielement/togglebuttontoolbarcontroller.cxx b/framework/source/uielement/togglebuttontoolbarcontroller.cxx
index 5dd73a65a47e..4e726c191312 100644
--- a/framework/source/uielement/togglebuttontoolbarcontroller.cxx
+++ b/framework/source/uielement/togglebuttontoolbarcontroller.cxx
@@ -102,21 +102,21 @@ throw (css::uno::RuntimeException, std::exception)
( m_eStyle == STYLE_TOGGLE_DROPDOWNBUTTON ))
{
// create popup menu
- ::PopupMenu aPopup;
+ ScopedVclPtrInstance<::PopupMenu> aPopup;
const sal_uInt32 nCount = m_aDropdownMenuList.size();
for ( sal_uInt32 i = 0; i < nCount; i++ )
{
OUString aLabel( m_aDropdownMenuList[i] );
- aPopup.InsertItem( sal_uInt16( i+1 ), aLabel );
+ aPopup->InsertItem( sal_uInt16( i+1 ), aLabel );
if ( aLabel == m_aCurrentSelection )
- aPopup.CheckItem( sal_uInt16( i+1 ) );
+ aPopup->CheckItem( sal_uInt16( i+1 ) );
else
- aPopup.CheckItem( sal_uInt16( i+1 ), false );
+ aPopup->CheckItem( sal_uInt16( i+1 ), false );
}
m_pToolbar->SetItemDown( m_nID, true );
- aPopup.SetSelectHdl( LINK( this, ToggleButtonToolbarController, MenuSelectHdl ));
- aPopup.Execute( m_pToolbar, m_pToolbar->GetItemRect( m_nID ));
+ aPopup->SetSelectHdl( LINK( this, ToggleButtonToolbarController, MenuSelectHdl ));
+ aPopup->Execute( m_pToolbar, m_pToolbar->GetItemRect( m_nID ));
m_pToolbar->SetItemDown( m_nID, false );
}
diff --git a/framework/source/uielement/toolbarmanager.cxx b/framework/source/uielement/toolbarmanager.cxx
index 752138447db6..68a3e00c494a 100644
--- a/framework/source/uielement/toolbarmanager.cxx
+++ b/framework/source/uielement/toolbarmanager.cxx
@@ -1326,12 +1326,11 @@ void ToolBarManager::ImplClearPopupMenu( ToolBox *pToolBar )
// remove config entries from menu, so we have a clean menu to start with
// remove submenu first
- ::PopupMenu* pItemMenu = pMenu->GetPopupMenu( 1 );
+ VclPtr<::PopupMenu> pItemMenu = pMenu->GetPopupMenu( 1 );
if( pItemMenu )
{
pItemMenu->Clear();
- delete pItemMenu;
- pItemMenu = nullptr;
+ pItemMenu.disposeAndClear();
pMenu->SetPopupMenu( 1, pItemMenu );
}
@@ -1412,12 +1411,12 @@ bool ToolBarManager::MenuItemAllowed( sal_uInt16 ) const
// popup menu for quick customization
bool bHideDisabledEntries = !SvtMenuOptions().IsEntryHidingEnabled();
- ::PopupMenu aQuickCustomizationMenu( FwkResId( POPUPMENU_TOOLBAR_QUICKCUSTOMIZATION ));
+ ScopedVclPtrInstance<::PopupMenu> aQuickCustomizationMenu( FwkResId( POPUPMENU_TOOLBAR_QUICKCUSTOMIZATION ));
if ( m_pToolBar->IsCustomize() )
{
sal_uInt16 nPos( 0 );
- ::PopupMenu* pVisibleItemsPopupMenu( aQuickCustomizationMenu.GetPopupMenu( 1 ));
+ ::PopupMenu* pVisibleItemsPopupMenu( aQuickCustomizationMenu->GetPopupMenu( 1 ));
bool bIsFloating( false );
@@ -1427,25 +1426,25 @@ bool ToolBarManager::MenuItemAllowed( sal_uInt16 ) const
if ( !bIsFloating )
{
- aQuickCustomizationMenu.EnableItem( MENUITEM_TOOLBAR_DOCKTOOLBAR, false );
- aQuickCustomizationMenu.EnableItem( MENUITEM_TOOLBAR_DOCKALLTOOLBAR, false );
+ aQuickCustomizationMenu->EnableItem( MENUITEM_TOOLBAR_DOCKTOOLBAR, false );
+ aQuickCustomizationMenu->EnableItem( MENUITEM_TOOLBAR_DOCKALLTOOLBAR, false );
Reference< XDockableWindow > xDockable( VCLUnoHelper::GetInterface( m_pToolBar ), UNO_QUERY );
if( xDockable.is() )
- aQuickCustomizationMenu.CheckItem( MENUITEM_TOOLBAR_LOCKTOOLBARPOSITION, xDockable->isLocked() );
+ aQuickCustomizationMenu->CheckItem( MENUITEM_TOOLBAR_LOCKTOOLBARPOSITION, xDockable->isLocked() );
}
else
- aQuickCustomizationMenu.EnableItem( MENUITEM_TOOLBAR_LOCKTOOLBARPOSITION, false );
+ aQuickCustomizationMenu->EnableItem( MENUITEM_TOOLBAR_LOCKTOOLBARPOSITION, false );
if ( SvtMiscOptions().DisableUICustomization() )
{
- aQuickCustomizationMenu.EnableItem( MENUITEM_TOOLBAR_VISIBLEBUTTON, false );
- aQuickCustomizationMenu.EnableItem( MENUITEM_TOOLBAR_CUSTOMIZETOOLBAR, false );
- aQuickCustomizationMenu.EnableItem( MENUITEM_TOOLBAR_LOCKTOOLBARPOSITION, false );
+ aQuickCustomizationMenu->EnableItem( MENUITEM_TOOLBAR_VISIBLEBUTTON, false );
+ aQuickCustomizationMenu->EnableItem( MENUITEM_TOOLBAR_CUSTOMIZETOOLBAR, false );
+ aQuickCustomizationMenu->EnableItem( MENUITEM_TOOLBAR_LOCKTOOLBARPOSITION, false );
}
// Disable menu item CLOSE if the toolbar has no closer
if( !(pToolBar->GetFloatStyle() & WB_CLOSEABLE) )
- aQuickCustomizationMenu.EnableItem(MENUITEM_TOOLBAR_CLOSE, false);
+ aQuickCustomizationMenu->EnableItem(MENUITEM_TOOLBAR_CLOSE, false);
// Temporary stores a Command --> Url map to update contextual menu with the
// correct icons. The popup icons are by default the same as those in the
@@ -1486,9 +1485,9 @@ bool ToolBarManager::MenuItemAllowed( sal_uInt16 ) const
}
else
{
- sal_uInt16 nPos = aQuickCustomizationMenu.GetItemPos( MENUITEM_TOOLBAR_CUSTOMIZETOOLBAR );
+ sal_uInt16 nPos = aQuickCustomizationMenu->GetItemPos( MENUITEM_TOOLBAR_CUSTOMIZETOOLBAR );
if ( nPos != MENU_ITEM_NOTFOUND )
- aQuickCustomizationMenu.RemoveItem( nPos );
+ aQuickCustomizationMenu->RemoveItem( nPos );
}
// copy all menu items 'Visible buttons, Customize toolbar, Dock toolbar,
@@ -1497,21 +1496,21 @@ bool ToolBarManager::MenuItemAllowed( sal_uInt16 ) const
pMenu->InsertSeparator();
sal_uInt16 i;
- for( i=0; i< aQuickCustomizationMenu.GetItemCount(); i++)
+ for( i=0; i< aQuickCustomizationMenu->GetItemCount(); i++)
{
- sal_uInt16 nId = aQuickCustomizationMenu.GetItemId( i );
+ sal_uInt16 nId = aQuickCustomizationMenu->GetItemId( i );
if ( MenuItemAllowed( nId ))
- pMenu->CopyItem( aQuickCustomizationMenu, i );
+ pMenu->CopyItem( *aQuickCustomizationMenu.get(), i );
}
// set submenu to toolbar menu
- if( aQuickCustomizationMenu.GetPopupMenu( 1 ) )
+ if( aQuickCustomizationMenu->GetPopupMenu( 1 ) )
{
// create an own submenu to avoid auto-delete when resource menu is deleted
- ::PopupMenu *pItemMenu = new ::PopupMenu();
+ VclPtr<::PopupMenu> pItemMenu = VclPtr<::PopupMenu>::Create();
- for( i=0; i< aQuickCustomizationMenu.GetPopupMenu( 1 )->GetItemCount(); i++)
- pItemMenu->CopyItem( *aQuickCustomizationMenu.GetPopupMenu( 1 ), i );
+ for( i=0; i< aQuickCustomizationMenu->GetPopupMenu( 1 )->GetItemCount(); i++)
+ pItemMenu->CopyItem( *aQuickCustomizationMenu->GetPopupMenu( 1 ), i );
pMenu->SetPopupMenu( 1, pItemMenu );
}
diff --git a/include/framework/addonmenu.hxx b/include/framework/addonmenu.hxx
index b909d61099e8..fec0de71b894 100644
--- a/include/framework/addonmenu.hxx
+++ b/include/framework/addonmenu.hxx
@@ -39,6 +39,7 @@ class FWE_DLLPUBLIC AddonMenu : public PopupMenu
public:
AddonMenu( const css::uno::Reference< css::frame::XFrame >& rFrame );
virtual ~AddonMenu();
+ virtual void dispose() override;
protected:
css::uno::Reference< css::frame::XFrame > m_xFrame;
@@ -62,6 +63,7 @@ class FWE_DLLPUBLIC AddonPopupMenu : public AddonMenu
OUString m_aCommandURL;
friend class AddonMenuManager;
+ friend class ::VclPtr<AddonPopupMenu>;
};
class FWE_DLLPUBLIC AddonMenuManager
@@ -81,10 +83,10 @@ class FWE_DLLPUBLIC AddonMenuManager
static bool IsCorrectContext(const OUString& rModuleIdentifier, const OUString& rContext);
// Factory method to create different Add-On menu types
- static PopupMenu* CreatePopupMenuType( MenuType eMenuType, const css::uno::Reference< css::frame::XFrame >& rFrame );
+ static VclPtr<PopupMenu> CreatePopupMenuType( MenuType eMenuType, const css::uno::Reference< css::frame::XFrame >& rFrame );
// Create the Add-Ons menu
- static AddonMenu* CreateAddonMenu( const css::uno::Reference< css::frame::XFrame >& rFrame,
+ static VclPtr<AddonMenu> CreateAddonMenu( const css::uno::Reference< css::frame::XFrame >& rFrame,
const css::uno::Reference< css::uno::XComponentContext >& rContext );
// Merge the Add-Ons help menu items into the given menu bar at a defined pos
diff --git a/include/sfx2/sidebar/SidebarController.hxx b/include/sfx2/sidebar/SidebarController.hxx
index 76342726d299..cbed84e174cb 100644
--- a/include/sfx2/sidebar/SidebarController.hxx
+++ b/include/sfx2/sidebar/SidebarController.hxx
@@ -237,7 +237,7 @@ private:
void ShowPopupMenu (
const Rectangle& rButtonBox,
const ::std::vector<TabBar::DeckMenuData>& rMenuData) const;
- std::shared_ptr<PopupMenu> CreatePopupMenu (
+ VclPtr<PopupMenu> CreatePopupMenu (
const ::std::vector<TabBar::DeckMenuData>& rMenuData) const;
DECL_LINK_TYPED(OnMenuItemSelected, Menu*, bool);
void BroadcastPropertyChange();
diff --git a/include/sfx2/templatedlg.hxx b/include/sfx2/templatedlg.hxx
index 3b7f2b914583..eeec07c9bee0 100644
--- a/include/sfx2/templatedlg.hxx
+++ b/include/sfx2/templatedlg.hxx
@@ -155,9 +155,9 @@ protected:
VclPtr<TemplateAbstractView> mpCurView;
VclPtr<TemplateLocalView> mpLocalView;
VclPtr<TemplateRemoteView> mpRemoteView;
- PopupMenu *mpActionMenu;
- PopupMenu *mpRepositoryMenu;
- PopupMenu *mpTemplateDefaultMenu;
+ VclPtr<PopupMenu> mpActionMenu;
+ VclPtr<PopupMenu> mpRepositoryMenu;
+ VclPtr<PopupMenu> mpTemplateDefaultMenu;
std::set<const ThumbnailViewItem*,selection_cmp_fn> maSelTemplates;
diff --git a/include/sfx2/viewsh.hxx b/include/sfx2/viewsh.hxx
index b46b09249012..fba08dfead2b 100644
--- a/include/sfx2/viewsh.hxx
+++ b/include/sfx2/viewsh.hxx
@@ -282,7 +282,7 @@ public:
css::uno::Reference< css::frame::XController >
GetController();
- bool TryContextMenuInterception( Menu& rIn, const OUString& rMenuIdentifier, Menu*& rpOut, css::ui::ContextMenuExecuteEvent aEvent );
+ bool TryContextMenuInterception( Menu& rIn, const OUString& rMenuIdentifier, VclPtr<Menu>& rpOut, css::ui::ContextMenuExecuteEvent aEvent );
bool TryContextMenuInterception( Menu& rMenu, const OUString& rMenuIdentifier, css::ui::ContextMenuExecuteEvent aEvent );
void ExecPrint( const css::uno::Sequence < css::beans::PropertyValue >&, bool, bool );
diff --git a/include/svtools/treelistbox.hxx b/include/svtools/treelistbox.hxx
index 88d39dfa3871..942170317d3c 100644
--- a/include/svtools/treelistbox.hxx
+++ b/include/svtools/treelistbox.hxx
@@ -775,7 +775,7 @@ public:
void ShowFocusRect( const SvTreeListEntry* pEntry );
void InitStartEntry();
- virtual std::unique_ptr<PopupMenu> CreateContextMenu();
+ virtual VclPtr<PopupMenu> CreateContextMenu();
virtual void ExecuteContextMenuAction( sal_uInt16 nSelectedPopupEntry );
void EnableContextMenuHandling();
diff --git a/include/svx/clipboardctl.hxx b/include/svx/clipboardctl.hxx
index f244d32be7fb..931b3d21b51c 100644
--- a/include/svx/clipboardctl.hxx
+++ b/include/svx/clipboardctl.hxx
@@ -33,7 +33,7 @@ class SvxClipboardFormatItem;
class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxClipBoardControl : public SfxToolBoxControl
{
SfxPoolItem* pClipboardFmtItem;
- PopupMenu* pPopup;
+ VclPtr<PopupMenu> pPopup;
bool bDisabled;
void DelPopup();
diff --git a/include/toolkit/awt/vclxmenu.hxx b/include/toolkit/awt/vclxmenu.hxx
index d092692a0110..e042e014ea14 100644
--- a/include/toolkit/awt/vclxmenu.hxx
+++ b/include/toolkit/awt/vclxmenu.hxx
@@ -33,6 +33,7 @@
#include <osl/mutex.hxx>
#include <tools/link.hxx>
+#include <vcl/vclptr.hxx>
#include <vector>
@@ -59,7 +60,7 @@ class TOOLKIT_DLLPUBLIC VCLXMenu : public css::awt::XMenuBar,
{
private:
::osl::Mutex maMutex;
- Menu* mpMenu;
+ VclPtr<Menu> mpMenu;
MenuListenerMultiplexer maMenuListeners;
PopupMenuRefList maPopupMenuRefs;
diff --git a/include/vcl/builder.hxx b/include/vcl/builder.hxx
index 928e51229677..8c50feeb2831 100644
--- a/include/vcl/builder.hxx
+++ b/include/vcl/builder.hxx
@@ -156,12 +156,9 @@ private:
struct MenuAndId
{
OString m_sID;
- PopupMenu *m_pMenu;
- MenuAndId(const OString &rId, PopupMenu *pMenu)
- : m_sID(rId)
- , m_pMenu(pMenu)
- {
- }
+ VclPtr<PopupMenu> m_pMenu;
+ MenuAndId(const OString &rId, PopupMenu *pMenu);
+ ~MenuAndId();
};
std::vector<MenuAndId> m_aMenus;
diff --git a/include/vcl/edit.hxx b/include/vcl/edit.hxx
index 357dc6af7de2..4c9424c4c549 100644
--- a/include/vcl/edit.hxx
+++ b/include/vcl/edit.hxx
@@ -265,8 +265,7 @@ public:
static void SetGetSpecialCharsFunction( FncGetSpecialChars fn );
static FncGetSpecialChars GetGetSpecialCharsFunction();
- static PopupMenu* CreatePopupMenu();
- static void DeletePopupMenu( PopupMenu* pMenu );
+ static VclPtr<PopupMenu> CreatePopupMenu();
virtual OUString GetSurroundingText() const override;
virtual Selection GetSurroundingTextSelection() const override;
diff --git a/include/vcl/menu.hxx b/include/vcl/menu.hxx
index c4fa65b151c3..81bb0c5c7a59 100644
--- a/include/vcl/menu.hxx
+++ b/include/vcl/menu.hxx
@@ -28,6 +28,7 @@
#include <vcl/dllapi.h>
#include <vcl/bitmapex.hxx>
#include <vcl/keycod.hxx>
+#include <vcl/vclreferencebase.hxx>
#include <vcl/vclevent.hxx>
#include <com/sun/star/frame/XFrame.hpp>
#include <com/sun/star/uno/Reference.hxx>
@@ -104,7 +105,7 @@ namespace o3tl
struct ImplMenuDelData
{
ImplMenuDelData* mpNext;
- const Menu* mpMenu;
+ VclPtr<const Menu> mpMenu;
explicit ImplMenuDelData( const Menu* );
~ImplMenuDelData();
@@ -121,7 +122,7 @@ struct MenuLogo
typedef void (*MenuUserDataReleaseFunction)(sal_uLong);
-class VCL_DLLPUBLIC Menu : public Resource
+class VCL_DLLPUBLIC Menu : public Resource, public VclReferenceBase
{
friend class MenuBar;
friend class MenuBarWindow;
@@ -134,7 +135,7 @@ private:
ImplMenuDelData* mpFirstDel;
MenuItemList* pItemList; // Liste mit den MenuItems
MenuLogo* pLogo;
- Menu* pStartedFrom;
+ VclPtr<Menu> pStartedFrom;
VclPtr<vcl::Window> pWindow;
Link<Menu*, bool> aActivateHdl; // Active-Handler
@@ -230,6 +231,7 @@ protected:
public:
virtual ~Menu();
+ virtual void dispose() override;
void Activate();
void Deactivate();
@@ -432,6 +434,7 @@ public:
MenuBar();
MenuBar( const MenuBar& rMenu );
virtual ~MenuBar();
+ virtual void dispose() override;
MenuBar& operator =( const MenuBar& rMenu );
@@ -467,7 +470,7 @@ public:
{
sal_uInt16 nId; // Id of the button
bool bHighlight; // highlight on/off
- MenuBar* pMenuBar; // menubar the button belongs to
+ VclPtr<MenuBar> pMenuBar; // menubar the button belongs to
};
// add an arbitrary button to the menubar (will appear next to closer)
// passed link will be call with a MenuBarButtonCallbackArg on press
@@ -498,7 +501,7 @@ class VCL_DLLPUBLIC PopupMenu : public Menu
friend struct MenuItemData;
private:
- Menu** pRefAutoSubMenu; // keeps track if a pointer to this Menu is stored in the MenuItemData
+ VclPtr<Menu>* pRefAutoSubMenu; // keeps track if a pointer to this Menu is stored in the MenuItemData
SAL_DLLPRIVATE MenuFloatingWindow * ImplGetFloatingWindow() const;
@@ -513,6 +516,7 @@ public:
PopupMenu( const PopupMenu& rMenu );
explicit PopupMenu( const ResId& );
virtual ~PopupMenu();
+ virtual void dispose() override;
virtual bool IsMenuBar() const override { return false; }
diff --git a/include/vcl/menubtn.hxx b/include/vcl/menubtn.hxx
index 5f791cb1c5d2..8d8438fac58b 100644
--- a/include/vcl/menubtn.hxx
+++ b/include/vcl/menubtn.hxx
@@ -36,8 +36,8 @@ private:
friend class VclBuilder;
Timer* mpMenuTimer;
- PopupMenu* mpOwnMenu;
- PopupMenu* mpMenu;
+ VclPtr<PopupMenu> mpOwnMenu;
+ VclPtr<PopupMenu> mpMenu;
sal_uInt16 mnCurItemId;
sal_uInt16 mnMenuMode;
Link<MenuButton*,void> maActivateHdl;
diff --git a/include/vcl/syswin.hxx b/include/vcl/syswin.hxx
index fd09ad9cc692..cbd2a9c2f010 100644
--- a/include/vcl/syswin.hxx
+++ b/include/vcl/syswin.hxx
@@ -151,7 +151,7 @@ class VCL_DLLPUBLIC SystemWindow
class ImplData;
private:
- MenuBar* mpMenuBar;
+ VclPtr<MenuBar> mpMenuBar;
Size maOrgSize;
Size maRollUpOutSize;
Size maMinOutSize;
diff --git a/include/vcl/vclevent.hxx b/include/vcl/vclevent.hxx
index 83bcd5721009..b37605428ab5 100644
--- a/include/vcl/vclevent.hxx
+++ b/include/vcl/vclevent.hxx
@@ -222,14 +222,14 @@ public:
class VCL_DLLPUBLIC VclMenuEvent : public VclSimpleEvent
{
private:
- Menu* pMenu;
+ VclPtr<Menu> pMenu;
sal_uInt16 mnPos;
public:
- VclMenuEvent( Menu* pM, sal_uLong n, sal_uInt16 nPos ) : VclSimpleEvent(n) { pMenu = pM; mnPos = nPos; }
- virtual ~VclMenuEvent() {}
+ VclMenuEvent( Menu* pM, sal_uLong n, sal_uInt16 nPos );
+ virtual ~VclMenuEvent();
- Menu* GetMenu() const { return pMenu; }
+ Menu* GetMenu() const;
sal_uInt16 GetItemPos() const { return mnPos; }
};
diff --git a/reportdesign/source/ui/dlg/GroupsSorting.cxx b/reportdesign/source/ui/dlg/GroupsSorting.cxx
index 83b28b2b8f9e..fdd00a77f12f 100644
--- a/reportdesign/source/ui/dlg/GroupsSorting.cxx
+++ b/reportdesign/source/ui/dlg/GroupsSorting.cxx
@@ -717,7 +717,7 @@ void OFieldExpressionControl::Command(const CommandEvent& rEvt)
if ( nColId == HANDLE_ID )
{
- PopupMenu aContextMenu(ModuleRes(RID_GROUPSROWPOPUPMENU));
+ ScopedVclPtrInstance<PopupMenu> aContextMenu(ModuleRes(RID_GROUPSROWPOPUPMENU));
bool bEnable = false;
long nIndex = FirstSelectedRow();
while( nIndex >= 0 && !bEnable )
@@ -726,8 +726,8 @@ void OFieldExpressionControl::Command(const CommandEvent& rEvt)
bEnable = true;
nIndex = NextSelectedRow();
}
- aContextMenu.EnableItem( SID_DELETE, IsDeleteAllowed() && bEnable );
- switch (aContextMenu.Execute(this, rEvt.GetMousePosPixel()))
+ aContextMenu->EnableItem( SID_DELETE, IsDeleteAllowed() && bEnable );
+ switch (aContextMenu->Execute(this, rEvt.GetMousePosPixel()))
{
case SID_CUT:
cut();
diff --git a/reportdesign/source/ui/dlg/Navigator.cxx b/reportdesign/source/ui/dlg/Navigator.cxx
index 04138843284b..da0e0faa5ee9 100644
--- a/reportdesign/source/ui/dlg/Navigator.cxx
+++ b/reportdesign/source/ui/dlg/Navigator.cxx
@@ -306,27 +306,27 @@ void NavigatorTree::Command( const CommandEvent& rEvt )
uno::Reference< report::XGroup> xGroup(pData->getContent(),uno::UNO_QUERY);
bool bDeleteAllowed = m_rController.isEditable() && (xGroup.is() ||
uno::Reference< report::XFunction>(pData->getContent(),uno::UNO_QUERY).is());
- PopupMenu aContextMenu( ModuleRes( RID_MENU_NAVIGATOR ) );
+ ScopedVclPtrInstance<PopupMenu> aContextMenu( ModuleRes( RID_MENU_NAVIGATOR ) );
- sal_uInt16 nCount = aContextMenu.GetItemCount();
+ sal_uInt16 nCount = aContextMenu->GetItemCount();
for (sal_uInt16 i = 0; i < nCount; ++i)
{
- if ( MenuItemType::SEPARATOR != aContextMenu.GetItemType(i))
+ if ( MenuItemType::SEPARATOR != aContextMenu->GetItemType(i))
{
- sal_uInt16 nId = aContextMenu.GetItemId(i);
+ sal_uInt16 nId = aContextMenu->GetItemId(i);
- aContextMenu.CheckItem(nId,m_rController.isCommandChecked(nId));
+ aContextMenu->CheckItem(nId,m_rController.isCommandChecked(nId));
bool bEnabled = m_rController.isCommandEnabled(nId);
if ( nId == SID_RPT_NEW_FUNCTION )
- aContextMenu.EnableItem(nId,m_rController.isEditable() && (xSupplier.is() || xFunctions.is()) );
+ aContextMenu->EnableItem(nId,m_rController.isEditable() && (xSupplier.is() || xFunctions.is()) );
// special condition, check for function and group
else if ( nId == SID_DELETE )
- aContextMenu.EnableItem(SID_DELETE,bDeleteAllowed);
+ aContextMenu->EnableItem(SID_DELETE,bDeleteAllowed);
else
- aContextMenu.EnableItem(nId,bEnabled);
+ aContextMenu->EnableItem(nId,bEnabled);
}
}
- sal_uInt16 nId = aContextMenu.Execute(this, aWhere);
+ sal_uInt16 nId = aContextMenu->Execute(this, aWhere);
if ( nId )
{
uno::Sequence< beans::PropertyValue> aArgs;
diff --git a/reportdesign/source/ui/report/ReportSection.cxx b/reportdesign/source/ui/report/ReportSection.cxx
index 45665663c3d9..ce723b9a19fb 100644
--- a/reportdesign/source/ui/report/ReportSection.cxx
+++ b/reportdesign/source/ui/report/ReportSection.cxx
@@ -477,14 +477,14 @@ void OReportSection::Command( const CommandEvent& _rCEvt )
{
OReportController& rController = m_pParent->getViewsWindow()->getView()->getReportView()->getController();
uno::Reference<frame::XFrame> xFrame = rController.getFrame();
- PopupMenu aContextMenu( ModuleRes( RID_MENU_REPORT ) );
+ ScopedVclPtrInstance<PopupMenu> aContextMenu( ModuleRes( RID_MENU_REPORT ) );
uno::Reference< report::XReportDefinition> xReportDefinition = getSection()->getReportDefinition();
- lcl_insertMenuItemImages(aContextMenu,rController,xReportDefinition,xFrame);
+ lcl_insertMenuItemImages(*aContextMenu.get(),rController,xReportDefinition,xFrame);
Point aPos = _rCEvt.GetMousePosPixel();
m_pView->EndAction();
- const sal_uInt16 nId = aContextMenu.Execute(this, aPos);
+ const sal_uInt16 nId = aContextMenu->Execute(this, aPos);
if ( nId )
{
uno::Sequence< beans::PropertyValue> aArgs;
diff --git a/sc/source/ui/dbgui/csvgrid.cxx b/sc/source/ui/dbgui/csvgrid.cxx
index e2a8ec2b75e8..850453b0d671 100644
--- a/sc/source/ui/dbgui/csvgrid.cxx
+++ b/sc/source/ui/dbgui/csvgrid.cxx
@@ -78,7 +78,7 @@ ScCsvGrid::ScCsvGrid( ScCsvControl& rParent ) :
mpEditEngine->SetRefMapMode( MapMode( MAP_PIXEL ) );
maEdEngSize = mpEditEngine->GetPaperSize();
- maPopup.SetMenuFlags( maPopup.GetMenuFlags() | MenuFlags::NoAutoMnemonics );
+ mpPopup->SetMenuFlags( mpPopup->GetMenuFlags() | MenuFlags::NoAutoMnemonics );
EnableRTL( false ); // RTL
InitFonts();
@@ -505,12 +505,12 @@ void ScCsvGrid::SetTypeNames( const std::vector<OUString>& rTypeNames )
maTypeNames = rTypeNames;
Repaint( true );
- maPopup.Clear();
+ mpPopup->Clear();
sal_uInt32 nCount = maTypeNames.size();
sal_uInt32 nIx;
sal_uInt16 nItemId;
for( nIx = 0, nItemId = 1; nIx < nCount; ++nIx, ++nItemId )
- maPopup.InsertItem( nItemId, maTypeNames[ nIx ] );
+ mpPopup->InsertItem( nItemId, maTypeNames[ nIx ] );
::std::for_each( maColStates.begin(), maColStates.end(), Func_SetType( CSV_TYPE_DEFAULT ) );
}
@@ -582,9 +582,9 @@ void ScCsvGrid::ScrollVertRel( ScMoveMode eDir )
void ScCsvGrid::ExecutePopup( const Point& rPos )
{
- sal_uInt16 nItemId = maPopup.Execute( this, rPos );
+ sal_uInt16 nItemId = mpPopup->Execute( this, rPos );
if( nItemId ) // 0 = cancelled
- Execute( CSVCMD_SETCOLUMNTYPE, maPopup.GetItemPos( nItemId ) );
+ Execute( CSVCMD_SETCOLUMNTYPE, mpPopup->GetItemPos( nItemId ) );
}
// selection handling ---------------------------------------------------------
diff --git a/sc/source/ui/inc/csvgrid.hxx b/sc/source/ui/inc/csvgrid.hxx
index 772ef361d9ba..63e20131eef7 100644
--- a/sc/source/ui/inc/csvgrid.hxx
+++ b/sc/source/ui/inc/csvgrid.hxx
@@ -62,7 +62,7 @@ private:
VclPtr<VirtualDevice> mpBackgrDev; /// Grid background, headers, cell texts.
VclPtr<VirtualDevice> mpGridDev; /// Data grid with selection and cursor.
- PopupMenu maPopup; /// Popup menu for column types.
+ VclPtr<PopupMenu> mpPopup; /// Popup menu for column types.
::svtools::ColorConfig* mpColorConfig; /// Application color configuration.
Color maBackColor; /// Cell background color.
diff --git a/sc/source/ui/inc/tphfedit.hxx b/sc/source/ui/inc/tphfedit.hxx
index fcb829f0472e..31c331c7ad17 100644
--- a/sc/source/ui/inc/tphfedit.hxx
+++ b/sc/source/ui/inc/tphfedit.hxx
@@ -104,7 +104,7 @@ class SC_DLLPUBLIC ScExtIButton : public ImageButton
private:
Idle aIdle;
- PopupMenu* pPopupMenu;
+ VclPtr<PopupMenu> pPopupMenu;
Link<ScExtIButton&,void> aMLink;
sal_uInt16 nSelected;
OString aSelectedIdent;
@@ -122,6 +122,8 @@ protected:
public:
ScExtIButton(vcl::Window* pParent, WinBits nBits );
+ virtual ~ScExtIButton();
+ virtual void dispose() override;
void SetPopupMenu(PopupMenu* pPopUp);
diff --git a/sc/source/ui/miscdlgs/acredlin.cxx b/sc/source/ui/miscdlgs/acredlin.cxx
index 407bd39e4003..3121b36ee381 100644
--- a/sc/source/ui/miscdlgs/acredlin.cxx
+++ b/sc/source/ui/miscdlgs/acredlin.cxx
@@ -1676,9 +1676,9 @@ IMPL_LINK_NOARG_TYPED(ScAcceptChgDlg, CommandHdl, SvSimpleTable*, void)
if(aCEvt.GetCommand()==CommandEventId::ContextMenu)
{
- ScPopupMenu aPopup(ScResId(RID_POPUP_CHANGES));
+ ScopedVclPtrInstance<ScPopupMenu> aPopup(ScResId(RID_POPUP_CHANGES));
- aPopup.SetMenuFlags(MenuFlags::HideDisabledEntries);
+ aPopup->SetMenuFlags(MenuFlags::HideDisabledEntries);
SvTreeListEntry* pEntry=pTheView->GetCurEntry();
if(pEntry!=nullptr)
@@ -1687,7 +1687,7 @@ IMPL_LINK_NOARG_TYPED(ScAcceptChgDlg, CommandHdl, SvSimpleTable*, void)
}
else
{
- aPopup.Deactivate();
+ aPopup->Deactivate();
}
sal_uInt16 nSortedCol= pTheView->GetSortedCol();
@@ -1696,15 +1696,15 @@ IMPL_LINK_NOARG_TYPED(ScAcceptChgDlg, CommandHdl, SvSimpleTable*, void)
{
sal_uInt16 nItemId=nSortedCol+SC_SUB_SORT+1;
- aPopup.CheckItem(nItemId);
+ aPopup->CheckItem(nItemId);
- PopupMenu *pSubMenu = aPopup.GetPopupMenu(SC_SUB_SORT);
+ PopupMenu *pSubMenu = aPopup->GetPopupMenu(SC_SUB_SORT);
if (pSubMenu)
pSubMenu->CheckItem(nItemId);
}
- aPopup.EnableItem(SC_CHANGES_COMMENT,false);
+ aPopup->EnableItem(SC_CHANGES_COMMENT,false);
if(pDoc->IsDocEditable() && pEntry!=nullptr)
{
@@ -1714,11 +1714,11 @@ IMPL_LINK_NOARG_TYPED(ScAcceptChgDlg, CommandHdl, SvSimpleTable*, void)
ScChangeAction* pScChangeAction=
static_cast<ScChangeAction*>(pEntryData->pData);
if(pScChangeAction!=nullptr && !pTheView->GetParent(pEntry))
- aPopup.EnableItem(SC_CHANGES_COMMENT);
+ aPopup->EnableItem(SC_CHANGES_COMMENT);
}
}
- sal_uInt16 nCommand=aPopup.Execute( this, GetPointerPosPixel() );
+ sal_uInt16 nCommand = aPopup->Execute( this, GetPointerPosPixel() );
if(nCommand)
{
diff --git a/sc/source/ui/navipi/content.cxx b/sc/source/ui/navipi/content.cxx
index 7e7a04380575..1817750be525 100644
--- a/sc/source/ui/navipi/content.cxx
+++ b/sc/source/ui/navipi/content.cxx
@@ -579,16 +579,16 @@ void ScContentTree::Command( const CommandEvent& rCEvt )
{
// Drag-Drop Modus
- PopupMenu aPop;
- ScPopupMenu aDropMenu( ScResId( RID_POPUP_DROPMODE ) );
- aDropMenu.CheckItem( RID_DROPMODE_URL + pParentWindow->GetDropMode() );
- aPop.InsertItem( 1, pParentWindow->GetStrDragMode() );
- aPop.SetPopupMenu( 1, &aDropMenu );
+ ScopedVclPtrInstance<PopupMenu> aPop;
+ ScopedVclPtrInstance<ScPopupMenu> aDropMenu( ScResId( RID_POPUP_DROPMODE ) );
+ aDropMenu->CheckItem( RID_DROPMODE_URL + pParentWindow->GetDropMode() );
+ aPop->InsertItem( 1, pParentWindow->GetStrDragMode() );
+ aPop->SetPopupMenu( 1, aDropMenu.get() );
// angezeigtes Dokument
- ScPopupMenu aDocMenu;
- aDocMenu.SetMenuFlags( aDocMenu.GetMenuFlags() | MenuFlags::NoAutoMnemonics );
+ ScopedVclPtrInstance<ScPopupMenu> aDocMenu;
+ aDocMenu->SetMenuFlags( aDocMenu->GetMenuFlags() | MenuFlags::NoAutoMnemonics );
sal_uInt16 i=0;
sal_uInt16 nPos=0;
// geladene Dokumente
@@ -604,14 +604,14 @@ void ScContentTree::Command( const CommandEvent& rCEvt )
aEntry += pParentWindow->aStrActive;
else
aEntry += pParentWindow->aStrNotActive;
- aDocMenu.InsertItem( ++i, aEntry );
+ aDocMenu->InsertItem( ++i, aEntry );
if ( !bHiddenDoc && aName == aManualDoc )
nPos = i;
}
pSh = SfxObjectShell::GetNext( *pSh );
}
// "aktives Fenster"
- aDocMenu.InsertItem( ++i, pParentWindow->aStrActiveWin );
+ aDocMenu->InsertItem( ++i, pParentWindow->aStrActiveWin );
if (!bHiddenDoc && aManualDoc.isEmpty())
nPos = i;
// verstecktes Dokument
@@ -619,28 +619,28 @@ void ScContentTree::Command( const CommandEvent& rCEvt )
{
OUString aEntry = aHiddenTitle;
aEntry += pParentWindow->aStrHidden;
- aDocMenu.InsertItem( ++i, aEntry );
+ aDocMenu->InsertItem( ++i, aEntry );
if (bHiddenDoc)
nPos = i;
}
- aDocMenu.CheckItem( nPos );
- aPop.InsertItem( 2, pParentWindow->GetStrDisplay() );
- aPop.SetPopupMenu( 2, &aDocMenu );
+ aDocMenu->CheckItem( nPos );
+ aPop->InsertItem( 2, pParentWindow->GetStrDisplay() );
+ aPop->SetPopupMenu( 2, aDocMenu.get() );
// ausfuehren
- aPop.Execute( this, rCEvt.GetMousePosPixel() );
+ aPop->Execute( this, rCEvt.GetMousePosPixel() );
- if ( aDropMenu.WasHit() ) // Drag-Drop Modus
+ if ( aDropMenu->WasHit() ) // Drag-Drop Modus
{
- sal_uInt16 nId = aDropMenu.GetSelected();
+ sal_uInt16 nId = aDropMenu->GetSelected();
if ( nId >= RID_DROPMODE_URL && nId <= RID_DROPMODE_COPY )
pParentWindow->SetDropMode( nId - RID_DROPMODE_URL );
}
- else if ( aDocMenu.WasHit() ) // angezeigtes Dokument
+ else if ( aDocMenu->WasHit() ) // angezeigtes Dokument
{
- sal_uInt16 nId = aDocMenu.GetSelected();
- OUString aName = aDocMenu.GetItemText(nId);
+ sal_uInt16 nId = aDocMenu->GetSelected();
+ OUString aName = aDocMenu->GetItemText(nId);
SelectDoc( aName );
}
}
diff --git a/sc/source/ui/navipi/navipi.cxx b/sc/source/ui/navipi/navipi.cxx
index 12c81b72e8f8..ba592c67ed2c 100644
--- a/sc/source/ui/navipi/navipi.cxx
+++ b/sc/source/ui/navipi/navipi.cxx
@@ -390,10 +390,10 @@ IMPL_LINK_NOARG_TYPED(CommandToolBox, ToolBoxDropdownClickHdl, ToolBox *, void)
if ( GetCurItemId() == IID_DROPMODE )
{
- ScPopupMenu aPop( ScResId( RID_POPUP_DROPMODE ) );
- aPop.CheckItem( RID_DROPMODE_URL + rDlg.GetDropMode() );
- aPop.Execute( this, GetItemRect(IID_DROPMODE), PopupMenuFlags::ExecuteDown );
- sal_uInt16 nId = aPop.GetSelected();
+ ScopedVclPtrInstance<ScPopupMenu> aPop( ScResId( RID_POPUP_DROPMODE ) );
+ aPop->CheckItem( RID_DROPMODE_URL + rDlg.GetDropMode() );
+ aPop->Execute( this, GetItemRect(IID_DROPMODE), PopupMenuFlags::ExecuteDown );
+ sal_uInt16 nId = aPop->GetSelected();
EndSelection(); // bevore SetDropMode (SetDropMode calls SetItemImage)
diff --git a/sc/source/ui/navipi/scenwnd.cxx b/sc/source/ui/navipi/scenwnd.cxx
index eaa620a2451f..88347cb610c4 100644
--- a/sc/source/ui/navipi/scenwnd.cxx
+++ b/sc/source/ui/navipi/scenwnd.cxx
@@ -135,11 +135,11 @@ bool ScScenarioListBox::Notify( NotifyEvent& rNEvt )
{
if( !pEntry->mbProtected )
{
- ScPopupMenu aPopup( ScResId( RID_POPUP_NAVIPI_SCENARIO ) );
- aPopup.Execute( this, pCEvt->GetMousePosPixel() );
- if (aPopup.WasHit())
+ ScopedVclPtrInstance<ScPopupMenu> aPopup( ScResId( RID_POPUP_NAVIPI_SCENARIO ) );
+ aPopup->Execute( this, pCEvt->GetMousePosPixel() );
+ if (aPopup->WasHit())
{
- switch( aPopup.GetSelected() )
+ switch( aPopup->GetSelected() )
{
case RID_NAVIPI_SCENARIO_DELETE:
DeleteScenario();
diff --git a/sc/source/ui/pagedlg/tphfedit.cxx b/sc/source/ui/pagedlg/tphfedit.cxx
index f9eaeac73e0f..cb6335229a67 100644
--- a/sc/source/ui/pagedlg/tphfedit.cxx
+++ b/sc/source/ui/pagedlg/tphfedit.cxx
@@ -345,6 +345,17 @@ ScExtIButton::ScExtIButton(vcl::Window* pParent, WinBits nBits )
SetDropDown(PushButtonDropdownStyle::Toolbox);
}
+ScExtIButton::~ScExtIButton()
+{
+ disposeOnce();
+}
+
+void ScExtIButton::dispose()
+{
+ pPopupMenu.clear();
+ ImageButton::dispose();
+}
+
VCL_BUILDER_FACTORY_ARGS(ScExtIButton, 0 /* WB_BORDER|WB_TABSTOP */)
void ScExtIButton::SetPopupMenu(PopupMenu* pPopUp)
diff --git a/sc/source/ui/view/tabcont.cxx b/sc/source/ui/view/tabcont.cxx
index 6fa034c80165..0f7e43015641 100644
--- a/sc/source/ui/view/tabcont.cxx
+++ b/sc/source/ui/view/tabcont.cxx
@@ -86,7 +86,7 @@ ScTabControl::ScTabControl( vcl::Window* pParent, ScViewData* pData )
IMPL_LINK_TYPED(ScTabControl, ShowPageList, const CommandEvent &, rEvent, void)
{
- PopupMenu aPopup;
+ ScopedVclPtrInstance<PopupMenu> aPopup;
sal_uInt16 nCurPageId = GetCurPageId();
@@ -100,14 +100,14 @@ IMPL_LINK_TYPED(ScTabControl, ShowPageList, const CommandEvent &, rEvent, void)
if (pDoc->GetName(i, aString))
{
sal_uInt16 nId = static_cast<sal_uInt16>(i)+1;
- aPopup.InsertItem(nId, aString, MenuItemBits::CHECKABLE);
+ aPopup->InsertItem(nId, aString, MenuItemBits::CHECKABLE);
if (nId == nCurPageId)
- aPopup.CheckItem(nId);
+ aPopup->CheckItem(nId);
}
}
}
- sal_uInt16 nItemId = aPopup.Execute( this, rEvent.GetMousePosPixel() );
+ sal_uInt16 nItemId = aPopup->Execute( this, rEvent.GetMousePosPixel() );
SwitchToPageId(nItemId);
}
diff --git a/sd/source/ui/animations/CustomAnimationDialog.cxx b/sd/source/ui/animations/CustomAnimationDialog.cxx
index 21f61153feb7..434ef3867551 100644
--- a/sd/source/ui/animations/CustomAnimationDialog.cxx
+++ b/sd/source/ui/animations/CustomAnimationDialog.cxx
@@ -352,9 +352,9 @@ public:
void SetMenuSelectHdl( const Link<MenuButton *, void>& rLink ) { mpDropdownButton->SetSelectHdl( rLink ); }
private:
- VclPtr<Edit> mpSubControl;
+ VclPtr<Edit> mpSubControl;
VclPtr<MenuButton> mpDropdownButton;
- PopupMenu* mpMenu;
+ VclPtr<PopupMenu> mpMenu;
};
DropdownMenuBox::DropdownMenuBox( vcl::Window* pParent, Edit* pSubControl, PopupMenu* pMenu )
@@ -380,7 +380,7 @@ void DropdownMenuBox::dispose()
{
SetSubEdit(nullptr);
mpDropdownButton.disposeAndClear();
- delete mpMenu;
+ mpMenu.disposeAndClear();
mpSubControl.disposeAndClear();
Edit::dispose();
}
@@ -436,7 +436,7 @@ public:
private:
DECL_LINK_TYPED( EditModifyHdl, Edit&, void );
VclPtr<DropdownMenuBox> mpControl;
- PopupMenu* mpMenu;
+ VclPtr<PopupMenu> mpMenu;
VclPtr<MetricField> mpMetric;
Link<LinkParamNone*,void> maModifyHdl;
};
@@ -449,7 +449,7 @@ CharHeightPropertyBox::CharHeightPropertyBox( sal_Int32 nControlType, vcl::Windo
mpMetric->SetMin( 0 );
mpMetric->SetMax( 1000 );
- mpMenu = new PopupMenu(SdResId( RID_CUSTOMANIMATION_FONTSIZE_POPUP ) );
+ mpMenu = VclPtr<PopupMenu>::Create(SdResId( RID_CUSTOMANIMATION_FONTSIZE_POPUP ) );
mpControl = VclPtr<DropdownMenuBox>::Create( pParent, mpMetric, mpMenu );
mpControl->SetMenuSelectHdl( LINK( this, CharHeightPropertyBox, implMenuSelectHdl ));
mpControl->SetModifyHdl( LINK( this, CharHeightPropertyBox, EditModifyHdl ) );
@@ -521,7 +521,7 @@ public:
private:
VclPtr<DropdownMenuBox> mpControl;
- PopupMenu* mpMenu;
+ VclPtr<PopupMenu> mpMenu;
VclPtr<MetricField> mpMetric;
Link<LinkParamNone*,void> maModifyHdl;
};
@@ -535,7 +535,7 @@ TransparencyPropertyBox::TransparencyPropertyBox( sal_Int32 nControlType, vcl::W
mpMetric->SetMin( 0 );
mpMetric->SetMax( 100 );
- mpMenu = new PopupMenu();
+ mpMenu = VclPtr<PopupMenu>::Create();
for( sal_Int32 i = 25; i < 101; i += 25 )
{
OUString aStr(unicode::formatPercent(i,
@@ -621,7 +621,7 @@ public:
private:
VclPtr<DropdownMenuBox> mpControl;
- PopupMenu* mpMenu;
+ VclPtr<PopupMenu> mpMenu;
VclPtr<MetricField> mpMetric;
Link<LinkParamNone*,void> maModifyHdl;
};
@@ -636,7 +636,7 @@ RotationPropertyBox::RotationPropertyBox( sal_Int32 nControlType, vcl::Window* p
mpMetric->SetMin( -10000 );
mpMetric->SetMax( 10000 );
- mpMenu = new PopupMenu(SdResId( RID_CUSTOMANIMATION_ROTATION_POPUP ) );
+ mpMenu = VclPtr<PopupMenu>::Create(SdResId( RID_CUSTOMANIMATION_ROTATION_POPUP ) );
mpControl = VclPtr<DropdownMenuBox>::Create( pParent, mpMetric, mpMenu );
mpControl->SetMenuSelectHdl( LINK( this, RotationPropertyBox, implMenuSelectHdl ));
mpControl->SetHelpId( HID_SD_CUSTOMANIMATIONPANE_ROTATIONPROPERTYBOX );
@@ -742,7 +742,7 @@ public:
private:
VclPtr<DropdownMenuBox> mpControl;
- PopupMenu* mpMenu;
+ VclPtr<PopupMenu> mpMenu;
VclPtr<MetricField> mpMetric;
Link<LinkParamNone*,void> maModifyHdl;
int mnDirection;
@@ -757,7 +757,7 @@ ScalePropertyBox::ScalePropertyBox( sal_Int32 nControlType, vcl::Window* pParent
mpMetric->SetMin( 0 );
mpMetric->SetMax( 10000 );
- mpMenu = new PopupMenu(SdResId( RID_CUSTOMANIMATION_SCALE_POPUP ) );
+ mpMenu = VclPtr<PopupMenu>::Create(SdResId( RID_CUSTOMANIMATION_SCALE_POPUP ) );
mpControl = VclPtr<DropdownMenuBox>::Create( pParent, mpMetric, mpMenu );
mpControl->SetMenuSelectHdl( LINK( this, ScalePropertyBox, implMenuSelectHdl ));
mpControl->SetHelpId( HID_SD_CUSTOMANIMATIONPANE_SCALEPROPERTYBOX );
@@ -900,7 +900,7 @@ public:
private:
VclPtr<DropdownMenuBox> mpControl;
- PopupMenu* mpMenu;
+ VclPtr<PopupMenu> mpMenu;
VclPtr<Edit> mpEdit;
Link<LinkParamNone*,void> maModifyHdl;
@@ -916,7 +916,7 @@ FontStylePropertyBox::FontStylePropertyBox( sal_Int32 nControlType, vcl::Window*
mpEdit.set( VclPtr<Edit>::Create( pParent, WB_TABSTOP|WB_IGNORETAB|WB_NOBORDER|WB_READONLY) );
mpEdit->SetText( SD_RESSTR(STR_CUSTOMANIMATION_SAMPLE) );
- mpMenu = new PopupMenu(SdResId( RID_CUSTOMANIMATION_FONTSTYLE_POPUP ) );
+ mpMenu = VclPtr<PopupMenu>::Create(SdResId( RID_CUSTOMANIMATION_FONTSTYLE_POPUP ) );
mpControl = VclPtr<DropdownMenuBox>::Create( pParent, mpEdit, mpMenu );
mpControl->SetMenuSelectHdl( LINK( this, FontStylePropertyBox, implMenuSelectHdl ));
mpControl->SetHelpId( HID_SD_CUSTOMANIMATIONPANE_FONTSTYLEPROPERTYBOX );
diff --git a/sd/source/ui/animations/CustomAnimationList.cxx b/sd/source/ui/animations/CustomAnimationList.cxx
index e6a63faf53a8..b5875ddacbdd 100644
--- a/sd/source/ui/animations/CustomAnimationList.cxx
+++ b/sd/source/ui/animations/CustomAnimationList.cxx
@@ -906,10 +906,9 @@ bool CustomAnimationList::DoubleClickHdl()
return false;
}
-std::unique_ptr<PopupMenu> CustomAnimationList::CreateContextMenu()
+VclPtr<PopupMenu> CustomAnimationList::CreateContextMenu()
{
- std::unique_ptr<PopupMenu> pMenu(
- new PopupMenu(SdResId( RID_EFFECT_CONTEXTMENU )));
+ VclPtrInstance<PopupMenu> pMenu(SdResId( RID_EFFECT_CONTEXTMENU ));
sal_Int16 nNodeType = -1;
sal_Int16 nEntries = 0;
diff --git a/sd/source/ui/animations/CustomAnimationList.hxx b/sd/source/ui/animations/CustomAnimationList.hxx
index dcbbf6b42217..260668b5a364 100644
--- a/sd/source/ui/animations/CustomAnimationList.hxx
+++ b/sd/source/ui/animations/CustomAnimationList.hxx
@@ -76,7 +76,7 @@ public:
virtual void Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) override;
- virtual std::unique_ptr<PopupMenu> CreateContextMenu() override;
+ virtual VclPtr<PopupMenu> CreateContextMenu() override;
virtual void ExecuteContextMenuAction( sal_uInt16 nSelectedPopupEntry ) override;
virtual void KeyInput( const KeyEvent& rKEvt ) override;
diff --git a/sd/source/ui/annotations/annotationmanager.cxx b/sd/source/ui/annotations/annotationmanager.cxx
index 03f492521b5b..a8faea0ece7c 100644
--- a/sd/source/ui/annotations/annotationmanager.cxx
+++ b/sd/source/ui/annotations/annotationmanager.cxx
@@ -915,7 +915,7 @@ void AnnotationManagerImpl::ExecuteAnnotationContextMenu( const Reference< XAnno
if( bReadOnly && !pAnnotationWindow )
return;
- std::unique_ptr< PopupMenu > pMenu( new PopupMenu( SdResId( pAnnotationWindow ? RID_ANNOTATION_CONTEXTMENU : RID_ANNOTATION_TAG_CONTEXTMENU ) ) );
+ ScopedVclPtrInstance<PopupMenu> pMenu( SdResId( pAnnotationWindow ? RID_ANNOTATION_CONTEXTMENU : RID_ANNOTATION_TAG_CONTEXTMENU ) );
SvtUserOptions aUserOptions;
OUString sCurrentAuthor( aUserOptions.GetFullName() );
diff --git a/sd/source/ui/app/tmplctrl.cxx b/sd/source/ui/app/tmplctrl.cxx
index 78066ac0d657..c44eb1b69a83 100644
--- a/sd/source/ui/app/tmplctrl.cxx
+++ b/sd/source/ui/app/tmplctrl.cxx
@@ -104,7 +104,7 @@ void SdTemplateControl::Command( const CommandEvent& rCEvt )
if( !pDoc )
return;
- SdTemplatePopup_Impl aPop;
+ ScopedVclPtrInstance<SdTemplatePopup_Impl> aPop;
{
const sal_uInt16 nMasterCount = pDoc->GetMasterSdPageCount(PK_STANDARD);
@@ -113,11 +113,11 @@ void SdTemplateControl::Command( const CommandEvent& rCEvt )
{
SdPage* pMaster = pDoc->GetMasterSdPage(nPage, PK_STANDARD);
if( pMaster )
- aPop.InsertItem( ++nCount, pMaster->GetName() );
+ aPop->InsertItem( ++nCount, pMaster->GetName() );
}
- aPop.Execute( &GetStatusBar(), rCEvt.GetMousePosPixel());
+ aPop->Execute( &GetStatusBar(), rCEvt.GetMousePosPixel());
- sal_uInt16 nCurrId = aPop.GetCurId()-1;
+ sal_uInt16 nCurrId = aPop->GetCurId()-1;
if( nCurrId < nMasterCount )
{
SdPage* pMaster = pDoc->GetMasterSdPage(nCurrId, PK_STANDARD);
diff --git a/sd/source/ui/dlg/navigatr.cxx b/sd/source/ui/dlg/navigatr.cxx
index e6b5e52f677c..548015494ec6 100644
--- a/sd/source/ui/dlg/navigatr.cxx
+++ b/sd/source/ui/dlg/navigatr.cxx
@@ -294,7 +294,7 @@ IMPL_LINK_TYPED( SdNavigatorWin, DropdownClickToolBoxHdl, ToolBox*, pBox, void )
case TBI_DRAGTYPE:
{
// Popup menu is created depending if the document is saved or not
- PopupMenu *pMenu = new PopupMenu;
+ ScopedVclPtrInstance<PopupMenu> pMenu;
static const char* aHIDs[] =
{
@@ -331,13 +331,12 @@ IMPL_LINK_TYPED( SdNavigatorWin, DropdownClickToolBoxHdl, ToolBox*, pBox, void )
pMenu->Execute( this, maToolbox->GetItemRect( nId ), PopupMenuFlags::ExecuteDown );
pBox->EndSelection();
- delete pMenu;
}
break;
case TBI_SHAPE_FILTER:
{
- PopupMenu *pMenu = new PopupMenu;
+ ScopedVclPtrInstance<PopupMenu> pMenu;
pMenu->InsertItem(
nShowNamedShapesFilter,
@@ -354,7 +353,6 @@ IMPL_LINK_TYPED( SdNavigatorWin, DropdownClickToolBoxHdl, ToolBox*, pBox, void )
pMenu->Execute( this, maToolbox->GetItemRect( nId ), PopupMenuFlags::ExecuteDown );
pBox->EndSelection();
- delete pMenu;
}
break;
}
diff --git a/sd/source/ui/sidebar/LayoutMenu.cxx b/sd/source/ui/sidebar/LayoutMenu.cxx
index f9ba5cf6caba..df4767b34813 100644
--- a/sd/source/ui/sidebar/LayoutMenu.cxx
+++ b/sd/source/ui/sidebar/LayoutMenu.cxx
@@ -611,7 +611,7 @@ void LayoutMenu::Command (const CommandEvent& rEvent)
}
// Setup the menu.
- std::shared_ptr<PopupMenu> pMenu (new PopupMenu(SdResId(RID_TASKPANE_LAYOUTMENU_POPUP)));
+ ScopedVclPtrInstance<PopupMenu> pMenu(SdResId(RID_TASKPANE_LAYOUTMENU_POPUP));
FloatingWindow* pMenuWindow = dynamic_cast<FloatingWindow*>(pMenu->GetWindow());
if (pMenuWindow != nullptr)
pMenuWindow->SetPopupModeFlags(
diff --git a/sd/source/ui/sidebar/MasterPagesSelector.cxx b/sd/source/ui/sidebar/MasterPagesSelector.cxx
index 88491e0be134..f04d11361cff 100644
--- a/sd/source/ui/sidebar/MasterPagesSelector.cxx
+++ b/sd/source/ui/sidebar/MasterPagesSelector.cxx
@@ -221,7 +221,7 @@ void MasterPagesSelector::Command (const CommandEvent& rEvent)
}
// Setup the menu.
- std::unique_ptr<PopupMenu> pMenu (new PopupMenu(GetContextMenuResId()));
+ ScopedVclPtrInstance<PopupMenu> pMenu(GetContextMenuResId());
FloatingWindow* pMenuWindow = dynamic_cast<FloatingWindow*>(pMenu->GetWindow());
if (pMenuWindow != nullptr)
pMenuWindow->SetPopupModeFlags(
diff --git a/sd/source/ui/slideshow/slideshowimpl.cxx b/sd/source/ui/slideshow/slideshowimpl.cxx
index 2b031ea59b95..ade2ef6f918a 100644
--- a/sd/source/ui/slideshow/slideshowimpl.cxx
+++ b/sd/source/ui/slideshow/slideshowimpl.cxx
@@ -1985,7 +1985,7 @@ IMPL_LINK_NOARG_TYPED(SlideshowImpl, ContextMenuHdl, void*, void)
if( !mbWasPaused )
pause();
- PopupMenu* pMenu = new PopupMenu( SdResId( RID_SLIDESHOW_CONTEXTMENU ) );
+ VclPtrInstance<PopupMenu> pMenu( SdResId( RID_SLIDESHOW_CONTEXTMENU ) );
// Adding button to display if in Pen mode
pMenu->CheckItem( CM_PEN_MODE, mbUsePen);
@@ -2098,7 +2098,7 @@ IMPL_LINK_NOARG_TYPED(SlideshowImpl, ContextMenuHdl, void*, void)
pMenu->SetSelectHdl( LINK( this, SlideshowImpl, ContextMenuSelectHdl ) );
pMenu->Execute( mpShowWindow, maPopupMousePos );
- delete pMenu;
+ pMenu.disposeAndClear();
if( mxView.is() )
mxView->ignoreNextMouseReleased();
diff --git a/sd/source/ui/view/drviews4.cxx b/sd/source/ui/view/drviews4.cxx
index 53963102144b..fc2360803384 100644
--- a/sd/source/ui/view/drviews4.cxx
+++ b/sd/source/ui/view/drviews4.cxx
@@ -556,15 +556,15 @@ void DrawViewShell::Command(const CommandEvent& rCEvt, ::sd::Window* pWin)
//fdo#44998 if the outliner has captured the mouse events release the lock
//so the SdFieldPopup can get them
pOLV->ReleaseMouse();
- SdFieldPopup aFieldPopup( pFldItem->GetField(), eLanguage );
+ ScopedVclPtrInstance<SdFieldPopup> aFieldPopup( pFldItem->GetField(), eLanguage );
if ( rCEvt.IsMouseEvent() )
aMPos = rCEvt.GetMousePosPixel();
else
aMPos = Point( 20, 20 );
- aFieldPopup.Execute( pWin, aMPos );
+ aFieldPopup->Execute( pWin, aMPos );
- std::unique_ptr<SvxFieldData> pField(aFieldPopup.GetField());
+ std::unique_ptr<SvxFieldData> pField(aFieldPopup->GetField());
if( pField )
{
SvxFieldItem aFieldItem( *pField, EE_FEATURE_FIELD );
@@ -876,7 +876,7 @@ void DrawViewShell::ShowSnapLineContextMenu (
const Point& rMouseLocation)
{
const SdrHelpLine& rHelpLine (rPageView.GetHelpLines()[nSnapLineIndex]);
- std::unique_ptr<PopupMenu> pMenu (new PopupMenu ());
+ ScopedVclPtrInstance<PopupMenu> pMenu;
if (rHelpLine.GetKind() == SDRHELPLINE_POINT)
{
diff --git a/sfx2/source/appl/newhelp.cxx b/sfx2/source/appl/newhelp.cxx
index 9c85b166279c..69d360bb369a 100644
--- a/sfx2/source/appl/newhelp.cxx
+++ b/sfx2/source/appl/newhelp.cxx
@@ -1249,8 +1249,8 @@ bool BookmarksBox_Impl::Notify( NotifyEvent& rNEvt )
const CommandEvent* pCEvt = rNEvt.GetCommandEvent();
if ( pCEvt->GetCommand() == CommandEventId::ContextMenu )
{
- PopupMenu aMenu( SfxResId( MENU_HELP_BOOKMARKS ) );
- sal_uInt16 nId = aMenu.Execute( this, pCEvt->GetMousePosPixel() );
+ ScopedVclPtrInstance<PopupMenu> aMenu( SfxResId( MENU_HELP_BOOKMARKS ) );
+ sal_uInt16 nId = aMenu->Execute( this, pCEvt->GetMousePosPixel() );
if ( nId != MENU_ITEM_NOTFOUND )
DoAction( nId );
bRet = true;
@@ -2339,50 +2339,50 @@ bool SfxHelpTextWindow_Impl::PreNotify( NotifyEvent& rNEvt )
else
aPos = Point( pTextWin->GetPosPixel().X() + 20, 20 );
aPos.Y() += pTextWin->GetPosPixel().Y();
- PopupMenu aMenu;
+ ScopedVclPtrInstance<PopupMenu> aMenu;
if ( bIsIndexOn )
- aMenu.InsertItem( TBI_INDEX, aIndexOffText, Image( SfxResId( IMG_HELP_TOOLBOX_INDEX_OFF ) ) );
+ aMenu->InsertItem( TBI_INDEX, aIndexOffText, Image( SfxResId( IMG_HELP_TOOLBOX_INDEX_OFF ) ) );
else
- aMenu.InsertItem( TBI_INDEX, aIndexOnText, Image( SfxResId( IMG_HELP_TOOLBOX_INDEX_ON ) ) );
+ aMenu->InsertItem( TBI_INDEX, aIndexOnText, Image( SfxResId( IMG_HELP_TOOLBOX_INDEX_ON ) ) );
- aMenu.SetHelpId( TBI_INDEX, HID_HELP_TOOLBOXITEM_INDEX );
- aMenu.InsertSeparator();
- aMenu.InsertItem( TBI_BACKWARD,
+ aMenu->SetHelpId( TBI_INDEX, HID_HELP_TOOLBOXITEM_INDEX );
+ aMenu->InsertSeparator();
+ aMenu->InsertItem( TBI_BACKWARD,
SfxResId( STR_HELP_BUTTON_PREV ).toString(),
Image( SfxResId( IMG_HELP_TOOLBOX_PREV ) )
);
- aMenu.SetHelpId( TBI_BACKWARD, HID_HELP_TOOLBOXITEM_BACKWARD );
- aMenu.EnableItem( TBI_BACKWARD, pHelpWin->HasHistoryPredecessor() );
- aMenu.InsertItem( TBI_FORWARD,
+ aMenu->SetHelpId( TBI_BACKWARD, HID_HELP_TOOLBOXITEM_BACKWARD );
+ aMenu->EnableItem( TBI_BACKWARD, pHelpWin->HasHistoryPredecessor() );
+ aMenu->InsertItem( TBI_FORWARD,
SfxResId( STR_HELP_BUTTON_NEXT ).toString(),
Image( SfxResId( IMG_HELP_TOOLBOX_NEXT ) )
);
- aMenu.SetHelpId( TBI_FORWARD, HID_HELP_TOOLBOXITEM_FORWARD );
- aMenu.EnableItem( TBI_FORWARD, pHelpWin->HasHistorySuccessor() );
- aMenu.InsertItem( TBI_START,
+ aMenu->SetHelpId( TBI_FORWARD, HID_HELP_TOOLBOXITEM_FORWARD );
+ aMenu->EnableItem( TBI_FORWARD, pHelpWin->HasHistorySuccessor() );
+ aMenu->InsertItem( TBI_START,
SfxResId( STR_HELP_BUTTON_START ).toString(),
Image( SfxResId( IMG_HELP_TOOLBOX_START ) )
);
- aMenu.SetHelpId( TBI_START, HID_HELP_TOOLBOXITEM_START );
- aMenu.InsertSeparator();
- aMenu.InsertItem( TBI_PRINT,
+ aMenu->SetHelpId( TBI_START, HID_HELP_TOOLBOXITEM_START );
+ aMenu->InsertSeparator();
+ aMenu->InsertItem( TBI_PRINT,
SfxResId( STR_HELP_BUTTON_PRINT ).toString(),
Image( SfxResId( IMG_HELP_TOOLBOX_PRINT ) )
);
- aMenu.SetHelpId( TBI_PRINT, HID_HELP_TOOLBOXITEM_PRINT );
- aMenu.InsertItem( TBI_BOOKMARKS,
+ aMenu->SetHelpId( TBI_PRINT, HID_HELP_TOOLBOXITEM_PRINT );
+ aMenu->InsertItem( TBI_BOOKMARKS,
SfxResId( STR_HELP_BUTTON_ADDBOOKMARK ).toString(),
Image( SfxResId( IMG_HELP_TOOLBOX_BOOKMARKS ) )
);
- aMenu.SetHelpId( TBI_BOOKMARKS, HID_HELP_TOOLBOXITEM_BOOKMARKS );
- aMenu.InsertItem( TBI_SEARCHDIALOG,
+ aMenu->SetHelpId( TBI_BOOKMARKS, HID_HELP_TOOLBOXITEM_BOOKMARKS );
+ aMenu->InsertItem( TBI_SEARCHDIALOG,
SfxResId( STR_HELP_BUTTON_SEARCHDIALOG ).toString(),
Image( SfxResId( IMG_HELP_TOOLBOX_SEARCHDIALOG ) )
);
- aMenu.SetHelpId( TBI_SEARCHDIALOG, HID_HELP_TOOLBOXITEM_SEARCHDIALOG );
- aMenu.InsertSeparator();
- aMenu.InsertItem( TBI_SELECTIONMODE, SfxResId( STR_HELP_MENU_TEXT_SELECTION_MODE ).toString() );
- aMenu.SetHelpId( TBI_SELECTIONMODE, HID_HELP_TEXT_SELECTION_MODE );
+ aMenu->SetHelpId( TBI_SEARCHDIALOG, HID_HELP_TOOLBOXITEM_SEARCHDIALOG );
+ aMenu->InsertSeparator();
+ aMenu->InsertItem( TBI_SELECTIONMODE, SfxResId( STR_HELP_MENU_TEXT_SELECTION_MODE ).toString() );
+ aMenu->SetHelpId( TBI_SELECTIONMODE, HID_HELP_TEXT_SELECTION_MODE );
URL aURL;
aURL.Complete = ".uno:SelectTextMode";
Reference< util::XURLTransformer > xTrans( util::URLTransformer::create( ::comphelper::getProcessComponentContext() ) );
@@ -2396,26 +2396,26 @@ bool SfxHelpTextWindow_Impl::PreNotify( NotifyEvent& rNEvt )
FeatureStateEvent rEvent = pStateListener->GetStateEvent();
bool bCheck = false;
rEvent.State >>= bCheck;
- aMenu.CheckItem(TBI_SELECTIONMODE, bCheck);
+ aMenu->CheckItem(TBI_SELECTIONMODE, bCheck);
}
- aMenu.InsertSeparator();
- aMenu.InsertItem( TBI_COPY,
+ aMenu->InsertSeparator();
+ aMenu->InsertItem( TBI_COPY,
SfxResId(STR_HELP_MENU_TEXT_COPY).toString(),
Image( SfxResId( IMG_HELP_TOOLBOX_COPY ) )
);
- aMenu.SetHelpId( TBI_COPY, ".uno:Copy" );
- aMenu.EnableItem( TBI_COPY, HasSelection() );
+ aMenu->SetHelpId( TBI_COPY, ".uno:Copy" );
+ aMenu->EnableItem( TBI_COPY, HasSelection() );
if ( bIsDebug )
{
- aMenu.InsertSeparator();
- aMenu.InsertItem( TBI_SOURCEVIEW, SfxResId(STR_HELP_BUTTON_SOURCEVIEW).toString() );
+ aMenu->InsertSeparator();
+ aMenu->InsertItem( TBI_SOURCEVIEW, SfxResId(STR_HELP_BUTTON_SOURCEVIEW).toString() );
}
if( ! SvtMenuOptions().IsEntryHidingEnabled() )
- aMenu.SetMenuFlags( aMenu.GetMenuFlags() | MenuFlags::HideDisabledEntries );
+ aMenu->SetMenuFlags( aMenu->GetMenuFlags() | MenuFlags::HideDisabledEntries );
- sal_uInt16 nId = aMenu.Execute( this, aPos );
+ sal_uInt16 nId = aMenu->Execute( this, aPos );
pHelpWin->DoAction( nId );
bDone = true;
}
diff --git a/sfx2/source/control/templatedefaultview.cxx b/sfx2/source/control/templatedefaultview.cxx
index 789ef16ff337..8ac36096ccb8 100644
--- a/sfx2/source/control/templatedefaultview.cxx
+++ b/sfx2/source/control/templatedefaultview.cxx
@@ -64,7 +64,7 @@ void TemplateDefaultView::KeyInput( const KeyEvent& rKEvt )
void TemplateDefaultView::createContextMenu()
{
- std::unique_ptr<PopupMenu> pItemMenu(new PopupMenu);
+ ScopedVclPtrInstance<PopupMenu> pItemMenu;
pItemMenu->InsertItem(MNI_OPEN,SfxResId(STR_OPEN).toString());
pItemMenu->InsertItem(MNI_EDIT,SfxResId(STR_EDIT_TEMPLATE).toString());
deselectItems();
diff --git a/sfx2/source/control/templatelocalview.cxx b/sfx2/source/control/templatelocalview.cxx
index 605011e013b3..0ecd166034d5 100644
--- a/sfx2/source/control/templatelocalview.cxx
+++ b/sfx2/source/control/templatelocalview.cxx
@@ -182,7 +182,7 @@ TemplateContainerItem* TemplateLocalView::getRegion(OUString const & rName)
void TemplateLocalView::createContextMenu(const bool bIsDefault)
{
- std::unique_ptr<PopupMenu> pItemMenu(new PopupMenu);
+ ScopedVclPtrInstance<PopupMenu> pItemMenu;
pItemMenu->InsertItem(MNI_OPEN,SfxResId(STR_OPEN).toString());
pItemMenu->InsertItem(MNI_EDIT,SfxResId(STR_EDIT_TEMPLATE).toString());
diff --git a/sfx2/source/control/templatesearchview.cxx b/sfx2/source/control/templatesearchview.cxx
index 20da15c41304..39672043a86c 100644
--- a/sfx2/source/control/templatesearchview.cxx
+++ b/sfx2/source/control/templatesearchview.cxx
@@ -126,7 +126,7 @@ void TemplateSearchView::Command( const CommandEvent& rCEvt )
void TemplateSearchView::createContextMenu( const bool bIsDefault)
{
- std::unique_ptr<PopupMenu> pItemMenu(new PopupMenu);
+ ScopedVclPtrInstance<PopupMenu> pItemMenu;
pItemMenu->InsertItem(MNI_OPEN,SfxResId(STR_OPEN).toString());
pItemMenu->InsertItem(MNI_EDIT,SfxResId(STR_EDIT_TEMPLATE).toString());
diff --git a/sfx2/source/dialog/templdlg.cxx b/sfx2/source/dialog/templdlg.cxx
index fe830110d630..58c16e404dd1 100644
--- a/sfx2/source/dialog/templdlg.cxx
+++ b/sfx2/source/dialog/templdlg.cxx
@@ -328,7 +328,7 @@ void SfxActionListBox::Recalc()
}
}
-std::unique_ptr<PopupMenu> SfxActionListBox::CreateContextMenu()
+VclPtr<PopupMenu> SfxActionListBox::CreateContextMenu()
{
if( !( GetSelectionCount() > 0 ) )
@@ -412,7 +412,7 @@ void StyleTreeListBox_Impl::MakeExpanded_Impl(ExpandedEntries_t& rEntries) const
}
}
-std::unique_ptr<PopupMenu> StyleTreeListBox_Impl::CreateContextMenu()
+VclPtr<PopupMenu> StyleTreeListBox_Impl::CreateContextMenu()
{
return pDialog->CreateContextMenu();
}
@@ -2156,7 +2156,7 @@ void SfxCommonTemplateDialog_Impl::EnableExample_Impl(sal_uInt16 nId, bool bEnab
EnableItem(nId, bEnable);
}
-std::unique_ptr<PopupMenu> SfxCommonTemplateDialog_Impl::CreateContextMenu()
+VclPtr<PopupMenu> SfxCommonTemplateDialog_Impl::CreateContextMenu()
{
if ( bBindingUpdate )
{
@@ -2164,7 +2164,7 @@ std::unique_ptr<PopupMenu> SfxCommonTemplateDialog_Impl::CreateContextMenu()
pBindings->Update( SID_STYLE_NEW );
bBindingUpdate = false;
}
- std::unique_ptr<PopupMenu> pMenu(new PopupMenu( SfxResId( MN_CONTEXT_TEMPLDLG ) ));
+ VclPtr<PopupMenu> pMenu = VclPtr<PopupMenu>::Create( SfxResId( MN_CONTEXT_TEMPLDLG ) );
pMenu->SetSelectHdl( LINK( this, SfxCommonTemplateDialog_Impl, MenuSelectHdl ) );
pMenu->EnableItem( ID_EDIT, bCanEdit );
pMenu->EnableItem( ID_DELETE, bCanDel );
@@ -2474,7 +2474,7 @@ IMPL_LINK_TYPED( SfxTemplateDialog_Impl, ToolBoxRClick, ToolBox *, pBox, void )
ToolBoxItemBits::DROPDOWN == (pBox->GetItemBits(nEntry)&ToolBoxItemBits::DROPDOWN))
{
//create a popup menu in Writer
- std::unique_ptr<PopupMenu> pMenu(new PopupMenu);
+ ScopedVclPtrInstance<PopupMenu> pMenu;
uno::Reference< container::XNameAccess > xNameAccess(
frame::theUICommandDescription::get(
::comphelper::getProcessComponentContext()) );
diff --git a/sfx2/source/doc/templatedlg.cxx b/sfx2/source/doc/templatedlg.cxx
index 9d6b8de7d5ca..42b7dfe12cc7 100644
--- a/sfx2/source/doc/templatedlg.cxx
+++ b/sfx2/source/doc/templatedlg.cxx
@@ -180,7 +180,7 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg(vcl::Window *parent)
get(mpCBXHideDlg, "hidedialogcb");
// Create popup menus
- mpActionMenu = new PopupMenu;
+ mpActionMenu = VclPtr<PopupMenu>::Create();
mpActionMenu->InsertItem(MNI_ACTION_NEW_FOLDER,
SfxResId(STR_CATEGORY_NEW).toString(),
Image(SfxResId(IMG_ACTION_REFRESH)));
@@ -195,10 +195,10 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg(vcl::Window *parent)
mpActionMenu->InsertItem(MNI_ACTION_DEFAULT,SfxResId(STR_ACTION_DEFAULT).toString());
mpActionMenu->SetSelectHdl(LINK(this,SfxTemplateManagerDlg,MenuSelectHdl));
- mpRepositoryMenu = new PopupMenu;
+ mpRepositoryMenu = VclPtr<PopupMenu>::Create();
mpRepositoryMenu->SetSelectHdl(LINK(this,SfxTemplateManagerDlg,RepositoryMenuSelectHdl));
- mpTemplateDefaultMenu = new PopupMenu;
+ mpTemplateDefaultMenu = VclPtr<PopupMenu>::Create();
mpTemplateDefaultMenu->SetSelectHdl(LINK(this,SfxTemplateManagerDlg,DefaultTemplateMenuSelectHdl));
mpActionMenu->SetPopupMenu(MNI_ACTION_DEFAULT,mpTemplateDefaultMenu);
diff --git a/sfx2/source/inc/templdgi.hxx b/sfx2/source/inc/templdgi.hxx
index b8a08d3524ed..13e36c5f1f9a 100644
--- a/sfx2/source/inc/templdgi.hxx
+++ b/sfx2/source/inc/templdgi.hxx
@@ -131,7 +131,7 @@ public:
}
void MakeExpanded_Impl(ExpandedEntries_t& rEntries) const;
- virtual std::unique_ptr<PopupMenu> CreateContextMenu() override;
+ virtual VclPtr<PopupMenu> CreateContextMenu() override;
};
class SfxActionListBox : public DropListBox_Impl
@@ -140,7 +140,7 @@ protected:
public:
SfxActionListBox( SfxCommonTemplateDialog_Impl* pParent, WinBits nWinBits );
- virtual std::unique_ptr<PopupMenu> CreateContextMenu() override;
+ virtual VclPtr<PopupMenu> CreateContextMenu() override;
void Recalc();
};
@@ -325,7 +325,7 @@ public:
}
// normally for derivates from SvTreeListBoxes, but in this case the dialog handles context menus
- std::unique_ptr<PopupMenu> CreateContextMenu();
+ VclPtr<PopupMenu> CreateContextMenu();
};
class DropToolBox_Impl : public ToolBox, public DropTargetHelper
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index 1dc3ffbb8013..43d88844852a 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -926,7 +926,7 @@ void SidebarController::ShowPopupMenu (
const Rectangle& rButtonBox,
const ::std::vector<TabBar::DeckMenuData>& rMenuData) const
{
- std::shared_ptr<PopupMenu> pMenu = CreatePopupMenu(rMenuData);
+ VclPtr<PopupMenu> pMenu = CreatePopupMenu(rMenuData);
pMenu->SetSelectHdl(LINK(const_cast<SidebarController*>(this), SidebarController, OnMenuItemSelected));
// pass toolbox button rect so the menu can stay open on button up
@@ -935,11 +935,11 @@ void SidebarController::ShowPopupMenu (
pMenu->Execute(mpParentWindow, aBox, PopupMenuFlags::ExecuteDown);
}
-std::shared_ptr<PopupMenu> SidebarController::CreatePopupMenu (
+VclPtr<PopupMenu> SidebarController::CreatePopupMenu (
const ::std::vector<TabBar::DeckMenuData>& rMenuData) const
{
// Create the top level popup menu.
- std::shared_ptr<PopupMenu> pMenu (new PopupMenu());
+ VclPtrInstance<PopupMenu> pMenu;
FloatingWindow* pMenuWindow = dynamic_cast<FloatingWindow*>(pMenu->GetWindow());
if (pMenuWindow != nullptr)
{
@@ -947,7 +947,7 @@ std::shared_ptr<PopupMenu> SidebarController::CreatePopupMenu (
}
// Create sub menu for customization (hiding of deck tabs.)
- PopupMenu* pCustomizationMenu = new PopupMenu();
+ VclPtr<PopupMenu> pCustomizationMenu = VclPtr<PopupMenu>::Create();
SidebarResource aLocalResource;
diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx
index f787d00538ef..fc23ebb6d1c0 100644
--- a/sfx2/source/view/viewsh.cxx
+++ b/sfx2/source/view/viewsh.cxx
@@ -1774,7 +1774,7 @@ void Change( Menu* pMenu, SfxViewShell* pView )
}
-bool SfxViewShell::TryContextMenuInterception( Menu& rIn, const OUString& rMenuIdentifier, Menu*& rpOut, ui::ContextMenuExecuteEvent aEvent )
+bool SfxViewShell::TryContextMenuInterception( Menu& rIn, const OUString& rMenuIdentifier, VclPtr<Menu>& rpOut, ui::ContextMenuExecuteEvent aEvent )
{
rpOut = nullptr;
bool bModified = false;
@@ -1829,7 +1829,7 @@ bool SfxViewShell::TryContextMenuInterception( Menu& rIn, const OUString& rMenuI
if ( bModified )
{
// container was modified, create a new window out of it
- rpOut = new PopupMenu;
+ rpOut = VclPtr<PopupMenu>::Create();
::framework::ActionTriggerHelper::CreateMenuFromActionTriggerContainer( rpOut, aEvent.ActionTriggerContainer );
Change( rpOut, this );
diff --git a/starmath/source/edit.cxx b/starmath/source/edit.cxx
index ba9fda42b4c9..bf1af9a64ae3 100644
--- a/starmath/source/edit.cxx
+++ b/starmath/source/edit.cxx
@@ -340,10 +340,10 @@ void SmEditWindow::Command(const CommandEvent& rCEvt)
GetParent()->ToTop();
Point aPoint = rCEvt.GetMousePosPixel();
- std::unique_ptr<PopupMenu> xPopupMenu(new PopupMenu(SmResId(RID_COMMANDMENU)));
+ VclPtr<PopupMenu> xPopupMenu = VclPtr<PopupMenu>::Create(SmResId(RID_COMMANDMENU));
// added for replaceability of context menus
- Menu* pMenu = nullptr;
+ VclPtr<Menu> pMenu;
css::ui::ContextMenuExecuteEvent aEvent;
aEvent.SourceWindow = VCLUnoHelper::GetInterface( this );
aEvent.ExecutePosition.X = aPoint.X();
@@ -353,7 +353,8 @@ void SmEditWindow::Command(const CommandEvent& rCEvt)
{
if ( pMenu )
{
- xPopupMenu.reset(static_cast<PopupMenu*>(pMenu));
+ xPopupMenu.disposeAndClear();
+ xPopupMenu = static_cast<PopupMenu*>(pMenu.get());
}
}
diff --git a/svtools/source/contnr/fileview.cxx b/svtools/source/contnr/fileview.cxx
index d287cea38b41..433652bfc187 100644
--- a/svtools/source/contnr/fileview.cxx
+++ b/svtools/source/contnr/fileview.cxx
@@ -205,7 +205,7 @@ public:
DECL_LINK_TYPED(ResetQuickSearch_Impl, Timer *, void);
- virtual std::unique_ptr<PopupMenu> CreateContextMenu() override;
+ virtual VclPtr<PopupMenu> CreateContextMenu() override;
virtual void ExecuteContextMenuAction( sal_uInt16 nSelectedPopentry ) override;
};
@@ -627,7 +627,7 @@ void ViewTabListBox_Impl::KeyInput( const KeyEvent& rKEvt )
}
-std::unique_ptr<PopupMenu> ViewTabListBox_Impl::CreateContextMenu()
+VclPtr<PopupMenu> ViewTabListBox_Impl::CreateContextMenu()
{
bool bEnableDelete = mbEnableDelete;
bool bEnableRename = mbEnableRename;
@@ -700,8 +700,7 @@ std::unique_ptr<PopupMenu> ViewTabListBox_Impl::CreateContextMenu()
if ( bEnableDelete || bEnableRename )
{
- std::unique_ptr<PopupMenu> pRet(
- new PopupMenu( SvtResId( RID_FILEVIEW_CONTEXTMENU ) ));
+ VclPtrInstance<PopupMenu> pRet(SvtResId( RID_FILEVIEW_CONTEXTMENU ));
pRet->EnableItem( MID_FILEVIEW_DELETE, bEnableDelete );
pRet->EnableItem( MID_FILEVIEW_RENAME, bEnableRename );
pRet->RemoveDisabledEntries( true, true );
diff --git a/svtools/source/contnr/svimpbox.cxx b/svtools/source/contnr/svimpbox.cxx
index 20e218b0aa06..5a19237da730 100644
--- a/svtools/source/contnr/svimpbox.cxx
+++ b/svtools/source/contnr/svimpbox.cxx
@@ -2917,11 +2917,13 @@ static void lcl_DeleteSubPopups(PopupMenu* pPopup)
{
for(sal_uInt16 i = 0; i < pPopup->GetItemCount(); i++)
{
- PopupMenu* pSubPopup = pPopup->GetPopupMenu( pPopup->GetItemId( i ));
+ VclPtr<PopupMenu> pSubPopup = pPopup->GetPopupMenu( pPopup->GetItemId( i ));
if(pSubPopup)
{
lcl_DeleteSubPopups(pSubPopup);
- delete pSubPopup;
+ // NoelG: this looks very dodgy to me, we are attempting to delete this, but we leave a dangling pointer
+ // in the PopupMenu class?
+ pSubPopup.disposeAndClear();
}
}
}
@@ -3017,8 +3019,8 @@ void SvImpLBox::Command( const CommandEvent& rCEvt )
}
{
- std::unique_ptr<PopupMenu> pPopup = pView->CreateContextMenu();
- if( pPopup.get() )
+ VclPtr<PopupMenu> pPopup = pView->CreateContextMenu();
+ if( pPopup )
{
// do action for selected entry in popup menu
sal_uInt16 nMenuAction = pPopup->Execute( pView, aPopupPos );
diff --git a/svtools/source/contnr/treelistbox.cxx b/svtools/source/contnr/treelistbox.cxx
index abc8d353e0da..4a4f48f86f2b 100644
--- a/svtools/source/contnr/treelistbox.cxx
+++ b/svtools/source/contnr/treelistbox.cxx
@@ -3724,7 +3724,7 @@ void SvTreeListBox::InitStartEntry()
pImpl->pStartEntry = GetModel()->First();
}
-std::unique_ptr<PopupMenu> SvTreeListBox::CreateContextMenu()
+VclPtr<PopupMenu> SvTreeListBox::CreateContextMenu()
{
return nullptr;
}
diff --git a/svtools/source/control/calendar.cxx b/svtools/source/control/calendar.cxx
index c04650c7b132..4ce2033fd3b2 100644
--- a/svtools/source/control/calendar.cxx
+++ b/svtools/source/control/calendar.cxx
@@ -1161,8 +1161,8 @@ void Calendar::ImplShowMenu( const Point& rPos, const Date& rDate )
EndSelection();
Date aOldFirstDate = GetFirstMonth();
- PopupMenu aPopupMenu;
- PopupMenu* pYearPopupMenus[MENU_YEAR_COUNT];
+ ScopedVclPtrInstance<PopupMenu> aPopupMenu;
+ VclPtr<PopupMenu> pYearPopupMenus[MENU_YEAR_COUNT];
sal_uInt16 nMonthOff;
sal_uInt16 nCurItemId;
sal_uInt16 nYear = rDate.GetYear()-1;
@@ -1179,26 +1179,26 @@ void Calendar::ImplShowMenu( const Point& rPos, const Date& rDate )
// construct menu (include years with different months)
for ( i = 0; i < MENU_YEAR_COUNT; i++ )
{
- pYearPopupMenus[i] = new PopupMenu;
+ pYearPopupMenus[i] = VclPtr<PopupMenu>::Create();
for ( j = 1; j <= 12; j++ )
pYearPopupMenus[i]->InsertItem( nYearIdCount+j,
maCalendarWrapper.getDisplayName(
i18n::CalendarDisplayIndex::MONTH, j-1, 1));
- aPopupMenu.InsertItem( 10+i, OUString::number( nYear+i ) );
- aPopupMenu.SetPopupMenu( 10+i, pYearPopupMenus[i] );
+ aPopupMenu->InsertItem( 10+i, OUString::number( nYear+i ) );
+ aPopupMenu->SetPopupMenu( 10+i, pYearPopupMenus[i] );
nYearIdCount += 1000;
}
mbMenuDown = true;
- nCurItemId = aPopupMenu.Execute( this, rPos );
+ nCurItemId = aPopupMenu->Execute( this, rPos );
mbMenuDown = false;
// destroy menu
- aPopupMenu.SetPopupMenu( 2, nullptr );
+ aPopupMenu->SetPopupMenu( 2, nullptr );
for ( i = 0; i < MENU_YEAR_COUNT; i++ )
{
- aPopupMenu.SetPopupMenu( 10+i, nullptr );
- delete pYearPopupMenus[i];
+ aPopupMenu->SetPopupMenu( 10+i, nullptr );
+ pYearPopupMenus[i].disposeAndClear();
}
if ( nCurItemId )
diff --git a/svx/source/dialog/imapwnd.cxx b/svx/source/dialog/imapwnd.cxx
index 6d38b347e55a..4ba77b9ba492 100644
--- a/svx/source/dialog/imapwnd.cxx
+++ b/svx/source/dialog/imapwnd.cxx
@@ -471,23 +471,23 @@ void IMapWindow::Command(const CommandEvent& rCEvt)
if ( rCEvt.GetCommand() == CommandEventId::ContextMenu )
{
- PopupMenu aMenu( SVX_RES( RID_SVXMN_IMAP ) );
+ ScopedVclPtrInstance<PopupMenu> aMenu( SVX_RES( RID_SVXMN_IMAP ) );
const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
const size_t nMarked = rMarkList.GetMarkCount();
- aMenu.EnableItem( MN_URL, false );
- aMenu.EnableItem( MN_ACTIVATE, false );
- aMenu.EnableItem( MN_MACRO, false );
- aMenu.EnableItem( MN_MARK_ALL, pModel->GetPage( 0 )->GetObjCount() != pView->GetMarkedObjectCount() );
+ aMenu->EnableItem( MN_URL, false );
+ aMenu->EnableItem( MN_ACTIVATE, false );
+ aMenu->EnableItem( MN_MACRO, false );
+ aMenu->EnableItem( MN_MARK_ALL, pModel->GetPage( 0 )->GetObjCount() != pView->GetMarkedObjectCount() );
if ( !nMarked )
{
- aMenu.EnableItem( MN_POSITION, false );
- aMenu.EnableItem( MN_FRAME_TO_TOP, false );
- aMenu.EnableItem( MN_MOREFRONT, false );
- aMenu.EnableItem( MN_MOREBACK, false );
- aMenu.EnableItem( MN_FRAME_TO_BOTTOM, false );
- aMenu.EnableItem( MN_DELETE1, false );
+ aMenu->EnableItem( MN_POSITION, false );
+ aMenu->EnableItem( MN_FRAME_TO_TOP, false );
+ aMenu->EnableItem( MN_MOREFRONT, false );
+ aMenu->EnableItem( MN_MOREBACK, false );
+ aMenu->EnableItem( MN_FRAME_TO_BOTTOM, false );
+ aMenu->EnableItem( MN_DELETE1, false );
}
else
{
@@ -495,22 +495,22 @@ void IMapWindow::Command(const CommandEvent& rCEvt)
{
SdrObject* pSdrObj = GetSelectedSdrObject();
- aMenu.EnableItem( MN_URL );
- aMenu.EnableItem( MN_ACTIVATE );
- aMenu.EnableItem( MN_MACRO );
- aMenu.CheckItem( MN_ACTIVATE, GetIMapObj( pSdrObj )->IsActive() );
+ aMenu->EnableItem( MN_URL );
+ aMenu->EnableItem( MN_ACTIVATE );
+ aMenu->EnableItem( MN_MACRO );
+ aMenu->CheckItem( MN_ACTIVATE, GetIMapObj( pSdrObj )->IsActive() );
}
- aMenu.EnableItem( MN_POSITION );
- aMenu.EnableItem( MN_FRAME_TO_TOP );
- aMenu.EnableItem( MN_MOREFRONT );
- aMenu.EnableItem( MN_MOREBACK );
- aMenu.EnableItem( MN_FRAME_TO_BOTTOM );
- aMenu.EnableItem( MN_DELETE1 );
+ aMenu->EnableItem( MN_POSITION );
+ aMenu->EnableItem( MN_FRAME_TO_TOP );
+ aMenu->EnableItem( MN_MOREFRONT );
+ aMenu->EnableItem( MN_MOREBACK );
+ aMenu->EnableItem( MN_FRAME_TO_BOTTOM );
+ aMenu->EnableItem( MN_DELETE1 );
}
- aMenu.SetSelectHdl( LINK( this, IMapWindow, MenuSelectHdl ) );
- aMenu.Execute( this, rCEvt.GetMousePosPixel() );
+ aMenu->SetSelectHdl( LINK( this, IMapWindow, MenuSelectHdl ) );
+ aMenu->Execute( this, rCEvt.GetMousePosPixel() );
}
else
Window::Command(rCEvt);
diff --git a/svx/source/dialog/svxruler.cxx b/svx/source/dialog/svxruler.cxx
index efe4de316bd3..7504522b9c01 100644
--- a/svx/source/dialog/svxruler.cxx
+++ b/svx/source/dialog/svxruler.cxx
@@ -3387,8 +3387,8 @@ void SvxRuler::Command( const CommandEvent& rCommandEvent )
GetType( rCommandEvent.GetMousePosPixel(), &mxRulerImpl->nIdx ) &&
mpTabs[mxRulerImpl->nIdx + TAB_GAP].nStyle < RULER_TAB_DEFAULT )
{
- PopupMenu aMenu;
- aMenu.SetSelectHdl(LINK(this, SvxRuler, TabMenuSelect));
+ ScopedVclPtrInstance<PopupMenu> aMenu;
+ aMenu->SetSelectHdl(LINK(this, SvxRuler, TabMenuSelect));
ScopedVclPtrInstance< VirtualDevice > pDev;
const Size aSz(ruler_tab_svx.width + 2, ruler_tab_svx.height + 2);
pDev->SetOutputSize(aSz);
@@ -3401,26 +3401,26 @@ void SvxRuler::Command( const CommandEvent& rCommandEvent )
sal_uInt16 nStyle = bRTL ? i|RULER_TAB_RTL : i;
nStyle |= static_cast<sal_uInt16>(bHorz ? WB_HORZ : WB_VERT);
DrawTab(*pDev, aFillColor, aPt, nStyle);
- aMenu.InsertItem(i + 1,
+ aMenu->InsertItem(i + 1,
ResId(RID_SVXSTR_RULER_START + i, DIALOG_MGR()).toString(),
Image(pDev->GetBitmap(Point(), aSz), Color(COL_WHITE)));
- aMenu.CheckItem(i + 1, i == mpTabs[mxRulerImpl->nIdx + TAB_GAP].nStyle);
+ aMenu->CheckItem(i + 1, i == mpTabs[mxRulerImpl->nIdx + TAB_GAP].nStyle);
pDev->SetOutputSize(aSz); // delete device
}
- aMenu.Execute( this, rCommandEvent.GetMousePosPixel() );
+ aMenu->Execute( this, rCommandEvent.GetMousePosPixel() );
}
else
{
- PopupMenu aMenu(ResId(RID_SVXMN_RULER, DIALOG_MGR()));
- aMenu.SetSelectHdl(LINK(this, SvxRuler, MenuSelect));
+ ScopedVclPtrInstance<PopupMenu> aMenu(ResId(RID_SVXMN_RULER, DIALOG_MGR()));
+ aMenu->SetSelectHdl(LINK(this, SvxRuler, MenuSelect));
FieldUnit eUnit = GetUnit();
- const sal_uInt16 nCount = aMenu.GetItemCount();
+ const sal_uInt16 nCount = aMenu->GetItemCount();
bool bReduceMetric = bool(nFlags & SvxRulerSupportFlags::REDUCED_METRIC);
for ( sal_uInt16 i = nCount; i; --i )
{
- const sal_uInt16 nId = aMenu.GetItemId(i - 1);
- aMenu.CheckItem(nId, nId == (sal_uInt16)eUnit);
+ const sal_uInt16 nId = aMenu->GetItemId(i - 1);
+ aMenu->CheckItem(nId, nId == (sal_uInt16)eUnit);
if( bReduceMetric )
{
if ( nId == FUNIT_M ||
@@ -3428,19 +3428,19 @@ void SvxRuler::Command( const CommandEvent& rCommandEvent )
nId == FUNIT_FOOT ||
nId == FUNIT_MILE )
{
- aMenu.RemoveItem(i - 1);
+ aMenu->RemoveItem(i - 1);
}
else if (( nId == FUNIT_CHAR ) && !bHorz )
{
- aMenu.RemoveItem(i - 1);
+ aMenu->RemoveItem(i - 1);
}
else if (( nId == FUNIT_LINE ) && bHorz )
{
- aMenu.RemoveItem(i - 1);
+ aMenu->RemoveItem(i - 1);
}
}
}
- aMenu.Execute( this, rCommandEvent.GetMousePosPixel() );
+ aMenu->Execute( this, rCommandEvent.GetMousePosPixel() );
}
}
else
diff --git a/svx/source/fmcomp/fmgridcl.cxx b/svx/source/fmcomp/fmgridcl.cxx
index 55c1b3acfa46..9a1fa116638e 100644
--- a/svx/source/fmcomp/fmgridcl.cxx
+++ b/svx/source/fmcomp/fmgridcl.cxx
@@ -496,12 +496,12 @@ IMPL_LINK_NOARG_TYPED( FmGridHeader, OnAsyncExecuteDrop, void*, void )
{
ImageList aImageList( SVX_RES(RID_SVXIMGLIST_FMEXPL) );
- PopupMenu aInsertMenu(SVX_RES(RID_SVXMNU_COLS));
- PopupMenu aTypeMenu;
- PopupMenu* pMenu = aInsertMenu.GetPopupMenu(SID_FM_INSERTCOL);
+ ScopedVclPtrInstance<PopupMenu> aInsertMenu(SVX_RES(RID_SVXMNU_COLS));
+ ScopedVclPtrInstance<PopupMenu> aTypeMenu;
+ PopupMenu* pMenu = aInsertMenu->GetPopupMenu(SID_FM_INSERTCOL);
for (std::vector<sal_uInt16>::const_iterator iter = aPossibleTypes.begin(); iter != aPossibleTypes.end(); ++iter)
- SetMenuItem(aImageList, *iter, pMenu, aTypeMenu, true, 0);
- nPreferredType = aTypeMenu.Execute(this, m_pImpl->aDropPosPixel);
+ SetMenuItem(aImageList, *iter, pMenu, *aTypeMenu.get(), true, 0);
+ nPreferredType = aTypeMenu->Execute(this, m_pImpl->aDropPosPixel);
}
bDateNTimeCol = nPreferredType == SID_FM_TWOFIELDS_DATE_N_TIME;
@@ -657,7 +657,7 @@ void FmGridHeader::PreExecuteColumnContextMenu(sal_uInt16 nColId, PopupMenu& rMe
bool bMarked = nColId && static_cast<FmGridControl*>(GetParent())->isColumnMarked(nColId);
ImageList aImageList( SVX_RES(RID_SVXIMGLIST_FMEXPL) );
- PopupMenu* pControlMenu = new PopupMenu;
+ VclPtrInstance<PopupMenu> pControlMenu;
PopupMenu* pMenu = rMenu.GetPopupMenu(SID_FM_INSERTCOL);
if (pMenu)
@@ -782,8 +782,8 @@ void FmGridHeader::PostExecuteColumnContextMenu(sal_uInt16 nColId, const PopupMe
sal_uInt16 nPos = GetModelColumnPos(nColId);
// remove and delete the menu we inserted in PreExecuteColumnContextMenu
- PopupMenu* pControlMenu = rMenu.GetPopupMenu(SID_FM_CHANGECOL);
- delete pControlMenu;
+ VclPtr<PopupMenu> pControlMenu = rMenu.GetPopupMenu(SID_FM_CHANGECOL);
+ pControlMenu.disposeAndClear(); // NoelG: dodgy, this leaves a dangling pointer
OUString aFieldType;
bool bReplace = false;
@@ -983,17 +983,17 @@ void FmGridHeader::triggerColumnContextMenu( const ::Point& _rPreferredPos )
sal_uInt16 nColId = GetItemId( _rPreferredPos );
// the menu
- PopupMenu aContextMenu( SVX_RES( RID_SVXMNU_COLS ) );
+ ScopedVclPtrInstance<PopupMenu> aContextMenu( SVX_RES( RID_SVXMNU_COLS ) );
// let derivees modify the menu
- PreExecuteColumnContextMenu( nColId, aContextMenu );
- aContextMenu.RemoveDisabledEntries( true, true );
+ PreExecuteColumnContextMenu( nColId, *aContextMenu );
+ aContextMenu->RemoveDisabledEntries( true, true );
// execute the menu
- sal_uInt16 nResult = aContextMenu.Execute( this, _rPreferredPos );
+ sal_uInt16 nResult = aContextMenu->Execute( this, _rPreferredPos );
// let derivees handle the result
- PostExecuteColumnContextMenu( nColId, aContextMenu, nResult );
+ PostExecuteColumnContextMenu( nColId, *aContextMenu, nResult );
}
void FmGridHeader::Command(const CommandEvent& rEvt)
diff --git a/svx/source/fmcomp/gridctrl.cxx b/svx/source/fmcomp/gridctrl.cxx
index cb6b42a07a3a..e2992ee288a8 100644
--- a/svx/source/fmcomp/gridctrl.cxx
+++ b/svx/source/fmcomp/gridctrl.cxx
@@ -2827,11 +2827,11 @@ void DbGridControl::copyCellText(sal_Int32 _nRow, sal_uInt16 _nColId)
void DbGridControl::executeRowContextMenu( long _nRow, const Point& _rPreferredPos )
{
- PopupMenu aContextMenu( SVX_RES( RID_SVXMNU_ROWS ) );
+ ScopedVclPtrInstance<PopupMenu> aContextMenu( SVX_RES( RID_SVXMNU_ROWS ) );
- PreExecuteRowContextMenu( (sal_uInt16)_nRow, aContextMenu );
- aContextMenu.RemoveDisabledEntries( true, true );
- PostExecuteRowContextMenu( (sal_uInt16)_nRow, aContextMenu, aContextMenu.Execute( this, _rPreferredPos ) );
+ PreExecuteRowContextMenu( (sal_uInt16)_nRow, *aContextMenu.get() );
+ aContextMenu->RemoveDisabledEntries( true, true );
+ PostExecuteRowContextMenu( (sal_uInt16)_nRow, *aContextMenu.get(), aContextMenu->Execute( this, _rPreferredPos ) );
// TODO: why this weird cast to sal_uInt16? What if we really have more than 65535 lines?
// -> change this to sal_uInt32
@@ -2872,9 +2872,9 @@ void DbGridControl::Command(const CommandEvent& rEvt)
}
else if (canCopyCellText(nRow, nColId))
{
- PopupMenu aContextMenu(SVX_RES(RID_SVXMNU_CELL));
- aContextMenu.RemoveDisabledEntries(true, true);
- switch (aContextMenu.Execute(this, rEvt.GetMousePosPixel()))
+ ScopedVclPtrInstance<PopupMenu> aContextMenu(SVX_RES(RID_SVXMNU_CELL));
+ aContextMenu->RemoveDisabledEntries(true, true);
+ switch (aContextMenu->Execute(this, rEvt.GetMousePosPixel()))
{
case SID_COPY:
copyCellText(nRow, nColId);
diff --git a/svx/source/form/datanavi.cxx b/svx/source/form/datanavi.cxx
index 6db0f72e1255..281ffefa8fe8 100644
--- a/svx/source/form/datanavi.cxx
+++ b/svx/source/form/datanavi.cxx
@@ -220,10 +220,9 @@ namespace svxform
pTransferable->StartDrag( this, DND_ACTION_COPY );
}
- std::unique_ptr<PopupMenu> DataTreeListBox::CreateContextMenu()
+ VclPtr<PopupMenu> DataTreeListBox::CreateContextMenu()
{
- std::unique_ptr<PopupMenu> pMenu(
- new PopupMenu( SVX_RES( RID_MENU_DATANAVIGATOR ) ));
+ VclPtrInstance<PopupMenu> pMenu( SVX_RES( RID_MENU_DATANAVIGATOR ) );
if ( DGTInstance == m_eGroup )
pMenu->RemoveItem( pMenu->GetItemPos( m_nAddId ) );
else
diff --git a/svx/source/form/filtnav.cxx b/svx/source/form/filtnav.cxx
index 7c1f1ee9924d..f48413ed54bd 100644
--- a/svx/source/form/filtnav.cxx
+++ b/svx/source/form/filtnav.cxx
@@ -1629,24 +1629,21 @@ void FmFilterNavigator::Command( const CommandEvent& rEvt )
aSelectList.clear();
}
- PopupMenu aContextMenu(SVX_RES(RID_FM_FILTER_MENU));
+ ScopedVclPtrInstance<PopupMenu> aContextMenu(SVX_RES(RID_FM_FILTER_MENU));
// every condition could be deleted except the first one if its the only one
- aContextMenu.EnableItem( SID_FM_DELETE, !aSelectList.empty() );
+ aContextMenu->EnableItem( SID_FM_DELETE, !aSelectList.empty() );
bool bEdit = dynamic_cast<FmFilterItem*>( static_cast<FmFilterData*>(pClicked->GetUserData()) ) != nullptr &&
IsSelected(pClicked) && GetSelectionCount() == 1;
- aContextMenu.EnableItem( SID_FM_FILTER_EDIT,
- bEdit );
- aContextMenu.EnableItem( SID_FM_FILTER_IS_NULL,
- bEdit );
- aContextMenu.EnableItem( SID_FM_FILTER_IS_NOT_NULL,
- bEdit );
+ aContextMenu->EnableItem( SID_FM_FILTER_EDIT, bEdit );
+ aContextMenu->EnableItem( SID_FM_FILTER_IS_NULL, bEdit );
+ aContextMenu->EnableItem( SID_FM_FILTER_IS_NOT_NULL, bEdit );
- aContextMenu.RemoveDisabledEntries(true, true);
- sal_uInt16 nSlotId = aContextMenu.Execute( this, aWhere );
+ aContextMenu->RemoveDisabledEntries(true, true);
+ sal_uInt16 nSlotId = aContextMenu->Execute( this, aWhere );
switch( nSlotId )
{
case SID_FM_FILTER_EDIT:
diff --git a/svx/source/form/fmshimp.cxx b/svx/source/form/fmshimp.cxx
index 67b5d999693d..501c39c1bd2d 100644
--- a/svx/source/form/fmshimp.cxx
+++ b/svx/source/form/fmshimp.cxx
@@ -1040,10 +1040,10 @@ void FmXFormShell::ForceUpdateSelection()
}
-PopupMenu* FmXFormShell::GetConversionMenu()
+VclPtr<PopupMenu> FmXFormShell::GetConversionMenu()
{
- PopupMenu* pNewMenu = new PopupMenu(SVX_RES( RID_FMSHELL_CONVERSIONMENU ));
+ VclPtrInstance<PopupMenu> pNewMenu(SVX_RES( RID_FMSHELL_CONVERSIONMENU ));
ImageList aImageList( SVX_RES( RID_SVXIMGLIST_FMEXPL) );
for ( size_t i = 0; i < SAL_N_ELEMENTS(nConvertSlots); ++i )
diff --git a/svx/source/form/navigatortree.cxx b/svx/source/form/navigatortree.cxx
index 21c95d94f02e..afe7d11d6845 100644
--- a/svx/source/form/navigatortree.cxx
+++ b/svx/source/form/navigatortree.cxx
@@ -360,11 +360,11 @@ namespace svxform
FmFormModel* pFormModel = pFormShell ? pFormShell->GetFormModel() : nullptr;
if( pFormShell && pFormModel )
{
- PopupMenu aContextMenu(SVX_RES(RID_FMEXPLORER_POPUPMENU));
- PopupMenu* pSubMenuNew = aContextMenu.GetPopupMenu( SID_FM_NEW );
+ ScopedVclPtrInstance<PopupMenu> aContextMenu(SVX_RES(RID_FMEXPLORER_POPUPMENU));
+ PopupMenu* pSubMenuNew = aContextMenu->GetPopupMenu( SID_FM_NEW );
// menu 'New' only exists, if only the root or only one form is selected
- aContextMenu.EnableItem( SID_FM_NEW, bSingleSelection && (m_nFormsSelected || m_bRootSelected) );
+ aContextMenu->EnableItem( SID_FM_NEW, bSingleSelection && (m_nFormsSelected || m_bRootSelected) );
// 'New'\'Form' under the same terms
pSubMenuNew->EnableItem( SID_FM_NEW_FORM, bSingleSelection && (m_nFormsSelected || m_bRootSelected) );
@@ -375,62 +375,62 @@ namespace svxform
pSubMenuNew->EnableItem( SID_FM_NEW_HIDDEN, bSingleSelection && m_nFormsSelected );
// 'Delete': everything which is not root can be removed
- aContextMenu.EnableItem( SID_FM_DELETE, !m_bRootSelected );
+ aContextMenu->EnableItem( SID_FM_DELETE, !m_bRootSelected );
// 'Cut', 'Copy' and 'Paste'
- aContextMenu.EnableItem( SID_CUT, !m_bRootSelected && implAllowExchange( DND_ACTION_MOVE ) );
- aContextMenu.EnableItem( SID_COPY, !m_bRootSelected && implAllowExchange( DND_ACTION_COPY ) );
- aContextMenu.EnableItem( SID_PASTE, implAcceptPaste( ) );
+ aContextMenu->EnableItem( SID_CUT, !m_bRootSelected && implAllowExchange( DND_ACTION_MOVE ) );
+ aContextMenu->EnableItem( SID_COPY, !m_bRootSelected && implAllowExchange( DND_ACTION_COPY ) );
+ aContextMenu->EnableItem( SID_PASTE, implAcceptPaste( ) );
// TabDialog, if exactly one form
- aContextMenu.EnableItem( SID_FM_TAB_DIALOG, bSingleSelection && m_nFormsSelected );
+ aContextMenu->EnableItem( SID_FM_TAB_DIALOG, bSingleSelection && m_nFormsSelected );
// in XML forms, we don't allow for the properties of a form
// #i36484#
if ( pFormShell->GetImpl()->isEnhancedForm() && !m_nControlsSelected )
- aContextMenu.RemoveItem( aContextMenu.GetItemPos( SID_FM_SHOW_PROPERTY_BROWSER ) );
+ aContextMenu->RemoveItem( aContextMenu->GetItemPos( SID_FM_SHOW_PROPERTY_BROWSER ) );
// if the property browser is already open, we don't allow for the properties, too
if( pFormShell->GetImpl()->IsPropBrwOpen() )
- aContextMenu.RemoveItem( aContextMenu.GetItemPos( SID_FM_SHOW_PROPERTY_BROWSER ) );
+ aContextMenu->RemoveItem( aContextMenu->GetItemPos( SID_FM_SHOW_PROPERTY_BROWSER ) );
// and finally, if there's a mixed selection of forms and controls, disable the entry, too
else
- aContextMenu.EnableItem( SID_FM_SHOW_PROPERTY_BROWSER,
+ aContextMenu->EnableItem( SID_FM_SHOW_PROPERTY_BROWSER,
(m_nControlsSelected && !m_nFormsSelected) || (!m_nControlsSelected && m_nFormsSelected) );
// rename, if one element and no root
- aContextMenu.EnableItem( SID_FM_RENAME_OBJECT, bSingleSelection && !m_bRootSelected );
+ aContextMenu->EnableItem( SID_FM_RENAME_OBJECT, bSingleSelection && !m_bRootSelected );
// Readonly-entry is only for root
- aContextMenu.EnableItem( SID_FM_OPEN_READONLY, m_bRootSelected );
+ aContextMenu->EnableItem( SID_FM_OPEN_READONLY, m_bRootSelected );
// the same for automatic control focus
- aContextMenu.EnableItem( SID_FM_AUTOCONTROLFOCUS, m_bRootSelected );
+ aContextMenu->EnableItem( SID_FM_AUTOCONTROLFOCUS, m_bRootSelected );
// ConvertTo-Slots are enabled, if one control is selected
// the corresponding slot is disabled
if (!m_bRootSelected && !m_nFormsSelected && (m_nControlsSelected == 1))
{
- aContextMenu.SetPopupMenu( SID_FM_CHANGECONTROLTYPE, FmXFormShell::GetConversionMenu() );
+ aContextMenu->SetPopupMenu( SID_FM_CHANGECONTROLTYPE, FmXFormShell::GetConversionMenu() );
#if OSL_DEBUG_LEVEL > 0
FmControlData* pCurrent = static_cast<FmControlData*>((*m_arrCurrentSelection.begin())->GetUserData());
OSL_ENSURE( pFormShell->GetImpl()->isSolelySelected( pCurrent->GetFormComponent() ),
"NavigatorTree::Command: inconsistency between the navigator selection, and the selection as the shell knows it!" );
#endif
- pFormShell->GetImpl()->checkControlConversionSlotsForCurrentSelection( *aContextMenu.GetPopupMenu( SID_FM_CHANGECONTROLTYPE ) );
+ pFormShell->GetImpl()->checkControlConversionSlotsForCurrentSelection( *aContextMenu->GetPopupMenu( SID_FM_CHANGECONTROLTYPE ) );
}
else
- aContextMenu.EnableItem( SID_FM_CHANGECONTROLTYPE, false );
+ aContextMenu->EnableItem( SID_FM_CHANGECONTROLTYPE, false );
// remove all disabled entries
- aContextMenu.RemoveDisabledEntries(true, true);
+ aContextMenu->RemoveDisabledEntries(true, true);
// set OpenReadOnly
- aContextMenu.CheckItem( SID_FM_OPEN_READONLY, pFormModel->GetOpenInDesignMode() );
- aContextMenu.CheckItem( SID_FM_AUTOCONTROLFOCUS, pFormModel->GetAutoControlFocus() );
+ aContextMenu->CheckItem( SID_FM_OPEN_READONLY, pFormModel->GetOpenInDesignMode() );
+ aContextMenu->CheckItem( SID_FM_AUTOCONTROLFOCUS, pFormModel->GetAutoControlFocus() );
- sal_uInt16 nSlotId = aContextMenu.Execute( this, ptWhere );
+ sal_uInt16 nSlotId = aContextMenu->Execute( this, ptWhere );
switch( nSlotId )
{
case SID_FM_NEW_FORM:
diff --git a/svx/source/gallery2/galbrws1.cxx b/svx/source/gallery2/galbrws1.cxx
index b193f7f1fc5c..3a5e08bba459 100644
--- a/svx/source/gallery2/galbrws1.cxx
+++ b/svx/source/gallery2/galbrws1.cxx
@@ -581,15 +581,15 @@ IMPL_LINK_NOARG_TYPED(GalleryBrowser1, ShowContextMenuHdl, void*, void)
if( !aExecVector.empty() )
{
- PopupMenu aMenu( GAL_RES( RID_SVXMN_GALLERY1 ) );
+ ScopedVclPtrInstance<PopupMenu> aMenu( GAL_RES( RID_SVXMN_GALLERY1 ) );
- aMenu.EnableItem( MN_ACTUALIZE, ::std::find( aExecVector.begin(), aExecVector.end(), MN_ACTUALIZE ) != aExecVector.end() );
- aMenu.EnableItem( MN_RENAME, ::std::find( aExecVector.begin(), aExecVector.end(), MN_RENAME ) != aExecVector.end() );
- aMenu.EnableItem( MN_DELETE, ::std::find( aExecVector.begin(), aExecVector.end(), MN_DELETE ) != aExecVector.end() );
- aMenu.EnableItem( MN_ASSIGN_ID, ::std::find( aExecVector.begin(), aExecVector.end(), MN_ASSIGN_ID ) != aExecVector.end() );
- aMenu.EnableItem( MN_PROPERTIES, ::std::find( aExecVector.begin(), aExecVector.end(), MN_PROPERTIES ) != aExecVector.end() );
- aMenu.SetSelectHdl( LINK( this, GalleryBrowser1, PopupMenuHdl ) );
- aMenu.RemoveDisabledEntries();
+ aMenu->EnableItem( MN_ACTUALIZE, ::std::find( aExecVector.begin(), aExecVector.end(), MN_ACTUALIZE ) != aExecVector.end() );
+ aMenu->EnableItem( MN_RENAME, ::std::find( aExecVector.begin(), aExecVector.end(), MN_RENAME ) != aExecVector.end() );
+ aMenu->EnableItem( MN_DELETE, ::std::find( aExecVector.begin(), aExecVector.end(), MN_DELETE ) != aExecVector.end() );
+ aMenu->EnableItem( MN_ASSIGN_ID, ::std::find( aExecVector.begin(), aExecVector.end(), MN_ASSIGN_ID ) != aExecVector.end() );
+ aMenu->EnableItem( MN_PROPERTIES, ::std::find( aExecVector.begin(), aExecVector.end(), MN_PROPERTIES ) != aExecVector.end() );
+ aMenu->SetSelectHdl( LINK( this, GalleryBrowser1, PopupMenuHdl ) );
+ aMenu->RemoveDisabledEntries();
const Rectangle aThemesRect( mpThemes->GetPosPixel(), mpThemes->GetOutputSizePixel() );
Point aSelPos( mpThemes->GetBoundingRectangle( mpThemes->GetSelectEntryPos() ).Center() );
@@ -597,7 +597,7 @@ IMPL_LINK_NOARG_TYPED(GalleryBrowser1, ShowContextMenuHdl, void*, void)
aSelPos.X() = std::max( std::min( aSelPos.X(), aThemesRect.Right() ), aThemesRect.Left() );
aSelPos.Y() = std::max( std::min( aSelPos.Y(), aThemesRect.Bottom() ), aThemesRect.Top() );
- aMenu.Execute( this, aSelPos );
+ aMenu->Execute( this, aSelPos );
}
}
diff --git a/svx/source/gallery2/galbrws2.cxx b/svx/source/gallery2/galbrws2.cxx
index 63166c0debfe..0280380736da 100644
--- a/svx/source/gallery2/galbrws2.cxx
+++ b/svx/source/gallery2/galbrws2.cxx
@@ -112,8 +112,8 @@ private:
const GalleryTheme* mpTheme;
sal_uIntPtr mnObjectPos;
bool mbPreview;
- PopupMenu maPopupMenu;
- PopupMenu maBackgroundPopup;
+ ScopedVclPtr<PopupMenu> mpPopupMenu;
+ ScopedVclPtr<PopupMenu> mpBackgroundPopup;
VclPtr<GalleryBrowser2> mpBrowser;
typedef std::map< int, CommandInfo > CommandInfoMap;
@@ -146,8 +146,7 @@ GalleryThemePopup::GalleryThemePopup(
: mpTheme( pTheme )
, mnObjectPos( nObjectPos )
, mbPreview( bPreview )
- , maPopupMenu( GAL_RES( RID_SVXMN_GALLERY2 ) )
- , maBackgroundPopup()
+ , mpPopupMenu( VclPtr<PopupMenu>::Create(GAL_RES( RID_SVXMN_GALLERY2 )) )
, mpBrowser( pBrowser )
{
@@ -182,19 +181,19 @@ throw ( css::uno::RuntimeException, std::exception )
{
if ( !rEvent.IsEnabled )
{
- maPopupMenu.EnableItem( MN_ADD, false );
+ mpPopupMenu->EnableItem( MN_ADD, false );
}
}
else if ( rURL == CMD_SID_GALLERY_BG_BRUSH )
{
- maBackgroundPopup.Clear();
+ mpBackgroundPopup->Clear();
if ( rEvent.IsEnabled )
{
OUString sItem;
css::uno::Sequence< OUString > sItems;
if ( ( rEvent.State >>= sItem ) && sItem.getLength() )
{
- maBackgroundPopup.InsertItem( 1, sItem );
+ mpBackgroundPopup->InsertItem( 1, sItem );
}
else if ( ( rEvent.State >>= sItems ) && sItems.getLength() )
{
@@ -202,7 +201,7 @@ throw ( css::uno::RuntimeException, std::exception )
const OUString *pEnd = pStr + sItems.getLength();
for ( sal_uInt16 nId = 1; pStr != pEnd; pStr++, nId++ )
{
- maBackgroundPopup.InsertItem( nId, *pStr );
+ mpBackgroundPopup->InsertItem( nId, *pStr );
}
}
}
@@ -242,33 +241,33 @@ void GalleryThemePopup::ExecutePopup( vcl::Window *pWindow, const ::Point &aPos
const_cast< GalleryTheme* >( mpTheme )->GetURL( mnObjectPos, aURL );
const bool bValidURL = ( aURL.GetProtocol() != INetProtocol::NotValid );
- maPopupMenu.EnableItem( MN_ADD, bValidURL && SGA_OBJ_SOUND != eObjKind );
+ mpPopupMenu->EnableItem( MN_ADD, bValidURL && SGA_OBJ_SOUND != eObjKind );
- maPopupMenu.EnableItem( MN_PREVIEW, bValidURL );
+ mpPopupMenu->EnableItem( MN_PREVIEW, bValidURL );
- maPopupMenu.CheckItem( MN_PREVIEW, mbPreview );
+ mpPopupMenu->CheckItem( MN_PREVIEW, mbPreview );
if( mpTheme->IsReadOnly() || !mpTheme->GetObjectCount() )
{
- maPopupMenu.EnableItem( MN_DELETE, false );
- maPopupMenu.EnableItem( MN_TITLE, false );
+ mpPopupMenu->EnableItem( MN_DELETE, false );
+ mpPopupMenu->EnableItem( MN_TITLE, false );
if( mpTheme->IsReadOnly() )
- maPopupMenu.EnableItem( MN_PASTECLIPBOARD, false );
+ mpPopupMenu->EnableItem( MN_PASTECLIPBOARD, false );
if( !mpTheme->GetObjectCount() )
- maPopupMenu.EnableItem( MN_COPYCLIPBOARD, false );
+ mpPopupMenu->EnableItem( MN_COPYCLIPBOARD, false );
}
else
{
- maPopupMenu.EnableItem( MN_DELETE, !mbPreview );
- maPopupMenu.EnableItem( MN_TITLE );
- maPopupMenu.EnableItem( MN_COPYCLIPBOARD );
- maPopupMenu.EnableItem( MN_PASTECLIPBOARD );
+ mpPopupMenu->EnableItem( MN_DELETE, !mbPreview );
+ mpPopupMenu->EnableItem( MN_TITLE );
+ mpPopupMenu->EnableItem( MN_COPYCLIPBOARD );
+ mpPopupMenu->EnableItem( MN_PASTECLIPBOARD );
}
- maPopupMenu.EnableItem( MN_COPYCLIPBOARD, false );
- maPopupMenu.EnableItem( MN_PASTECLIPBOARD, false );
+ mpPopupMenu->EnableItem( MN_COPYCLIPBOARD, false );
+ mpPopupMenu->EnableItem( MN_PASTECLIPBOARD, false );
// update status
css::uno::Reference< css::frame::XDispatchProvider> xDispatchProvider(
@@ -303,19 +302,19 @@ void GalleryThemePopup::ExecutePopup( vcl::Window *pWindow, const ::Point &aPos
{}
}
- if( !maBackgroundPopup.GetItemCount() || ( eObjKind == SGA_OBJ_SVDRAW ) || ( eObjKind == SGA_OBJ_SOUND ) )
- maPopupMenu.EnableItem( MN_BACKGROUND, false );
+ if( !mpBackgroundPopup->GetItemCount() || ( eObjKind == SGA_OBJ_SVDRAW ) || ( eObjKind == SGA_OBJ_SOUND ) )
+ mpPopupMenu->EnableItem( MN_BACKGROUND, false );
else
{
- maPopupMenu.EnableItem( MN_BACKGROUND );
- maPopupMenu.SetPopupMenu( MN_BACKGROUND, &maBackgroundPopup );
- maBackgroundPopup.SetSelectHdl( LINK( this, GalleryThemePopup, BackgroundMenuSelectHdl ) );
+ mpPopupMenu->EnableItem( MN_BACKGROUND );
+ mpPopupMenu->SetPopupMenu( MN_BACKGROUND, mpBackgroundPopup );
+ mpBackgroundPopup->SetSelectHdl( LINK( this, GalleryThemePopup, BackgroundMenuSelectHdl ) );
}
- maPopupMenu.RemoveDisabledEntries();
+ mpPopupMenu->RemoveDisabledEntries();
- maPopupMenu.SetSelectHdl( LINK( this, GalleryThemePopup, MenuSelectHdl ) );
- maPopupMenu.Execute( pWindow, aPos );
+ mpPopupMenu->SetSelectHdl( LINK( this, GalleryThemePopup, MenuSelectHdl ) );
+ mpPopupMenu->Execute( pWindow, aPos );
}
IMPL_LINK_TYPED( GalleryThemePopup, MenuSelectHdl, Menu*, pMenu, bool )
diff --git a/svx/source/inc/datanavi.hxx b/svx/source/inc/datanavi.hxx
index c4d8a0e45e97..81b4ddff09cd 100644
--- a/svx/source/inc/datanavi.hxx
+++ b/svx/source/inc/datanavi.hxx
@@ -119,7 +119,7 @@ namespace svxform
virtual ~DataTreeListBox();
virtual void dispose() override;
- virtual std::unique_ptr<PopupMenu> CreateContextMenu() override;
+ virtual VclPtr<PopupMenu> CreateContextMenu() override;
virtual void ExecuteContextMenuAction( sal_uInt16 _nSelectedPopupEntry ) override;
virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ) override;
virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ) override;
diff --git a/svx/source/inc/fmshimp.hxx b/svx/source/inc/fmshimp.hxx
index 96ae5ca1f3fe..b89aa938a856 100644
--- a/svx/source/inc/fmshimp.hxx
+++ b/svx/source/inc/fmshimp.hxx
@@ -420,7 +420,7 @@ public:
SAL_DLLPRIVATE void startFiltering();
SAL_DLLPRIVATE void stopFiltering(bool bSave);
- SAL_DLLPRIVATE static PopupMenu* GetConversionMenu();
+ SAL_DLLPRIVATE static VclPtr<PopupMenu> GetConversionMenu();
// ein Menue, das alle ControlConversion-Eintraege enthaelt
/// checks whether a given control conversion slot can be applied to the current selection
diff --git a/svx/source/mnuctrls/clipboardctl.cxx b/svx/source/mnuctrls/clipboardctl.cxx
index fe6a91cf922b..35561f3eda51 100644
--- a/svx/source/mnuctrls/clipboardctl.cxx
+++ b/svx/source/mnuctrls/clipboardctl.cxx
@@ -68,7 +68,7 @@ VclPtr<SfxPopupWindow> SvxClipBoardControl::CreatePopupWindow()
if (pPopup)
pPopup->Clear();
else
- pPopup = new PopupMenu;
+ pPopup = VclPtr<PopupMenu>::Create();
sal_uInt16 nCount = pFmtItem->Count();
for (sal_uInt16 i = 0; i < nCount; ++i)
@@ -134,8 +134,7 @@ void SvxClipBoardControl::DelPopup()
{
if(pPopup)
{
- delete pPopup;
- pPopup = nullptr;
+ pPopup.disposeAndClear();
}
}
diff --git a/svx/source/mnuctrls/smarttagmenu.cxx b/svx/source/mnuctrls/smarttagmenu.cxx
index 16b0f02756fb..0d8e9e73e0a4 100644
--- a/svx/source/mnuctrls/smarttagmenu.cxx
+++ b/svx/source/mnuctrls/smarttagmenu.cxx
@@ -50,7 +50,7 @@ private:
sal_uInt32 nActionID ) : m_xAction( xAction ), m_xSmartTagProperties( xSmartTagProperties ), m_nActionID( nActionID ) {}
};
std::vector< InvokeAction > m_aInvokeActions;
- std::vector< std::unique_ptr< PopupMenu > > m_aSubMenus;
+ std::vector< VclPtr< PopupMenu > > m_aSubMenus;
std::unique_ptr< const SvxSmartTagItem > m_pSmartTagItem;
};
@@ -61,6 +61,8 @@ SmartTagMenuController::SmartTagMenuController( const css::uno::Reference< css::
SmartTagMenuController::~SmartTagMenuController()
{
+ for (auto& i : m_aSubMenus)
+ i.disposeAndClear();
}
void SmartTagMenuController::statusChanged( const css::frame::FeatureStateEvent& rEvent )
@@ -151,8 +153,9 @@ void SmartTagMenuController::FillMenu()
if ( 1 < rActionComponentsSequence.getLength() )
{
pVCLMenu->InsertItem( nMenuId, aSmartTagCaption );
- pSubMenu = new PopupMenu;
- m_aSubMenus.push_back( std::unique_ptr< PopupMenu >( pSubMenu ) );
+ VclPtrInstance<PopupMenu> pMenu;
+ pSubMenu = pMenu;
+ m_aSubMenus.push_back( pMenu );
pVCLMenu->SetPopupMenu( nMenuId++, pSubMenu );
}
pSubMenu->SetSelectHdl( LINK( this, SmartTagMenuController, MenuSelect ) );
diff --git a/svx/source/stbctrls/pszctrl.cxx b/svx/source/stbctrls/pszctrl.cxx
index 85eb356fd81c..a071173bea90 100644
--- a/svx/source/stbctrls/pszctrl.cxx
+++ b/svx/source/stbctrls/pszctrl.cxx
@@ -317,10 +317,10 @@ void SvxPosSizeStatusBarControl::Command( const CommandEvent& rCEvt )
sal_uInt32 nSelect = pImpl->nFunctionSet;
if (!nSelect)
nSelect = ( 1 << PSZ_FUNC_NONE );
- FunctionPopup_Impl aMenu( nSelect );
- if ( aMenu.Execute( &GetStatusBar(), rCEvt.GetMousePosPixel() ) )
+ ScopedVclPtrInstance<FunctionPopup_Impl> aMenu( nSelect );
+ if ( aMenu->Execute( &GetStatusBar(), rCEvt.GetMousePosPixel() ) )
{
- nSelect = aMenu.GetSelected();
+ nSelect = aMenu->GetSelected();
if (nSelect)
{
if (nSelect == (1 << PSZ_FUNC_NONE))
diff --git a/svx/source/stbctrls/selctrl.cxx b/svx/source/stbctrls/selctrl.cxx
index b68dd7961884..13579ed98bd4 100644
--- a/svx/source/stbctrls/selctrl.cxx
+++ b/svx/source/stbctrls/selctrl.cxx
@@ -98,20 +98,20 @@ void SvxSelectionModeControl::StateChanged( sal_uInt16, SfxItemState eState,
const SfxUInt16Item* pItem = static_cast<const SfxUInt16Item*>(pState);
mnState = pItem->GetValue();
- SelectionTypePopup aPop( mnState );
- GetStatusBar().SetQuickHelpText( GetId(), aPop.GetItemText( state_to_id( mnState ) ) );
+ ScopedVclPtrInstance<SelectionTypePopup> aPop( mnState );
+ GetStatusBar().SetQuickHelpText( GetId(), aPop->GetItemText( state_to_id( mnState ) ) );
}
}
bool SvxSelectionModeControl::MouseButtonDown( const MouseEvent& rEvt )
{
- SelectionTypePopup aPop( mnState );
+ ScopedVclPtrInstance<SelectionTypePopup> aPop( mnState );
StatusBar& rStatusbar = GetStatusBar();
- if ( aPop.Execute( &rStatusbar, rEvt.GetPosPixel() ) )
+ if ( aPop->Execute( &rStatusbar, rEvt.GetPosPixel() ) )
{
- sal_uInt16 nNewState = id_to_state( aPop.GetCurItemId() );
+ sal_uInt16 nNewState = id_to_state( aPop->GetCurItemId() );
if ( nNewState != mnState )
{
mnState = nNewState;
diff --git a/svx/source/stbctrls/xmlsecctrl.cxx b/svx/source/stbctrls/xmlsecctrl.cxx
index 6abcfe584536..336881576b39 100644
--- a/svx/source/stbctrls/xmlsecctrl.cxx
+++ b/svx/source/stbctrls/xmlsecctrl.cxx
@@ -118,8 +118,8 @@ void XmlSecStatusBarControl::Command( const CommandEvent& rCEvt )
{
if( rCEvt.GetCommand() == CommandEventId::ContextMenu )
{
- PopupMenu aPopupMenu( ResId( RID_SVXMNU_XMLSECSTATBAR, DIALOG_MGR() ) );
- if( aPopupMenu.Execute( &GetStatusBar(), rCEvt.GetMousePosPixel() ) )
+ ScopedVclPtrInstance<PopupMenu> aPopupMenu( ResId( RID_SVXMNU_XMLSECSTATBAR, DIALOG_MGR() ) );
+ if( aPopupMenu->Execute( &GetStatusBar(), rCEvt.GetMousePosPixel() ) )
{
css::uno::Any a;
SfxUInt16Item aState( GetSlotId(), 0 );
diff --git a/svx/source/stbctrls/zoomctrl.cxx b/svx/source/stbctrls/zoomctrl.cxx
index 88714ebfc06a..0ab191c6ba36 100644
--- a/svx/source/stbctrls/zoomctrl.cxx
+++ b/svx/source/stbctrls/zoomctrl.cxx
@@ -142,15 +142,15 @@ void SvxZoomStatusBarControl::Command( const CommandEvent& rCEvt )
{
if ( CommandEventId::ContextMenu == rCEvt.GetCommand() && bool(nValueSet) )
{
- ZoomPopup_Impl aPop( nZoom, nValueSet );
+ ScopedVclPtrInstance<ZoomPopup_Impl> aPop( nZoom, nValueSet );
StatusBar& rStatusbar = GetStatusBar();
- if ( aPop.Execute( &rStatusbar, rCEvt.GetMousePosPixel() ) && ( nZoom != aPop.GetZoom() || !nZoom ) )
+ if ( aPop->Execute( &rStatusbar, rCEvt.GetMousePosPixel() ) && ( nZoom != aPop->GetZoom() || !nZoom ) )
{
- nZoom = aPop.GetZoom();
+ nZoom = aPop->GetZoom();
SvxZoomItem aZoom( SvxZoomType::PERCENT, nZoom, GetId() );
- switch( aPop.GetCurId() )
+ switch( aPop->GetCurId() )
{
case ZOOM_OPTIMAL: aZoom.SetType( SvxZoomType::OPTIMAL ); break;
case ZOOM_PAGE_WIDTH: aZoom.SetType( SvxZoomType::PAGEWIDTH ); break;
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index b0c25965c2c2..3c8164c6f201 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -27,6 +27,7 @@
#include <vcl/toolbox.hxx>
#include <vcl/bitmapaccess.hxx>
#include <vcl/menubtn.hxx>
+#include <vcl/vclptr.hxx>
#include <svtools/valueset.hxx>
#include <svtools/ctrlbox.hxx>
#include <svl/style.hxx>
@@ -162,7 +163,7 @@ private:
OUString sDefaultStyle;
bool bInSpecialMode;
VclPtr<MenuButton> m_pButtons[MAX_STYLES_ENTRIES];
- PopupMenu m_aMenu;
+ ScopedVclPtr<PopupMenu> m_pMenu;
void ReleaseFocus();
static Color TestColorsVisible(const Color &FontCol, const Color &BackCol);
@@ -353,9 +354,9 @@ SvxStyleBox_Impl::SvxStyleBox_Impl(vcl::Window* pParent,
, aClearFormatKey( rClearFormatKey )
, aMoreKey( rMoreKey )
, bInSpecialMode( bInSpec )
- , m_aMenu ( SVX_RES( RID_SVX_STYLE_MENU ) )
+ , m_pMenu( VclPtr<PopupMenu>::Create(SVX_RES( RID_SVX_STYLE_MENU )) )
{
- m_aMenu.SetSelectHdl( LINK( this, SvxStyleBox_Impl, MenuSelectHdl ) );
+ m_pMenu->SetSelectHdl( LINK( this, SvxStyleBox_Impl, MenuSelectHdl ) );
for(VclPtr<MenuButton> & rpButton : m_pButtons)
rpButton = nullptr;
aLogicalSize = PixelToLogic( GetSizePixel(), MAP_APPFONT );
@@ -785,7 +786,7 @@ void SvxStyleBox_Impl::SetupEntry(vcl::RenderContext& rRenderContext, vcl::Windo
{
m_pButtons[nId] = VclPtr<MenuButton>::Create(pParent, WB_FLATBUTTON | WB_NOPOINTERFOCUS);
m_pButtons[nId]->SetSizePixel(Size(BUTTON_WIDTH, rRect.GetHeight()));
- m_pButtons[nId]->SetPopupMenu(&m_aMenu);
+ m_pButtons[nId]->SetPopupMenu(m_pMenu);
}
m_pButtons[nId]->SetPosPixel(Point(rRect.GetWidth() - BUTTON_WIDTH, rRect.getY()));
m_pButtons[nId]->Show();
@@ -3139,4 +3140,4 @@ void SvxCurrencyToolBoxControl::GetCurrencySymbols( std::vector<OUString>& rList
}
}
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ \ No newline at end of file
diff --git a/sw/inc/AnnotationWin.hxx b/sw/inc/AnnotationWin.hxx
index 7296528e9f5b..9d556ed7899d 100644
--- a/sw/inc/AnnotationWin.hxx
+++ b/sw/inc/AnnotationWin.hxx
@@ -63,8 +63,8 @@ class SwAnnotationWin : public sw::sidebarwindows::SwSidebarWin
sal_uInt32 CountFollowing();
SwFormatField* mpFormatField;
- SwPostItField* mpField;
- PopupMenu* mpButtonPopup;
+ SwPostItField* mpField;
+ VclPtr<PopupMenu> mpButtonPopup;
};
diff --git a/sw/qa/extras/odfimport/odfimport.cxx b/sw/qa/extras/odfimport/odfimport.cxx
index 6a1f493b1ae0..57182c158bad 100644
--- a/sw/qa/extras/odfimport/odfimport.cxx
+++ b/sw/qa/extras/odfimport/odfimport.cxx
@@ -573,12 +573,12 @@ DECLARE_ODFIMPORT_TEST(testSpellmenuRedline, "spellmenu-redline.odt")
SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell();
OUString aParaText;
uno::Reference<linguistic2::XSpellAlternatives> xAlt;
- SwSpellPopup aPopup(pWrtShell, xAlt, aParaText);
+ ScopedVclPtrInstance<SwSpellPopup> aPopup(pWrtShell, xAlt, aParaText);
// Make sure that if we show the spellcheck popup menu (for the current
// document, which contains redlines), then the last two entries will be
// always 'go to next/previous change'.
- CPPUNIT_ASSERT_EQUAL(sal_uInt16(FN_REDLINE_NEXT_CHANGE), aPopup.GetItemId(aPopup.GetItemCount() - 2));
- CPPUNIT_ASSERT_EQUAL(sal_uInt16(FN_REDLINE_PREV_CHANGE), aPopup.GetItemId(aPopup.GetItemCount() - 1));
+ CPPUNIT_ASSERT_EQUAL(sal_uInt16(FN_REDLINE_NEXT_CHANGE), aPopup->GetItemId(aPopup->GetItemCount() - 2));
+ CPPUNIT_ASSERT_EQUAL(sal_uInt16(FN_REDLINE_PREV_CHANGE), aPopup->GetItemId(aPopup->GetItemCount() - 1));
}
DECLARE_ODFIMPORT_TEST(testAnnotationFormatting, "annotation-formatting.odt")
diff --git a/sw/source/uibase/docvw/AnnotationWin.cxx b/sw/source/uibase/docvw/AnnotationWin.cxx
index 17bc48ebc4b2..8d9bff9a2a51 100644
--- a/sw/source/uibase/docvw/AnnotationWin.cxx
+++ b/sw/source/uibase/docvw/AnnotationWin.cxx
@@ -79,7 +79,7 @@ SwAnnotationWin::~SwAnnotationWin()
void SwAnnotationWin::dispose()
{
- delete mpButtonPopup;
+ mpButtonPopup.disposeAndClear();
sw::sidebarwindows::SwSidebarWin::dispose();
}
@@ -220,7 +220,7 @@ sal_uInt32 SwAnnotationWin::CountFollowing()
VclPtr<MenuButton> SwAnnotationWin::CreateMenuButton()
{
- mpButtonPopup = new PopupMenu(SW_RES(MN_ANNOTATION_BUTTON));
+ mpButtonPopup = VclPtr<PopupMenu>::Create(SW_RES(MN_ANNOTATION_BUTTON));
OUString aText = mpButtonPopup->GetItemText( FN_DELETE_NOTE_AUTHOR );
SwRewriter aRewriter;
aRewriter.AddRule(UndoArg1,GetAuthor());
diff --git a/sw/source/uibase/docvw/HeaderFooterWin.cxx b/sw/source/uibase/docvw/HeaderFooterWin.cxx
index b2c33e004b00..b170140fb26b 100644
--- a/sw/source/uibase/docvw/HeaderFooterWin.cxx
+++ b/sw/source/uibase/docvw/HeaderFooterWin.cxx
@@ -144,7 +144,7 @@ SwHeaderFooterWin::SwHeaderFooterWin( SwEditWin* pEditWin, const SwFrame *pFrame
m_pLine->SetZOrder(this, ZOrderFlags::Before);
// Create and set the PopupMenu
- m_pPopupMenu = new PopupMenu(SW_RES(MN_HEADERFOOTER_BUTTON));
+ m_pPopupMenu = VclPtr<PopupMenu>::Create(SW_RES(MN_HEADERFOOTER_BUTTON));
// Rewrite the menu entries' text
if (m_bIsHeader)
@@ -171,7 +171,7 @@ SwHeaderFooterWin::~SwHeaderFooterWin( )
void SwHeaderFooterWin::dispose()
{
- delete m_pPopupMenu;
+ m_pPopupMenu.disposeAndClear();
m_pLine.disposeAndClear();
SwFrameMenuButtonBase::dispose();
}
diff --git a/sw/source/uibase/docvw/PageBreakWin.cxx b/sw/source/uibase/docvw/PageBreakWin.cxx
index 2070b4c787c0..c556a7b1bde3 100644
--- a/sw/source/uibase/docvw/PageBreakWin.cxx
+++ b/sw/source/uibase/docvw/PageBreakWin.cxx
@@ -108,7 +108,7 @@ SwPageBreakWin::SwPageBreakWin( SwEditWin* pEditWin, const SwFrame *pFrame ) :
m_pLine = VclPtr<SwBreakDashedLine>::Create( GetEditWin(), &SwViewOption::GetPageBreakColor, this );
// Create the popup menu
- m_pPopupMenu = new PopupMenu( SW_RES( MN_PAGEBREAK_BUTTON ) );
+ m_pPopupMenu = VclPtr<PopupMenu>::Create( SW_RES( MN_PAGEBREAK_BUTTON ) );
m_pPopupMenu->SetDeactivateHdl( LINK( this, SwPageBreakWin, HideHandler ) );
SetPopupMenu( m_pPopupMenu );
@@ -127,8 +127,7 @@ void SwPageBreakWin::dispose()
m_aFadeTimer.Stop();
m_pLine.disposeAndClear();
- delete m_pPopupMenu;
- m_pPopupMenu = nullptr;
+ m_pPopupMenu.disposeAndClear();
delete m_pMousePt;
m_pMousePt = nullptr;
diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx
index b184da148c88..fedbd8bed1e1 100644
--- a/sw/source/uibase/docvw/edtwin.cxx
+++ b/sw/source/uibase/docvw/edtwin.cxx
@@ -5325,20 +5325,20 @@ void SwEditWin::Command( const CommandEvent& rCEvt )
if ( m_rView.GetDocShell()->IsReadOnly() )
{
- std::unique_ptr<SwReadOnlyPopup> pROPopup(new SwReadOnlyPopup( aDocPos, m_rView ));
+ ScopedVclPtrInstance<SwReadOnlyPopup> pROPopup( aDocPos, m_rView );
ui::ContextMenuExecuteEvent aEvent;
aEvent.SourceWindow = VCLUnoHelper::GetInterface( this );
aEvent.ExecutePosition.X = aPixPos.X();
aEvent.ExecutePosition.Y = aPixPos.Y();
- Menu* pMenu = nullptr;
+ VclPtr<Menu> pMenu;
OUString sMenuName("private:resource/ReadonlyContextMenu");
if( GetView().TryContextMenuInterception( *pROPopup, sMenuName, pMenu, aEvent ) )
{
if ( pMenu )
{
- sal_uInt16 nExecId = static_cast<PopupMenu*>(pMenu)->Execute(this, aPixPos);
- if( !::ExecuteMenuCommand( *static_cast<PopupMenu*>(pMenu), *m_rView.GetViewFrame(), nExecId ))
+ sal_uInt16 nExecId = static_cast<PopupMenu*>(pMenu.get())->Execute(this, aPixPos);
+ if( !::ExecuteMenuCommand( *static_cast<PopupMenu*>(pMenu.get()), *m_rView.GetViewFrame(), nExecId ))
pROPopup->Execute(this, nExecId);
}
else
diff --git a/sw/source/uibase/docvw/romenu.cxx b/sw/source/uibase/docvw/romenu.cxx
index 3aef4866ede5..d8ebac8b8540 100644
--- a/sw/source/uibase/docvw/romenu.cxx
+++ b/sw/source/uibase/docvw/romenu.cxx
@@ -53,8 +53,14 @@ using namespace ::sfx2;
SwReadOnlyPopup::~SwReadOnlyPopup()
{
+ disposeOnce();
+}
+
+void SwReadOnlyPopup::dispose()
+{
delete pImageMap;
delete pTargetURL;
+ PopupMenu::dispose();
}
void SwReadOnlyPopup::Check( sal_uInt16 nMID, sal_uInt16 nSID, SfxDispatcher &rDis )
diff --git a/sw/source/uibase/docvw/romenu.hxx b/sw/source/uibase/docvw/romenu.hxx
index 07241c81425b..985cb679810f 100644
--- a/sw/source/uibase/docvw/romenu.hxx
+++ b/sw/source/uibase/docvw/romenu.hxx
@@ -52,6 +52,7 @@ class SwReadOnlyPopup : public PopupMenu
public:
SwReadOnlyPopup( const Point &rDPos, SwView &rV );
virtual ~SwReadOnlyPopup();
+ virtual void dispose() override;
void Execute( vcl::Window* pWin, const Point &rPPos );
void Execute( vcl::Window* pWin, sal_uInt16 nId );
diff --git a/sw/source/uibase/inc/HeaderFooterWin.hxx b/sw/source/uibase/inc/HeaderFooterWin.hxx
index ec0980bfaeb0..d98a03238813 100644
--- a/sw/source/uibase/inc/HeaderFooterWin.hxx
+++ b/sw/source/uibase/inc/HeaderFooterWin.hxx
@@ -22,7 +22,7 @@ class SwHeaderFooterWin : public SwFrameMenuButtonBase
{
OUString m_sLabel;
bool m_bIsHeader;
- PopupMenu* m_pPopupMenu;
+ VclPtr<PopupMenu> m_pPopupMenu;
VclPtr<vcl::Window> m_pLine;
bool m_bIsAppearing;
int m_nFadeRate;
diff --git a/sw/source/uibase/inc/PageBreakWin.hxx b/sw/source/uibase/inc/PageBreakWin.hxx
index 6ee987f3e333..c5bbfc5193a3 100644
--- a/sw/source/uibase/inc/PageBreakWin.hxx
+++ b/sw/source/uibase/inc/PageBreakWin.hxx
@@ -22,7 +22,7 @@ class SwPageFrame;
*/
class SwPageBreakWin : public SwFrameMenuButtonBase
{
- PopupMenu* m_pPopupMenu;
+ VclPtr<PopupMenu> m_pPopupMenu;
VclPtr<vcl::Window> m_pLine;
bool m_bIsAppearing;
int m_nFadeRate;
diff --git a/sw/source/uibase/inc/conttree.hxx b/sw/source/uibase/inc/conttree.hxx
index e496137bf292..27b5469a2444 100644
--- a/sw/source/uibase/inc/conttree.hxx
+++ b/sw/source/uibase/inc/conttree.hxx
@@ -152,7 +152,7 @@ protected:
void GotoContent(SwContent* pCnt);
static void SetInDrag(bool bSet) {bIsInDrag = bSet;}
- virtual std::unique_ptr<PopupMenu> CreateContextMenu() override;
+ virtual VclPtr<PopupMenu> CreateContextMenu() override;
virtual void ExecuteContextMenuAction( sal_uInt16 nSelectedPopupEntry ) override;
public:
@@ -326,7 +326,7 @@ protected:
static void SetShowShell(const SfxObjectShell*pSet) {pShowShell = pSet;}
DECL_STATIC_LINK_TYPED(SwGlobalTree, ShowFrameHdl, void*, void);
- virtual std::unique_ptr<PopupMenu> CreateContextMenu() override;
+ virtual VclPtr<PopupMenu> CreateContextMenu() override;
virtual void ExecuteContextMenuAction( sal_uInt16 nSelectedPopupEntry ) override;
public:
diff --git a/sw/source/uibase/inc/inputwin.hxx b/sw/source/uibase/inc/inputwin.hxx
index 78531cb08cb5..666a6ae8a5f6 100644
--- a/sw/source/uibase/inc/inputwin.hxx
+++ b/sw/source/uibase/inc/inputwin.hxx
@@ -49,8 +49,8 @@ friend class InputEdit;
VclPtr<Edit> aPos;
VclPtr<InputEdit> aEdit;
- PopupMenu aPopMenu;
- SwFieldMgr* pMgr;
+ ScopedVclPtrInstance<PopupMenu> aPopMenu;
+ SwFieldMgr* pMgr;
SwWrtShell* pWrtShell;
SwView* pView;
OUString aAktTableName, sOldFormula;
diff --git a/sw/source/uibase/inc/redlndlg.hxx b/sw/source/uibase/inc/redlndlg.hxx
index ccf15226632a..c661ae22ff1b 100644
--- a/sw/source/uibase/inc/redlndlg.hxx
+++ b/sw/source/uibase/inc/redlndlg.hxx
@@ -66,7 +66,7 @@ class SW_DLLPUBLIC SwRedlineAcceptDlg
SwRedlineDataChildArr m_RedlineChildren;
SwRedlineDataParentSortArr m_aUsedSeqNo;
VclPtr<SvxAcceptChgCtr> m_aTabPagesCTRL;
- PopupMenu m_aPopup;
+ ScopedVclPtrInstance<PopupMenu> m_aPopup;
Timer m_aDeselectTimer;
Timer m_aSelectTimer;
OUString m_sInserted;
diff --git a/sw/source/uibase/inc/workctrl.hxx b/sw/source/uibase/inc/workctrl.hxx
index 20b2314a334c..a90c936014cb 100644
--- a/sw/source/uibase/inc/workctrl.hxx
+++ b/sw/source/uibase/inc/workctrl.hxx
@@ -54,7 +54,7 @@ class SwView;
class SwTbxAutoTextCtrl : public SfxToolBoxControl
{
- PopupMenu* pPopup;
+ VclPtr<PopupMenu> pPopup;
void DelPopup();
public:
diff --git a/sw/source/uibase/misc/redlndlg.cxx b/sw/source/uibase/misc/redlndlg.cxx
index 48e342364fc0..eca8ac5fe9ee 100644
--- a/sw/source/uibase/misc/redlndlg.cxx
+++ b/sw/source/uibase/misc/redlndlg.cxx
@@ -1041,19 +1041,19 @@ IMPL_LINK_NOARG_TYPED(SwRedlineAcceptDlg, CommandHdl, SvSimpleTable*, void)
}
}
- m_aPopup.EnableItem( MN_EDIT_COMMENT, pEntry && pRed &&
+ m_aPopup->EnableItem( MN_EDIT_COMMENT, pEntry && pRed &&
!m_pTable->GetParent(pEntry) &&
!m_pTable->NextSelected(pEntry)
//JP 27.9.2001: make no sense if we handle readonly sections
// && pRed->HasReadonlySel()
);
- m_aPopup.EnableItem( MN_SUB_SORT, m_pTable->First() != nullptr );
+ m_aPopup->EnableItem( MN_SUB_SORT, m_pTable->First() != nullptr );
sal_uInt16 nColumn = m_pTable->GetSortedCol();
if (nColumn == 0xffff)
nColumn = 4;
- PopupMenu *pSubMenu = m_aPopup.GetPopupMenu(MN_SUB_SORT);
+ PopupMenu *pSubMenu = m_aPopup->GetPopupMenu(MN_SUB_SORT);
if (pSubMenu)
{
for (sal_uInt16 i = MN_SORT_ACTION; i < MN_SORT_ACTION + 5; i++)
@@ -1062,7 +1062,7 @@ IMPL_LINK_NOARG_TYPED(SwRedlineAcceptDlg, CommandHdl, SvSimpleTable*, void)
pSubMenu->CheckItem(nColumn + MN_SORT_ACTION);
}
- sal_uInt16 nRet = m_aPopup.Execute(m_pTable, aCEvt.GetMousePosPixel());
+ sal_uInt16 nRet = m_aPopup->Execute(m_pTable, aCEvt.GetMousePosPixel());
switch( nRet )
{
diff --git a/sw/source/uibase/ribbar/inputwin.cxx b/sw/source/uibase/ribbar/inputwin.cxx
index 90df5738262c..84acdb149e58 100644
--- a/sw/source/uibase/ribbar/inputwin.cxx
+++ b/sw/source/uibase/ribbar/inputwin.cxx
@@ -124,7 +124,7 @@ SwInputWindow::SwInputWindow(vcl::Window* pParent, SfxDispatcher* pDispatcher)
aPos->SetPosSizePixel( aPosPos, aPosSize );
aEdit->SetPosSizePixel( aEditPos, aEditSize );
- aPopMenu.SetSelectHdl(LINK( this, SwInputWindow, MenuHdl ));
+ aPopMenu->SetSelectHdl(LINK( this, SwInputWindow, MenuHdl ));
}
SwInputWindow::~SwInputWindow()
@@ -350,7 +350,7 @@ IMPL_LINK_NOARG_TYPED(SwInputWindow, DropdownClickHdl, ToolBox *, void)
{
case FN_FORMULA_CALC :
{
- aPopMenu.Execute( this, GetItemRect( FN_FORMULA_CALC ), PopupMenuFlags::NoMouseUpClose );
+ aPopMenu->Execute( this, GetItemRect( FN_FORMULA_CALC ), PopupMenuFlags::NoMouseUpClose );
break;
default:
break;
diff --git a/sw/source/uibase/ribbar/workctrl.cxx b/sw/source/uibase/ribbar/workctrl.cxx
index 710b5c7c11ca..ad207523df3d 100644
--- a/sw/source/uibase/ribbar/workctrl.cxx
+++ b/sw/source/uibase/ribbar/workctrl.cxx
@@ -86,7 +86,7 @@ VclPtr<SfxPopupWindow> SwTbxAutoTextCtrl::CreatePopupWindow()
{
Link<Menu*,bool> aLnk = LINK(this, SwTbxAutoTextCtrl, PopupHdl);
- pPopup = new PopupMenu;
+ pPopup = VclPtr<PopupMenu>::Create();
SwGlossaryList* pGlossaryList = ::GetGlossaryList();
const size_t nGroupCount = pGlossaryList->GetGroupCount();
for(size_t i = 1; i <= nGroupCount; ++i)
@@ -98,7 +98,7 @@ VclPtr<SfxPopupWindow> SwTbxAutoTextCtrl::CreatePopupWindow()
sal_uInt16 nIndex = static_cast<sal_uInt16>(100*i);
// but insert without extension
pPopup->InsertItem( i, sTitle);
- PopupMenu* pSub = new PopupMenu;
+ PopupMenu* pSub = VclPtr<PopupMenu>::Create();
pSub->SetSelectHdl(aLnk);
pPopup->SetPopupMenu(i, pSub);
for(sal_uInt16 j = 0; j < nBlockCount; j++)
@@ -164,11 +164,10 @@ void SwTbxAutoTextCtrl::DelPopup()
{
for( sal_uInt16 i = 0; i < pPopup->GetItemCount(); i ++ )
{
- PopupMenu* pSubPopup = pPopup->GetPopupMenu(pPopup->GetItemId(i));
- delete pSubPopup;
+ VclPtr<PopupMenu> pSubPopup = pPopup->GetPopupMenu(pPopup->GetItemId(i));
+ pSubPopup.disposeAndClear(); // NoelG: dodgy, this leaves a dangling pointer
}
- delete pPopup;
- pPopup = nullptr;
+ pPopup.disposeAndClear();
}
}
diff --git a/sw/source/uibase/uiview/viewling.cxx b/sw/source/uibase/uiview/viewling.cxx
index 905ceca86120..094377cc3ff8 100644
--- a/sw/source/uibase/uiview/viewling.cxx
+++ b/sw/source/uibase/uiview/viewling.cxx
@@ -703,22 +703,22 @@ bool SwView::ExecSpellPopup(const Point& rPt)
bRet = true;
m_pWrtShell->SttSelect();
- std::unique_ptr< SwSpellPopup > pPopup;
+ ScopedVclPtr< SwSpellPopup > pPopup;
if (bUseGrammarContext)
{
sal_Int32 nPos = aPoint.nContent.GetIndex();
(void) nPos;
- pPopup.reset(new SwSpellPopup( m_pWrtShell, aGrammarCheckRes, nErrorInResult, aSuggestions, aParaText ));
+ pPopup = VclPtr<SwSpellPopup>::Create( m_pWrtShell, aGrammarCheckRes, nErrorInResult, aSuggestions, aParaText ).get();
}
else
- pPopup.reset(new SwSpellPopup( m_pWrtShell, xAlt, aParaText ));
+ pPopup = VclPtr<SwSpellPopup>::Create( m_pWrtShell, xAlt, aParaText ).get();
ui::ContextMenuExecuteEvent aEvent;
const Point aPixPos = GetEditWin().LogicToPixel( rPt );
aEvent.SourceWindow = VCLUnoHelper::GetInterface( m_pEditWin );
aEvent.ExecutePosition.X = aPixPos.X();
aEvent.ExecutePosition.Y = aPixPos.Y();
- Menu* pMenu = nullptr;
+ VclPtr<Menu> pMenu;
OUString sMenuName = bUseGrammarContext ?
OUString("private:resource/GrammarContextMenu") : OUString("private:resource/SpellContextMenu");
@@ -729,8 +729,8 @@ bool SwView::ExecSpellPopup(const Point& rPt)
//! 'custom made' menu... *sigh* (code copied from sfx2 and framework)
if ( pMenu )
{
- const sal_uInt16 nId = static_cast<PopupMenu*>(pMenu)->Execute(m_pEditWin, aPixPos);
- OUString aCommand = static_cast<PopupMenu*>(pMenu)->GetItemCommand(nId);
+ const sal_uInt16 nId = static_cast<PopupMenu*>(pMenu.get())->Execute(m_pEditWin, aPixPos);
+ OUString aCommand = static_cast<PopupMenu*>(pMenu.get())->GetItemCommand(nId);
if (aCommand.isEmpty() )
{
if(!ExecuteMenuCommand(dynamic_cast<PopupMenu&>(*pMenu), *GetViewFrame(), nId ))
diff --git a/sw/source/uibase/utlui/bookctrl.cxx b/sw/source/uibase/utlui/bookctrl.cxx
index 408181cc86a9..41f064150232 100644
--- a/sw/source/uibase/utlui/bookctrl.cxx
+++ b/sw/source/uibase/utlui/bookctrl.cxx
@@ -101,7 +101,7 @@ void SwBookmarkControl::Command( const CommandEvent& rCEvt )
if ( rCEvt.GetCommand() == CommandEventId::ContextMenu &&
!GetStatusBar().GetItemText( GetId() ).isEmpty() )
{
- BookmarkPopup_Impl aPop;
+ ScopedVclPtrInstance<BookmarkPopup_Impl> aPop;
SwWrtShell* pWrtShell = ::GetActiveWrtShell();
if( pWrtShell && pWrtShell->getIDocumentMarkAccess()->getAllMarksCount() > 0 )
{
@@ -115,13 +115,13 @@ void SwBookmarkControl::Command( const CommandEvent& rCEvt )
{
if(IDocumentMarkAccess::MarkType::BOOKMARK == IDocumentMarkAccess::GetType(**ppBookmark))
{
- aPop.InsertItem( nPopupId, ppBookmark->get()->GetName() );
+ aPop->InsertItem( nPopupId, ppBookmark->get()->GetName() );
aBookmarkIdx[nPopupId] = static_cast<sal_uInt16>(ppBookmark - ppBookmarkStart);
nPopupId++;
}
}
- aPop.Execute( &GetStatusBar(), rCEvt.GetMousePosPixel());
- sal_uInt16 nCurrId = aPop.GetCurId();
+ aPop->Execute( &GetStatusBar(), rCEvt.GetMousePosPixel());
+ sal_uInt16 nCurrId = aPop->GetCurId();
if( nCurrId != USHRT_MAX)
{
SfxUInt16Item aBookmark( FN_STAT_BOOKMARK, aBookmarkIdx[nCurrId] );
diff --git a/sw/source/uibase/utlui/content.cxx b/sw/source/uibase/utlui/content.cxx
index 85a65f4fcece..fa3c723f198b 100644
--- a/sw/source/uibase/utlui/content.cxx
+++ b/sw/source/uibase/utlui/content.cxx
@@ -1096,13 +1096,13 @@ sal_Int8 SwContentTree::ExecuteDrop( const ExecuteDropEvent& rEvt )
// Handler for Dragging and ContextMenu
-std::unique_ptr<PopupMenu> SwContentTree::CreateContextMenu()
+VclPtr<PopupMenu> SwContentTree::CreateContextMenu()
{
- std::unique_ptr<PopupMenu> pPop(new PopupMenu);
- PopupMenu* pSubPop1 = new PopupMenu;
- PopupMenu* pSubPop2 = new PopupMenu;
- PopupMenu* pSubPop3 = new PopupMenu;
- PopupMenu* pSubPop4 = new PopupMenu; // Edit
+ VclPtrInstance<PopupMenu> pPop;
+ VclPtrInstance<PopupMenu> pSubPop1;
+ VclPtrInstance<PopupMenu> pSubPop2;
+ VclPtrInstance<PopupMenu> pSubPop3;
+ VclPtrInstance<PopupMenu> pSubPop4; // Edit
for(int i = 1; i <= MAXLEVEL; ++i)
{
diff --git a/sw/source/uibase/utlui/glbltree.cxx b/sw/source/uibase/utlui/glbltree.cxx
index 9aaee86d7bbf..e8e47994680d 100644
--- a/sw/source/uibase/utlui/glbltree.cxx
+++ b/sw/source/uibase/utlui/glbltree.cxx
@@ -330,16 +330,16 @@ sal_Int8 SwGlobalTree::AcceptDrop( const AcceptDropEvent& rEvt )
return nRet;
}
-std::unique_ptr<PopupMenu> SwGlobalTree::CreateContextMenu()
+VclPtr<PopupMenu> SwGlobalTree::CreateContextMenu()
{
- std::unique_ptr<PopupMenu> pPop;
+ VclPtr<PopupMenu> pPop;
if(pActiveShell &&
!pActiveShell->GetView().GetDocShell()->IsReadOnly())
{
const sal_uInt16 nEnableFlags = GetEnableFlags();
- pPop.reset(new PopupMenu);
- PopupMenu* pSubPop1 = new PopupMenu;
- PopupMenu* pSubPop2 = new PopupMenu;
+ pPop = VclPtr<PopupMenu>::Create();
+ VclPtrInstance<PopupMenu> pSubPop1;
+ VclPtrInstance<PopupMenu> pSubPop2;
for (sal_uInt16 i = CTX_UPDATE_SEL; i <= CTX_UPDATE_ALL; i++)
{
@@ -394,7 +394,7 @@ void SwGlobalTree::TbxMenuHdl(sal_uInt16 nTbxId, ToolBox* pBox)
const sal_uInt16 nEnableFlags = GetEnableFlags();
if(FN_GLOBAL_OPEN == nTbxId)
{
- std::unique_ptr<PopupMenu> pMenu(new PopupMenu);
+ ScopedVclPtrInstance<PopupMenu> pMenu;
for (sal_uInt16 i = CTX_INSERT_ANY_INDEX; i <= CTX_INSERT_TEXT; i++)
{
pMenu->InsertItem( i, aContextStrings[STR_INDEX - STR_GLOBAL_CONTEXT_FIRST - CTX_INSERT_ANY_INDEX + i] );
@@ -406,13 +406,13 @@ void SwGlobalTree::TbxMenuHdl(sal_uInt16 nTbxId, ToolBox* pBox)
pMenu->EnableItem(CTX_INSERT_NEW_FILE, 0 != (nEnableFlags & ENABLE_INSERT_FILE));
pMenu->SetSelectHdl(LINK(this, SwGlobalTree, PopupHdl));
pMenu->Execute(pBox, pBox->GetItemRect(nTbxId));
- pMenu.reset();
+ pMenu.disposeAndClear();
pBox->EndSelection();
pBox->Invalidate();
}
else if(FN_GLOBAL_UPDATE == nTbxId)
{
- std::unique_ptr<PopupMenu> pMenu(new PopupMenu);
+ ScopedVclPtrInstance<PopupMenu> pMenu;
for (sal_uInt16 i = CTX_UPDATE_SEL; i <= CTX_UPDATE_ALL; i++)
{
pMenu->InsertItem( i, aContextStrings[STR_UPDATE_SEL - STR_GLOBAL_CONTEXT_FIRST - CTX_UPDATE_SEL+ i] );
@@ -421,7 +421,7 @@ void SwGlobalTree::TbxMenuHdl(sal_uInt16 nTbxId, ToolBox* pBox)
pMenu->EnableItem(CTX_UPDATE_SEL, 0 != (nEnableFlags & ENABLE_UPDATE_SEL));
pMenu->SetSelectHdl(LINK(this, SwGlobalTree, PopupHdl));
pMenu->Execute(pBox, pBox->GetItemRect(nTbxId));
- pMenu.reset();
+ pMenu.disposeAndClear();
pBox->EndSelection();
pBox->Invalidate();
}
diff --git a/sw/source/uibase/utlui/navipi.cxx b/sw/source/uibase/utlui/navipi.cxx
index f87e656b6801..2d66ac1d083a 100644
--- a/sw/source/uibase/utlui/navipi.cxx
+++ b/sw/source/uibase/utlui/navipi.cxx
@@ -380,7 +380,7 @@ IMPL_LINK_TYPED( SwNavigationPI, ToolBoxDropdownClickHdl, ToolBox*, pBox, void )
HID_NAVI_DRAG_LINK,
HID_NAVI_DRAG_COPY,
};
- std::unique_ptr<PopupMenu> pMenu(new PopupMenu);
+ ScopedVclPtrInstance<PopupMenu> pMenu;
for (sal_uInt16 i = 0; i <= static_cast<sal_uInt16>(RegionMode::EMBEDDED); i++)
{
pMenu->InsertItem( i + 1, m_aContextArr[i] );
@@ -394,13 +394,13 @@ IMPL_LINK_TYPED( SwNavigationPI, ToolBoxDropdownClickHdl, ToolBox*, pBox, void )
PopupMenuFlags::ExecuteDown );
pBox->SetItemDown( nCurrItemId, false );
pBox->EndSelection();
- pMenu.reset();
+ pMenu.disposeAndClear();
pBox->Invalidate();
}
break;
case FN_OUTLINE_LEVEL:
{
- std::unique_ptr<PopupMenu> pMenu(new PopupMenu);
+ ScopedVclPtrInstance<PopupMenu> pMenu;
for (sal_uInt16 i = 101; i <= 100 + MAXLEVEL; i++)
{
pMenu->InsertItem( i, OUString::number(i - 100) );
@@ -413,7 +413,7 @@ IMPL_LINK_TYPED( SwNavigationPI, ToolBoxDropdownClickHdl, ToolBox*, pBox, void )
pBox->GetItemRect(FN_OUTLINE_LEVEL),
PopupMenuFlags::ExecuteDown );
pBox->SetItemDown( nCurrItemId, false );
- pMenu.reset();
+ pMenu.disposeAndClear();
pBox->EndSelection();
pBox->Invalidate();
}
diff --git a/sw/source/uibase/utlui/tmplctrl.cxx b/sw/source/uibase/utlui/tmplctrl.cxx
index 6790276b5c57..f5f2e56968da 100644
--- a/sw/source/uibase/utlui/tmplctrl.cxx
+++ b/sw/source/uibase/utlui/tmplctrl.cxx
@@ -93,7 +93,7 @@ void SwTemplateControl::Command( const CommandEvent& rCEvt )
if ( rCEvt.GetCommand() == CommandEventId::ContextMenu &&
!GetStatusBar().GetItemText( GetId() ).isEmpty() )
{
- SwTemplatePopup_Impl aPop;
+ ScopedVclPtrInstance<SwTemplatePopup_Impl> aPop;
{
SwView* pView = ::GetActiveView();
SwWrtShell* pWrtShell;
@@ -111,12 +111,12 @@ void SwTemplateControl::Command( const CommandEvent& rCEvt )
SfxStyleSheetBase* pStyle = pPool->First();
while( pStyle )
{
- aPop.InsertItem( ++nCount, pStyle->GetName() );
+ aPop->InsertItem( ++nCount, pStyle->GetName() );
pStyle = pPool->Next();
}
- aPop.Execute( &GetStatusBar(), rCEvt.GetMousePosPixel());
- const sal_uInt16 nCurrId = aPop.GetCurId();
+ aPop->Execute( &GetStatusBar(), rCEvt.GetMousePosPixel());
+ const sal_uInt16 nCurrId = aPop->GetCurId();
if( nCurrId != USHRT_MAX)
{
// looks a bit awkward, but another way is not possible
diff --git a/sw/source/uibase/utlui/unotools.cxx b/sw/source/uibase/utlui/unotools.cxx
index 5a43806c3c00..a4346b6785ed 100644
--- a/sw/source/uibase/utlui/unotools.cxx
+++ b/sw/source/uibase/utlui/unotools.cxx
@@ -448,18 +448,18 @@ static const sal_Int16 nZoomValues[] =
void SwOneExampleFrame::CreatePopup(const Point& rPt)
{
- PopupMenu aPop;
- PopupMenu aSubPop1;
+ ScopedVclPtrInstance<PopupMenu> aPop;
+ ScopedVclPtrInstance<PopupMenu> aSubPop1;
ResStringArray& rArr = aMenuRes.GetMenuArray();
- aPop.InsertItem(ITEM_UP, rArr.GetString(rArr.FindIndex(ST_MENU_UP )));
- aPop.InsertItem(ITEM_DOWN, rArr.GetString(rArr.FindIndex(ST_MENU_DOWN )));
+ aPop->InsertItem(ITEM_UP, rArr.GetString(rArr.FindIndex(ST_MENU_UP )));
+ aPop->InsertItem(ITEM_DOWN, rArr.GetString(rArr.FindIndex(ST_MENU_DOWN )));
Link<Menu*,bool> aSelLk = LINK(this, SwOneExampleFrame, PopupHdl );
- aPop.SetSelectHdl(aSelLk);
+ aPop->SetSelectHdl(aSelLk);
if(EX_SHOW_ONLINE_LAYOUT == nStyleFlags)
{
- aPop.InsertItem(ITEM_ZOOM, rArr.GetString(rArr.FindIndex(ST_MENU_ZOOM )));
+ aPop->InsertItem(ITEM_ZOOM, rArr.GetString(rArr.FindIndex(ST_MENU_ZOOM )));
uno::Reference< view::XViewSettingsSupplier > xSettings(_xController, uno::UNO_QUERY);
uno::Reference< beans::XPropertySet > xViewProps = xSettings->getViewSettings();
@@ -472,15 +472,14 @@ void SwOneExampleFrame::CreatePopup(const Point& rPt)
{
OUString sTemp = unicode::formatPercent(nZoomValues[i],
Application::GetSettings().GetUILanguageTag());
- aSubPop1.InsertItem( ITEM_ZOOM + i + 1, sTemp);
+ aSubPop1->InsertItem( ITEM_ZOOM + i + 1, sTemp);
if(nZoom == nZoomValues[i])
- aSubPop1.CheckItem(ITEM_ZOOM + i + 1);
+ aSubPop1->CheckItem(ITEM_ZOOM + i + 1);
}
- aPop.SetPopupMenu( ITEM_ZOOM, &aSubPop1 );
- aSubPop1.SetSelectHdl(aSelLk);
+ aPop->SetPopupMenu( ITEM_ZOOM, aSubPop1.get() );
+ aSubPop1->SetSelectHdl(aSelLk);
}
- aPop.Execute( aTopWindow.get(), rPt );
-
+ aPop->Execute( aTopWindow.get(), rPt );
}
IMPL_LINK_TYPED(SwOneExampleFrame, PopupHdl, Menu*, pMenu, bool )
diff --git a/toolkit/source/awt/vclxmenu.cxx b/toolkit/source/awt/vclxmenu.cxx
index 8c2598e9f982..827e0df4756d 100644
--- a/toolkit/source/awt/vclxmenu.cxx
+++ b/toolkit/source/awt/vclxmenu.cxx
@@ -56,7 +56,7 @@ VCLXMenu::~VCLXMenu()
if ( mpMenu )
{
mpMenu->RemoveEventListener( LINK( this, VCLXMenu, MenuEventListener ) );
- delete mpMenu;
+ mpMenu.disposeAndClear();
}
}
@@ -70,9 +70,9 @@ void VCLXMenu::ImplCreateMenu( bool bPopup )
DBG_ASSERT( !mpMenu, "CreateMenu: Menu exists!" );
if ( bPopup )
- mpMenu = new PopupMenu;
+ mpMenu = VclPtr<PopupMenu>::Create();
else
- mpMenu = new MenuBar;
+ mpMenu = VclPtr<MenuBar>::Create();
mpMenu->AddEventListener( LINK( this, VCLXMenu, MenuEventListener ) );
}
@@ -526,7 +526,7 @@ throw(css::uno::RuntimeException, std::exception)
sal_Int16 nRet = 0;
if ( mpMenu && IsPopupMenu() )
{
- nRet = static_cast<PopupMenu*>(mpMenu)->Execute( VCLUnoHelper::GetWindow( rxWindowPeer ),
+ nRet = static_cast<PopupMenu*>(mpMenu.get())->Execute( VCLUnoHelper::GetWindow( rxWindowPeer ),
VCLRectangle( rPos ),
static_cast<PopupMenuFlags>(nFlags) | PopupMenuFlags::NoMouseUpClose );
}
@@ -726,7 +726,7 @@ throw (css::uno::RuntimeException, std::exception)
::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
if ( mpMenu && IsPopupMenu() )
- static_cast<PopupMenu*>( mpMenu )->EndExecute();
+ static_cast<PopupMenu*>( mpMenu.get() )->EndExecute();
}
diff --git a/vcl/inc/salmenu.hxx b/vcl/inc/salmenu.hxx
index a792356ab92e..ed7296a4955a 100644
--- a/vcl/inc/salmenu.hxx
+++ b/vcl/inc/salmenu.hxx
@@ -32,7 +32,7 @@ struct SalItemParams
sal_uInt16 nId; // item Id
MenuItemType eType; // MenuItem-Type
MenuItemBits nBits; // MenuItem-Bits
- Menu* pMenu; // Pointer to Menu
+ VclPtr<Menu> pMenu; // Pointer to Menu
OUString aText; // Menu-Text
Image aImage; // Image
};
diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx
index c1cb3e150acc..67d422a8558a 100644
--- a/vcl/inc/svdata.hxx
+++ b/vcl/inc/svdata.hxx
@@ -116,7 +116,7 @@ struct ImplSVAppData
OUString* mpDisplayName; // Application Display Name
OUString* mpToolkitName; // Toolkit Name
Help* mpHelp; // Application help
- PopupMenu* mpActivePopupMenu; // Actives Popup-Menu (in Execute)
+ VclPtr<PopupMenu> mpActivePopupMenu; // Actives Popup-Menu (in Execute)
ImplIdleMgr* mpIdleMgr; // Idle-Manager
VclPtr<ImplWheelWindow> mpWheelWindow; // WheelWindow
ImplHotKey* mpFirstHotKey; // HotKey-Verwaltung
diff --git a/vcl/inc/toolbox.h b/vcl/inc/toolbox.h
index 9104f49527c7..c3bf697c47b9 100644
--- a/vcl/inc/toolbox.h
+++ b/vcl/inc/toolbox.h
@@ -132,7 +132,7 @@ struct ImplToolBoxPrivateData
ToolBoxButtonSize meButtonSize;
// the optional custom menu
- PopupMenu* mpMenu;
+ VclPtr<PopupMenu> mpMenu;
ToolBoxMenuType maMenuType;
ImplSVEvent * mnEventId;
diff --git a/vcl/inc/unx/gtk/gtksalmenu.hxx b/vcl/inc/unx/gtk/gtksalmenu.hxx
index 74f03dd729d3..7cd93dd82154 100644
--- a/vcl/inc/unx/gtk/gtksalmenu.hxx
+++ b/vcl/inc/unx/gtk/gtksalmenu.hxx
@@ -51,7 +51,7 @@ private:
GtkWidget* mpMenuBarContainerWidget;
GtkWidget* mpMenuBarWidget;
GtkWidget* mpCloseButton;
- Menu* mpVCLMenu;
+ VclPtr<Menu> mpVCLMenu;
GtkSalMenu* mpParentSalMenu;
GtkSalFrame* mpFrame;
diff --git a/vcl/source/app/vclevent.cxx b/vcl/source/app/vclevent.cxx
index 4786fd6d3195..a7ec9491a4bf 100644
--- a/vcl/source/app/vclevent.cxx
+++ b/vcl/source/app/vclevent.cxx
@@ -19,6 +19,7 @@
#include <vcl/vclevent.hxx>
#include <vcl/window.hxx>
+#include <vcl/menu.hxx>
#include "svdata.hxx"
#include "vcleventlisteners.hxx"
@@ -90,4 +91,17 @@ VclWindowEvent::VclWindowEvent( vcl::Window* pWin, sal_uLong n, void* pDat ) : V
VclWindowEvent::~VclWindowEvent() {}
+VclMenuEvent::VclMenuEvent( Menu* pM, sal_uLong n, sal_uInt16 nPos )
+ : VclSimpleEvent(n), pMenu(pM), mnPos(nPos)
+{}
+
+VclMenuEvent::~VclMenuEvent()
+{}
+
+Menu* VclMenuEvent::GetMenu() const
+{
+ return pMenu;
+}
+
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/control/edit.cxx b/vcl/source/control/edit.cxx
index dcadb57237d0..f1bb069fd4f3 100644
--- a/vcl/source/control/edit.cxx
+++ b/vcl/source/control/edit.cxx
@@ -1976,7 +1976,7 @@ void Edit::Command( const CommandEvent& rCEvt )
{
if ( rCEvt.GetCommand() == CommandEventId::ContextMenu )
{
- PopupMenu* pPopup = Edit::CreatePopupMenu();
+ VclPtr<PopupMenu> pPopup = Edit::CreatePopupMenu();
if ( !maSelection.Len() )
{
@@ -2036,7 +2036,7 @@ void Edit::Command( const CommandEvent& rCEvt )
aPos = Point( aSize.Width()/2, aSize.Height()/2 );
}
sal_uInt16 n = pPopup->Execute( this, aPos );
- Edit::DeletePopupMenu( pPopup );
+ pPopup.disposeAndClear();
SetSelection( aSaveSel );
switch ( n )
{
@@ -2827,13 +2827,13 @@ FncGetSpecialChars Edit::GetGetSpecialCharsFunction()
return pImplFncGetSpecialChars;
}
-PopupMenu* Edit::CreatePopupMenu()
+VclPtr<PopupMenu> Edit::CreatePopupMenu()
{
ResMgr* pResMgr = ImplGetResMgr();
if( ! pResMgr )
- return new PopupMenu();
+ return VclPtr<PopupMenu>::Create();
- PopupMenu* pPopup = new PopupMenu( ResId( SV_RESID_MENU_EDIT, *pResMgr ) );
+ VclPtrInstance<PopupMenu> pPopup( ResId( SV_RESID_MENU_EDIT, *pResMgr ) );
const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
if ( rStyleSettings.GetHideDisabledMenuItems() )
pPopup->SetMenuFlags( MenuFlags::HideDisabledEntries );
@@ -2852,11 +2852,6 @@ PopupMenu* Edit::CreatePopupMenu()
return pPopup;
}
-void Edit::DeletePopupMenu( PopupMenu* pMenu )
-{
- delete pMenu;
-}
-
// css::datatransfer::dnd::XDragGestureListener
void Edit::dragGestureRecognized( const css::datatransfer::dnd::DragGestureEvent& rDGE ) throw (css::uno::RuntimeException, std::exception)
{
diff --git a/vcl/source/control/menubtn.cxx b/vcl/source/control/menubtn.cxx
index 4b687ad77aae..702d7201dbe5 100644
--- a/vcl/source/control/menubtn.cxx
+++ b/vcl/source/control/menubtn.cxx
@@ -88,7 +88,7 @@ MenuButton::~MenuButton()
void MenuButton::dispose()
{
delete mpMenuTimer;
- delete mpOwnMenu;
+ mpOwnMenu.disposeAndClear();
PushButton::dispose();
}
diff --git a/vcl/source/control/tabctrl.cxx b/vcl/source/control/tabctrl.cxx
index 903d3bb818f5..5fb6ddfd2688 100644
--- a/vcl/source/control/tabctrl.cxx
+++ b/vcl/source/control/tabctrl.cxx
@@ -1451,17 +1451,17 @@ void TabControl::Command( const CommandEvent& rCEvt )
if ( bMenu )
{
- PopupMenu aMenu;
+ ScopedVclPtrInstance<PopupMenu> aMenu;
for( std::vector< ImplTabItem >::iterator it = mpTabCtrlData->maItemList.begin();
it != mpTabCtrlData->maItemList.end(); ++it )
{
- aMenu.InsertItem( it->mnId, it->maText, MenuItemBits::CHECKABLE | MenuItemBits::RADIOCHECK );
+ aMenu->InsertItem( it->mnId, it->maText, MenuItemBits::CHECKABLE | MenuItemBits::RADIOCHECK );
if ( it->mnId == mnCurPageId )
- aMenu.CheckItem( it->mnId );
- aMenu.SetHelpId( it->mnId, it->maHelpId );
+ aMenu->CheckItem( it->mnId );
+ aMenu->SetHelpId( it->mnId, it->maHelpId );
}
- sal_uInt16 nId = aMenu.Execute( this, aMenuPos );
+ sal_uInt16 nId = aMenu->Execute( this, aMenuPos );
if ( nId && (nId != mnCurPageId) )
SelectTabPage( nId );
return;
diff --git a/vcl/source/edit/vclmedit.cxx b/vcl/source/edit/vclmedit.cxx
index cf224ce1ecf3..f13147901357 100644
--- a/vcl/source/edit/vclmedit.cxx
+++ b/vcl/source/edit/vclmedit.cxx
@@ -818,7 +818,7 @@ void TextWindow::Command( const CommandEvent& rCEvt )
{
if ( rCEvt.GetCommand() == CommandEventId::ContextMenu )
{
- PopupMenu* pPopup = Edit::CreatePopupMenu();
+ VclPtr<PopupMenu> pPopup = Edit::CreatePopupMenu();
if ( !mpExtTextView->HasSelection() )
{
pPopup->EnableItem( SV_MENU_EDIT_CUT, false );
@@ -857,7 +857,7 @@ void TextWindow::Command( const CommandEvent& rCEvt )
}
// pPopup->RemoveDisabledEntries();
sal_uInt16 n = pPopup->Execute( this, aPos );
- Edit::DeletePopupMenu( pPopup );
+ pPopup.disposeAndClear();
switch ( n )
{
case SV_MENU_EDIT_UNDO: mpExtTextView->Undo();
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index ef1ae306517d..fc8069e3a9eb 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -531,7 +531,7 @@ void VclBuilder::disposeBuilder()
for (std::vector<MenuAndId>::reverse_iterator aI = m_aMenus.rbegin(),
aEnd = m_aMenus.rend(); aI != aEnd; ++aI)
{
- delete aI->m_pMenu;
+ aI->m_pMenu.disposeAndClear();
}
m_aMenus.clear();
m_pParent.clear();
@@ -2435,7 +2435,7 @@ std::vector<OString> VclBuilder::handleItems(xmlreader::XmlReader &reader, const
void VclBuilder::handleMenu(xmlreader::XmlReader &reader, const OString &rID)
{
- PopupMenu *pCurrentMenu = new PopupMenu;
+ VclPtr<PopupMenu> pCurrentMenu = VclPtr<PopupMenu>::Create();
int nLevel = 1;
@@ -3459,4 +3459,11 @@ VclBuilder::ParserState::ParserState()
: m_nLastToolbarId(0)
{}
+VclBuilder::MenuAndId::MenuAndId(const OString &rId, PopupMenu *pMenu)
+ : m_sID(rId)
+ , m_pMenu(pMenu)
+{};
+
+VclBuilder::MenuAndId::~MenuAndId() {}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index 2a69969621d5..c5e32f6118de 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -137,6 +137,11 @@ Menu::Menu()
Menu::~Menu()
{
+ disposeOnce();
+}
+
+void Menu::dispose()
+{
ImplCallEventListeners( VCLEVENT_OBJECT_DYING, ITEMPOS_INVALID );
// at the window free the reference to the accessible component
@@ -144,8 +149,8 @@ Menu::~Menu()
if ( pWindow )
{
MenuFloatingWindow* pFloat = static_cast<MenuFloatingWindow*>(pWindow.get());
- if( pFloat->pMenu == this )
- pFloat->pMenu = nullptr;
+ if( pFloat->pMenu.get() == this )
+ pFloat->pMenu.clear();
pWindow->SetAccessible( css::uno::Reference< css::accessibility::XAccessible >() );
}
@@ -176,6 +181,8 @@ Menu::~Menu()
// Native-support: destroy SalMenu
ImplSetSalMenu( nullptr );
+
+ VclReferenceBase::dispose();
}
void Menu::CreateAutoMnemonics()
@@ -503,7 +510,7 @@ void Menu::InsertItem( const ResId& rResId )
MenuItemData* pData = GetItemList()->GetData( nItemId );
if ( pData )
{
- PopupMenu* pSubMenu = new PopupMenu( ResId( static_cast<RSHEADER_TYPE*>(GetClassRes()), *pMgr ) );
+ VclPtr<PopupMenu> pSubMenu = VclPtr<PopupMenu>::Create( ResId( static_cast<RSHEADER_TYPE*>(GetClassRes()), *pMgr ) );
pData->pAutoSubMenu = pSubMenu;
// #111060# keep track of this pointer, may be it will be deleted from outside
pSubMenu->pRefAutoSubMenu = &pData->pAutoSubMenu;
@@ -628,7 +635,7 @@ void ImplCopyItem( Menu* pThis, const Menu& rMenu, sal_uInt16 nPos, sal_uInt16 n
// create auto-copy
if ( nMode == 1 )
{
- PopupMenu* pNewMenu = new PopupMenu( *pSubMenu );
+ VclPtr<PopupMenu> pNewMenu = VclPtr<PopupMenu>::Create( *pSubMenu );
pThis->SetPopupMenu( nId, pNewMenu );
}
else
@@ -792,7 +799,7 @@ void Menu::SetPopupMenu( sal_uInt16 nItemId, PopupMenu* pMenu )
return;
// same menu, nothing to do
- if ( static_cast<PopupMenu*>(pData->pSubMenu) == pMenu )
+ if ( static_cast<PopupMenu*>(pData->pSubMenu.get()) == pMenu )
return;
// data exchange
@@ -819,7 +826,7 @@ PopupMenu* Menu::GetPopupMenu( sal_uInt16 nItemId ) const
MenuItemData* pData = pItemList->GetData( nItemId );
if ( pData )
- return static_cast<PopupMenu*>(pData->pSubMenu);
+ return static_cast<PopupMenu*>(pData->pSubMenu.get());
else
return nullptr;
}
@@ -2433,7 +2440,13 @@ MenuBar::MenuBar( const MenuBar& rMenu )
MenuBar::~MenuBar()
{
+ disposeOnce();
+}
+
+void MenuBar::dispose()
+{
ImplDestroy( this, true );
+ Menu::dispose();
}
void MenuBar::ClosePopup(Menu *pMenu)
@@ -2758,8 +2771,14 @@ PopupMenu::PopupMenu( const PopupMenu& rMenu )
PopupMenu::~PopupMenu()
{
+ disposeOnce();
+}
+
+void PopupMenu::dispose()
+{
if( pRefAutoSubMenu && *pRefAutoSubMenu == this )
*pRefAutoSubMenu = nullptr; // #111060# avoid second delete in ~MenuItemData
+ Menu::dispose();
}
void PopupMenu::ClosePopup(Menu* pMenu)
@@ -3169,7 +3188,7 @@ ImplMenuDelData::ImplMenuDelData( const Menu* pMenu )
ImplMenuDelData::~ImplMenuDelData()
{
if( mpMenu )
- const_cast< Menu* >( mpMenu )->ImplRemoveDel( *this );
+ const_cast< Menu* >( mpMenu.get() )->ImplRemoveDel( *this );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/window/menubarwindow.cxx b/vcl/source/window/menubarwindow.cxx
index 8f2ca5e78e4f..bec7b353ba84 100644
--- a/vcl/source/window/menubarwindow.cxx
+++ b/vcl/source/window/menubarwindow.cxx
@@ -230,7 +230,7 @@ IMPL_LINK_NOARG_TYPED(MenuBarWindow, CloseHdl, ToolBox *, void)
// #i106052# call close hdl asynchronously to ease handler implementation
// this avoids still being in the handler while the DecoToolBox already
// gets destroyed
- Application::PostUserEvent(static_cast<MenuBar*>(pMenu)->GetCloseButtonClickHdl());
+ Application::PostUserEvent(static_cast<MenuBar*>(pMenu.get())->GetCloseButtonClickHdl());
}
else
{
@@ -240,7 +240,7 @@ IMPL_LINK_NOARG_TYPED(MenuBarWindow, CloseHdl, ToolBox *, void)
MenuBar::MenuBarButtonCallbackArg aArg;
aArg.nId = it->first;
aArg.bHighlight = (aCloseBtn->GetHighlightItemId() == it->first);
- aArg.pMenuBar = dynamic_cast<MenuBar*>(pMenu);
+ aArg.pMenuBar = dynamic_cast<MenuBar*>(pMenu.get());
it->second.m_aSelectLink.Call( aArg );
}
}
@@ -254,7 +254,7 @@ IMPL_LINK_TYPED( MenuBarWindow, ToolboxEventHdl, VclWindowEvent&, rEvent, void )
MenuBar::MenuBarButtonCallbackArg aArg;
aArg.nId = 0xffff;
aArg.bHighlight = (rEvent.GetId() == VCLEVENT_TOOLBOX_HIGHLIGHT);
- aArg.pMenuBar = dynamic_cast<MenuBar*>(pMenu);
+ aArg.pMenuBar = dynamic_cast<MenuBar*>(pMenu.get());
if( rEvent.GetId() == VCLEVENT_TOOLBOX_HIGHLIGHT )
aArg.nId = aCloseBtn->GetHighlightItemId();
else if( rEvent.GetId() == VCLEVENT_TOOLBOX_HIGHLIGHTOFF )
@@ -293,7 +293,7 @@ void MenuBarWindow::ImplCreatePopup( bool bPreSelectFirst )
if ( pItemData->bEnabled && pItemData->pSubMenu && ( nHighlightedItem != ITEMPOS_INVALID ) &&
( pItemData->pSubMenu != pActivePopup ) )
{
- pActivePopup = static_cast<PopupMenu*>(pItemData->pSubMenu);
+ pActivePopup = static_cast<PopupMenu*>(pItemData->pSubMenu.get());
long nX = 0;
MenuItemData* pData = nullptr;
for ( sal_uLong n = 0; n < nHighlightedItem; n++ )
@@ -982,7 +982,7 @@ void MenuBarWindow::LayoutChanged()
// depending on the native implementation or the displayable flag
// the menubar windows is suppressed (ie, height=0)
- if (!static_cast<MenuBar*>(pMenu)->IsDisplayable() ||
+ if (!static_cast<MenuBar*>(pMenu.get())->IsDisplayable() ||
(pMenu->ImplGetSalMenu() && pMenu->ImplGetSalMenu()->VisibleMenuBar()))
{
nHeight = 0;
@@ -1170,7 +1170,7 @@ bool MenuBarWindow::HandleMenuButtonEvent( sal_uInt16 i_nButtonId )
MenuBar::MenuBarButtonCallbackArg aArg;
aArg.nId = it->first;
aArg.bHighlight = true;
- aArg.pMenuBar = dynamic_cast<MenuBar*>(pMenu);
+ aArg.pMenuBar = dynamic_cast<MenuBar*>(pMenu.get());
return it->second.m_aSelectLink.Call( aArg );
}
return false;
diff --git a/vcl/source/window/menubarwindow.hxx b/vcl/source/window/menubarwindow.hxx
index 069db1391a48..3f1f40fc429e 100644
--- a/vcl/source/window/menubarwindow.hxx
+++ b/vcl/source/window/menubarwindow.hxx
@@ -71,8 +71,8 @@ private:
AddButtonEntry() : m_nId( 0 ) {}
};
- Menu* pMenu;
- PopupMenu* pActivePopup;
+ VclPtr<Menu> pMenu;
+ VclPtr<PopupMenu> pActivePopup;
sal_uInt16 nHighlightedItem;
sal_uInt16 nRolloveredItem;
VclPtr<vcl::Window> xSaveFocusId;
diff --git a/vcl/source/window/menufloatingwindow.cxx b/vcl/source/window/menufloatingwindow.cxx
index 93240518921e..21337acc8723 100644
--- a/vcl/source/window/menufloatingwindow.cxx
+++ b/vcl/source/window/menufloatingwindow.cxx
@@ -313,7 +313,7 @@ IMPL_LINK_TYPED( MenuFloatingWindow, HighlightChanged, Timer*, pTimer, void )
}
if ( pItemData->bEnabled && pItemData->pSubMenu && pItemData->pSubMenu->GetItemCount() && ( pItemData->pSubMenu != pActivePopup ) )
{
- pActivePopup = static_cast<PopupMenu*>(pItemData->pSubMenu);
+ pActivePopup = static_cast<PopupMenu*>(pItemData->pSubMenu.get());
long nY = nScrollerHeight+ImplGetStartY();
MenuItemData* pData = nullptr;
for ( sal_uLong n = 0; n < nHighlightedItem; n++ )
@@ -390,7 +390,7 @@ void MenuFloatingWindow::Execute()
{
ImplSVData* pSVData = ImplGetSVData();
- pSVData->maAppData.mpActivePopupMenu = static_cast<PopupMenu*>(pMenu);
+ pSVData->maAppData.mpActivePopupMenu = static_cast<PopupMenu*>(pMenu.get());
bInExecute = true;
// bCallingSelect = false;
@@ -467,7 +467,7 @@ void MenuFloatingWindow::EndExecute()
while (pWin && !pWin->bInExecute &&
pWin->pMenu->pStartedFrom && !pWin->pMenu->pStartedFrom->IsMenuBar())
{
- pWin = static_cast<PopupMenu*>(pWin->pMenu->pStartedFrom)->ImplGetFloatingWindow();
+ pWin = static_cast<PopupMenu*>(pWin->pMenu->pStartedFrom.get())->ImplGetFloatingWindow();
}
if ( pWin )
pCleanUpFrom = pWin;
@@ -618,7 +618,7 @@ void MenuFloatingWindow::ImplScroll( bool bUp )
long nHeight = GetOutputSizePixel().Height();
sal_uInt16 nLastVisible;
- static_cast<PopupMenu*>(pMenu)->ImplCalcVisEntries( nHeight, nFirstEntry, &nLastVisible );
+ static_cast<PopupMenu*>(pMenu.get())->ImplCalcVisEntries( nHeight, nFirstEntry, &nLastVisible );
if ( pMenu->ImplGetNextVisible( nLastVisible ) == ITEMPOS_INVALID )
{
bScrollDown = false;
@@ -957,11 +957,11 @@ void MenuFloatingWindow::ImplCursorUpDown( bool bUp, bool bHomeEnd )
Size aOutSz = GetOutputSizePixel();
sal_uInt16 nLastVisible;
- static_cast<PopupMenu*>(pMenu)->ImplCalcVisEntries( aOutSz.Height(), nFirstEntry, &nLastVisible );
+ static_cast<PopupMenu*>(pMenu.get())->ImplCalcVisEntries( aOutSz.Height(), nFirstEntry, &nLastVisible );
while ( n > nLastVisible )
{
ImplScroll( false );
- static_cast<PopupMenu*>(pMenu)->ImplCalcVisEntries( aOutSz.Height(), nFirstEntry, &nLastVisible );
+ static_cast<PopupMenu*>(pMenu.get())->ImplCalcVisEntries( aOutSz.Height(), nFirstEntry, &nLastVisible );
}
}
ChangeHighlightItem( n, false );
@@ -1010,7 +1010,7 @@ void MenuFloatingWindow::KeyInput( const KeyEvent& rKEvent )
else
{
StopExecute();
- PopupMenu* pPopupMenu = static_cast<PopupMenu*>(pMenu->pStartedFrom);
+ PopupMenu* pPopupMenu = static_cast<PopupMenu*>(pMenu->pStartedFrom.get());
MenuFloatingWindow* pFloat = pPopupMenu->ImplGetFloatingWindow();
pFloat->GrabFocus();
pFloat->KillActivePopup();
@@ -1030,7 +1030,7 @@ void MenuFloatingWindow::KeyInput( const KeyEvent& rKEvent )
}
else
{
- MenuFloatingWindow* pFloat = static_cast<PopupMenu*>(pMenu->pStartedFrom)->ImplGetFloatingWindow();
+ MenuFloatingWindow* pFloat = static_cast<PopupMenu*>(pMenu->pStartedFrom.get())->ImplGetFloatingWindow();
pFloat->GrabFocus();
pFloat->KillActivePopup();
sal_uInt16 highlightItem = pFloat->GetHighlightedItem();
diff --git a/vcl/source/window/menufloatingwindow.hxx b/vcl/source/window/menufloatingwindow.hxx
index 87912936fd2e..ce157e5c12f4 100644
--- a/vcl/source/window/menufloatingwindow.hxx
+++ b/vcl/source/window/menufloatingwindow.hxx
@@ -33,11 +33,11 @@
class MenuFloatingWindow : public FloatingWindow, public MenuWindow
{
friend void Menu::ImplFillLayoutData() const;
- friend Menu::~Menu();
+ friend void Menu::dispose();
private:
- Menu* pMenu;
- PopupMenu* pActivePopup;
+ VclPtr<Menu> pMenu;
+ VclPtr<PopupMenu> pActivePopup;
Timer aHighlightChangedTimer;
Timer aSubmenuCloseTimer;
Timer aScrollTimer;
diff --git a/vcl/source/window/menuitemlist.cxx b/vcl/source/window/menuitemlist.cxx
index a1c1fa2d410d..954615aeb82c 100644
--- a/vcl/source/window/menuitemlist.cxx
+++ b/vcl/source/window/menuitemlist.cxx
@@ -36,9 +36,8 @@ MenuItemData::~MenuItemData()
aUserValueReleaseFunc(nUserValue);
if( pAutoSubMenu )
{
- static_cast<PopupMenu*>(pAutoSubMenu)->pRefAutoSubMenu = nullptr;
- delete pAutoSubMenu;
- pAutoSubMenu = nullptr;
+ static_cast<PopupMenu*>(pAutoSubMenu.get())->pRefAutoSubMenu = nullptr;
+ pAutoSubMenu.disposeAndClear();
}
if( pSalMenuItem )
ImplGetSVData()->mpDefInst->DestroyMenuItem( pSalMenuItem );
diff --git a/vcl/source/window/menuitemlist.hxx b/vcl/source/window/menuitemlist.hxx
index ce5ba365592c..89befc106e28 100644
--- a/vcl/source/window/menuitemlist.hxx
+++ b/vcl/source/window/menuitemlist.hxx
@@ -33,8 +33,8 @@ struct MenuItemData
sal_uInt16 nId; // SV Id
MenuItemType eType; // MenuItem-Type
MenuItemBits nBits; // MenuItem-Bits
- Menu* pSubMenu; // Pointer to SubMenu
- Menu* pAutoSubMenu; // Pointer to SubMenu from Resource
+ VclPtr<Menu> pSubMenu; // Pointer to SubMenu
+ VclPtr<Menu> pAutoSubMenu; // Pointer to SubMenu from Resource
OUString aText; // Menu-Text
OUString aHelpText; // Help-String
OUString aTipHelpText; // TipHelp-String (eg, expanded filenames)
diff --git a/vcl/source/window/toolbox2.cxx b/vcl/source/window/toolbox2.cxx
index 6265289e9a91..e6d3af2e867c 100644
--- a/vcl/source/window/toolbox2.cxx
+++ b/vcl/source/window/toolbox2.cxx
@@ -49,7 +49,7 @@ ImplToolBoxPrivateData::ImplToolBoxPrivateData() :
m_pLayoutData( nullptr )
{
meButtonSize = TOOLBOX_BUTTONSIZE_DONTCARE;
- mpMenu = new PopupMenu();
+ mpMenu = VclPtr<PopupMenu>::Create();
mnEventId = nullptr;
maMenuType = ToolBoxMenuType::NONE;
@@ -73,7 +73,7 @@ ImplToolBoxPrivateData::ImplToolBoxPrivateData() :
ImplToolBoxPrivateData::~ImplToolBoxPrivateData()
{
delete m_pLayoutData;
- delete mpMenu;
+ mpMenu.disposeAndClear();
}
void ImplToolItem::init(sal_uInt16 nItemId, ToolBoxItemBits nItemBits,
diff --git a/vcl/unx/generic/app/i18n_status.cxx b/vcl/unx/generic/app/i18n_status.cxx
index 6ed22df78795..ffd7b76be6d7 100644
--- a/vcl/unx/generic/app/i18n_status.cxx
+++ b/vcl/unx/generic/app/i18n_status.cxx
@@ -299,7 +299,7 @@ namespace vcl {
class IIIMPStatusWindow : public StatusWindow
{
VclPtr<MenuButton> m_aStatusBtn;
- PopupMenu m_aMenu;
+ ScopedVclPtrInstance<PopupMenu> m_aMenu;
SalFrame* m_pResetFocus;
bool m_bShow;
bool m_bOn;
@@ -338,13 +338,13 @@ IIIMPStatusWindow::IIIMPStatusWindow( SalFrame* pParent, bool bOn ) :
layout();
m_aStatusBtn->SetSelectHdl( LINK( this, IIIMPStatusWindow, SelectHdl ) );
- m_aStatusBtn->SetPopupMenu( &m_aMenu );
+ m_aStatusBtn->SetPopupMenu( m_aMenu.get() );
m_aStatusBtn->Show();
const ::std::vector< I18NStatus::ChoiceData >& rChoices( I18NStatus::get().getChoices() );
int i = 1;
for( ::std::vector< I18NStatus::ChoiceData >::const_iterator it = rChoices.begin(); it != rChoices.end(); ++it, i++ )
- m_aMenu.InsertItem( i, it->aString );
+ m_aMenu->InsertItem( i, it->aString );
if( pParent )
{
diff --git a/vcl/unx/gtk/gtksalmenu.cxx b/vcl/unx/gtk/gtksalmenu.cxx
index a08917a9b702..c9974ef6bf4f 100644
--- a/vcl/unx/gtk/gtksalmenu.cxx
+++ b/vcl/unx/gtk/gtksalmenu.cxx
@@ -538,7 +538,7 @@ void GtkSalMenu::ShowCloseButton(bool bShow)
{
#if GTK_CHECK_VERSION(3,0,0)
assert(mbMenuBar);
- MenuBar *pVclMenuBar = static_cast<MenuBar*>(mpVCLMenu);
+ MenuBar *pVclMenuBar = static_cast<MenuBar*>(mpVCLMenu.get());
if (!bShow)
{
if (mpCloseButton)
diff --git a/vcl/workben/vcldemo.cxx b/vcl/workben/vcldemo.cxx
index 1c95e32ba3dd..da9a4f1ff778 100644
--- a/vcl/workben/vcldemo.cxx
+++ b/vcl/workben/vcldemo.cxx
@@ -1812,8 +1812,8 @@ public:
class DemoWidgets : public WorkWindow
{
- MenuBar *mpBar;
- PopupMenu *mpPopup;
+ VclPtr<MenuBar> mpBar;
+ VclPtr<PopupMenu> mpPopup;
VclPtr<VclBox> mpBox;
VclPtr<ToolBox> mpToolbox;
@@ -1867,9 +1867,9 @@ public:
mpGLButton->Show();
mpHBox->Show();
- mpBar = new MenuBar();
+ mpBar = VclPtr<MenuBar>::Create();
mpBar->InsertItem(0,"File");
- mpPopup = new PopupMenu();
+ mpPopup = VclPtr<PopupMenu>::Create();
mpPopup->InsertItem(0,"Item");
mpBar->SetPopupMenu(0, mpPopup);
SetMenuBar(mpBar);
@@ -1886,8 +1886,8 @@ public:
mpToolbox.disposeAndClear();
mpButton.disposeAndClear();
mpBox.disposeAndClear();
- delete mpPopup;
- delete mpBar;
+ mpPopup.disposeAndClear();
+ mpBar.disposeAndClear();
WorkWindow::dispose();
}
virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle&) override