diff options
author | Maxim Monastirsky <momonasmon@gmail.com> | 2017-05-03 02:25:07 +0300 |
---|---|---|
committer | Maxim Monastirsky <momonasmon@gmail.com> | 2017-07-30 07:08:44 +0200 |
commit | 9f61005dd9c4bf86e92e4c60677cf06a949a7af7 (patch) | |
tree | 9ab00876068a75b816bcb5d10b9d40296551c1be | |
parent | d742c0019435d0bc90c9342492583636099a057f (diff) |
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@libreoffice.org>
Reviewed-by: Maxim Monastirsky <momonasmon@gmail.com>
-rw-r--r-- | include/svx/tbcontrl.hxx | 21 | ||||
-rw-r--r-- | officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu | 11 | ||||
-rw-r--r-- | sc/source/ui/app/scdll.cxx | 1 | ||||
-rw-r--r-- | svtools/source/uno/popupwindowcontroller.cxx | 11 | ||||
-rw-r--r-- | svx/source/tbxctrls/tbcontrl.cxx | 73 | ||||
-rw-r--r-- | svx/util/svxcore.component | 4 |
6 files changed, 76 insertions, 45 deletions
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"/> |