diff options
Diffstat (limited to 'sc/source/ui/app/scmod.cxx')
-rw-r--r-- | sc/source/ui/app/scmod.cxx | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx index dd096a53655c..fc8145365871 100644 --- a/sc/source/ui/app/scmod.cxx +++ b/sc/source/ui/app/scmod.cxx @@ -70,6 +70,7 @@ #include <com/sun/star/i18n/ScriptType.hpp> #include <com/sun/star/linguistic2/XThesaurus.hpp> #include <com/sun/star/lang/Locale.hpp> +#include <com/sun/star/datatransfer/XTransferable2.hpp> #include <scmod.hxx> #include <global.hxx> @@ -661,11 +662,28 @@ void ScModule::SetDragJump( ScDocument* ScModule::GetClipDoc() { // called from document - vcl::Window* pWin = nullptr; - if( ScTabViewShell* pViewShell = dynamic_cast<ScTabViewShell*>( SfxViewShell::Current() )) - pWin = pViewShell->GetViewData().GetActiveWin(); + ScTabViewShell* pViewShell = nullptr; + const ScTransferObj* pObj = nullptr; + + if ((pViewShell = dynamic_cast<ScTabViewShell*>(SfxViewShell::Current()))) + pObj = ScTransferObj::GetOwnClipboard(pViewShell->GetClipData()); + else if ((pViewShell = dynamic_cast<ScTabViewShell*>(SfxViewShell::GetFirst()))) + pObj = ScTransferObj::GetOwnClipboard(pViewShell->GetClipData()); + else + { + css::uno::Reference<css::datatransfer::clipboard::XClipboard> xClipboard; + + if (SfxViewFrame* pViewFrame = SfxViewFrame::GetFirst()) + xClipboard = pViewFrame->GetWindow().GetClipboard(); + + if (xClipboard.is()) + { + css::uno::Reference<css::datatransfer::XTransferable2> xTransferable( + xClipboard->getContents(), css::uno::UNO_QUERY); + pObj = ScTransferObj::GetOwnClipboard(xTransferable); + } + } - ScTransferObj* pObj = ScTransferObj::GetOwnClipboard( pWin ); if (pObj) { ScDocument* pDoc = pObj->GetDocument(); |