vcl/inc/osx/salinst.h                    |    3 +--
 vcl/inc/qt5/Qt5Instance.hxx              |    3 +--
 vcl/inc/salinst.hxx                      |    3 +--
 vcl/inc/unx/gtk/gtkinst.hxx              |    3 +--
 vcl/inc/win/salinst.h                    |    3 +--
 vcl/osx/salmenu.cxx                      |   14 +++-----------
 vcl/qt5/Qt5Instance.cxx                  |    6 ++----
 vcl/source/app/salvtables.cxx            |    7 +------
 vcl/source/window/menu.cxx               |   14 +++++++-------
 vcl/source/window/menufloatingwindow.cxx |    1 +
 vcl/source/window/menuitemlist.cxx       |    7 +++----
 vcl/source/window/menuitemlist.hxx       |    4 +---
 vcl/source/window/menuwindow.cxx         |    1 +
 vcl/unx/gtk/gtkinst.cxx                  |   13 +++----------
 vcl/win/window/salmenu.cxx               |   24 ++++++++----------------
 15 files changed, 35 insertions(+), 71 deletions(-)

New commits:
commit b7abdafcfc42722ab060529864a2109d1e4198c0
Author: Noel Grandin <noel.gran...@collabora.co.uk>
Date:   Fri Jun 8 14:27:50 2018 +0200

    return and hold SalMenuItem by std::unique_ptr
    
    and drop DestroyMenuItem, all the implementations were just deleting the
    pointer
    
    Change-Id: I058817b963988b1e399279f61f45716a2cdba023
    Reviewed-on: https://gerrit.libreoffice.org/55500
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/vcl/inc/osx/salinst.h b/vcl/inc/osx/salinst.h
index 18f8630b0f27..a19e9e423f9b 100644
--- a/vcl/inc/osx/salinst.h
+++ b/vcl/inc/osx/salinst.h
@@ -120,8 +120,7 @@ public:
     virtual bool            AnyInput( VclInputFlags nType ) override;
     virtual SalMenu*        CreateMenu( bool bMenuBar, Menu* pVCLMenu ) 
override;
     virtual void            DestroyMenu( SalMenu* ) override;
-    virtual SalMenuItem*    CreateMenuItem( const SalItemParams* pItemData ) 
override;
-    virtual void            DestroyMenuItem( SalMenuItem* ) override;
+    virtual std::unique_ptr<SalMenuItem> CreateMenuItem( const SalItemParams & 
rItemData ) override;
     virtual OpenGLContext*  CreateOpenGLContext() override;
     virtual OUString        GetConnectionIdentifier() override;
     virtual void            AddToRecentDocumentList(const OUString& rFileUrl, 
const OUString& rMimeType,
diff --git a/vcl/inc/qt5/Qt5Instance.hxx b/vcl/inc/qt5/Qt5Instance.hxx
index aea3e792bfa0..16e22098cd09 100644
--- a/vcl/inc/qt5/Qt5Instance.hxx
+++ b/vcl/inc/qt5/Qt5Instance.hxx
@@ -82,8 +82,7 @@ public:
 
     virtual SalMenu* CreateMenu(bool, Menu*) override;
     virtual void DestroyMenu(SalMenu* pMenu) override;
-    virtual SalMenuItem* CreateMenuItem(const SalItemParams*) override;
-    virtual void DestroyMenuItem(SalMenuItem* pItem) override;
+    virtual std::unique_ptr<SalMenuItem> CreateMenuItem(const SalItemParams&) 
override;
 
     virtual SalTimer* CreateSalTimer() override;
     virtual SalSystem* CreateSalSystem() override;
diff --git a/vcl/inc/salinst.hxx b/vcl/inc/salinst.hxx
index c8f330350ad4..3924ee3d497f 100644
--- a/vcl/inc/salinst.hxx
+++ b/vcl/inc/salinst.hxx
@@ -154,8 +154,7 @@ public:
     // menus
     virtual SalMenu*        CreateMenu( bool bMenuBar, Menu* pMenu );
     virtual void            DestroyMenu( SalMenu* pMenu);
-    virtual SalMenuItem*    CreateMenuItem( const SalItemParams* pItemData );
-    virtual void            DestroyMenuItem( SalMenuItem* pItem );
+    virtual std::unique_ptr<SalMenuItem> CreateMenuItem( const SalItemParams& 
pItemData );
 
     // may return NULL to disable session management, only used by X11 backend
     virtual std::unique_ptr<SalSession> CreateSalSession();
diff --git a/vcl/inc/unx/gtk/gtkinst.hxx b/vcl/inc/unx/gtk/gtkinst.hxx
index 25d3ff020886..499bacadd5b4 100644
--- a/vcl/inc/unx/gtk/gtkinst.hxx
+++ b/vcl/inc/unx/gtk/gtkinst.hxx
@@ -200,8 +200,7 @@ public:
     virtual std::unique_ptr<SalPrinter> CreatePrinter( SalInfoPrinter* 
pInfoPrinter ) override;
     virtual SalMenu*            CreateMenu( bool, Menu* ) override;
     virtual void                DestroyMenu( SalMenu* pMenu ) override;
-    virtual SalMenuItem*        CreateMenuItem( const SalItemParams* ) 
override;
-    virtual void                DestroyMenuItem( SalMenuItem* pItem ) override;
+    virtual std::unique_ptr<SalMenuItem> CreateMenuItem( const SalItemParams& 
) override;
     virtual SalTimer*           CreateSalTimer() override;
     virtual void                AddToRecentDocumentList(const OUString& 
rFileUrl, const OUString& rMimeType, const OUString& rDocumentService) override;
     virtual std::unique_ptr<SalVirtualDevice>
diff --git a/vcl/inc/win/salinst.h b/vcl/inc/win/salinst.h
index 4274f731ee2b..e96fbc5b56b0 100644
--- a/vcl/inc/win/salinst.h
+++ b/vcl/inc/win/salinst.h
@@ -74,8 +74,7 @@ public:
     virtual bool                AnyInput( VclInputFlags nType ) override;
     virtual SalMenu*            CreateMenu( bool bMenuBar, Menu* ) override;
     virtual void                DestroyMenu( SalMenu* ) override;
-    virtual SalMenuItem*        CreateMenuItem( const SalItemParams* pItemData 
) override;
-    virtual void                DestroyMenuItem( SalMenuItem* ) override;
+    virtual std::unique_ptr<SalMenuItem> CreateMenuItem( const SalItemParams & 
rItemData ) override;
     virtual OpenGLContext*      CreateOpenGLContext() override;
     virtual OUString            GetConnectionIdentifier() override;
     virtual void                AddToRecentDocumentList(const OUString& 
rFileUrl, const OUString& rMimeType, const OUString& rDocumentService) override;
diff --git a/vcl/osx/salmenu.cxx b/vcl/osx/salmenu.cxx
index c12eb41c236f..ff400fdd4810 100644
--- a/vcl/osx/salmenu.cxx
+++ b/vcl/osx/salmenu.cxx
@@ -233,19 +233,11 @@ void AquaSalInstance::DestroyMenu( SalMenu* pSalMenu )
     delete pSalMenu;
 }
 
-SalMenuItem* AquaSalInstance::CreateMenuItem( const SalItemParams* pItemData )
+std::unique_ptr<SalMenuItem> AquaSalInstance::CreateMenuItem( const 
SalItemParams & rItemData )
 {
-    if( !pItemData )
-        return nullptr;
+    AquaSalMenuItem *pSalMenuItem = new AquaSalMenuItem( &rItemData );
 
-    AquaSalMenuItem *pSalMenuItem = new AquaSalMenuItem( pItemData );
-
-    return pSalMenuItem;
-}
-
-void AquaSalInstance::DestroyMenuItem( SalMenuItem* pSalMenuItem )
-{
-    delete pSalMenuItem;
+    return std::unique_ptr<SalMenuItem>(pSalMenuItem);
 }
 
 /*
diff --git a/vcl/qt5/Qt5Instance.cxx b/vcl/qt5/Qt5Instance.cxx
index 8585ea851c88..705137c16c50 100644
--- a/vcl/qt5/Qt5Instance.cxx
+++ b/vcl/qt5/Qt5Instance.cxx
@@ -120,13 +120,11 @@ SalMenu* Qt5Instance::CreateMenu(bool bMenuBar, Menu* 
pVCLMenu)
 
 void Qt5Instance::DestroyMenu(SalMenu* pMenu) { delete pMenu; }
 
-SalMenuItem* Qt5Instance::CreateMenuItem(const SalItemParams* pItemData)
+std::unique_ptr<SalMenuItem> Qt5Instance::CreateMenuItem(const SalItemParams& 
rItemData)
 {
-    return new Qt5MenuItem(pItemData);
+    return std::unique_ptr<SalMenuItem>(new Qt5MenuItem(&rItemData));
 }
 
-void Qt5Instance::DestroyMenuItem(SalMenuItem* pItem) { delete pItem; }
-
 SalTimer* Qt5Instance::CreateSalTimer() { return new Qt5Timer(); }
 
 SalSystem* Qt5Instance::CreateSalSystem() { return new SvpSalSystem(); }
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 1b35c8be0461..d5ac7c95e513 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -98,16 +98,11 @@ void SalInstance::DestroyMenu( SalMenu* pMenu )
     OSL_ENSURE( pMenu == nullptr, "DestroyMenu called with non-native menus" );
 }
 
-SalMenuItem* SalInstance::CreateMenuItem( const SalItemParams* )
+std::unique_ptr<SalMenuItem> SalInstance::CreateMenuItem( const SalItemParams 
& )
 {
     return nullptr;
 }
 
-void SalInstance::DestroyMenuItem( SalMenuItem* pItem )
-{
-    OSL_ENSURE( pItem == nullptr, "DestroyMenu called with non-native menus" );
-}
-
 bool SalInstance::CallEventCallback( void const * pEvent, int nBytes )
 {
     return m_pEventInst.is() && m_pEventInst->dispatchEvent( pEvent, nBytes );
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index a0cdd3b7f3de..ce19d83b85de 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -431,7 +431,7 @@ MenuItemData* Menu::NbcInsertItem(sal_uInt16 nId, 
MenuItemBits nBits,
 
     // update native menu
     if (ImplGetSalMenu() && pData->pSalMenuItem)
-        ImplGetSalMenu()->InsertItem(pData->pSalMenuItem, nPos);
+        ImplGetSalMenu()->InsertItem(pData->pSalMenuItem.get(), nPos);
 
     return pData;
 }
@@ -514,7 +514,7 @@ void Menu::InsertSeparator(const OString &rIdent, 
sal_uInt16 nPos)
     size_t itemPos = ( nPos != MENU_APPEND ) ? nPos : pItemList->size() - 1;
     MenuItemData *pData = pItemList->GetDataFromPos( itemPos );
     if( ImplGetSalMenu() && pData && pData->pSalMenuItem )
-        ImplGetSalMenu()->InsertItem( pData->pSalMenuItem, nPos );
+        ImplGetSalMenu()->InsertItem( pData->pSalMenuItem.get(), nPos );
 
     mpLayoutData.reset();
 
@@ -763,9 +763,9 @@ void Menu::SetPopupMenu( sal_uInt16 nItemId, PopupMenu* 
pMenu )
     if( ImplGetSalMenu() && pData->pSalMenuItem )
     {
         if( pMenu )
-            ImplGetSalMenu()->SetSubMenu( pData->pSalMenuItem, 
pMenu->ImplGetSalMenu(), nPos );
+            ImplGetSalMenu()->SetSubMenu( pData->pSalMenuItem.get(), 
pMenu->ImplGetSalMenu(), nPos );
         else
-            ImplGetSalMenu()->SetSubMenu( pData->pSalMenuItem, nullptr, nPos );
+            ImplGetSalMenu()->SetSubMenu( pData->pSalMenuItem.get(), nullptr, 
nPos );
     }
 
     oldSubMenu.disposeAndClear();
@@ -798,7 +798,7 @@ void Menu::SetAccelKey( sal_uInt16 nItemId, const KeyCode& 
rKeyCode )
 
     // update native menu
     if( ImplGetSalMenu() && pData->pSalMenuItem )
-        ImplGetSalMenu()->SetAccelerator( nPos, pData->pSalMenuItem, rKeyCode, 
rKeyCode.GetName() );
+        ImplGetSalMenu()->SetAccelerator( nPos, pData->pSalMenuItem.get(), 
rKeyCode, rKeyCode.GetName() );
 }
 
 KeyCode Menu::GetAccelKey( sal_uInt16 nItemId ) const
@@ -998,7 +998,7 @@ void Menu::SetItemText( sal_uInt16 nItemId, const OUString& 
rStr )
         ImplSetMenuItemData( pData );
         // update native menu
         if( ImplGetSalMenu() && pData->pSalMenuItem )
-            ImplGetSalMenu()->SetItemText( nPos, pData->pSalMenuItem, rStr );
+            ImplGetSalMenu()->SetItemText( nPos, pData->pSalMenuItem.get(), 
rStr );
 
         vcl::Window* pWin = ImplGetWindow();
         mpLayoutData.reset();
@@ -1037,7 +1037,7 @@ void Menu::SetItemImage( sal_uInt16 nItemId, const Image& 
rImage )
 
     // update native menu
     if( ImplGetSalMenu() && pData->pSalMenuItem )
-        ImplGetSalMenu()->SetItemImage( nPos, pData->pSalMenuItem, rImage );
+        ImplGetSalMenu()->SetItemImage( nPos, pData->pSalMenuItem.get(), 
rImage );
 }
 
 Image Menu::GetItemImage( sal_uInt16 nItemId ) const
diff --git a/vcl/source/window/menufloatingwindow.cxx 
b/vcl/source/window/menufloatingwindow.cxx
index ea4cb3bae3ca..62c357173adc 100644
--- a/vcl/source/window/menufloatingwindow.cxx
+++ b/vcl/source/window/menufloatingwindow.cxx
@@ -21,6 +21,7 @@
 #include "menuitemlist.hxx"
 #include "menubarwindow.hxx"
 
+#include <salmenu.hxx>
 #include <svdata.hxx>
 #include <vcl/decoview.hxx>
 #include <vcl/settings.hxx>
diff --git a/vcl/source/window/menuitemlist.cxx 
b/vcl/source/window/menuitemlist.cxx
index f9306c864249..7778a8004b53 100644
--- a/vcl/source/window/menuitemlist.cxx
+++ b/vcl/source/window/menuitemlist.cxx
@@ -34,8 +34,7 @@ MenuItemData::~MenuItemData()
 {
     if (aUserValueReleaseFunc)
         aUserValueReleaseFunc(nUserValue);
-    if( pSalMenuItem )
-        ImplGetSVData()->mpDefInst->DestroyMenuItem( pSalMenuItem );
+    pSalMenuItem.reset();
     pSubMenu.disposeAndClear();
 }
 
@@ -73,7 +72,7 @@ MenuItemData* MenuItemList::Insert(
     aSalMIData.aText = rStr;
 
     // Native-support: returns NULL if not supported
-    pData->pSalMenuItem = ImplGetSVData()->mpDefInst->CreateMenuItem( 
&aSalMIData );
+    pData->pSalMenuItem = ImplGetSVData()->mpDefInst->CreateMenuItem( 
aSalMIData );
 
     if( nPos < maItemList.size() ) {
         maItemList.insert( maItemList.begin() + nPos, 
std::unique_ptr<MenuItemData>(pData) );
@@ -106,7 +105,7 @@ void MenuItemList::InsertSeparator(const OString &rIdent, 
size_t nPos)
     aSalMIData.aImage = Image();
 
     // Native-support: returns NULL if not supported
-    pData->pSalMenuItem = ImplGetSVData()->mpDefInst->CreateMenuItem( 
&aSalMIData );
+    pData->pSalMenuItem = ImplGetSVData()->mpDefInst->CreateMenuItem( 
aSalMIData );
 
     if( nPos < maItemList.size() ) {
         maItemList.insert( maItemList.begin() + nPos, 
std::unique_ptr<MenuItemData>(pData) );
diff --git a/vcl/source/window/menuitemlist.hxx 
b/vcl/source/window/menuitemlist.hxx
index 300908eee447..c25eae263dac 100644
--- a/vcl/source/window/menuitemlist.hxx
+++ b/vcl/source/window/menuitemlist.hxx
@@ -54,7 +54,7 @@ struct MenuItemData
     Size            aSz;                    // only temporarily valid
     OUString        aAccessibleName;        // accessible name
 
-    SalMenuItem*    pSalMenuItem;           // access to native menu
+    std::unique_ptr<SalMenuItem> pSalMenuItem; // access to native menu
 
     MenuItemData()
         : nId(0)
@@ -68,7 +68,6 @@ struct MenuItemData
         , bVisible(false)
         , bIsTemporary(false)
         , bHiddenOnGUI(false)
-        , pSalMenuItem(nullptr)
     {
     }
     MenuItemData( const OUString& rStr )
@@ -85,7 +84,6 @@ struct MenuItemData
         , bVisible(false)
         , bIsTemporary(false)
         , bHiddenOnGUI(false)
-        , pSalMenuItem(nullptr)
     {
     }
     ~MenuItemData();
diff --git a/vcl/source/window/menuwindow.cxx b/vcl/source/window/menuwindow.cxx
index 4577f38abdc1..2244a84ddeb0 100644
--- a/vcl/source/window/menuwindow.cxx
+++ b/vcl/source/window/menuwindow.cxx
@@ -20,6 +20,7 @@
 #include "menuwindow.hxx"
 #include "menuitemlist.hxx"
 
+#include <salmenu.hxx>
 #include <vcl/help.hxx>
 #include <vcl/menu.hxx>
 #include <vcl/settings.hxx>
diff --git a/vcl/unx/gtk/gtkinst.cxx b/vcl/unx/gtk/gtkinst.cxx
index 926ef9b3f9d0..e61acedf3cd9 100644
--- a/vcl/unx/gtk/gtkinst.cxx
+++ b/vcl/unx/gtk/gtkinst.cxx
@@ -371,24 +371,17 @@ void GtkInstance::DestroyMenu( SalMenu* pMenu )
     delete pMenu;
 }
 
-SalMenuItem* GtkInstance::CreateMenuItem( const SalItemParams* pItemData )
+std::unique_ptr<SalMenuItem> GtkInstance::CreateMenuItem( const SalItemParams 
& rItemData )
 {
     EnsureInit();
-    return new GtkSalMenuItem( pItemData );
-}
-
-void GtkInstance::DestroyMenuItem( SalMenuItem* pItem )
-{
-    EnsureInit();
-    delete pItem;
+    return std::unique_ptr<SalMenuItem>(new GtkSalMenuItem( &rItemData ));
 }
 
 #else // not ENABLE_GMENU_INTEGRATION
 
 SalMenu*     GtkInstance::CreateMenu( bool, Menu* )          { return nullptr; 
}
 void         GtkInstance::DestroyMenu( SalMenu* )                {}
-SalMenuItem* GtkInstance::CreateMenuItem( const SalItemParams* ) { return 
nullptr; }
-void         GtkInstance::DestroyMenuItem( SalMenuItem* )        {}
+std::unique_ptr<SalMenuItem> GtkInstance::CreateMenuItem( const SalItemParams 
& ) { return nullptr; }
 
 #endif
 
diff --git a/vcl/win/window/salmenu.cxx b/vcl/win/window/salmenu.cxx
index 1339f80afa3d..56c8ca2ff92d 100644
--- a/vcl/win/window/salmenu.cxx
+++ b/vcl/win/window/salmenu.cxx
@@ -65,16 +65,13 @@ void WinSalInstance::DestroyMenu( SalMenu* pSalMenu )
     delete pSalMenu;
 }
 
-SalMenuItem* WinSalInstance::CreateMenuItem( const SalItemParams* pItemData )
+std::unique_ptr<SalMenuItem> WinSalInstance::CreateMenuItem( const 
SalItemParams & rItemData )
 {
-    if( !pItemData )
-        return nullptr;
-
     WinSalMenuItem *pSalMenuItem = new WinSalMenuItem();
     memset( &pSalMenuItem->mInfo, 0, sizeof( MENUITEMINFOW ) );
     pSalMenuItem->mInfo.cbSize = sizeof( MENUITEMINFOW );
 
-    if( pItemData->eType == MenuItemType::SEPARATOR )
+    if( rItemData.eType == MenuItemType::SEPARATOR )
     {
         // separator
         pSalMenuItem->mInfo.fMask = MIIM_TYPE;
@@ -83,10 +80,10 @@ SalMenuItem* WinSalInstance::CreateMenuItem( const 
SalItemParams* pItemData )
     else
     {
         // item
-        pSalMenuItem->mText   = pItemData->aText;
-        pSalMenuItem->mpMenu  = pItemData->pMenu;
-        pSalMenuItem->maBitmap= !!pItemData->aImage ? 
pItemData->aImage.GetBitmapEx().GetBitmap() : Bitmap();
-        pSalMenuItem->mnId    = pItemData->nId;
+        pSalMenuItem->mText   = rItemData.aText;
+        pSalMenuItem->mpMenu  = rItemData.pMenu;
+        pSalMenuItem->maBitmap= !!rItemData.aImage ? 
rItemData.aImage.GetBitmapEx().GetBitmap() : Bitmap();
+        pSalMenuItem->mnId    = rItemData.nId;
 
         // 'translate' mnemonics
         pSalMenuItem->mText = pSalMenuItem->mText.replaceAll( "~", "&" );
@@ -96,16 +93,11 @@ SalMenuItem* WinSalInstance::CreateMenuItem( const 
SalItemParams* pItemData )
         pSalMenuItem->mInfo.dwTypeData = o3tl::toW(const_cast<sal_Unicode 
*>(pSalMenuItem->mText.getStr()));
         pSalMenuItem->mInfo.cch = pSalMenuItem->mText.getLength();
 
-        pSalMenuItem->mInfo.wID = pItemData->nId;
+        pSalMenuItem->mInfo.wID = rItemData.nId;
         pSalMenuItem->mInfo.dwItemData = 
reinterpret_cast<ULONG_PTR>(pSalMenuItem); // user data
     }
 
-    return pSalMenuItem;
-}
-
-void WinSalInstance::DestroyMenuItem( SalMenuItem* pSalMenuItem )
-{
-    delete pSalMenuItem;
+    return std::unique_ptr<SalMenuItem>(pSalMenuItem);
 }
 
 static void ImplDrawMenuBar( SalMenu *pMenu )
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to