[Libreoffice-commits] core.git: Branch 'feature/vclptr' - 3 commits - include/svx include/vcl sfx2/source svx/source vcl/qa vcl/source vcl/workben

Michael Meeks michael.meeks at collabora.com
Mon Apr 13 14:46:46 PDT 2015


 include/svx/sidebar/PanelLayout.hxx                   |    1 
 include/svx/sidebar/Popup.hxx                         |    2 -
 include/vcl/vclptr.hxx                                |   22 +++++++++++++++---
 sfx2/source/sidebar/Deck.cxx                          |    2 -
 svx/source/sidebar/PanelFactory.cxx                   |   12 ++++-----
 svx/source/sidebar/area/AreaPropertyPanel.cxx         |   16 +++++++------
 svx/source/sidebar/area/AreaPropertyPanel.hxx         |    4 +--
 svx/source/sidebar/graphic/GraphicPropertyPanel.cxx   |   12 +++++----
 svx/source/sidebar/graphic/GraphicPropertyPanel.hxx   |    2 -
 svx/source/sidebar/line/LinePropertyPanel.cxx         |   10 ++++----
 svx/source/sidebar/line/LinePropertyPanel.hxx         |    4 +--
 svx/source/sidebar/paragraph/ParaPropertyPanel.cxx    |   14 ++++++-----
 svx/source/sidebar/paragraph/ParaPropertyPanel.hxx    |    2 -
 svx/source/sidebar/possize/PosSizePropertyPanel.cxx   |   14 ++++++-----
 svx/source/sidebar/possize/PosSizePropertyPanel.hxx   |    2 -
 svx/source/sidebar/text/TextCharacterSpacingPopup.cxx |    2 -
 svx/source/sidebar/text/TextCharacterSpacingPopup.hxx |    2 -
 svx/source/sidebar/text/TextPropertyPanel.cxx         |   22 +++++++++---------
 svx/source/sidebar/text/TextPropertyPanel.hxx         |    6 ++--
 vcl/qa/cppunit/lifecycle.cxx                          |    2 -
 vcl/source/opengl/OpenGLContext.cxx                   |    2 -
 vcl/workben/vcldemo.cxx                               |    2 -
 22 files changed, 93 insertions(+), 64 deletions(-)

New commits:
commit 26fced1cd40e8c4631df16451711af893460a1cf
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Mon Apr 13 22:51:42 2015 +0100

    Re-work sidebar factory to use VclPtr.
    
    Change-Id: Iccbf4166419eee9f78f036d1abe07bba028d09e6

diff --git a/include/svx/sidebar/PanelLayout.hxx b/include/svx/sidebar/PanelLayout.hxx
index e4db4f0..82790a4 100644
--- a/include/svx/sidebar/PanelLayout.hxx
+++ b/include/svx/sidebar/PanelLayout.hxx
@@ -16,6 +16,7 @@
 #include <vcl/ctrl.hxx>
 #include <vcl/timer.hxx>
 #include <vcl/idle.hxx>
+#include <vcl/vclptr.hxx>
 
 #include <com/sun/star/beans/PropertyValue.hpp>
 #include <com/sun/star/frame/XFrame.hpp>
diff --git a/include/svx/sidebar/Popup.hxx b/include/svx/sidebar/Popup.hxx
index bcd0bde..67d4c1c 100644
--- a/include/svx/sidebar/Popup.hxx
+++ b/include/svx/sidebar/Popup.hxx
@@ -91,7 +91,7 @@ protected:
 
 private:
     VclPtr<vcl::Window> mpParent;
-    ::boost::function<PopupControl*(PopupContainer*)> maControlCreator;
+    ::boost::function<VclPtr<PopupControl>(PopupContainer*)> maControlCreator;
     ::boost::function<void(void)> maPopupModeEndCallback;
     const ::rtl::OUString msAccessibleName;
     VclPtr<PopupContainer> mxContainer;
diff --git a/sfx2/source/sidebar/Deck.cxx b/sfx2/source/sidebar/Deck.cxx
index 9dcccbc..a44217c 100644
--- a/sfx2/source/sidebar/Deck.cxx
+++ b/sfx2/source/sidebar/Deck.cxx
@@ -90,11 +90,11 @@ void Deck::dispose()
         aPanels[i].disposeAndClear();
     maPanels.clear();
 
-    mpTitleBar.disposeAndClear();
     mpFiller.disposeAndClear();
     mpVerticalScrollBar.disposeAndClear();
     mpScrollContainer.disposeAndClear();
     mpScrollClipWindow.disposeAndClear();
+    mpTitleBar.disposeAndClear();
 
     vcl::Window::dispose();
 }
diff --git a/svx/source/sidebar/PanelFactory.cxx b/svx/source/sidebar/PanelFactory.cxx
index e5a0cad..9e80936 100644
--- a/svx/source/sidebar/PanelFactory.cxx
+++ b/svx/source/sidebar/PanelFactory.cxx
@@ -137,7 +137,7 @@ Reference<ui::XUIElement> SAL_CALL PanelFactory::createUIElement (
             "PanelFactory::createUIElement called without SfxBindings",
             NULL);
 
-    vcl::Window* pControl = NULL;
+    VclPtr<vcl::Window> pControl;
     ui::LayoutSize aLayoutSize (-1,-1,-1);
 
     if (rsResourceURL.endsWith("/TextPropertyPanel"))
@@ -166,25 +166,25 @@ Reference<ui::XUIElement> SAL_CALL PanelFactory::createUIElement (
     }
     else if (rsResourceURL.endsWith("/InsertPropertyPanel"))
     {
-        pControl = new InsertPropertyPanel(pParentWindow, xFrame);
+        pControl.reset(VclPtr<InsertPropertyPanel>::Create(pParentWindow, xFrame));
     }
     else if (rsResourceURL.endsWith("/GalleryPanel"))
     {
-        pControl = new GalleryControl(pBindings, pParentWindow);
+        pControl.reset(VclPtr<GalleryControl>::Create(pBindings, pParentWindow));
         aLayoutSize = ui::LayoutSize(300,-1,400);
     }
     else if (rsResourceURL.endsWith("/StyleListPanel"))
     {
-        pControl = new SfxTemplatePanelControl(pBindings, pParentWindow);
+        pControl.reset(VclPtr<SfxTemplatePanelControl>::Create(pBindings, pParentWindow));
         aLayoutSize = ui::LayoutSize(0,-1,-1);
     }
     else if (rsResourceURL.endsWith("/EmptyPanel"))
     {
-        pControl = new EmptyPanel(pParentWindow);
+        pControl.reset(VclPtr<EmptyPanel>::Create(pParentWindow));
         aLayoutSize = ui::LayoutSize(20,-1, 50);
     }
 
-    if (pControl != NULL)
+    if (pControl)
     {
         return sfx2::sidebar::SidebarPanelBase::Create(
             rsResourceURL,
diff --git a/svx/source/sidebar/area/AreaPropertyPanel.cxx b/svx/source/sidebar/area/AreaPropertyPanel.cxx
index 0063d05..bc731f9 100644
--- a/svx/source/sidebar/area/AreaPropertyPanel.cxx
+++ b/svx/source/sidebar/area/AreaPropertyPanel.cxx
@@ -493,9 +493,9 @@ IMPL_LINK( AreaPropertyPanel, SelectFillAttrHdl, ListBox*, pToolBox )
 }
 
 
-PopupControl* AreaPropertyPanel::CreateTransparencyGradientControl (PopupContainer* pParent)
+VclPtr<PopupControl> AreaPropertyPanel::CreateTransparencyGradientControl (PopupContainer* pParent)
 {
-    return new AreaTransparencyGradientControl(pParent, *this);
+    return VclPtrInstance<AreaTransparencyGradientControl>(pParent, *this);
 }
 
 
@@ -515,7 +515,7 @@ void AreaPropertyPanel::SetupIcons(void)
 
 
 
-AreaPropertyPanel* AreaPropertyPanel::Create (
+VclPtr<vcl::Window> AreaPropertyPanel::Create (
     vcl::Window* pParent,
     const css::uno::Reference<css::frame::XFrame>& rxFrame,
     SfxBindings* pBindings)
@@ -527,10 +527,12 @@ AreaPropertyPanel* AreaPropertyPanel::Create (
     if (pBindings == NULL)
         throw lang::IllegalArgumentException("no SfxBindings given to AreaPropertyPanel::Create", NULL, 2);
 
-    return new AreaPropertyPanel(
-        pParent,
-        rxFrame,
-        pBindings);
+    return VclPtr<vcl::Window>(
+        new AreaPropertyPanel(
+                pParent,
+                rxFrame,
+                pBindings),
+        SAL_NO_ACQUIRE);
 }
 
 
diff --git a/svx/source/sidebar/area/AreaPropertyPanel.hxx b/svx/source/sidebar/area/AreaPropertyPanel.hxx
index 12243fd..76c5baf 100644
--- a/svx/source/sidebar/area/AreaPropertyPanel.hxx
+++ b/svx/source/sidebar/area/AreaPropertyPanel.hxx
@@ -57,7 +57,7 @@ public:
     virtual ~AreaPropertyPanel();
     virtual void dispose() SAL_OVERRIDE;
 
-    static AreaPropertyPanel* Create(
+    static VclPtr<vcl::Window> Create(
         vcl::Window* pParent,
         const css::uno::Reference<css::frame::XFrame>& rxFrame,
         SfxBindings* pBindings);
@@ -147,7 +147,7 @@ private:
     DECL_LINK(ModifyTransparentHdl_Impl, void*);
 
     // for transparency gradient
-    PopupControl* CreateTransparencyGradientControl (PopupContainer* pParent);
+    VclPtr<PopupControl> CreateTransparencyGradientControl (PopupContainer* pParent);
     DECL_LINK( ClickTrGrHdl_Impl, ToolBox* );
 
     // constructor/destuctor
diff --git a/svx/source/sidebar/graphic/GraphicPropertyPanel.cxx b/svx/source/sidebar/graphic/GraphicPropertyPanel.cxx
index 8ac484d8..933b5f3 100644
--- a/svx/source/sidebar/graphic/GraphicPropertyPanel.cxx
+++ b/svx/source/sidebar/graphic/GraphicPropertyPanel.cxx
@@ -232,7 +232,7 @@ void GraphicPropertyPanel::SetupIcons(void)
 
 
 
-GraphicPropertyPanel* GraphicPropertyPanel::Create (
+VclPtr<vcl::Window> GraphicPropertyPanel::Create (
     vcl::Window* pParent,
     const css::uno::Reference<css::frame::XFrame>& rxFrame,
     SfxBindings* pBindings)
@@ -244,10 +244,12 @@ GraphicPropertyPanel* GraphicPropertyPanel::Create (
     if (pBindings == NULL)
         throw lang::IllegalArgumentException("no SfxBindings given to GraphicPropertyPanel::Create", NULL, 2);
 
-    return new GraphicPropertyPanel(
-        pParent,
-        rxFrame,
-        pBindings);
+    return VclPtr<vcl::Window>(
+        new GraphicPropertyPanel(
+                pParent,
+                rxFrame,
+                pBindings),
+        SAL_NO_ACQUIRE);
 }
 
 
diff --git a/svx/source/sidebar/graphic/GraphicPropertyPanel.hxx b/svx/source/sidebar/graphic/GraphicPropertyPanel.hxx
index 691d45f..85b1d39 100644
--- a/svx/source/sidebar/graphic/GraphicPropertyPanel.hxx
+++ b/svx/source/sidebar/graphic/GraphicPropertyPanel.hxx
@@ -42,7 +42,7 @@ public:
     virtual ~GraphicPropertyPanel();
     virtual void dispose() SAL_OVERRIDE;
 
-    static GraphicPropertyPanel* Create(
+    static VclPtr<vcl::Window> Create(
         vcl::Window* pParent,
         const css::uno::Reference<css::frame::XFrame>& rxFrame,
         SfxBindings* pBindings);
diff --git a/svx/source/sidebar/line/LinePropertyPanel.cxx b/svx/source/sidebar/line/LinePropertyPanel.cxx
index 5ff67de..12b0f33 100644
--- a/svx/source/sidebar/line/LinePropertyPanel.cxx
+++ b/svx/source/sidebar/line/LinePropertyPanel.cxx
@@ -286,7 +286,7 @@ void LinePropertyPanel::SetupIcons(void)
     }
 }
 
-LinePropertyPanel* LinePropertyPanel::Create (
+VclPtr<vcl::Window> LinePropertyPanel::Create (
     vcl::Window* pParent,
     const uno::Reference<frame::XFrame>& rxFrame,
     SfxBindings* pBindings)
@@ -298,7 +298,9 @@ LinePropertyPanel* LinePropertyPanel::Create (
     if (pBindings == NULL)
         throw lang::IllegalArgumentException("no SfxBindings given to LinePropertyPanel::Create", NULL, 2);
 
-    return new LinePropertyPanel(pParent, rxFrame, pBindings);
+    return VclPtr<vcl::Window>(
+                new LinePropertyPanel(pParent, rxFrame, pBindings),
+                SAL_NO_ACQUIRE);
 }
 
 void LinePropertyPanel::DataChanged(const DataChangedEvent& /*rEvent*/)
@@ -769,9 +771,9 @@ IMPL_LINK( LinePropertyPanel, ChangeTransparentHdl, void *, EMPTYARG )
     return 0L;
 }
 
-PopupControl* LinePropertyPanel::CreateLineWidthPopupControl (PopupContainer* pParent)
+VclPtr<PopupControl> LinePropertyPanel::CreateLineWidthPopupControl (PopupContainer* pParent)
 {
-    return new LineWidthControl(pParent, *this);
+    return VclPtrInstance<LineWidthControl>(pParent, *this);
 }
 
 void LinePropertyPanel::EndLineWidthPopupMode (void)
diff --git a/svx/source/sidebar/line/LinePropertyPanel.hxx b/svx/source/sidebar/line/LinePropertyPanel.hxx
index 2567a5e..626e2ac 100644
--- a/svx/source/sidebar/line/LinePropertyPanel.hxx
+++ b/svx/source/sidebar/line/LinePropertyPanel.hxx
@@ -63,7 +63,7 @@ public:
     virtual ~LinePropertyPanel();
     virtual void dispose() SAL_OVERRIDE;
 
-    static LinePropertyPanel* Create(
+    static VclPtr<vcl::Window> Create(
         vcl::Window* pParent,
         const css::uno::Reference<css::frame::XFrame>& rxFrame,
         SfxBindings* pBindings);
@@ -161,7 +161,7 @@ private:
         const css::uno::Reference<css::frame::XFrame>& rxFrame,
         SfxBindings* pBindings);
 
-    PopupControl* CreateLineWidthPopupControl (PopupContainer* pParent);
+    VclPtr<PopupControl> CreateLineWidthPopupControl (PopupContainer* pParent);
 };
 
 } } // end of namespace svx::sidebar
diff --git a/svx/source/sidebar/paragraph/ParaPropertyPanel.cxx b/svx/source/sidebar/paragraph/ParaPropertyPanel.cxx
index b84a068..8ba3f99 100644
--- a/svx/source/sidebar/paragraph/ParaPropertyPanel.cxx
+++ b/svx/source/sidebar/paragraph/ParaPropertyPanel.cxx
@@ -55,7 +55,7 @@ namespace svx {namespace sidebar {
 #define MAX_SC_SD               116220200
 #define NEGA_MAXVALUE          -10000000
 
-ParaPropertyPanel* ParaPropertyPanel::Create (
+VclPtr<vcl::Window> ParaPropertyPanel::Create (
     vcl::Window* pParent,
     const css::uno::Reference<css::frame::XFrame>& rxFrame,
     SfxBindings* pBindings,
@@ -68,11 +68,13 @@ ParaPropertyPanel* ParaPropertyPanel::Create (
     if (pBindings == NULL)
         throw lang::IllegalArgumentException("no SfxBindings given to ParaPropertyPanel::Create", NULL, 2);
 
-    return new ParaPropertyPanel(
-        pParent,
-        rxFrame,
-        pBindings,
-        rxSidebar);
+    return VclPtr<vcl::Window>(
+        new ParaPropertyPanel(
+                pParent,
+                rxFrame,
+                pBindings,
+                rxSidebar),
+        SAL_NO_ACQUIRE);
 }
 
 void ParaPropertyPanel::HandleContextChange (
diff --git a/svx/source/sidebar/paragraph/ParaPropertyPanel.hxx b/svx/source/sidebar/paragraph/ParaPropertyPanel.hxx
index 2b4d877..9eddf1f 100644
--- a/svx/source/sidebar/paragraph/ParaPropertyPanel.hxx
+++ b/svx/source/sidebar/paragraph/ParaPropertyPanel.hxx
@@ -46,7 +46,7 @@ public:
     virtual ~ParaPropertyPanel();
     virtual void dispose() SAL_OVERRIDE;
 
-    static ParaPropertyPanel* Create (
+    static VclPtr<vcl::Window> Create (
         vcl::Window* pParent,
         const css::uno::Reference<css::frame::XFrame>& rxFrame,
         SfxBindings* pBindings,
diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
index cfb5939d..b352332 100644
--- a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
+++ b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
@@ -232,7 +232,7 @@ void PosSizePropertyPanel::SetupIcons(void)
 
 
 
-PosSizePropertyPanel* PosSizePropertyPanel::Create (
+VclPtr<vcl::Window> PosSizePropertyPanel::Create (
     vcl::Window* pParent,
     const css::uno::Reference<css::frame::XFrame>& rxFrame,
     SfxBindings* pBindings,
@@ -245,11 +245,13 @@ PosSizePropertyPanel* PosSizePropertyPanel::Create (
     if (pBindings == NULL)
         throw lang::IllegalArgumentException("no SfxBindings given to PosSizePropertyPanel::Create", NULL, 2);
 
-    return new PosSizePropertyPanel(
-        pParent,
-        rxFrame,
-        pBindings,
-        rxSidebar);
+    return VclPtr<vcl::Window>(
+                new PosSizePropertyPanel(
+                        pParent,
+                        rxFrame,
+                        pBindings,
+                        rxSidebar),
+                SAL_NO_ACQUIRE);
 }
 
 
diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.hxx b/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
index d8a2685..a5148b6 100644
--- a/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
+++ b/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
@@ -53,7 +53,7 @@ public:
     virtual ~PosSizePropertyPanel();
     virtual void dispose() SAL_OVERRIDE;
 
-    static PosSizePropertyPanel* Create(
+    static VclPtr<vcl::Window> Create(
         vcl::Window* pParent,
         const css::uno::Reference<css::frame::XFrame>& rxFrame,
         SfxBindings* pBindings,
diff --git a/svx/source/sidebar/text/TextCharacterSpacingPopup.cxx b/svx/source/sidebar/text/TextCharacterSpacingPopup.cxx
index 57ea21a..cc62343 100644
--- a/svx/source/sidebar/text/TextCharacterSpacingPopup.cxx
+++ b/svx/source/sidebar/text/TextCharacterSpacingPopup.cxx
@@ -25,7 +25,7 @@ namespace svx { namespace sidebar {
 
 TextCharacterSpacingPopup::TextCharacterSpacingPopup (
     vcl::Window* pParent,
-    const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator)
+    const ::boost::function<VclPtr<PopupControl>(PopupContainer*)>& rControlCreator)
     : Popup(
         pParent,
         rControlCreator,
diff --git a/svx/source/sidebar/text/TextCharacterSpacingPopup.hxx b/svx/source/sidebar/text/TextCharacterSpacingPopup.hxx
index 17ad29c..0c4331f 100644
--- a/svx/source/sidebar/text/TextCharacterSpacingPopup.hxx
+++ b/svx/source/sidebar/text/TextCharacterSpacingPopup.hxx
@@ -31,7 +31,7 @@ class TextCharacterSpacingPopup
 public :
     TextCharacterSpacingPopup (
         vcl::Window* pParent,
-        const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator);
+        const ::boost::function<VclPtr<PopupControl>(PopupContainer*)>& rControlCreator);
     virtual ~TextCharacterSpacingPopup (void);
 
     void Rearrange (bool bLBAvailable,bool bAvailable, long nKerning);
diff --git a/svx/source/sidebar/text/TextPropertyPanel.cxx b/svx/source/sidebar/text/TextPropertyPanel.cxx
index b9b8c26..57ebb7d 100644
--- a/svx/source/sidebar/text/TextPropertyPanel.cxx
+++ b/svx/source/sidebar/text/TextPropertyPanel.cxx
@@ -43,14 +43,14 @@ const char UNO_UNDERLINE[] = ".uno:Underline";
 
 namespace svx { namespace sidebar {
 
-PopupControl* TextPropertyPanel::CreateCharacterSpacingControl (PopupContainer* pParent)
+VclPtr<PopupControl> TextPropertyPanel::CreateCharacterSpacingControl (PopupContainer* pParent)
 {
-    return new TextCharacterSpacingControl(pParent, *this, mpBindings);
+    return VclPtrInstance<TextCharacterSpacingControl>(pParent, *this, mpBindings);
 }
 
-PopupControl* TextPropertyPanel::CreateUnderlinePopupControl (PopupContainer* pParent)
+VclPtr<PopupControl> TextPropertyPanel::CreateUnderlinePopupControl (PopupContainer* pParent)
 {
-    return new TextUnderlineControl(pParent, *this, mpBindings);
+    return VclPtrInstance<TextUnderlineControl>(pParent, *this, mpBindings);
 }
 
 long TextPropertyPanel::GetSelFontSize()
@@ -62,7 +62,7 @@ long TextPropertyPanel::GetSelFontSize()
     return nH;
 }
 
-TextPropertyPanel* TextPropertyPanel::Create (
+VclPtr<vcl::Window> TextPropertyPanel::Create (
     vcl::Window* pParent,
     const css::uno::Reference<css::frame::XFrame>& rxFrame,
     SfxBindings* pBindings,
@@ -75,11 +75,13 @@ TextPropertyPanel* TextPropertyPanel::Create (
     if (pBindings == NULL)
         throw lang::IllegalArgumentException("no SfxBindings given to TextPropertyPanel::Create", NULL, 2);
 
-    return new TextPropertyPanel(
-        pParent,
-        rxFrame,
-        pBindings,
-        rContext);
+    return VclPtr< vcl::Window >(
+        new TextPropertyPanel(
+                pParent,
+                rxFrame,
+                pBindings,
+                rContext),
+        SAL_NO_ACQUIRE);
 }
 
 
diff --git a/svx/source/sidebar/text/TextPropertyPanel.hxx b/svx/source/sidebar/text/TextPropertyPanel.hxx
index a5f295f..ee0abaa 100644
--- a/svx/source/sidebar/text/TextPropertyPanel.hxx
+++ b/svx/source/sidebar/text/TextPropertyPanel.hxx
@@ -49,7 +49,7 @@ public:
     virtual ~TextPropertyPanel();
     virtual void dispose() SAL_OVERRIDE;
 
-    static TextPropertyPanel* Create (
+    static VclPtr<vcl::Window> Create (
         vcl::Window* pParent,
         const css::uno::Reference<css::frame::XFrame>& rxFrame,
         SfxBindings* pBindings,
@@ -107,8 +107,8 @@ private:
         const ::sfx2::sidebar::EnumContext& rContext);
 
 
-    PopupControl* CreateCharacterSpacingControl (PopupContainer* pParent);
-    PopupControl* CreateUnderlinePopupControl (PopupContainer* pParent);
+    VclPtr<PopupControl> CreateCharacterSpacingControl (PopupContainer* pParent);
+    VclPtr<PopupControl> CreateUnderlinePopupControl (PopupContainer* pParent);
     DECL_LINK(SpacingClickHdl, ToolBox*);
     DECL_LINK(UnderlineClickHdl, ToolBox* );
 
commit 318dc66b7720b85f3b7fa426743c6cf808168f43
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Mon Apr 13 21:46:06 2015 +0100

    Use the new ::Create template method.
    
    Change-Id: I79e15b45769ced44b1679943972f7a71c7df8fca

diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx
index 30b7afa..e61231e 100644
--- a/vcl/source/opengl/OpenGLContext.cxx
+++ b/vcl/source/opengl/OpenGLContext.cxx
@@ -1142,7 +1142,7 @@ bool OpenGLContext::initWindow()
     {
         if( !m_pChildWindow )
         {
-            m_pChildWindow = VclPtrInstance<SystemChildWindow>(mpWindow, 0, &winData, false);
+            m_pChildWindow = VclPtr<SystemChildWindow>::Create(mpWindow, 0, &winData, false);
         }
         pChildSysData = m_pChildWindow->GetSystemData();
     }
diff --git a/vcl/workben/vcldemo.cxx b/vcl/workben/vcldemo.cxx
index 8401879..33682e1 100644
--- a/vcl/workben/vcldemo.cxx
+++ b/vcl/workben/vcldemo.cxx
@@ -1623,7 +1623,7 @@ public:
             aMainWin->SetText("Interactive VCL demo #1");
 
             if (bWidgets)
-                xWidgets = VclPtrInstance< DemoWidgets > ();
+                xWidgets = VclPtr< DemoWidgets >::Create ();
             else if (bPopup)
                 xPopup = VclPtrInstance< DemoPopup> ();
             else
commit 324377ada2513031e211f1d38a842859b6f094a2
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Mon Apr 13 21:19:21 2015 +0100

    VclPtr - add a templatized ::Create method for better readability.
    
    Change-Id: I2437198709ba4848d975efd1ebb4df1071c6c8f1

diff --git a/include/vcl/vclptr.hxx b/include/vcl/vclptr.hxx
index c4c210b..d97124d 100644
--- a/include/vcl/vclptr.hxx
+++ b/include/vcl/vclptr.hxx
@@ -125,6 +125,20 @@ public:
     {
     }
 
+    /**
+     * A construction helper for VclPtr. Since VclPtr types are created
+     * with a reference-count of one - to help fit into the existing
+     * code-flow; this helps us to construct them easily.
+     *
+     * For more details on the design please see vcl/README.lifecycle
+     *
+     * @param reference_type must be a subclass of vcl::Window
+     */
+    template<typename... Arg> static VclPtr< reference_type > Create(Arg &&... arg)
+    {
+        return VclPtr< reference_type >( new reference_type(std::forward<Arg>(arg)...), SAL_NO_ACQUIRE );
+    }
+
     /** Probably most common used: handle->someBodyOp().
      */
     inline reference_type * SAL_CALL operator->() const
@@ -224,9 +238,10 @@ public:
 }; // class VclPtr
 
 /**
- * A construction helper for VclPtr. Since VclPtr types are created
- * with a reference-count of one - to help fit into the existing
- * code-flow; this helps us to construct them easily.
+ * A construction helper for a temporary VclPtr. Since VclPtr types
+ * are created with a reference-count of one - to help fit into
+ * the existing code-flow; this helps us to construct them easily.
+ * see also VclPtr::Create and ScopedVclPtr
  *
  * For more details on the design please see vcl/README.lifecycle
  *
@@ -295,6 +310,7 @@ public:
         VclPtr<reference_type>::disposeAndClear();
         assert(VclPtr<reference_type>::get() == nullptr); // make sure there are no lingering references
     }
+
 private:
     // Most likely we don't want this default copy-construtor.
     ScopedVclPtr (const ScopedVclPtr<reference_type> &) SAL_DELETED_FUNCTION;
diff --git a/vcl/qa/cppunit/lifecycle.cxx b/vcl/qa/cppunit/lifecycle.cxx
index b505088..4a0bebf 100644
--- a/vcl/qa/cppunit/lifecycle.cxx
+++ b/vcl/qa/cppunit/lifecycle.cxx
@@ -59,7 +59,7 @@ void LifecycleTest::testCast()
 
 void LifecycleTest::testVirtualDevice()
 {
-    VclPtrInstance< VirtualDevice > pVDev;
+    VclPtr<VirtualDevice> pVDev = VclPtr< VirtualDevice >::Create();
     ScopedVclPtrInstance< VirtualDevice > pVDev2;
     VclPtrInstance<VirtualDevice> pVDev3;
     VclPtrInstance<VirtualDevice> pVDev4( 1 );


More information about the Libreoffice-commits mailing list