summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Monastirsky <momonasmon@gmail.com>2017-05-03 02:25:07 +0300
committerMaxim Monastirsky <momonasmon@gmail.com>2017-07-30 07:08:44 +0200
commit9f61005dd9c4bf86e92e4c60677cf06a949a7af7 (patch)
tree9ab00876068a75b816bcb5d10b9d40296551c1be
parentd742c0019435d0bc90c9342492583636099a057f (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.hxx21
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu11
-rw-r--r--sc/source/ui/app/scdll.cxx1
-rw-r--r--svtools/source/uno/popupwindowcontroller.cxx11
-rw-r--r--svx/source/tbxctrls/tbcontrl.cxx73
-rw-r--r--svx/util/svxcore.component4
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"/>