diff options
author | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2019-08-12 10:45:58 +0200 |
---|---|---|
committer | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2019-08-12 12:50:11 +0200 |
commit | 71b660a226176a0d5e420572e004166d0301844f (patch) | |
tree | fc091f735380bb48f1d3c095193732b23b81a5fe | |
parent | Fix typos (diff) | |
download | core-71b660a226176a0d5e420572e004166d0301844f.tar.gz core-71b660a226176a0d5e420572e004166d0301844f.zip |
Don't select hyperlink fields arbitrarily
For some functions, like remove or edit hyperlink, it's required
that the hyperlink field is selected.
However, we should do that only when executing the function, not
when queriying its status.
This led to selection changes on mouse over/right click.
Change-Id: I22035698032d1e651aae6a74d6e445dfe044bf74
Reviewed-on: https://gerrit.libreoffice.org/77336
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
-rw-r--r-- | editeng/source/editeng/editview.cxx | 10 | ||||
-rw-r--r-- | editeng/source/misc/urlfieldhelper.cxx | 13 | ||||
-rw-r--r-- | editeng/source/outliner/outlvw.cxx | 5 | ||||
-rw-r--r-- | include/editeng/editview.hxx | 1 | ||||
-rw-r--r-- | include/editeng/outliner.hxx | 4 | ||||
-rw-r--r-- | sc/source/ui/drawfunc/drtxtob.cxx | 6 | ||||
-rw-r--r-- | sc/source/ui/view/editsh.cxx | 4 | ||||
-rw-r--r-- | sd/source/ui/view/drviews2.cxx | 6 | ||||
-rw-r--r-- | sw/source/uibase/shells/drwtxtex.cxx | 4 |
9 files changed, 35 insertions, 18 deletions
diff --git a/editeng/source/editeng/editview.cxx b/editeng/source/editeng/editview.cxx index 250f77ffc68a..654f5f34077f 100644 --- a/editeng/source/editeng/editview.cxx +++ b/editeng/source/editeng/editview.cxx @@ -1225,7 +1225,7 @@ const SvxFieldItem* EditView::GetFieldAtSelection() const return nullptr; } -const SvxFieldData* EditView::GetFieldAtCursor() +void EditView::SelectFieldAtCursor() { const SvxFieldItem* pFieldItem = GetFieldAtSelection(); if (pFieldItem) @@ -1246,9 +1246,15 @@ const SvxFieldData* EditView::GetFieldAtCursor() { aSel.nStartPos--; SetSelection(aSel); - pFieldItem = GetFieldAtSelection(); } } +} + +const SvxFieldData* EditView::GetFieldAtCursor() +{ + const SvxFieldItem* pFieldItem = GetFieldUnderMousePointer(); + if (!pFieldItem) + pFieldItem = GetFieldAtSelection(); return pFieldItem ? pFieldItem->GetField() : nullptr; } diff --git a/editeng/source/misc/urlfieldhelper.cxx b/editeng/source/misc/urlfieldhelper.cxx index ce7217612ead..ea1a4f02336f 100644 --- a/editeng/source/misc/urlfieldhelper.cxx +++ b/editeng/source/misc/urlfieldhelper.cxx @@ -31,15 +31,10 @@ bool URLFieldHelper::IsCursorAtURLField(OutlinerView* pOLV) if (!pOLV) return false; - const SvxFieldItem* pFieldItem = pOLV->GetFieldUnderMousePointer(); - if (!pFieldItem) - pFieldItem = pOLV->GetFieldAtSelection(); - if (pFieldItem) - { - const SvxFieldData* pField = pFieldItem->GetField(); - if (dynamic_cast<const SvxURLField*>(pField)) - return true; - } + const SvxFieldData* pField = pOLV->GetFieldAtCursor(); + if (dynamic_cast<const SvxURLField*>(pField)) + return true; + return false; } diff --git a/editeng/source/outliner/outlvw.cxx b/editeng/source/outliner/outlvw.cxx index 670807932277..19bcfe31688f 100644 --- a/editeng/source/outliner/outlvw.cxx +++ b/editeng/source/outliner/outlvw.cxx @@ -1322,6 +1322,11 @@ const SvxFieldData* OutlinerView::GetFieldAtCursor() return pEditView->GetFieldAtCursor(); } +void OutlinerView::SelectFieldAtCursor() +{ + pEditView->SelectFieldAtCursor(); +} + void OutlinerView::SetInvalidateMore( sal_uInt16 nPixel ) { pEditView->SetInvalidateMore( nPixel ); diff --git a/include/editeng/editview.hxx b/include/editeng/editview.hxx index 9adb6bacdca8..a47da81cb8a4 100644 --- a/include/editeng/editview.hxx +++ b/include/editeng/editview.hxx @@ -279,6 +279,7 @@ public: const SvxFieldItem* GetFieldAtSelection() const; /// Select and return the field at the current cursor position const SvxFieldData* GetFieldAtCursor(); + void SelectFieldAtCursor(); void SetInvalidateMore( sal_uInt16 nPixel ); sal_uInt16 GetInvalidateMore() const; diff --git a/include/editeng/outliner.hxx b/include/editeng/outliner.hxx index 9d4037d6885c..787434031b33 100644 --- a/include/editeng/outliner.hxx +++ b/include/editeng/outliner.hxx @@ -301,8 +301,10 @@ public: void InsertField( const SvxFieldItem& rFld ); const SvxFieldItem* GetFieldUnderMousePointer() const; const SvxFieldItem* GetFieldAtSelection() const; - /// Select and return the field at the current cursor position + /// Return the field at the current cursor position or nullptr if no field found const SvxFieldData* GetFieldAtCursor(); + /// Select the field at the current cursor position + void SelectFieldAtCursor(); /** enables bullets for the selected paragraphs if the bullets/numbering of the first paragraph is off or disables bullets/numbering for the selected paragraphs if the bullets/numbering of the first paragraph is on diff --git a/sc/source/ui/drawfunc/drtxtob.cxx b/sc/source/ui/drawfunc/drtxtob.cxx index 334f1933a88b..92910b2dea87 100644 --- a/sc/source/ui/drawfunc/drtxtob.cxx +++ b/sc/source/ui/drawfunc/drtxtob.cxx @@ -274,7 +274,7 @@ void ScDrawTextObjectBar::Execute( SfxRequest &rReq ) bool bDone = false; if (eMode == HLINK_DEFAULT || eMode == HLINK_FIELD) { - pOutView->GetFieldAtCursor(); + pOutView->SelectFieldAtCursor(); // insert new field SvxURLField aURLField( rURL, rName, SvxURLFormat::Repr ); @@ -306,7 +306,7 @@ void ScDrawTextObjectBar::Execute( SfxRequest &rReq ) case SID_EDIT_HYPERLINK: { // Ensure the field is selected first - pOutView->GetFieldAtCursor(); + pOutView->SelectFieldAtCursor(); pViewData->GetViewShell()->GetViewFrame()->GetDispatcher()->Execute(SID_HYPERLINK_DIALOG); } break; @@ -325,6 +325,8 @@ void ScDrawTextObjectBar::Execute( SfxRequest &rReq ) case SID_REMOVE_HYPERLINK: { + // Ensure the field is selected first + pOutView->SelectFieldAtCursor(); URLFieldHelper::RemoveURLField(pOutliner, pOutView); } break; diff --git a/sc/source/ui/view/editsh.cxx b/sc/source/ui/view/editsh.cxx index 932bc0d6fda6..8cda154cd702 100644 --- a/sc/source/ui/view/editsh.cxx +++ b/sc/source/ui/view/editsh.cxx @@ -627,7 +627,7 @@ void ScEditShell::Execute( SfxRequest& rReq ) case SID_EDIT_HYPERLINK: { // Ensure the field is selected first - pEditView->GetFieldAtCursor(); + pEditView->SelectFieldAtCursor(); pViewData->GetViewShell()->GetViewFrame()->GetDispatcher()->Execute( SID_HYPERLINK_DIALOG); } @@ -646,7 +646,7 @@ void ScEditShell::Execute( SfxRequest& rReq ) case SID_REMOVE_HYPERLINK: { // Ensure the field is selected first - pEditView->GetFieldAtCursor(); + pEditView->SelectFieldAtCursor(); const SvxURLField* pURLField = GetURLField(); if (pURLField) { diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx index ed6ca12113e3..e81ff4b62bce 100644 --- a/sd/source/ui/view/drviews2.cxx +++ b/sd/source/ui/view/drviews2.cxx @@ -1154,6 +1154,10 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq) { if (mpDrawView->IsTextEdit()) { + // First make sure the field is selected + OutlinerView* pOutView = mpDrawView->GetTextEditOutlinerView(); + if (pOutView) + pOutView->SelectFieldAtCursor(); URLFieldHelper::RemoveURLField(mpDrawView->GetTextEditOutliner(), mpDrawView->GetTextEditOutlinerView()); } @@ -2119,7 +2123,7 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq) // Ensure the field is selected first OutlinerView* pOutView = mpDrawView->GetTextEditOutlinerView(); if (pOutView) - pOutView->GetFieldAtCursor(); + pOutView->SelectFieldAtCursor(); GetViewFrame()->GetDispatcher()->Execute( SID_HYPERLINK_DIALOG ); diff --git a/sw/source/uibase/shells/drwtxtex.cxx b/sw/source/uibase/shells/drwtxtex.cxx index 2f5ae1a43019..2354f2a58489 100644 --- a/sw/source/uibase/shells/drwtxtex.cxx +++ b/sw/source/uibase/shells/drwtxtex.cxx @@ -490,13 +490,15 @@ void SwDrawTextShell::Execute( SfxRequest &rReq ) case SID_EDIT_HYPERLINK: { // Ensure the field is selected first - pOLV->GetFieldAtCursor(); + pOLV->SelectFieldAtCursor(); GetView().GetViewFrame()->GetDispatcher()->Execute(SID_HYPERLINK_DIALOG); } break; case SID_REMOVE_HYPERLINK: { + // Ensure the field is selected first + pOLV->SelectFieldAtCursor(); URLFieldHelper::RemoveURLField(pSdrView->GetTextEditOutliner(), pOLV); } |