diff options
author | Caolán McNamara <caolanm@redhat.com> | 2013-09-06 13:55:59 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-09-06 13:58:04 +0100 |
commit | e7dd69d97af1e12b15fd82eaea2e2b51f9dca40b (patch) | |
tree | 22867fcdf7d2f9b94e11ae1a8f08fe39d9a720fa | |
parent | f96771165ea145a759f1bab76cd34bb70def04f6 (diff) |
move backing component dnd support into the large thumbnail areas
of the backing window
Change-Id: Icf399a8834a25de43909769be08854134991885a
-rw-r--r-- | sfx2/inc/backingcomp.hxx | 3 | ||||
-rw-r--r-- | sfx2/source/dialog/backingcomp.cxx | 28 | ||||
-rw-r--r-- | sfx2/source/dialog/backingwindow.cxx | 48 | ||||
-rw-r--r-- | sfx2/source/dialog/backingwindow.hxx | 5 |
4 files changed, 53 insertions, 31 deletions
diff --git a/sfx2/inc/backingcomp.hxx b/sfx2/inc/backingcomp.hxx index 16a2ae7b6346..794e80dae296 100644 --- a/sfx2/inc/backingcomp.hxx +++ b/sfx2/inc/backingcomp.hxx @@ -73,9 +73,6 @@ class BackingComp : public css::lang::XTypeProvider /** the owner frame of this component. */ css::uno::Reference< css::frame::XFrame > m_xFrame; - /** helper for drag&drop. */ - css::uno::Reference< css::datatransfer::dnd::XDropTargetListener > m_xDropTargetListener; - //______________________________________ // interface diff --git a/sfx2/source/dialog/backingcomp.cxx b/sfx2/source/dialog/backingcomp.cxx index 906922c7e8d6..02711649f1b7 100644 --- a/sfx2/source/dialog/backingcomp.cxx +++ b/sfx2/source/dialog/backingcomp.cxx @@ -21,8 +21,6 @@ #include "backingwindow.hxx" -#include <svtools/openfiledroptargetlistener.hxx> - #include <helpid.hrc> #include <com/sun/star/beans/NamedValue.hpp> @@ -31,7 +29,6 @@ #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/awt/Toolkit.hpp> #include <com/sun/star/awt/XDataTransferProviderAccess.hpp> -#include <com/sun/star/datatransfer/dnd/XDropTarget.hpp> #include <com/sun/star/awt/KeyEvent.hpp> #include <com/sun/star/awt/KeyModifier.hpp> #include <com/sun/star/frame/XLayoutManager.hpp> @@ -453,18 +450,6 @@ void SAL_CALL BackingComp::attachFrame( /*IN*/ const css::uno::Reference< css::f // safe the frame reference m_xFrame = xFrame; - // establish drag&drop mode - OpenFileDropTargetListener* pDropListener = new OpenFileDropTargetListener( m_xContext, m_xFrame); - m_xDropTargetListener = css::uno::Reference< css::datatransfer::dnd::XDropTargetListener >(static_cast< ::cppu::OWeakObject* >(pDropListener), css::uno::UNO_QUERY); - - css::uno::Reference< css::awt::XToolkit2 > xToolkit = css::awt::Toolkit::create( m_xContext ); - css::uno::Reference< css::datatransfer::dnd::XDropTarget > xDropTarget = xToolkit->getDropTarget(m_xWindow); - if (xDropTarget.is()) - { - xDropTarget->addDropTargetListener(m_xDropTargetListener); - xDropTarget->setActive(sal_True); - } - // initialize the component and it's parent window css::uno::Reference< css::awt::XWindow > xParentWindow = xFrame->getContainerWindow(); WorkWindow* pParent = (WorkWindow*)VCLUnoHelper::GetWindow(xParentWindow); @@ -668,19 +653,6 @@ void SAL_CALL BackingComp::dispose() xDispatch->dispatch(aURL, css::uno::Sequence< css::beans::PropertyValue>()); } - // deregister drag&drop helper - if (m_xDropTargetListener.is()) - { - css::uno::Reference< css::awt::XToolkit2 > xToolkit = css::awt::Toolkit::create( m_xContext ); - css::uno::Reference< css::datatransfer::dnd::XDropTarget > xDropTarget = xToolkit->getDropTarget(m_xWindow); - if (xDropTarget.is()) - { - xDropTarget->removeDropTargetListener(m_xDropTargetListener); - xDropTarget->setActive(sal_False); - } - m_xDropTargetListener = css::uno::Reference< css::datatransfer::dnd::XDropTargetListener >(); - } - // stop listening at the window if (m_xWindow.is()) { diff --git a/sfx2/source/dialog/backingwindow.cxx b/sfx2/source/dialog/backingwindow.cxx index 3b66cc91b00f..e92bdc71ec88 100644 --- a/sfx2/source/dialog/backingwindow.cxx +++ b/sfx2/source/dialog/backingwindow.cxx @@ -24,6 +24,7 @@ #include <unotools/dynamicmenuoptions.hxx> #include <svtools/langhelp.hxx> +#include <svtools/openfiledroptargetlistener.hxx> #include <svtools/colorcfg.hxx> #include <comphelper/processfactory.hxx> @@ -127,6 +128,18 @@ BackingWindow::BackingWindow( Window* i_pParent ) : get( mpImpressTemplateThumbnails, "impress_templates"); get( mpDrawTemplateThumbnails, "draw_templates"); + maDndWindows.push_back(mpAllRecentThumbnails); + maDndWindows.push_back(mpWriterRecentThumbnails); + maDndWindows.push_back(mpCalcRecentThumbnails); + maDndWindows.push_back(mpImpressRecentThumbnails); + maDndWindows.push_back(mpDrawRecentThumbnails); + maDndWindows.push_back(mpDatabaseRecentThumbnails); + maDndWindows.push_back(mpMathRecentThumbnails); + maDndWindows.push_back(mpWriterTemplateThumbnails); + maDndWindows.push_back(mpCalcTemplateThumbnails); + maDndWindows.push_back(mpImpressTemplateThumbnails); + maDndWindows.push_back(mpDrawTemplateThumbnails); + try { mxContext.set( ::comphelper::getProcessComponentContext(), uno::UNO_SET_THROW ); @@ -188,6 +201,25 @@ BackingWindow::~BackingWindow() mpCalcTemplateThumbnails ->setOpenTemplateHdl(Link()); mpImpressTemplateThumbnails ->setOpenTemplateHdl(Link()); mpDrawTemplateThumbnails ->setOpenTemplateHdl(Link()); + + // deregister drag&drop helper + if (mxDropTargetListener.is()) + { + for (std::vector<Window*>::iterator aI = maDndWindows.begin(), + aEnd = maDndWindows.end(); aI != aEnd; ++aI) + { + Window *pDndWin = *aI; + css::uno::Reference< css::datatransfer::dnd::XDropTarget > xDropTarget = + pDndWin->GetDropTarget(); + if (xDropTarget.is()) + { + xDropTarget->removeDropTargetListener(mxDropTargetListener); + xDropTarget->setActive(false); + } + } + mxDropTargetListener = css::uno::Reference< css::datatransfer::dnd::XDropTargetListener >(); + } + } IMPL_LINK( BackingWindow, WindowEventListener, VclSimpleEvent*, pEvent ) @@ -416,6 +448,22 @@ void BackingWindow::setOwningFrame( const com::sun::star::uno::Reference< com::s mxFrame = xFrame; if( ! mbInitControls ) initControls(); + + // establish drag&drop mode + mxDropTargetListener.set(new OpenFileDropTargetListener(mxContext, mxFrame)); + + for (std::vector<Window*>::iterator aI = maDndWindows.begin(), + aEnd = maDndWindows.end(); aI != aEnd; ++aI) + { + Window *pDndWin = *aI; + css::uno::Reference< css::datatransfer::dnd::XDropTarget > xDropTarget = + pDndWin->GetDropTarget(); + if (xDropTarget.is()) + { + xDropTarget->addDropTargetListener(mxDropTargetListener); + xDropTarget->setActive(true); + } + } } void BackingWindow::Resize() diff --git a/sfx2/source/dialog/backingwindow.hxx b/sfx2/source/dialog/backingwindow.hxx index 6f6dffac35ba..02fcbf379e17 100644 --- a/sfx2/source/dialog/backingwindow.hxx +++ b/sfx2/source/dialog/backingwindow.hxx @@ -34,6 +34,7 @@ #include <svtools/acceleratorexecute.hxx> #include <unotools/moduleoptions.hxx> +#include <com/sun/star/datatransfer/dnd/XDropTarget.hpp> #include <com/sun/star/uno/XComponentContext.hpp> #include <com/sun/star/frame/XDispatchProvider.hpp> #include <com/sun/star/frame/XDesktop.hpp> @@ -50,6 +51,8 @@ class BackingWindow com::sun::star::uno::Reference<com::sun::star::frame::XDispatchProvider > mxDesktopDispatchProvider; com::sun::star::uno::Reference<com::sun::star::frame::XFrame> mxFrame; com::sun::star::uno::Reference< com::sun::star::frame::XDesktop2 > mxDesktop; + /** helper for drag&drop. */ + com::sun::star::uno::Reference< com::sun::star::datatransfer::dnd::XDropTargetListener > mxDropTargetListener; PushButton* mpOpenButton; PushButton* mpTemplateButton; @@ -97,6 +100,8 @@ class BackingWindow TemplateLocalView* mpImpressTemplateThumbnails; TemplateLocalView* mpDrawTemplateThumbnails; + std::vector<Window*> maDndWindows; + Rectangle maStartCentButtons; bool mbInitControls; |