editeng/source/editeng/editeng.cxx | 3 ++- editeng/source/editeng/impedit2.cxx | 6 ++++-- include/editeng/editeng.hxx | 2 +- sc/inc/editutil.hxx | 2 +- sc/source/core/tool/editutil.cxx | 7 +++++-- 5 files changed, 13 insertions(+), 7 deletions(-)
New commits: commit d01748250f952cc97f5ae4c73ee4451e6762da4b Author: Samuel Mehrbrodt <[email protected]> AuthorDate: Tue Nov 30 23:34:11 2021 +0100 Commit: Thorsten Behrens <[email protected]> CommitDate: Sat Dec 11 18:23:15 2021 +0100 tdf#145671 Don't open URL twice in cell edit mode Change-Id: I8a324d6a037c8a5c0efc0b2825657513c2f9841c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126159 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <[email protected]> (cherry picked from commit b9362e87a3646a6693b81fb0d40e28ce7813a251) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126421 Tested-by: Samuel Mehrbrodt <[email protected]> Reviewed-by: Thorsten Behrens <[email protected]> diff --git a/editeng/source/editeng/editeng.cxx b/editeng/source/editeng/editeng.cxx index 2b600871c27d..1fb456c7beb8 100644 --- a/editeng/source/editeng/editeng.cxx +++ b/editeng/source/editeng/editeng.cxx @@ -2567,8 +2567,9 @@ OUString EditEngine::CalcFieldValue( const SvxFieldItem&, sal_Int32, sal_Int32, return OUString(' '); } -void EditEngine::FieldClicked( const SvxFieldItem& ) +bool EditEngine::FieldClicked( const SvxFieldItem& ) { + return false; } diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx index dc1730a72a94..fbf1101d399a 100644 --- a/editeng/source/editeng/impedit2.cxx +++ b/editeng/source/editeng/impedit2.cxx @@ -599,8 +599,11 @@ bool ImpEditEngine::MouseButtonUp( const MouseEvent& rMEvt, EditView* pView ) Point aLogicClick = rOutDev.PixelToLogic(rMEvt.GetPosPixel()); if (const SvxFieldItem* pFld = pView->GetField(aLogicClick)) { + bool bUrlOpened = GetEditEnginePtr()->FieldClicked( *pFld ); + auto pUrlField = dynamic_cast<const SvxURLField*>(pFld->GetField()); + // tdf#121039 When in edit mode, editeng is responsible for opening the URL on mouse click - if (auto pUrlField = dynamic_cast<const SvxURLField*>(pFld->GetField())) + if (!bUrlOpened && pUrlField) { SvtSecurityOptions aSecOpt; bool bCtrlClickHappened = rMEvt.IsMod1(); @@ -616,7 +619,6 @@ bool ImpEditEngine::MouseButtonUp( const MouseEvent& rMEvt, EditView* pView ) css::system::SystemShellExecuteFlags::DEFAULTS); } } - GetEditEnginePtr()->FieldClicked( *pFld ); } } } diff --git a/include/editeng/editeng.hxx b/include/editeng/editeng.hxx index 1f77ce661020..59040d10b81a 100644 --- a/include/editeng/editeng.hxx +++ b/include/editeng/editeng.hxx @@ -500,7 +500,7 @@ public: const Color& rTextLineColor); virtual OUString GetUndoComment( sal_uInt16 nUndoId ) const; virtual bool SpellNextDocument(); - virtual void FieldClicked( const SvxFieldItem& rField ); + virtual bool FieldClicked( const SvxFieldItem& rField ); virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor ); // override this if access to bullet information needs to be provided diff --git a/sc/inc/editutil.hxx b/sc/inc/editutil.hxx index 86d579bd1016..4bf044aba666 100644 --- a/sc/inc/editutil.hxx +++ b/sc/inc/editutil.hxx @@ -185,7 +185,7 @@ public: void SetExecuteURL(bool bSet) { bExecuteURL = bSet; } - virtual void FieldClicked( const SvxFieldItem& rField ) override; + virtual bool FieldClicked( const SvxFieldItem& rField ) override; virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor ) override; }; diff --git a/sc/source/core/tool/editutil.cxx b/sc/source/core/tool/editutil.cxx index 040456d49ac2..d34db90f614b 100644 --- a/sc/source/core/tool/editutil.cxx +++ b/sc/source/core/tool/editutil.cxx @@ -870,14 +870,17 @@ OUString ScFieldEditEngine::CalcFieldValue( const SvxFieldItem& rField, return ScEditUtil::GetCellFieldValue(*pFieldData, mpDoc, &rTxtColor); } -void ScFieldEditEngine::FieldClicked( const SvxFieldItem& rField ) +bool ScFieldEditEngine::FieldClicked( const SvxFieldItem& rField ) { if (!bExecuteURL) - return; + return false; + if (const SvxURLField* pURLField = dynamic_cast<const SvxURLField*>(rField.GetField())) { ScGlobal::OpenURL(pURLField->GetURL(), pURLField->GetTargetFrame()); + return true; } + return false; } ScNoteEditEngine::ScNoteEditEngine( SfxItemPool* pEnginePoolP,
