Author: arielch
Date: Tue May 28 10:01:32 2013
New Revision: 1486845

URL: http://svn.apache.org/r1486845
Log:
Add missing copy&paste of SfxAppToolBoxControl_Impl::Select

Modified:
    openoffice/trunk/main/framework/inc/uielement/popuptoolbarcontroller.hxx
    openoffice/trunk/main/framework/source/uielement/popuptoolbarcontroller.cxx
    openoffice/trunk/main/svtools/inc/svtools/toolboxcontroller.hxx
    openoffice/trunk/main/svtools/source/uno/toolboxcontroller.cxx

Modified: 
openoffice/trunk/main/framework/inc/uielement/popuptoolbarcontroller.hxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/framework/inc/uielement/popuptoolbarcontroller.hxx?rev=1486845&r1=1486844&r2=1486845&view=diff
==============================================================================
--- openoffice/trunk/main/framework/inc/uielement/popuptoolbarcontroller.hxx 
(original)
+++ openoffice/trunk/main/framework/inc/uielement/popuptoolbarcontroller.hxx 
Tue May 28 10:01:32 2013
@@ -82,7 +82,10 @@ namespace framework
     private:
         void functionExecuted( const rtl::OUString &rCommand );
         void SAL_CALL statusChanged( const 
::com::sun::star::frame::FeatureStateEvent& rEvent ) throw ( 
::com::sun::star::uno::RuntimeException );
+        void SAL_CALL execute( sal_Int16 KeyModifier ) throw 
(::com::sun::star::uno::RuntimeException);
         void setItemImage( const rtl::OUString &rCommand );
+
+        rtl::OUString m_aLastURL;
     };
 
     class WizardsToolbarController : public PopupMenuToolbarController

Modified: 
openoffice/trunk/main/framework/source/uielement/popuptoolbarcontroller.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/framework/source/uielement/popuptoolbarcontroller.cxx?rev=1486845&r1=1486844&r2=1486845&view=diff
==============================================================================
--- openoffice/trunk/main/framework/source/uielement/popuptoolbarcontroller.cxx 
(original)
+++ openoffice/trunk/main/framework/source/uielement/popuptoolbarcontroller.cxx 
Tue May 28 10:01:32 2013
@@ -23,6 +23,8 @@
 #include "precompiled_framework.hxx"
 
 #include <uielement/popuptoolbarcontroller.hxx>
+#include <framework/menuconfiguration.hxx>
+#include <toolkit/awt/vclxmenu.hxx>
 #include <comphelper/processfactory.hxx>
 #include <svtools/imagemgr.hxx>
 #include <svtools/miscopt.hxx>
@@ -35,9 +37,10 @@
 
 #include <com/sun/star/awt/PopupMenuDirection.hpp>
 #include <com/sun/star/frame/PopupMenuControllerFactory.hpp>
-
+#include <com/sun/star/frame/XDispatchProvider.hpp>
 
 #define UNO_COMMAND_RECENT_FILE_LIST    ".uno:RecentFileList"
+#define SFX_REFERER_USER                "private:user"
 
 using rtl::OUString;
 namespace css = ::com::sun::star;
@@ -278,6 +281,39 @@ NewToolbarController::statusChanged(
     enable( rEvent.IsEnabled );
 }
 
+void SAL_CALL
+NewToolbarController::execute( sal_Int16 /*KeyModifier*/ )
+    throw ( css::uno::RuntimeException )
+{
+    osl::MutexGuard aGuard( m_aMutex );
+    if ( !m_aLastURL.getLength() )
+        return;
+
+    OUString aTarget( RTL_CONSTASCII_USTRINGPARAM( "_default" ) );
+    if ( m_xPopupMenu.is() )
+    {
+        // TODO investigate how to wrap Get/SetUserValue in css::awt::XMenu
+        MenuConfiguration::Attributes* pMenuAttributes( 0 );
+        VCLXPopupMenu*  pTkPopupMenu = dynamic_cast< VCLXPopupMenu * >(
+            VCLXMenu::GetImplementation( m_xPopupMenu ) );
+
+        vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
+        PopupMenu* pVCLPopupMenu = dynamic_cast< PopupMenu * >( 
pTkPopupMenu->GetMenu() );
+        if ( pVCLPopupMenu )
+            pMenuAttributes = reinterpret_cast< MenuConfiguration::Attributes* 
>(
+                pVCLPopupMenu->GetUserValue( pVCLPopupMenu->GetCurItemId() ) );
+
+        if ( pMenuAttributes )
+            aTarget = pMenuAttributes->aTargetFrame;
+    }
+
+    css::uno::Sequence< css::beans::PropertyValue > aArgs( 1 );
+    aArgs[0].Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "Referer"  ));
+    aArgs[0].Value <<= OUString( RTL_CONSTASCII_USTRINGPARAM( SFX_REFERER_USER 
) );
+
+    dispatchCommand( m_aLastURL, aArgs, aTarget );
+}
+
 void NewToolbarController::functionExecuted( const OUString &rCommand )
 {
     setItemImage( rCommand );
@@ -409,6 +445,8 @@ void NewToolbarController::setItemImage(
     }
     else
         pToolBox->SetItemImage( m_nToolBoxId, aImage );
+
+    m_aLastURL = aURL;
 }
 
 

Modified: openoffice/trunk/main/svtools/inc/svtools/toolboxcontroller.hxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/svtools/inc/svtools/toolboxcontroller.hxx?rev=1486845&r1=1486844&r2=1486845&view=diff
==============================================================================
--- openoffice/trunk/main/svtools/inc/svtools/toolboxcontroller.hxx (original)
+++ openoffice/trunk/main/svtools/inc/svtools/toolboxcontroller.hxx Tue May 28 
10:01:32 2013
@@ -56,8 +56,6 @@ class ToolBox;
 namespace svt
 {
 
-struct DispatchInfo;
-
 class SVT_DLLPUBLIC ToolboxController : public 
::com::sun::star::frame::XStatusListener,
                           public ::com::sun::star::frame::XToolbarController,
                           public ::com::sun::star::lang::XInitialization,
@@ -126,12 +124,10 @@ class SVT_DLLPUBLIC ToolboxController : 
                const rtl::OUString& getCommandURL() const { return  
m_aCommandURL; }
                const rtl::OUString& getModuleName() const { return 
m_sModuleName; }
 
-               void dispatchCommand( const ::rtl::OUString& sCommandURL, const 
::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& 
rArgs );
+               void dispatchCommand( const ::rtl::OUString& sCommandURL, const 
::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& 
rArgs, const rtl::OUString &sTarget = rtl::OUString() );
 
                void enable( bool bEnable );
 
-        DECL_STATIC_LINK( ToolboxController, ExecuteHdl_Impl, DispatchInfo* );
-
     protected:
         bool getToolboxId( sal_uInt16& rItemId, ToolBox** ppToolBox );
                void setSupportVisiableProperty(sal_Bool bValue); //shizhoubo
@@ -144,6 +140,23 @@ class SVT_DLLPUBLIC ToolboxController : 
             ::com::sun::star::uno::Reference< 
::com::sun::star::frame::XDispatch > xDispatch;
         };
 
+        struct DispatchInfo
+        {
+            ::com::sun::star::uno::Reference< 
::com::sun::star::frame::XDispatch > mxDispatch;
+            const ::com::sun::star::util::URL maURL;
+            const ::com::sun::star::uno::Sequence< 
::com::sun::star::beans::PropertyValue > maArgs;
+
+            DispatchInfo( const ::com::sun::star::uno::Reference< 
::com::sun::star::frame::XDispatch >& xDispatch,
+                          const ::com::sun::star::util::URL& rURL,
+                          const ::com::sun::star::uno::Sequence< 
::com::sun::star::beans::PropertyValue >& rArgs )
+                : mxDispatch( xDispatch )
+                , maURL( rURL )
+                , maArgs( rArgs )
+                {}
+        };
+
+        DECL_STATIC_LINK( ToolboxController, ExecuteHdl_Impl, DispatchInfo* );
+
         typedef ::std::hash_map< ::rtl::OUString,
                                                 
com::sun::star::uno::Reference< com::sun::star::frame::XDispatch >,
                                  ::rtl::OUStringHash,

Modified: openoffice/trunk/main/svtools/source/uno/toolboxcontroller.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/svtools/source/uno/toolboxcontroller.cxx?rev=1486845&r1=1486844&r2=1486845&view=diff
==============================================================================
--- openoffice/trunk/main/svtools/source/uno/toolboxcontroller.cxx (original)
+++ openoffice/trunk/main/svtools/source/uno/toolboxcontroller.cxx Tue May 28 
10:01:32 2013
@@ -56,16 +56,6 @@ using namespace ::com::sun::star::frame;
 namespace svt
 {
 
-struct DispatchInfo
-{
-       Reference< XDispatch > mxDispatch;
-       const URL maURL;
-       const Sequence< PropertyValue > maArgs;
-
-       DispatchInfo( const Reference< XDispatch >& xDispatch, const URL& rURL, 
const Sequence< PropertyValue >& rArgs )
-               : mxDispatch( xDispatch ), maURL( rURL ), maArgs( rArgs ) {}
-};
-
 ToolboxController::ToolboxController(
     
     const Reference< XMultiServiceFactory >& rServiceManager,
@@ -724,7 +714,7 @@ Reference< ::com::sun::star::awt::XWindo
        return m_xParentWindow;
 }
 
-void ToolboxController::dispatchCommand( const OUString& sCommandURL, const 
Sequence< PropertyValue >& rArgs )
+void ToolboxController::dispatchCommand( const OUString& sCommandURL, const 
Sequence< PropertyValue >& rArgs, const OUString &sTarget )
 {
     try
     {
@@ -733,9 +723,12 @@ void ToolboxController::dispatchCommand(
         aURL.Complete = sCommandURL;
         getURLTransformer()->parseStrict( aURL );
 
-               Reference< XDispatch > xDispatch( 
xDispatchProvider->queryDispatch( aURL, OUString(), 0 ), UNO_QUERY_THROW );
+               Reference< XDispatch > xDispatch( 
xDispatchProvider->queryDispatch( aURL, sTarget, 0 ), UNO_QUERY_THROW );
 
-        Application::PostUserEvent( STATIC_LINK(0, ToolboxController, 
ExecuteHdl_Impl), new DispatchInfo( xDispatch, aURL, rArgs ) );
+        DispatchInfo *pDispatchInfo = new DispatchInfo( xDispatch, aURL, rArgs 
);
+        if ( !Application::PostUserEvent( STATIC_LINK(0, ToolboxController, 
ExecuteHdl_Impl),
+                                          pDispatchInfo ) )
+            delete pDispatchInfo;
 
     }
        catch( Exception& )


Reply via email to