From 671cca13e11e48112ec18e6d3f90efff6c177804 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Thu, 14 May 2020 13:42:52 +0100 Subject: tdf#132169 we always get the value in MapUnit::Map100thMM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit but must set it in the core metric of the target application since... commit f7c751439d4616f43509301d71af92b13b576a84 Date: Thu Nov 7 15:53:49 2019 +0100 jsdialog: consume .uno:LineWidth double value added parameters for online, but with parameters its no longer considered a simple slot and for non-simple slots the auto-conversion of values to/from twips isn't done. there's probably a much and older deeper bug here, but lets get this known broken line width working Change-Id: I8683431f02d2d14936411d35ba070944b9b80e1f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94200 Tested-by: Jenkins Reviewed-by: Caolán McNamara Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94820 Tested-by: Jenkins CollaboraOffice Reviewed-by: Szymon Kłos --- include/svx/itemwin.hxx | 4 ++-- include/svx/linectrl.hxx | 2 ++ svx/source/tbxctrls/itemwin.cxx | 14 ++++++++------ svx/source/tbxctrls/linectrl.cxx | 10 ++++++++-- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/include/svx/itemwin.hxx b/include/svx/itemwin.hxx index 62a479b870be..03e74fdc5f5f 100644 --- a/include/svx/itemwin.hxx +++ b/include/svx/itemwin.hxx @@ -60,7 +60,7 @@ class SVX_DLLPUBLIC SvxMetricField : public MetricField using Window::Update; OUString aCurTxt; - MapUnit ePoolUnit; + MapUnit eDestPoolUnit; FieldUnit eDlgUnit; Size aLogicalSize; css::uno::Reference< css::frame::XFrame > mxFrame; @@ -79,7 +79,7 @@ public: const css::uno::Reference< css::frame::XFrame >& rFrame ); void Update( const XLineWidthItem* pItem ); - void SetCoreUnit( MapUnit eUnit ); + void SetDestCoreUnit( MapUnit eUnit ); void RefreshDlgUnit(); }; diff --git a/include/svx/linectrl.hxx b/include/svx/linectrl.hxx index a2b1a484e18a..37dc0750bc35 100644 --- a/include/svx/linectrl.hxx +++ b/include/svx/linectrl.hxx @@ -62,6 +62,8 @@ public: class SVX_DLLPUBLIC SvxLineWidthToolBoxControl : public SfxToolBoxControl { + static MapUnit GetCoreMetric(); + public: SFX_DECL_TOOLBOX_CONTROL(); diff --git a/svx/source/tbxctrls/itemwin.cxx b/svx/source/tbxctrls/itemwin.cxx index 5dd5ae966506..2db377a6b57d 100644 --- a/svx/source/tbxctrls/itemwin.cxx +++ b/svx/source/tbxctrls/itemwin.cxx @@ -242,7 +242,7 @@ SvxMetricField::SvxMetricField( vcl::Window* pParent, const Reference< XFrame >& rFrame ) : MetricField(pParent, WB_BORDER | WB_SPIN | WB_REPEAT) , aCurTxt() - , ePoolUnit(MapUnit::MapCM) + , eDestPoolUnit(MapUnit::Map100thMM) , mxFrame(rFrame) { Size aSize( CalcMinimumSize() ); @@ -265,8 +265,10 @@ void SvxMetricField::Update( const XLineWidthItem* pItem ) { if ( pItem ) { - if ( pItem->GetValue() != GetCoreValue( *this, ePoolUnit ) ) - SetMetricValue( *this, pItem->GetValue(), ePoolUnit ); + // tdf#132169 we always get the value in MapUnit::Map100thMM but have + // to set it in the core metric of the target application + if ( pItem->GetValue() != GetCoreValue( *this, MapUnit::Map100thMM ) ) + SetMetricValue( *this, pItem->GetValue(), MapUnit::Map100thMM ); } else SetText( "" ); @@ -276,7 +278,7 @@ void SvxMetricField::Update( const XLineWidthItem* pItem ) void SvxMetricField::Modify() { MetricField::Modify(); - long nTmp = GetCoreValue( *this, ePoolUnit ); + long nTmp = GetCoreValue( *this, eDestPoolUnit ); XLineWidthItem aLineWidthItem( nTmp ); Any a; @@ -300,9 +302,9 @@ void SvxMetricField::ReleaseFocus_Impl() } } -void SvxMetricField::SetCoreUnit( MapUnit eUnit ) +void SvxMetricField::SetDestCoreUnit( MapUnit eUnit ) { - ePoolUnit = eUnit; + eDestPoolUnit = eUnit; } void SvxMetricField::RefreshDlgUnit() diff --git a/svx/source/tbxctrls/linectrl.cxx b/svx/source/tbxctrls/linectrl.cxx index fa67f56f7fb5..b0e6c81ff21e 100644 --- a/svx/source/tbxctrls/linectrl.cxx +++ b/svx/source/tbxctrls/linectrl.cxx @@ -223,10 +223,9 @@ void SvxLineWidthToolBoxControl::StateChanged( { DBG_ASSERT( dynamic_cast( pState) != nullptr, "wrong ItemType" ); - // Core-Unit handed over to MetricField // Should not happen in CreateItemWin ()! // CD!!! GetCoreMetric(); - pFld->SetCoreUnit( MapUnit::Map100thMM ); + pFld->SetDestCoreUnit(GetCoreMetric()); pFld->Update( static_cast(pState) ); } @@ -236,6 +235,13 @@ void SvxLineWidthToolBoxControl::StateChanged( } } +MapUnit SvxLineWidthToolBoxControl::GetCoreMetric() +{ + SfxObjectShell* pSh = SfxObjectShell::Current(); + SfxItemPool& rPool = pSh ? pSh->GetPool() : SfxGetpApp()->GetPool(); + sal_uInt16 nWhich = rPool.GetWhich(SID_ATTR_LINE_WIDTH); + return rPool.GetMetric(nWhich); +} VclPtr SvxLineWidthToolBoxControl::CreateItemWindow( vcl::Window *pParent ) { -- cgit v1.2.3