diff options
-rw-r--r-- | dtrans/source/win32/clipb/WinClipbImpl.cxx | 12 | ||||
-rw-r--r-- | dtrans/source/win32/clipb/WinClipbImpl.hxx | 1 |
2 files changed, 13 insertions, 0 deletions
diff --git a/dtrans/source/win32/clipb/WinClipbImpl.cxx b/dtrans/source/win32/clipb/WinClipbImpl.cxx index 003a266f84bc..8d59be7ca430 100644 --- a/dtrans/source/win32/clipb/WinClipbImpl.cxx +++ b/dtrans/source/win32/clipb/WinClipbImpl.cxx @@ -83,6 +83,10 @@ Reference< XTransferable > CWinClipbImpl::getContents( ) 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 } @@ -101,6 +105,9 @@ Reference< XTransferable > CWinClipbImpl::getContents( ) // 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; @@ -117,6 +124,8 @@ void CWinClipbImpl::setContents( { MutexGuard aGuard(m_ClipContentMutex); + m_foreignContent.clear(); + m_pCurrentClipContent = new CXNotifyingDataObject(CDTransObjFactory::createDataObjFromTransferable( m_pWinClipboard->m_xContext, xTransferable), @@ -176,7 +185,10 @@ void WINAPI CWinClipbImpl::onClipboardContentChanged() // 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 ) diff --git a/dtrans/source/win32/clipb/WinClipbImpl.hxx b/dtrans/source/win32/clipb/WinClipbImpl.hxx index 55a9d8d600bc..cd5878e6b794 100644 --- a/dtrans/source/win32/clipb/WinClipbImpl.hxx +++ b/dtrans/source/win32/clipb/WinClipbImpl.hxx @@ -87,6 +87,7 @@ private: CMtaOleClipboard m_MtaOleClipboard; CWinClipboard* m_pWinClipboard; CXNotifyingDataObject* m_pCurrentClipContent; + com::sun::star::uno::Reference< com::sun::star::datatransfer::XTransferable > m_foreignContent; osl::Mutex m_ClipContentMutex; static osl::Mutex s_aMutex; |