summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/svtools/transfer.hxx2
-rw-r--r--svtools/source/misc/transfer.cxx35
2 files changed, 34 insertions, 3 deletions
diff --git a/include/svtools/transfer.hxx b/include/svtools/transfer.hxx
index 49ce84434632..13ea1c98e244 100644
--- a/include/svtools/transfer.hxx
+++ b/include/svtools/transfer.hxx
@@ -283,10 +283,12 @@ public:
TransferableDataHelper();
TransferableDataHelper( const TransferableDataHelper& rDataHelper );
+ TransferableDataHelper( TransferableDataHelper&& rDataHelper );
TransferableDataHelper( const css::uno::Reference< css::datatransfer::XTransferable >& rxTransferable );
~TransferableDataHelper();
TransferableDataHelper& operator=( const TransferableDataHelper& rDataHelper );
+ TransferableDataHelper& operator=( TransferableDataHelper&& rDataHelper );
const css::uno::Reference< css::datatransfer::XTransferable >& GetTransferable() const { return mxTransfer; }
css::uno::Reference< css::datatransfer::XTransferable > GetXTransferable() const;
diff --git a/svtools/source/misc/transfer.cxx b/svtools/source/misc/transfer.cxx
index 5c0350feacd8..1f7fcb7ad3ff 100644
--- a/svtools/source/misc/transfer.cxx
+++ b/svtools/source/misc/transfer.cxx
@@ -1137,15 +1137,24 @@ TransferableDataHelper::TransferableDataHelper(const TransferableDataHelper& rDa
{
}
+TransferableDataHelper::TransferableDataHelper(TransferableDataHelper&& rDataHelper)
+ : mxTransfer(std::move(rDataHelper.mxTransfer))
+ , mxClipboard(std::move(rDataHelper.mxClipboard))
+ , mxFormats(std::move(rDataHelper.mxFormats))
+ , mxObjDesc(std::move(rDataHelper.mxObjDesc))
+ , mxImpl(new TransferableDataHelper_Impl)
+{
+}
+
TransferableDataHelper& TransferableDataHelper::operator=( const TransferableDataHelper& rDataHelper )
{
if ( this != &rDataHelper )
{
::osl::MutexGuard aGuard(mxImpl->maMutex);
- bool bWasClipboardListening = (nullptr != mxImpl->mpClipboardListener);
+ const bool bWasClipboardListening = (nullptr != mxImpl->mpClipboardListener);
- if ( bWasClipboardListening )
+ if (bWasClipboardListening)
StopClipboardListening();
mxTransfer = rDataHelper.mxTransfer;
@@ -1153,13 +1162,33 @@ TransferableDataHelper& TransferableDataHelper::operator=( const TransferableDat
mxObjDesc.reset(new TransferableObjectDescriptor(*rDataHelper.mxObjDesc));
mxClipboard = rDataHelper.mxClipboard;
- if ( bWasClipboardListening )
+ if (bWasClipboardListening)
StartClipboardListening();
}
return *this;
}
+TransferableDataHelper& TransferableDataHelper::operator=(TransferableDataHelper&& rDataHelper)
+{
+ ::osl::MutexGuard aGuard(mxImpl->maMutex);
+
+ const bool bWasClipboardListening = (nullptr != mxImpl->mpClipboardListener);
+
+ if (bWasClipboardListening)
+ StopClipboardListening();
+
+ mxTransfer = std::move(rDataHelper.mxTransfer);
+ mxFormats = std::move(rDataHelper.mxFormats);
+ mxObjDesc = std::move(rDataHelper.mxObjDesc);
+ mxClipboard = std::move(rDataHelper.mxClipboard);
+
+ if (bWasClipboardListening)
+ StartClipboardListening();
+
+ return *this;
+}
+
TransferableDataHelper::~TransferableDataHelper()
{
StopClipboardListening( );