summaryrefslogtreecommitdiff
path: root/dtrans
diff options
context:
space:
mode:
Diffstat (limited to 'dtrans')
-rw-r--r--dtrans/source/win32/clipb/WinClipbImpl.cxx12
-rw-r--r--dtrans/source/win32/clipb/WinClipbImpl.hxx1
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;