diff options
Diffstat (limited to 'dtrans/source/win32/clipb/WinClipbImpl.cxx')
-rw-r--r-- | dtrans/source/win32/clipb/WinClipbImpl.cxx | 12 |
1 files changed, 12 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 ) |