Blame SOURCES/0002-gnome-documents-rework-SfxPickList-as-pimpl.patch

dc0b3e
From 24785875d0bbeae58fe362b088238115c961e2c1 Mon Sep 17 00:00:00 2001
dc0b3e
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
dc0b3e
Date: Mon, 8 May 2017 15:35:29 +0100
dc0b3e
Subject: [PATCH 2/5] gnome-documents: rework SfxPickList as pimpl
dc0b3e
MIME-Version: 1.0
dc0b3e
Content-Type: text/plain; charset=UTF-8
dc0b3e
Content-Transfer-Encoding: 8bit
dc0b3e
dc0b3e
and call impl dtor with SolarMutex held
dc0b3e
dc0b3e
Change-Id: I06931ca9ab4384a5e3c255847cf3533ed03b77dc
dc0b3e
Reviewed-on: https://gerrit.libreoffice.org/37395
dc0b3e
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
dc0b3e
Tested-by: Caolán McNamara <caolanm@redhat.com>
dc0b3e
(cherry picked from commit 53082fcd1b1cccf7ef0c3cb1bef8e747c4e88a61)
dc0b3e
---
dc0b3e
 sfx2/source/appl/sfxpicklist.cxx | 40 ++++++++++++++++++++++++++++++++--------
dc0b3e
 sfx2/source/inc/sfxpicklist.hxx  | 27 +++++++++------------------
dc0b3e
 2 files changed, 41 insertions(+), 26 deletions(-)
dc0b3e
dc0b3e
diff --git a/sfx2/source/appl/sfxpicklist.cxx b/sfx2/source/appl/sfxpicklist.cxx
dc0b3e
index cc3a5cf..7781e9d 100644
dc0b3e
--- a/sfx2/source/appl/sfxpicklist.cxx
dc0b3e
+++ b/sfx2/source/appl/sfxpicklist.cxx
dc0b3e
@@ -83,7 +83,25 @@ namespace
dc0b3e
         : public rtl::Static<osl::Mutex, thePickListMutex> {};
dc0b3e
 }
dc0b3e
 
dc0b3e
-void SfxPickList::AddDocumentToPickList( SfxObjectShell* pDocSh )
dc0b3e
+class SfxPickListImpl : public SfxListener
dc0b3e
+{
dc0b3e
+private:
dc0b3e
+    sal_uInt32 m_nAllowedMenuSize;
dc0b3e
+    css::uno::Reference< css::util::XStringWidth > m_xStringLength;
dc0b3e
+
dc0b3e
+    /**
dc0b3e
+     * Adds the given document to the pick list (recent documents) if it satisfies
dc0b3e
+       certain requirements, e.g. being writable. Check implementation for requirement
dc0b3e
+       details.
dc0b3e
+     */
dc0b3e
+    static void         AddDocumentToPickList( SfxObjectShell* pDocShell );
dc0b3e
+
dc0b3e
+public:
dc0b3e
+    SfxPickListImpl(sal_uInt32 nMenuSize);
dc0b3e
+    virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
dc0b3e
+};
dc0b3e
+
dc0b3e
+void SfxPickListImpl::AddDocumentToPickList( SfxObjectShell* pDocSh )
dc0b3e
 {
dc0b3e
     if (pDocSh->IsAvoidRecentDocs() || comphelper::LibreOfficeKit::isActive())
dc0b3e
         return;
dc0b3e
@@ -167,12 +185,23 @@ void SfxPickList::AddDocumentToPickList( SfxObjectShell* pDocSh )
dc0b3e
                                                                  (pFilter) ? pFilter->GetServiceName() : OUString() );
dc0b3e
 }
dc0b3e
 
dc0b3e
+SfxPickList::SfxPickList(sal_uInt32 nAllowedMenuSize)
dc0b3e
+    : mxImpl(new SfxPickListImpl(nAllowedMenuSize))
dc0b3e
+{
dc0b3e
+}
dc0b3e
+
dc0b3e
+SfxPickList::~SfxPickList()
dc0b3e
+{
dc0b3e
+    std::unique_ptr<SolarMutexGuard> xGuard(comphelper::SolarMutex::get() ? new SolarMutexGuard : nullptr);
dc0b3e
+    mxImpl.reset();
dc0b3e
+}
dc0b3e
+
dc0b3e
 void SfxPickList::ensure()
dc0b3e
 {
dc0b3e
     static SfxPickList aUniqueInstance(SvtHistoryOptions().GetSize(ePICKLIST));
dc0b3e
 }
dc0b3e
 
dc0b3e
-SfxPickList::SfxPickList( sal_uInt32 nAllowedMenuSize ) :
dc0b3e
+SfxPickListImpl::SfxPickListImpl( sal_uInt32 nAllowedMenuSize ) :
dc0b3e
     m_nAllowedMenuSize( nAllowedMenuSize )
dc0b3e
 {
dc0b3e
     m_xStringLength = new StringLength;
dc0b3e
@@ -180,12 +209,7 @@ SfxPickList::SfxPickList( sal_uInt32 nAllowedMenuSize ) :
dc0b3e
     StartListening( *SfxGetpApp() );
dc0b3e
 }
dc0b3e
 
dc0b3e
-SfxPickList::~SfxPickList()
dc0b3e
-{
dc0b3e
-}
dc0b3e
-
dc0b3e
-
dc0b3e
-void SfxPickList::Notify( SfxBroadcaster&, const SfxHint& rHint )
dc0b3e
+void SfxPickListImpl::Notify( SfxBroadcaster&, const SfxHint& rHint )
dc0b3e
 {
dc0b3e
     const SfxOpenUrlHint* pOpenUrlHint = dynamic_cast<const SfxOpenUrlHint*>(&rHint);
dc0b3e
     if ( pOpenUrlHint )
dc0b3e
diff --git a/sfx2/source/inc/sfxpicklist.hxx b/sfx2/source/inc/sfxpicklist.hxx
dc0b3e
index b1e86b0..cf257d9 100644
dc0b3e
--- a/sfx2/source/inc/sfxpicklist.hxx
dc0b3e
+++ b/sfx2/source/inc/sfxpicklist.hxx
dc0b3e
@@ -29,25 +29,16 @@
dc0b3e
 
dc0b3e
 #define PICKLIST_MAXSIZE  100
dc0b3e
 
dc0b3e
-class SfxPickList : public SfxListener
dc0b3e
-{
dc0b3e
-    sal_uInt32                      m_nAllowedMenuSize;
dc0b3e
-    css::uno::Reference< css::util::XStringWidth > m_xStringLength;
dc0b3e
-
dc0b3e
-                            SfxPickList( sal_uInt32 nMenuSize );
dc0b3e
-                            virtual ~SfxPickList() override;
dc0b3e
-
dc0b3e
-    /**
dc0b3e
-     * Adds the given document to the pick list (recent documents) if it satisfies
dc0b3e
-       certain requirements, e.g. being writable. Check implementation for requirement
dc0b3e
-       details.
dc0b3e
-     */
dc0b3e
-    static void             AddDocumentToPickList( SfxObjectShell* pDocShell );
dc0b3e
+class SfxPickListImpl;
dc0b3e
 
dc0b3e
-    public:
dc0b3e
-        static void ensure();
dc0b3e
-
dc0b3e
-        virtual void        Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
dc0b3e
+class SfxPickList
dc0b3e
+{
dc0b3e
+private:
dc0b3e
+    std::unique_ptr<SfxPickListImpl> mxImpl;
dc0b3e
+public:
dc0b3e
+    SfxPickList(sal_uInt32 nAllowedMenuSize);
dc0b3e
+    static void ensure();
dc0b3e
+    ~SfxPickList();
dc0b3e
 };
dc0b3e
 
dc0b3e
 #endif // INCLUDED_SFX2_SOURCE_INC_SFXPICKLIST_HXX
dc0b3e
-- 
dc0b3e
2.9.3
dc0b3e