summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2013-09-06 13:55:59 +0100
committerCaolán McNamara <caolanm@redhat.com>2013-09-06 13:58:04 +0100
commite7dd69d97af1e12b15fd82eaea2e2b51f9dca40b (patch)
tree22867fcdf7d2f9b94e11ae1a8f08fe39d9a720fa
parentf96771165ea145a759f1bab76cd34bb70def04f6 (diff)
move backing component dnd support into the large thumbnail areas
of the backing window Change-Id: Icf399a8834a25de43909769be08854134991885a
-rw-r--r--sfx2/inc/backingcomp.hxx3
-rw-r--r--sfx2/source/dialog/backingcomp.cxx28
-rw-r--r--sfx2/source/dialog/backingwindow.cxx48
-rw-r--r--sfx2/source/dialog/backingwindow.hxx5
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;