[Libreoffice-commits] core.git: include/svx svx/source

Maxim Monastirsky momonasmon at gmail.com
Sun Nov 22 14:06:00 PST 2015


 include/svx/SmartTagCtl.hxx         |    5 +++--
 svx/source/mnuctrls/SmartTagCtl.cxx |   10 ++++------
 2 files changed, 7 insertions(+), 8 deletions(-)

New commits:
commit 1335f3bd80682987b5c1c7d9cb548e85b31e03b4
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date:   Sun Nov 22 23:03:35 2015 +0200

    SvxSmartTagsControl: Do not leak sub menus
    
    And while on it, move other things to smart pointers as well.
    
    Change-Id: I8b234b8a9fe60e0ca82bb08e48f6b7db94cbcd4d

diff --git a/include/svx/SmartTagCtl.hxx b/include/svx/SmartTagCtl.hxx
index e4acd3e..81aa45f 100644
--- a/include/svx/SmartTagCtl.hxx
+++ b/include/svx/SmartTagCtl.hxx
@@ -44,9 +44,10 @@ namespace com { namespace sun { namespace star { namespace container {
 class SVX_DLLPUBLIC SvxSmartTagsControl : public SfxMenuControl
 {
 private:
-    PopupMenu*                  mpMenu;
+    std::unique_ptr< PopupMenu > mpMenu;
+    std::vector< std::unique_ptr< PopupMenu > > maSubMenus;
     Menu&                       mrParent;
-    const SvxSmartTagItem*      mpSmartTagItem;
+    std::unique_ptr< const SvxSmartTagItem >    mpSmartTagItem;
 
     struct InvokeAction
     {
diff --git a/svx/source/mnuctrls/SmartTagCtl.cxx b/svx/source/mnuctrls/SmartTagCtl.cxx
index 0a47bf9..ab7d1fd 100644
--- a/svx/source/mnuctrls/SmartTagCtl.cxx
+++ b/svx/source/mnuctrls/SmartTagCtl.cxx
@@ -45,7 +45,7 @@ SvxSmartTagsControl::SvxSmartTagsControl
     mrParent    ( rMenu ),
     mpSmartTagItem( nullptr )
 {
-    rMenu.SetPopupMenu( _nId, mpMenu );
+    rMenu.SetPopupMenu( _nId, mpMenu.get() );
 }
 
 
@@ -93,12 +93,13 @@ void SvxSmartTagsControl::FillMenu()
         const OUString aSmartTagCaption = xAction->getSmartTagCaption( nSmartTagIndex, rLocale);
 
         // no sub-menus if there's only one smart tag type listed:
-        PopupMenu* pSbMenu = mpMenu;
+        PopupMenu* pSbMenu = mpMenu.get();
         if ( 1 < rActionComponentsSequence.getLength() )
         {
             mpMenu->InsertItem(nMenuId, aSmartTagCaption, MenuItemBits::NONE, OString(), nMenuPos++);
             pSbMenu = new PopupMenu;
             mpMenu->SetPopupMenu( nMenuId++, pSbMenu );
+            maSubMenus.push_back( std::unique_ptr< PopupMenu >( pSbMenu ) );
         }
         pSbMenu->SetSelectHdl( LINK( this, SvxSmartTagsControl, MenuSelect ) );
 
@@ -145,8 +146,7 @@ void SvxSmartTagsControl::StateChanged( sal_uInt16, SfxItemState eState, const S
         const SvxSmartTagItem* pSmartTagItem = dynamic_cast<const SvxSmartTagItem*>( pState  );
         if ( nullptr != pSmartTagItem )
         {
-            delete mpSmartTagItem;
-            mpSmartTagItem = new SvxSmartTagItem( *pSmartTagItem );
+            mpSmartTagItem.reset( new SvxSmartTagItem( *pSmartTagItem ) );
             FillMenu();
         }
     }
@@ -192,8 +192,6 @@ IMPL_LINK_TYPED( SvxSmartTagsControl, MenuSelect, Menu *, pMen, bool )
 
 SvxSmartTagsControl::~SvxSmartTagsControl()
 {
-    delete mpSmartTagItem;
-    delete mpMenu;
 }
 
 


More information about the Libreoffice-commits mailing list