From e867b197540cfc8b75bb1108c8bcd7a0ff65d347 Mon Sep 17 00:00:00 2001 From: Maxim Monastirsky Date: Sun, 17 Sep 2017 23:35:55 +0300 Subject: tdf#106762 Base SvxColorToolBoxControl on svt::PopupWindowController This allows us to support tearoff without breaking gtk3/wayland. SvxColorWindow no longer inherits from FloatingWindow, so several call sites need also to be changed to use DockingManager. Change-Id: I5d0bc611bbd2a8b9bfd4335212d0ae7e8fc10593 --- include/svtools/toolbarmenu.hxx | 5 + include/svx/colorwindow.hxx | 3 +- include/svx/tbcontrl.hxx | 23 +++- include/vcl/menubtn.hxx | 4 +- .../data/org/openoffice/Office/UI/Controller.xcu | 84 ++++++++++-- reportdesign/source/ui/dlg/Condition.cxx | 3 +- sc/source/ui/app/scdll.cxx | 9 -- sd/source/ui/app/sddll.cxx | 6 - svtools/source/control/toolbarmenu.cxx | 13 ++ svx/source/tbxctrls/tbcontrl.cxx | 146 ++++++++++++++------- svx/uiconfig/ui/colorwindow.ui | 5 +- svx/util/svxcore.component | 4 + sw/source/uibase/app/swmodule.cxx | 9 -- vcl/source/control/menubtn.cxx | 16 ++- 14 files changed, 233 insertions(+), 97 deletions(-) diff --git a/include/svtools/toolbarmenu.hxx b/include/svtools/toolbarmenu.hxx index 5f990ef0dcad..88174253548a 100644 --- a/include/svtools/toolbarmenu.hxx +++ b/include/svtools/toolbarmenu.hxx @@ -50,6 +50,9 @@ public: ToolbarPopup(const css::uno::Reference& rFrame, vcl::Window* pParentWindow, WinBits nBits ); + ToolbarPopup(const css::uno::Reference& rFrame, + vcl::Window* pParentWindow, + const OString& rID, const OUString& rUIXMLDescription ); virtual ~ToolbarPopup() override; virtual void dispose() override; @@ -64,6 +67,8 @@ protected: virtual void statusChanged(const css::frame::FeatureStateEvent& Event ); private: + void init(); + css::uno::Reference< css::frame::XFrame > mxFrame; rtl::Reference< svt::FrameStatusListener > mxStatusListener; }; diff --git a/include/svx/colorwindow.hxx b/include/svx/colorwindow.hxx index 3f826fa217e4..a782307df9fa 100644 --- a/include/svx/colorwindow.hxx +++ b/include/svx/colorwindow.hxx @@ -21,6 +21,7 @@ #define INCLUDED_SVX_SOURCE_TBXCTRLS_COLORWINDOW_HXX #include +#include #include #include #include @@ -48,7 +49,7 @@ typedef std::function ColorSelectFunct #define COL_NONE_COLOR TRGB_COLORDATA(0x80, 0xFF, 0xFF, 0xFF) -class SVX_DLLPUBLIC SvxColorWindow : public SfxPopupWindow +class SVX_DLLPUBLIC SvxColorWindow : public svtools::ToolbarPopup { private: const sal_uInt16 theSlotId; diff --git a/include/svx/tbcontrl.hxx b/include/svx/tbcontrl.hxx index 22fd4e72910f..b9b8eb0db7b1 100644 --- a/include/svx/tbcontrl.hxx +++ b/include/svx/tbcontrl.hxx @@ -205,25 +205,34 @@ friend class SfxStyleControllerItem_Impl; typedef std::function ColorSelectFunction; -class SVX_DLLPUBLIC SvxColorToolBoxControl : public cppu::ImplInheritanceHelper< SfxToolBoxControl, +class SVX_DLLPUBLIC SvxColorToolBoxControl : public cppu::ImplInheritanceHelper< svt::PopupWindowController, css::frame::XSubToolbarController > { std::unique_ptr m_xBtnUpdater; std::unique_ptr m_xPaletteManager; BorderColorStatus m_aBorderColorStatus; bool m_bSplitButton; + sal_uInt16 m_nSlotId; ColorSelectFunction m_aColorSelectFunction; DECL_LINK(SelectedHdl, const NamedColor&, void); public: - SFX_DECL_TOOLBOX_CONTROL(); - SvxColorToolBoxControl(sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rToolBox); + explicit SvxColorToolBoxControl( const css::uno::Reference& rContext ); virtual ~SvxColorToolBoxControl() override; + // XInitialization + virtual void SAL_CALL initialize( const css::uno::Sequence& rArguments ) override; + + // XUpdatable + virtual void SAL_CALL update() override; + // XStatusListener virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& rEvent ) override; - virtual VclPtr CreatePopupWindow() override; - virtual void Select(sal_uInt16 nSelectModifier) override; + // XToolbarController + virtual void SAL_CALL execute( sal_Int16 nSelectModifier ) override; + + using svt::ToolboxController::createPopupWindow; + virtual VclPtr createPopupWindow( vcl::Window* pParent ) override; // XSubToolbarController virtual sal_Bool SAL_CALL opensSubToolbar() override; @@ -231,6 +240,10 @@ public: virtual void SAL_CALL functionSelected( const OUString& rCommand ) override; virtual void SAL_CALL updateImage() override; + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() override; + virtual css::uno::Sequence SAL_CALL getSupportedServiceNames() override; + void setColorSelectFunction(const ColorSelectFunction& aColorSelectFunction); void EnsurePaletteManager(); }; diff --git a/include/vcl/menubtn.hxx b/include/vcl/menubtn.hxx index da725103c1c7..dfbb39962139 100644 --- a/include/vcl/menubtn.hxx +++ b/include/vcl/menubtn.hxx @@ -36,7 +36,7 @@ private: Timer* mpMenuTimer; VclPtr mpMenu; - VclPtr mpFloatingWindow; + VclPtr mpFloatingWindow; sal_uInt16 mnCurItemId; bool mbDelayMenu; Link maActivateHdl; @@ -75,7 +75,7 @@ public: void SetPopupMenu(PopupMenu* pNewMenu); PopupMenu* GetPopupMenu() const { return mpMenu; } - void SetPopover(FloatingWindow* pFloatingWindow); + void SetPopover(Window* pWindow); sal_uInt16 GetCurItemId() const { return mnCurItemId; } OString GetCurItemIdent() const; diff --git a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu index 64fbbf30f4fc..103d14d1f672 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu @@ -1221,37 +1221,103 @@ com.sun.star.comp.svx.CurrencyToolBoxControl - + .uno:FontColor - com.sun.star.report.ReportDefinition + - com.sun.star.report.ReportToolboxController + com.sun.star.comp.svx.ColorToolBoxControl - + .uno:BackgroundColor - com.sun.star.report.ReportDefinition + - com.sun.star.report.ReportToolboxController + com.sun.star.comp.svx.ColorToolBoxControl - + .uno:Color - com.sun.star.report.ReportDefinition + + + + com.sun.star.comp.svx.ColorToolBoxControl + + + + + .uno:BackColor + + + + + + com.sun.star.comp.svx.ColorToolBoxControl + + + + + .uno:CharBackColor + + + + + + com.sun.star.comp.svx.ColorToolBoxControl + + + + + .uno:Extrusion3DColor + + + + + + com.sun.star.comp.svx.ColorToolBoxControl + + + + + .uno:XLineColor + + + + + + com.sun.star.comp.svx.ColorToolBoxControl + + + + + .uno:FillColor + + + + + + com.sun.star.comp.svx.ColorToolBoxControl + + + + + .uno:FrameLineColor + + + - com.sun.star.report.ReportToolboxController + com.sun.star.comp.svx.ColorToolBoxControl diff --git a/reportdesign/source/ui/dlg/Condition.cxx b/reportdesign/source/ui/dlg/Condition.cxx index 8c9b93a2892c..3ac335ebdf1b 100644 --- a/reportdesign/source/ui/dlg/Condition.cxx +++ b/reportdesign/source/ui/dlg/Condition.cxx @@ -238,7 +238,8 @@ IMPL_LINK(Condition, DropdownClick, ToolBox*, pToolBox, void) pToolBox, m_aColorWrapper); - m_pColorFloat->StartPopupMode(pToolBox, FloatWinPopupFlags::GrabFocus); + m_pColorFloat->EnableDocking(); + vcl::Window::GetDockingManager()->StartPopupMode(pToolBox, m_pColorFloat, FloatWinPopupFlags::GrabFocus); } IMPL_LINK_NOARG( Condition, OnFormatAction, ToolBox*, void ) diff --git a/sc/source/ui/app/scdll.cxx b/sc/source/ui/app/scdll.cxx index f857c6593888..6d557f7a2d0b 100644 --- a/sc/source/ui/app/scdll.cxx +++ b/sc/source/ui/app/scdll.cxx @@ -157,13 +157,7 @@ void ScDLL::Init() SvxFillToolBoxControl ::RegisterControl(0, pMod); SvxLineStyleToolBoxControl ::RegisterControl(0, pMod); SvxLineWidthToolBoxControl ::RegisterControl(0, pMod); - SvxColorToolBoxControl ::RegisterControl(SID_ATTR_LINE_COLOR, pMod); - SvxColorToolBoxControl ::RegisterControl(SID_ATTR_FILL_COLOR, pMod); SvxStyleToolBoxControl ::RegisterControl(SID_STYLE_APPLY, pMod); - SvxColorToolBoxControl ::RegisterControl(SID_ATTR_CHAR_COLOR, pMod); - SvxColorToolBoxControl ::RegisterControl(SID_BACKGROUND_COLOR, pMod); - SvxColorToolBoxControl ::RegisterControl(SID_ATTR_CHAR_BACK_COLOR, pMod); - SvxColorToolBoxControl ::RegisterControl(SID_FRAME_LINECOLOR, pMod); SvxClipBoardControl ::RegisterControl(SID_PASTE, pMod ); SvxUndoRedoControl ::RegisterControl(SID_UNDO, pMod ); SvxUndoRedoControl ::RegisterControl(SID_REDO, pMod ); @@ -208,9 +202,6 @@ void ScDLL::Init() SvxPosSizeStatusBarControl ::RegisterControl(SID_ATTR_SIZE, pMod); - // CustomShape extrusion controller - SvxColorToolBoxControl::RegisterControl( SID_EXTRUSION_3D_COLOR, pMod ); - // Child Windows ScInputWindowWrapper ::RegisterChildWindow(true, pMod, SfxChildWindowFlags::TASK|SfxChildWindowFlags::FORCEDOCK); diff --git a/sd/source/ui/app/sddll.cxx b/sd/source/ui/app/sddll.cxx index b487624c151b..4e2c083d27d8 100644 --- a/sd/source/ui/app/sddll.cxx +++ b/sd/source/ui/app/sddll.cxx @@ -181,12 +181,8 @@ void SdDLL::RegisterControllers(SdModule* pMod) SvxFillToolBoxControl::RegisterControl(0, pMod); SvxLineStyleToolBoxControl::RegisterControl(0, pMod); SvxLineWidthToolBoxControl::RegisterControl(0, pMod); - SvxColorToolBoxControl::RegisterControl(SID_ATTR_LINE_COLOR, pMod); - SvxColorToolBoxControl::RegisterControl(SID_ATTR_FILL_COLOR, pMod); SvxStyleToolBoxControl::RegisterControl(0, pMod); - SvxColorToolBoxControl::RegisterControl( SID_ATTR_CHAR_COLOR, pMod ); - SvxColorToolBoxControl::RegisterControl( SID_ATTR_CHAR_BACK_COLOR, pMod ); SvxGrafModeToolBoxControl::RegisterControl( SID_ATTR_GRAF_MODE, pMod ); SvxGrafRedToolBoxControl::RegisterControl( SID_ATTR_GRAF_RED, pMod ); @@ -221,7 +217,6 @@ void SdDLL::RegisterControllers(SdModule* pMod) SvxClipBoardControl::RegisterControl( SID_PASTE, pMod ); SvxClipBoardControl::RegisterControl( SID_PASTE_UNFORMATTED, pMod ); - SvxColorToolBoxControl::RegisterControl( SID_EXTRUSION_3D_COLOR, pMod ); svx::ParaLineSpacingPopup::RegisterControl(SID_ATTR_PARA_LINESPACE, pMod); svx::TextCharacterSpacingPopup::RegisterControl(SID_ATTR_CHAR_KERNING, pMod); svx::TextUnderlinePopup::RegisterControl(SID_ATTR_CHAR_UNDERLINE, pMod); @@ -230,7 +225,6 @@ void SdDLL::RegisterControllers(SdModule* pMod) XmlSecStatusBarControl::RegisterControl( SID_SIGNATURE, pMod ); SdTemplateControl::RegisterControl( SID_STATUS_LAYOUT, pMod ); SvxTableToolBoxControl::RegisterControl(SID_INSERT_TABLE, pMod ); - SvxColorToolBoxControl::RegisterControl(SID_FRAME_LINECOLOR, pMod ); SvxTbxCtlDraw::RegisterControl(SID_INSERT_DRAW, pMod ); EmojiPopup::RegisterControl(SID_EMOJI_CONTROL, pMod ); diff --git a/svtools/source/control/toolbarmenu.cxx b/svtools/source/control/toolbarmenu.cxx index 822a85892564..3a77a9f80225 100644 --- a/svtools/source/control/toolbarmenu.cxx +++ b/svtools/source/control/toolbarmenu.cxx @@ -1427,6 +1427,19 @@ void SAL_CALL ToolbarPopupStatusListener::statusChanged( const css::frame::Featu ToolbarPopup::ToolbarPopup( const css::uno::Reference& rFrame, vcl::Window* pParentWindow, WinBits nBits ) : DockingWindow(pParentWindow, nBits) , mxFrame( rFrame ) +{ + init(); +} + +ToolbarPopup::ToolbarPopup( const css::uno::Reference& rFrame, vcl::Window* pParentWindow, + const OString& rID, const OUString& rUIXMLDescription ) + : DockingWindow(pParentWindow, rID, rUIXMLDescription, rFrame) + , mxFrame( rFrame ) +{ + init(); +} + +void ToolbarPopup::init() { vcl::Window* pWindow = GetTopMostParentSystemWindow( this ); if ( pWindow ) diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index ad4fd0ea3b24..5d8237f07fa0 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -33,7 +33,6 @@ #include #include #include -#include #include #include #include @@ -1251,9 +1250,7 @@ SvxColorWindow::SvxColorWindow(const OUString& rCommand, vcl::Window* pParentWindow, std::function const & aFunction): - SfxPopupWindow( nSlotId, pParentWindow, - "palette_popup_window", "svx/ui/colorwindow.ui", - rFrame ), + ToolbarPopup( rFrame, pParentWindow, "palette_popup_window", "svx/ui/colorwindow.ui" ), theSlotId( nSlotId ), maCommand( rCommand ), mrPaletteManager( rPaletteManager ), @@ -1374,11 +1371,12 @@ void SvxColorWindow::dispose() mpButtonNoneColor.clear(); mpButtonPicker.clear(); mpAutomaticSeparator.clear(); - SfxPopupWindow::dispose(); + ToolbarPopup::dispose(); } void SvxColorWindow::KeyInput( const KeyEvent& rKEvt ) { + mpColorSet->GrabFocus(); mpColorSet->KeyInput(rKEvt); } @@ -1510,6 +1508,7 @@ IMPL_LINK_NOARG(SvxColorWindow, OpenPickerClickHdl, Button*, void) void SvxColorWindow::StartSelection() { mpColorSet->StartSelection(); + mpRecentColorSet->StartSelection(); } void SvxColorWindow::SetNoSelection() @@ -2756,28 +2755,77 @@ com_sun_star_comp_svx_FontNameToolBoxControl_get_implementation( return cppu::acquire( new SvxFontNameToolBoxControl() ); } -SvxColorToolBoxControl::SvxColorToolBoxControl( - sal_uInt16 nSlotId, - sal_uInt16 nId, - ToolBox& rTbx ): - ImplInheritanceHelper( nSlotId, nId, rTbx ), - m_bSplitButton(typeid(rTbx) != typeid(sfx2::sidebar::SidebarToolBox)), +SvxColorToolBoxControl::SvxColorToolBoxControl( const css::uno::Reference& rContext ) : + ImplInheritanceHelper( rContext, nullptr, OUString() ), + m_bSplitButton(true), + m_nSlotId(0), m_aColorSelectFunction(PaletteManager::DispatchColorCommand) { - switch( nSlotId ) +} + +namespace { + +sal_uInt16 MapCommandToSlotId(const OUString& rCommand) +{ + if (rCommand == ".uno:Color") + return SID_ATTR_CHAR_COLOR; + else if (rCommand == ".uno:FontColor") + return SID_ATTR_CHAR_COLOR2; + else if (rCommand == ".uno:BackColor") + return SID_ATTR_CHAR_COLOR_BACKGROUND; + else if (rCommand == ".uno:CharBackColor") + return SID_ATTR_CHAR_BACK_COLOR; + else if (rCommand == ".uno:BackgroundColor") + return SID_BACKGROUND_COLOR; + else if (rCommand == ".uno:Extrusion3DColor") + return SID_EXTRUSION_3D_COLOR; + else if (rCommand == ".uno:XLineColor") + return SID_ATTR_LINE_COLOR; + else if (rCommand == ".uno:FillColor") + return SID_ATTR_FILL_COLOR; + else if (rCommand == ".uno:FrameLineColor") + return SID_FRAME_LINECOLOR; + + SAL_WARN("svx.tbxcrtls", "Unknown color command: " << rCommand); + return 0; +} + +} + +void SvxColorToolBoxControl::initialize( const css::uno::Sequence& rArguments ) +{ + PopupWindowController::initialize( rArguments ); + + ToolBox* pToolBox = nullptr; + sal_uInt16 nId = 0; + if ( !getToolboxId( nId, &pToolBox ) ) + { + SAL_WARN("svx.tbxcrtls", "ToolBox not found!"); + return; + } + + m_nSlotId = MapCommandToSlotId( m_aCommandURL ); + if ( m_nSlotId == SID_ATTR_LINE_COLOR || m_nSlotId == SID_ATTR_FILL_COLOR || + m_nSlotId == SID_FRAME_LINECOLOR || m_nSlotId == SID_BACKGROUND_COLOR ) + // Sidebar uses wide buttons for those. + m_bSplitButton = typeid( *pToolBox ) != typeid( sfx2::sidebar::SidebarToolBox ); + + m_xBtnUpdater.reset( new svx::ToolboxButtonColorUpdater( m_nSlotId, nId, pToolBox ) ); + pToolBox->SetItemBits( nId, pToolBox->GetItemBits( nId ) | ( m_bSplitButton ? ToolBoxItemBits::DROPDOWN : ToolBoxItemBits::DROPDOWNONLY ) ); +} + +void SvxColorToolBoxControl::update() +{ + PopupWindowController::update(); + + switch( m_nSlotId ) { case SID_ATTR_CHAR_COLOR2: addStatusListener( ".uno:CharColorExt"); - SAL_FALLTHROUGH; - - case SID_ATTR_CHAR_COLOR: - case SID_ATTR_CHAR_BACK_COLOR: - m_bSplitButton = true; break; case SID_ATTR_CHAR_COLOR_BACKGROUND: addStatusListener( ".uno:CharBackgroundExt"); - m_bSplitButton = true; break; case SID_FRAME_LINECOLOR: @@ -2785,9 +2833,6 @@ SvxColorToolBoxControl::SvxColorToolBoxControl( addStatusListener( ".uno:BorderBLTR"); break; } - - rTbx.SetItemBits( nId, rTbx.GetItemBits( nId ) | ( m_bSplitButton ? ToolBoxItemBits::DROPDOWN : ToolBoxItemBits::DROPDOWNONLY ) ); - m_xBtnUpdater.reset( new svx::ToolboxButtonColorUpdater( nSlotId, nId, &GetToolBox() ) ); } void SvxColorToolBoxControl::EnsurePaletteManager() @@ -2811,7 +2856,7 @@ void SvxColorToolBoxControl::setColorSelectFunction(const ColorSelectFunction& a m_xPaletteManager->SetColorSelectFunction(aColorSelectFunction); } -VclPtr SvxColorToolBoxControl::CreatePopupWindow() +VclPtr SvxColorToolBoxControl::createPopupWindow( vcl::Window* pParent ) { EnsurePaletteManager(); @@ -2819,16 +2864,14 @@ VclPtr SvxColorToolBoxControl::CreatePopupWindow() m_aCommandURL, *m_xPaletteManager, m_aBorderColorStatus, - GetSlotId(), + m_nSlotId, m_xFrame, - &GetToolBox(), + pParent, m_aColorSelectFunction); OUString aWindowTitle = vcl::CommandInfoProvider::GetLabelForCommand( m_aCommandURL, m_sModuleName ); pColorWin->SetText( aWindowTitle ); - pColorWin->StartPopupMode(&GetToolBox(), FloatWinPopupFlags::GrabFocus); pColorWin->StartSelection(); - SetPopupWindow(pColorWin); if ( m_bSplitButton ) pColorWin->SetSelectedHdl( LINK( this, SvxColorToolBoxControl, SelectedHdl ) ); return pColorWin; @@ -2843,8 +2886,13 @@ IMPL_LINK(SvxColorToolBoxControl, SelectedHdl, const NamedColor&, rColor, void) void SvxColorToolBoxControl::statusChanged( const css::frame::FeatureStateEvent& rEvent ) { + ToolBox* pToolBox = nullptr; + sal_uInt16 nId = 0; + if ( !getToolboxId( nId, &pToolBox ) ) + return; + if ( rEvent.FeatureURL.Complete == m_aCommandURL ) - GetToolBox().EnableItem( GetId(), rEvent.IsEnabled ); + pToolBox->EnableItem( nId, rEvent.IsEnabled ); bool bValue; if ( !m_bSplitButton ) @@ -2866,23 +2914,21 @@ void SvxColorToolBoxControl::statusChanged( const css::frame::FeatureStateEvent& m_xPaletteManager->SetLastColor(aColor); } else if ( rEvent.State >>= bValue ) - GetToolBox().CheckItem( GetId(), bValue ); + pToolBox->CheckItem( nId, bValue ); } -void SvxColorToolBoxControl::Select(sal_uInt16 /*nSelectModifier*/) +void SvxColorToolBoxControl::execute(sal_Int16 /*nSelectModifier*/) { if ( !m_bSplitButton ) { // Open the popup also when Enter key is pressed. - css::uno::Reference< css::awt::XWindow > xWin = createPopupWindow(); - if ( xWin.is() ) - xWin->setFocus(); + createPopupWindow(); return; } OUString aCommand = m_aCommandURL; - switch( GetSlotId() ) + switch( m_nSlotId ) { case SID_ATTR_CHAR_COLOR2 : aCommand = ".uno:CharColorExt"; @@ -2899,7 +2945,7 @@ void SvxColorToolBoxControl::Select(sal_uInt16 /*nSelectModifier*/) auto aArgs( comphelper::InitPropertySequence( { { m_aCommandURL.copy(5), css::uno::makeAny( m_xPaletteManager->GetLastColor().GetColor() ) } } ) ); - Dispatch( aCommand, aArgs ); + dispatchCommand( aCommand, aArgs ); OUString sColorName = ("#" + aColor.AsRGBHexString().toAsciiUpperCase()); m_xPaletteManager->AddRecentColor(aColor, sColorName); @@ -2915,10 +2961,15 @@ sal_Bool SvxColorToolBoxControl::opensSubToolbar() void SvxColorToolBoxControl::updateImage() { - Image aImage = vcl::CommandInfoProvider::GetImageForCommand(m_aCommandURL, m_xFrame, GetToolBox().GetImageSize()); + ToolBox* pToolBox = nullptr; + sal_uInt16 nId = 0; + if ( !getToolboxId( nId, &pToolBox ) ) + return; + + Image aImage = vcl::CommandInfoProvider::GetImageForCommand(m_aCommandURL, m_xFrame, pToolBox->GetImageSize()); if ( !!aImage ) { - GetToolBox().SetItemImage( GetId(), aImage ); + pToolBox->SetItemImage( nId, aImage ); EnsurePaletteManager(); m_xBtnUpdater->Update(m_xPaletteManager->GetLastColor(), true); } @@ -2933,21 +2984,22 @@ void SvxColorToolBoxControl::functionSelected( const OUString& /*rCommand*/ ) { } -SfxToolBoxControl* SvxColorToolBoxControl::CreateImpl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox &rTbx ) +OUString SvxColorToolBoxControl::getImplementationName() { - return new SvxColorToolBoxControl( nSlotId, nId, rTbx ); + return OUString( "com.sun.star.comp.svx.ColorToolBoxControl" ); } -void SvxColorToolBoxControl::RegisterControl(sal_uInt16 nSlotId, SfxModule *pMod) +css::uno::Sequence SvxColorToolBoxControl::getSupportedServiceNames() { - if ( nSlotId == SID_ATTR_LINE_COLOR ) - SfxToolBoxControl::RegisterToolBoxControl( pMod, SfxTbxCtrlFactory( SvxColorToolBoxControl::CreateImpl, typeid(XLineColorItem), nSlotId ) ); - else if ( nSlotId == SID_ATTR_FILL_COLOR ) - SfxToolBoxControl::RegisterToolBoxControl( pMod, SfxTbxCtrlFactory( SvxColorToolBoxControl::CreateImpl, typeid(XFillColorItem), nSlotId ) ); - else if ( nSlotId == SID_ATTR_CHAR_BACK_COLOR ) - SfxToolBoxControl::RegisterToolBoxControl( pMod, SfxTbxCtrlFactory( SvxColorToolBoxControl::CreateImpl, typeid(SvxBackgroundColorItem), nSlotId ) ); - else - SfxToolBoxControl::RegisterToolBoxControl( pMod, SfxTbxCtrlFactory( SvxColorToolBoxControl::CreateImpl, typeid(SvxColorItem), nSlotId ) ); + return { "com.sun.star.frame.ToolbarController" }; +} + +extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL +com_sun_star_comp_svx_ColorToolBoxControl_get_implementation( + css::uno::XComponentContext* rContext, + css::uno::Sequence const & ) +{ + return cppu::acquire( new SvxColorToolBoxControl( rContext ) ); } // class SvxFrameToolBoxControl -------------------------------------------- diff --git a/svx/uiconfig/ui/colorwindow.ui b/svx/uiconfig/ui/colorwindow.ui index 14a9635f5430..1d983505567b 100644 --- a/svx/uiconfig/ui/colorwindow.ui +++ b/svx/uiconfig/ui/colorwindow.ui @@ -27,10 +27,7 @@ True 4 False - True - popup-menu - True - False + dock True diff --git a/svx/util/svxcore.component b/svx/util/svxcore.component index 490e39c9e56b..aa1cac6fcae4 100644 --- a/svx/util/svxcore.component +++ b/svx/util/svxcore.component @@ -44,6 +44,10 @@ constructor="com_sun_star_comp_svx_FrameToolBoxControl_get_implementation"> + + + diff --git a/sw/source/uibase/app/swmodule.cxx b/sw/source/uibase/app/swmodule.cxx index 72af465176a9..47567ec52256 100644 --- a/sw/source/uibase/app/swmodule.cxx +++ b/sw/source/uibase/app/swmodule.cxx @@ -305,7 +305,6 @@ void SwDLL::RegisterControls() PageOrientationPopup::RegisterControl(SID_ATTR_PAGE_ORIENTATION, pMod); PageColumnPopup::RegisterControl(SID_ATTR_PAGE_COLUMN, pMod); PageSizePopup::RegisterControl(SID_ATTR_PAGE_SIZE, pMod); - SvxColorToolBoxControl::RegisterControl( SID_EXTRUSION_3D_COLOR, pMod ); SvxClipBoardControl::RegisterControl(SID_PASTE, pMod ); SvxUndoRedoControl::RegisterControl(SID_UNDO, pMod ); @@ -315,16 +314,8 @@ void SwDLL::RegisterControls() SvxFillToolBoxControl::RegisterControl(SID_ATTR_FILL_STYLE, pMod ); SvxLineStyleToolBoxControl::RegisterControl(SID_ATTR_LINE_STYLE, pMod ); SvxLineWidthToolBoxControl::RegisterControl(SID_ATTR_LINE_WIDTH, pMod ); - SvxColorToolBoxControl::RegisterControl(SID_ATTR_LINE_COLOR, pMod ); - SvxColorToolBoxControl::RegisterControl(SID_ATTR_FILL_COLOR, pMod); - SvxColorToolBoxControl::RegisterControl(SID_ATTR_CHAR_BACK_COLOR, pMod); - SvxColorToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR, pMod ); - SvxColorToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR2, pMod ); - SvxColorToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR_BACKGROUND, pMod ); SvxStyleToolBoxControl::RegisterControl(SID_STYLE_APPLY, pMod ); - SvxColorToolBoxControl::RegisterControl( SID_BACKGROUND_COLOR, pMod ); - SvxColorToolBoxControl::RegisterControl(SID_FRAME_LINECOLOR, pMod ); SvxColumnsToolBoxControl::RegisterControl(FN_INSERT_FRAME_INTERACT, pMod ); SvxColumnsToolBoxControl::RegisterControl(FN_INSERT_FRAME, pMod ); diff --git a/vcl/source/control/menubtn.cxx b/vcl/source/control/menubtn.cxx index 92a3b96719e0..5771f24ab289 100644 --- a/vcl/source/control/menubtn.cxx +++ b/vcl/source/control/menubtn.cxx @@ -18,6 +18,7 @@ */ #include +#include #include #include #include @@ -55,7 +56,14 @@ void MenuButton::ExecuteMenu() { Point aPos(GetParent()->OutputToScreenPixel(GetPosPixel())); tools::Rectangle aRect(aPos, aSize ); - mpFloatingWindow->StartPopupMode(aRect, FloatWinPopupFlags::Down | FloatWinPopupFlags::GrabFocus); + FloatWinPopupFlags nFlags = FloatWinPopupFlags::Down | FloatWinPopupFlags::GrabFocus; + if (mpFloatingWindow->GetType() == WindowType::FLOATINGWINDOW) + static_cast(mpFloatingWindow.get())->StartPopupMode(aRect, nFlags); + else + { + mpFloatingWindow->EnableDocking(); + vcl::Window::GetDockingManager()->StartPopupMode(mpFloatingWindow, aRect, nFlags); + } } SetPressed(false); if (mnCurItemId) @@ -170,12 +178,12 @@ void MenuButton::SetPopupMenu(PopupMenu* pNewMenu) mpMenu = pNewMenu; } -void MenuButton::SetPopover(FloatingWindow* pFloatingWindow) +void MenuButton::SetPopover(Window* pWindow) { - if (pFloatingWindow == mpFloatingWindow) + if (pWindow == mpFloatingWindow) return; - mpFloatingWindow = pFloatingWindow; + mpFloatingWindow = pWindow; } //class MenuToggleButton ---------------------------------------------------- -- cgit v1.2.3