summaryrefslogtreecommitdiff
path: root/vcl/win/dtrans/WinClipbImpl.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/win/dtrans/WinClipbImpl.cxx')
-rw-r--r--vcl/win/dtrans/WinClipbImpl.cxx210
1 files changed, 0 insertions, 210 deletions
diff --git a/vcl/win/dtrans/WinClipbImpl.cxx b/vcl/win/dtrans/WinClipbImpl.cxx
deleted file mode 100644
index 05248d75e896..000000000000
--- a/vcl/win/dtrans/WinClipbImpl.cxx
+++ /dev/null
@@ -1,210 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <osl/diagnose.h>
-#include "WinClipbImpl.hxx"
-
-#include <systools/win32/comtools.hxx>
-#include "DtObjFactory.hxx"
-#include "APNDataObject.hxx"
-#include "DOTransferable.hxx"
-#include "WinClipboard.hxx"
-#include <com/sun/star/datatransfer/clipboard/RenderingCapabilities.hpp>
-#include "XNotifyingDataObject.hxx"
-
-#if !defined WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
-#endif
-#include <windows.h>
-#include <ole2.h>
-#include <objidl.h>
-
-using namespace osl;
-using namespace std;
-using namespace cppu;
-
-using namespace com::sun::star::uno;
-using namespace com::sun::star::datatransfer;
-using namespace com::sun::star::datatransfer::clipboard;
-using namespace com::sun::star::datatransfer::clipboard::RenderingCapabilities;
-
-// definition of static members
-CWinClipbImpl* CWinClipbImpl::s_pCWinClipbImpl = nullptr;
-osl::Mutex CWinClipbImpl::s_aMutex;
-
-CWinClipbImpl::CWinClipbImpl( const OUString& aClipboardName, CWinClipboard* theWinClipboard ) :
- m_itsName( aClipboardName ),
- m_pWinClipboard( theWinClipboard ),
- m_pCurrentClipContent( nullptr )
-{
- OSL_ASSERT( nullptr != m_pWinClipboard );
-
- // necessary to reassociate from
- // the static callback function
- s_pCWinClipbImpl = this;
- registerClipboardViewer( );
-}
-
-CWinClipbImpl::~CWinClipbImpl( )
-{
- {
- MutexGuard aGuard(s_aMutex);
- s_pCWinClipbImpl = nullptr;
- }
-
- unregisterClipboardViewer( );
-}
-
-Reference< XTransferable > CWinClipbImpl::getContents( )
-{
- // use the shortcut or create a transferable from
- // system clipboard
- {
- MutexGuard aGuard(m_ClipContentMutex);
-
- if (nullptr != m_pCurrentClipContent)
- {
- return m_pCurrentClipContent->m_XTransferable;
- }
-
- // Content cached?
- if (m_foreignContent.is())
- return m_foreignContent;
-
- // release the mutex, so that the variable may be
- // changed by other threads
- }
-
- Reference< XTransferable > rClipContent;
-
- // get the current dataobject from clipboard
- IDataObjectPtr pIDataObject;
- HRESULT hr = m_MtaOleClipboard.getClipboard( &pIDataObject );
-
- if ( SUCCEEDED( hr ) )
- {
- // create an apartment neutral dataobject and initialize it with a
- // com smart pointer to the IDataObject from clipboard
- IDataObjectPtr pIDo( new CAPNDataObject( pIDataObject ) );
-
- // remember pIDo destroys itself due to the smart pointer
- rClipContent = CDOTransferable::create( m_pWinClipboard->m_xContext, pIDo );
-
- MutexGuard aGuard(m_ClipContentMutex);
- m_foreignContent = rClipContent;
- }
-
- return rClipContent;
-}
-
-void CWinClipbImpl::setContents(
- const Reference< XTransferable >& xTransferable,
- const Reference< XClipboardOwner >& xClipboardOwner )
-{
- IDataObjectPtr pIDataObj;
-
- if ( xTransferable.is( ) )
- {
- {
- MutexGuard aGuard(m_ClipContentMutex);
-
- m_foreignContent.clear();
-
- m_pCurrentClipContent
- = new CXNotifyingDataObject(CDTransObjFactory::createDataObjFromTransferable(
- m_pWinClipboard->m_xContext, xTransferable),
- xTransferable, xClipboardOwner, this);
- }
-
- pIDataObj = IDataObjectPtr( m_pCurrentClipContent );
- }
-
- m_MtaOleClipboard.setClipboard(pIDataObj.get());
-}
-
-OUString CWinClipbImpl::getName( )
-{
- return m_itsName;
-}
-
-sal_Int8 CWinClipbImpl::getRenderingCapabilities( )
-{
- return ( Delayed | Persistent );
-}
-
-void CWinClipbImpl::flushClipboard( )
-{
- // actually it should be ClearableMutexGuard aGuard( m_ClipContentMutex );
- // but it does not work since FlushClipboard does a callback and frees DataObject
- // which results in a deadlock in onReleaseDataObject.
- // FlushClipboard had to be synchron in order to prevent shutdown until all
- // clipboard-formats are rendered.
- // The request is needed to prevent flushing if we are not clipboard owner (it is
- // not known what happens if we flush but aren't clipboard owner).
- // It may be possible to move the request to the clipboard STA thread by saving the
- // DataObject and call OleIsCurrentClipboard before flushing.
-
- if ( nullptr != m_pCurrentClipContent )
- m_MtaOleClipboard.flushClipboard( );
-}
-
-void CWinClipbImpl::registerClipboardViewer( )
-{
- m_MtaOleClipboard.registerClipViewer( CWinClipbImpl::onClipboardContentChanged );
-}
-
-void CWinClipbImpl::unregisterClipboardViewer( )
-{
- m_MtaOleClipboard.registerClipViewer( nullptr );
-}
-
-void CWinClipbImpl::dispose()
-{
- OSL_ENSURE( !m_pCurrentClipContent, "Clipboard was not flushed before shutdown!" );
-}
-
-void WINAPI CWinClipbImpl::onClipboardContentChanged()
-{
- MutexGuard aGuard( s_aMutex );
-
- // reassociation to instance through static member
- if ( nullptr != s_pCWinClipbImpl )
- {
- s_pCWinClipbImpl->m_foreignContent.clear();
- s_pCWinClipbImpl->m_pWinClipboard->notifyAllClipboardListener( );
- }
-}
-
-void CWinClipbImpl::onReleaseDataObject( CXNotifyingDataObject* theCaller )
-{
- OSL_ASSERT( nullptr != theCaller );
-
- if ( theCaller )
- theCaller->lostOwnership( );
-
- // if the current caller is the one we currently
- // hold, then set it to NULL because an external
- // source must be the clipboardowner now
- MutexGuard aGuard( m_ClipContentMutex );
-
- if ( m_pCurrentClipContent == theCaller )
- m_pCurrentClipContent = nullptr;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */