[Libreoffice-commits] core.git: include/svx officecfg/registry sc/source svtools/source svx/source svx/util

Maxim Monastirsky momonasmon at gmail.com
Sun Jul 30 05:09:28 UTC 2017


 include/svx/tbcontrl.hxx                                        |   21 +-
 officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu |   11 +
 sc/source/ui/app/scdll.cxx                                      |    1 
 svtools/source/uno/popupwindowcontroller.cxx                    |   11 +
 svx/source/tbxctrls/tbcontrl.cxx                                |   73 +++++-----
 svx/util/svxcore.component                                      |    4 
 6 files changed, 76 insertions(+), 45 deletions(-)

New commits:
commit 9f61005dd9c4bf86e92e4c60677cf06a949a7af7
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date:   Wed May 3 02:25:07 2017 +0300

    tdf#109309 Currency dropdown is misplaced under Wayland
    
    - Base SvxCurrencyToolBoxControl on PopupWindowController,
      so we still allow tearoff, but without marking the window
      as self-decorated (unless actually teared-off).
    
    - Add support for toggle state to PopupWindowController.
    
    Change-Id: I60e004e6ada3efe092352cb93be5aae346073f83
    Reviewed-on: https://gerrit.libreoffice.org/40557
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Maxim Monastirsky <momonasmon at gmail.com>

diff --git a/include/svx/tbcontrl.hxx b/include/svx/tbcontrl.hxx
index 6fb31324f2a6..22fd4e72910f 100644
--- a/include/svx/tbcontrl.hxx
+++ b/include/svx/tbcontrl.hxx
@@ -137,6 +137,7 @@
 #include <svx/svxdllapi.h>
 #include <com/sun/star/awt/FontDescriptor.hpp>
 #include <com/sun/star/frame/XSubToolbarController.hpp>
+#include <svtools/popupwindowcontroller.hxx>
 #include <svx/colorwindow.hxx>
 #include <svx/PaletteManager.hxx>
 #include <memory>
@@ -248,7 +249,7 @@ public:
                               const SfxPoolItem* pState) override;
 };
 
-class SVX_DLLPUBLIC SvxCurrencyToolBoxControl : public SfxToolBoxControl
+class SVX_DLLPUBLIC SvxCurrencyToolBoxControl : public svt::PopupWindowController
 {
 private:
     OUString     m_aFormatString;
@@ -257,18 +258,24 @@ private:
 public:
     static void GetCurrencySymbols( std::vector<OUString>& rList, bool bFlag,
                                     std::vector<sal_uInt16>& rCurrencyList );
-    SFX_DECL_TOOLBOX_CONTROL();
-    SvxCurrencyToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rBox );
+
+    explicit SvxCurrencyToolBoxControl( const css::uno::Reference<css::uno::XComponentContext>& rContext );
     virtual ~SvxCurrencyToolBoxControl() override;
-    virtual void Select( sal_uInt16 nSelectModifier ) override;
-    virtual VclPtr<SfxPopupWindow> CreatePopupWindow() override;
+
+    // XToolbarController
+    virtual void SAL_CALL execute( sal_Int16 nSelectModifier ) override;
+
+    using svt::ToolboxController::createPopupWindow;
+    virtual VclPtr<vcl::Window> createPopupWindow( vcl::Window* pParent ) override;
+
+    // XServiceInfo
+    virtual OUString SAL_CALL getImplementationName() override;
+    virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
 
     // XInitialization
     virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& rArguments ) override;
 };
 
-
-
 #endif // INCLUDED_SVX_TBCONTRL_HXX
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
index e6448e98ff86..35c874fdfb1b 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
@@ -1177,6 +1177,17 @@
           <value>com.sun.star.comp.svx.FrameToolBoxControl</value>
         </prop>
       </node>
+      <node oor:name="CurrencyToolBoxControl" oor:op="replace">
+        <prop oor:name="Command">
+          <value>.uno:NumberFormatCurrency</value>
+        </prop>
+        <prop oor:name="Module">
+          <value>com.sun.star.sheet.SpreadsheetDocument</value>
+        </prop>
+        <prop oor:name="Controller">
+          <value>com.sun.star.comp.svx.CurrencyToolBoxControl</value>
+        </prop>
+      </node>
       <node oor:name="c4" oor:op="replace" install:module="reportbuilder">
         <prop oor:name="Command">
           <value>.uno:FontColor</value>
diff --git a/sc/source/ui/app/scdll.cxx b/sc/source/ui/app/scdll.cxx
index 747340e150bd..8e7b3d6aaab1 100644
--- a/sc/source/ui/app/scdll.cxx
+++ b/sc/source/ui/app/scdll.cxx
@@ -154,7 +154,6 @@ void ScDLL::Init()
 
     // Own Controller
     ScZoomSliderControl             ::RegisterControl(SID_PREVIEW_SCALINGFACTOR, pMod);
-    SvxCurrencyToolBoxControl       ::RegisterControl(SID_NUMBER_CURRENCY, pMod);
 
     // SvxToolboxController
     SvxTbxCtlDraw                   ::RegisterControl(SID_INSERT_DRAW,          pMod);
diff --git a/svtools/source/uno/popupwindowcontroller.cxx b/svtools/source/uno/popupwindowcontroller.cxx
index dd4f6cf7a820..166a58d262ed 100644
--- a/svtools/source/uno/popupwindowcontroller.cxx
+++ b/svtools/source/uno/popupwindowcontroller.cxx
@@ -178,8 +178,15 @@ void SAL_CALL PopupWindowController::dispose()
 // XStatusListener
 void SAL_CALL PopupWindowController::statusChanged( const frame::FeatureStateEvent& rEvent )
 {
-    svt::ToolboxController::statusChanged(rEvent);
-    enable( rEvent.IsEnabled );
+    ToolBox* pToolBox = nullptr;
+    sal_uInt16 nItemId = 0;
+    if ( getToolboxId( nItemId, &pToolBox ) )
+    {
+        bool bValue = false;
+        rEvent.State >>= bValue;
+        pToolBox->CheckItem( nItemId, bValue );
+        pToolBox->EnableItem( nItemId, rEvent.IsEnabled );
+    }
 }
 
 Reference< awt::XWindow > SAL_CALL PopupWindowController::createPopupWindow()
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 4908ecb1d577..02ab35acd106 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -33,7 +33,6 @@
 #include <vcl/vclptr.hxx>
 #include <svtools/valueset.hxx>
 #include <svtools/ctrlbox.hxx>
-#include <svtools/popupwindowcontroller.hxx>
 #include <svtools/toolbarmenu.hxx>
 #include <svl/style.hxx>
 #include <svtools/ctrltool.hxx>
@@ -123,7 +122,6 @@ using namespace ::com::sun::star::lang;
 
 SFX_IMPL_TOOLBOX_CONTROL( SvxStyleToolBoxControl, SfxTemplateItem );
 SFX_IMPL_TOOLBOX_CONTROL( SvxSimpleUndoRedoController, SfxStringItem );
-SFX_IMPL_TOOLBOX_CONTROL( SvxCurrencyToolBoxControl, SfxBoolItem );
 
 class SvxStyleBox_Impl : public ComboBox
 {
@@ -296,8 +294,7 @@ public:
     virtual void dispose() override { m_aLineStyleLb.disposeAndClear(); ToolbarPopup::dispose(); }
 };
 
-class SvxCurrencyToolBoxControl;
-class SvxCurrencyList_Impl : public SfxPopupWindow
+class SvxCurrencyList_Impl : public svtools::ToolbarPopup
 {
 private:
     VclPtr<ListBox> m_pCurrencyLb;
@@ -310,10 +307,8 @@ private:
     DECL_LINK( SelectHdl, ListBox&, void );
 
 public:
-    SvxCurrencyList_Impl( sal_uInt16 nId, const Reference< XFrame >& rxFrame,
+    SvxCurrencyList_Impl( SvxCurrencyToolBoxControl* pControl,
                           vcl::Window* pParentWindow,
-                          const Reference< css::uno::XComponentContext >& rxContext,
-                          SvxCurrencyToolBoxControl *pControl,
                           OUString&     rSelectFormat,
                           LanguageType& eSelectLanguage );
     virtual ~SvxCurrencyList_Impl() override { disposeOnce(); }
@@ -1992,13 +1987,11 @@ static Color lcl_mediumColor( Color aMain, Color /*aDefault*/ )
 }
 
 SvxCurrencyList_Impl::SvxCurrencyList_Impl(
-    sal_uInt16 nId, const Reference< XFrame >& rxFrame,
+    SvxCurrencyToolBoxControl* pControl,
     vcl::Window* pParentWindow,
-    const Reference< XComponentContext >& rxContext,
-    SvxCurrencyToolBoxControl *pControl,
     OUString& rSelectedFormat,
     LanguageType& eSelectedLanguage ) :
-    SfxPopupWindow( nId, rxFrame, pParentWindow, WinBits( WB_STDPOPUP | WB_OWNERDRAWDECORATION | WB_AUTOSIZE | WB_3DLOOK ) ),
+    ToolbarPopup( pControl->getFrameInterface(), pParentWindow, WB_STDPOPUP | WB_MOVEABLE | WB_CLOSEABLE ),
     m_pCurrencyLb( VclPtr<ListBox>::Create(this) ),
     m_xControl( pControl ),
     m_rSelectedFormat( rSelectedFormat ),
@@ -2012,7 +2005,7 @@ SvxCurrencyList_Impl::SvxCurrencyList_Impl(
     const NfCurrencyTable& rCurrencyTable = SvNumberFormatter::GetTheCurrencyTable();
     sal_uInt16 nLen = rCurrencyTable.size();
 
-    SvNumberFormatter aFormatter( rxContext, LANGUAGE_SYSTEM );
+    SvNumberFormatter aFormatter( m_xControl->getContext(), LANGUAGE_SYSTEM );
     m_eFormatLanguage = aFormatter.GetLanguage();
 
     SvxCurrencyToolBoxControl::GetCurrencySymbols( aList, true, aCurrencyList );
@@ -2051,7 +2044,7 @@ void SvxCurrencyList_Impl::dispose()
 {
     m_xControl.clear();
     m_pCurrencyLb.disposeAndClear();
-    SfxPopupWindow::dispose();
+    ToolbarPopup::dispose();
 }
 
 SvxLineWindow_Impl::SvxLineWindow_Impl( svt::ToolboxController& rController, vcl::Window* pParentWindow ) :
@@ -2122,7 +2115,7 @@ IMPL_LINK_NOARG(SvxCurrencyList_Impl, SelectHdl, ListBox&, void)
     m_rSelectedFormat = m_aFormatEntries[ m_pCurrencyLb->GetSelectEntryPos() ];
     m_eSelectedLanguage = m_eFormatLanguage;
 
-    m_xControl->Select( m_pCurrencyLb->GetSelectEntryPos() + 1 );
+    m_xControl->execute( m_pCurrencyLb->GetSelectEntryPos() + 1 );
 }
 
 IMPL_LINK_NOARG(SvxLineWindow_Impl, SelectHdl, ListBox&, void)
@@ -3045,8 +3038,8 @@ void SvxSimpleUndoRedoController::StateChanged( sal_uInt16, SfxItemState eState,
     rBox.EnableItem( GetId(), eState != SfxItemState::DISABLED );
 }
 
-SvxCurrencyToolBoxControl::SvxCurrencyToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rBox ) :
-    SfxToolBoxControl( nSlotId, nId, rBox ),
+SvxCurrencyToolBoxControl::SvxCurrencyToolBoxControl( const css::uno::Reference<css::uno::XComponentContext>& rContext ) :
+    PopupWindowController( rContext, nullptr, OUString() ),
     m_eLanguage( Application::GetSettings().GetLanguageTag().getLanguageType() ),
     m_nFormatKey( NUMBERFORMAT_ENTRY_NOT_FOUND )
 {
@@ -3056,28 +3049,20 @@ SvxCurrencyToolBoxControl::~SvxCurrencyToolBoxControl() {}
 
 void SvxCurrencyToolBoxControl::initialize( const css::uno::Sequence< css::uno::Any >& rArguments )
 {
-    SfxToolBoxControl::initialize(rArguments);
-    if (GetToolBox().GetItemCommand(GetId()) == m_aCommandURL)
-        GetToolBox().SetItemBits(GetId(), ToolBoxItemBits::DROPDOWN | GetToolBox().GetItemBits(GetId()));
+    PopupWindowController::initialize(rArguments);
+
+    ToolBox* pToolBox = nullptr;
+    sal_uInt16 nId = 0;
+    if (getToolboxId(nId, &pToolBox) && pToolBox->GetItemCommand(nId) == m_aCommandURL)
+        pToolBox->SetItemBits(nId, ToolBoxItemBits::DROPDOWN | pToolBox->GetItemBits(nId));
 }
 
-VclPtr<SfxPopupWindow> SvxCurrencyToolBoxControl::CreatePopupWindow()
+VclPtr<vcl::Window> SvxCurrencyToolBoxControl::createPopupWindow( vcl::Window* pParent )
 {
-    VclPtr<SvxCurrencyList_Impl> xCurrencyWin =
-        VclPtr<SvxCurrencyList_Impl>::Create( GetSlotId(), m_xFrame,
-                                              &GetToolBox(), getContext(),
-                                              this, m_aFormatString,
-                                              m_eLanguage );
-    xCurrencyWin->StartPopupMode( &GetToolBox(),
-                              FloatWinPopupFlags::GrabFocus |
-                              FloatWinPopupFlags::AllowTearOff |
-                              FloatWinPopupFlags::NoAppFocusClose );
-    SetPopupWindow( xCurrencyWin );
-
-    return xCurrencyWin;
+    return VclPtr<SvxCurrencyList_Impl>::Create(this, pParent, m_aFormatString, m_eLanguage);
 }
 
-void SvxCurrencyToolBoxControl::Select( sal_uInt16 nSelectModifier )
+void SvxCurrencyToolBoxControl::execute( sal_Int16 nSelectModifier )
 {
     sal_uInt32 nFormatKey;
     if (m_aFormatString.isEmpty())
@@ -3109,11 +3094,29 @@ void SvxCurrencyToolBoxControl::Select( sal_uInt16 nSelectModifier )
         Sequence< PropertyValue > aArgs( 1 );
         aArgs[0].Name = "NumberFormatCurrency";
         aArgs[0].Value <<= nFormatKey;
-        Dispatch( m_aCommandURL, aArgs );
+        dispatchCommand( m_aCommandURL, aArgs );
         m_nFormatKey = nFormatKey;
     }
     else
-        SfxToolBoxControl::Select( nSelectModifier );
+        PopupWindowController::execute( nSelectModifier );
+}
+
+OUString SvxCurrencyToolBoxControl::getImplementationName()
+{
+    return OUString( "com.sun.star.comp.svx.CurrencyToolBoxControl" );
+}
+
+css::uno::Sequence<OUString> SvxCurrencyToolBoxControl::getSupportedServiceNames()
+{
+    return { "com.sun.star.frame.ToolbarController" };
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+com_sun_star_comp_svx_CurrencyToolBoxControl_get_implementation(
+    css::uno::XComponentContext* rContext,
+    css::uno::Sequence<css::uno::Any> const & )
+{
+    return cppu::acquire( new SvxCurrencyToolBoxControl( rContext ) );
 }
 
 Reference< css::accessibility::XAccessible > SvxFontNameBox_Impl::CreateAccessible()
diff --git a/svx/util/svxcore.component b/svx/util/svxcore.component
index c51f3a63326f..490e39c9e56b 100644
--- a/svx/util/svxcore.component
+++ b/svx/util/svxcore.component
@@ -44,6 +44,10 @@
     constructor="com_sun_star_comp_svx_FrameToolBoxControl_get_implementation">
     <service name="com.sun.star.frame.ToolbarController"/>
   </implementation>
+  <implementation name="com.sun.star.comp.svx.CurrencyToolBoxControl"
+    constructor="com_sun_star_comp_svx_CurrencyToolBoxControl_get_implementation">
+    <service name="com.sun.star.frame.ToolbarController"/>
+  </implementation>
   <implementation name="com.sun.star.comp.svx.FontNameToolBoxControl"
     constructor="com_sun_star_comp_svx_FontNameToolBoxControl_get_implementation">
     <service name="com.sun.star.frame.ToolbarController"/>


More information about the Libreoffice-commits mailing list