[Libreoffice-commits] core.git: sfx2/inc sfx2/source

Caolán McNamara caolanm at redhat.com
Fri Sep 6 05:59:53 PDT 2013


 sfx2/inc/backingcomp.hxx             |    3 --
 sfx2/source/dialog/backingcomp.cxx   |   28 --------------------
 sfx2/source/dialog/backingwindow.cxx |   48 +++++++++++++++++++++++++++++++++++
 sfx2/source/dialog/backingwindow.hxx |    5 +++
 4 files changed, 53 insertions(+), 31 deletions(-)

New commits:
commit e7dd69d97af1e12b15fd82eaea2e2b51f9dca40b
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri Sep 6 13:55:59 2013 +0100

    move backing component dnd support into the large thumbnail areas
    
    of the backing window
    
    Change-Id: Icf399a8834a25de43909769be08854134991885a

diff --git a/sfx2/inc/backingcomp.hxx b/sfx2/inc/backingcomp.hxx
index 16a2ae7..794e80d 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 906922c..0271164 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 3b66cc9..e92bdc7 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 6f6dffa..02fcbf3 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;


More information about the Libreoffice-commits mailing list