Use the new single-instance="true" attribute in vcl

Change-Id: I6067761fda821b90fdd5c57a2c934c9626e92fdf
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103739
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
diff --git a/vcl/vclplug_win.component b/vcl/vclplug_win.component
index db79a02..d6dc9f24 100644
--- a/vcl/vclplug_win.component
+++ b/vcl/vclplug_win.component
@@ -40,10 +40,7 @@
    <service name="com.sun.star.datatransfer.clipboard.GenericClipboard"/>
  </implementation>
  <implementation name="com.sun.star.datatransfer.clipboard.ClipboardW32"
        constructor="dtrans_CWinClipboard_get_implementation">
        constructor="dtrans_CWinClipboard_get_implementation" single-instance="true">
    <service name="com.sun.star.datatransfer.clipboard.SystemClipboard"/>
    <!-- Fake singleton so the servicemanager shuts us down and we can clean up our global instance
         var: -->
    <singleton name="com.sun.star.datatransfer.clipboard.theSystemClipboard"/>
  </implementation>
</component>
diff --git a/vcl/win/dtrans/WinClipboard.cxx b/vcl/win/dtrans/WinClipboard.cxx
index 17477fd..de6ecb7 100644
--- a/vcl/win/dtrans/WinClipboard.cxx
+++ b/vcl/win/dtrans/WinClipboard.cxx
@@ -19,8 +19,6 @@

#include <sal/config.h>

#include <mutex>

#include <osl/diagnose.h>
#include <com/sun/star/datatransfer/clipboard/ClipboardEvent.hpp>
#include <com/sun/star/lang/DisposedException.hpp>
@@ -28,7 +26,6 @@
#include <com/sun/star/uno/XComponentContext.hpp>
#include <cppuhelper/supportsservice.hxx>
#include <cppuhelper/weak.hxx>
#include <rtl/ref.hxx>

#include <com/sun/star/datatransfer/clipboard/RenderingCapabilities.hpp>
#include "XNotifyingDataObject.hxx"
@@ -301,27 +298,11 @@ uno::Sequence<OUString> SAL_CALL CWinClipboard::getSupportedServiceNames()
    return { "com.sun.star.datatransfer.clipboard.SystemClipboard" };
}

namespace
{
std::mutex g_InstanceGuard;
rtl::Reference<CWinClipboard> g_Instance;
bool g_Disposed = false;
}

extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
dtrans_CWinClipboard_get_implementation(css::uno::XComponentContext* context,
                                        css::uno::Sequence<css::uno::Any> const&)
{
    std::scoped_lock l(g_InstanceGuard);
    if (g_Disposed)
    {
        return nullptr;
    }
    if (!g_Instance.is())
    {
        g_Instance.set(new CWinClipboard(context, ""));
    }
    return cppu::acquire(static_cast<cppu::OWeakObject*>(g_Instance.get()));
    return cppu::acquire(static_cast<cppu::OWeakObject*>(new CWinClipboard(context, "")));
}

void CWinClipboard::onReleaseDataObject(CXNotifyingDataObject* theCaller)
@@ -358,11 +339,4 @@ void WINAPI CWinClipboard::onClipboardContentChanged()
    }
}

void CWinClipboard::disposing()
{
    std::scoped_lock l(g_InstanceGuard);
    g_Instance.clear();
    g_Disposed = true;
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/win/dtrans/WinClipboard.hxx b/vcl/win/dtrans/WinClipboard.hxx
index 984a07a..1b0a05a 100644
--- a/vcl/win/dtrans/WinClipboard.hxx
+++ b/vcl/win/dtrans/WinClipboard.hxx
@@ -82,8 +82,6 @@ class CWinClipboard final

    static void WINAPI onClipboardContentChanged();

    void SAL_CALL disposing() override;

public:
    CWinClipboard(const css::uno::Reference<css::uno::XComponentContext>& rxContext,
                  const OUString& aClipboardName);