summaryrefslogtreecommitdiff
path: root/sw/source/uibase
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2021-03-12 17:51:07 +0100
committerMiklos Vajna <vmiklos@collabora.com>2021-03-12 19:32:19 +0100
commit64ffabbdb2725e93de997171708bb31c33c93a55 (patch)
tree2f27a4aa75990e5f9f2e7b5ec8cbada99a7714e0 /sw/source/uibase
parent6db71f70a3b200d4074f6cda8ce445e9861d3296 (diff)
sw bibliography, refer to a page: make the biblio field clickable
- add support for this in SwWrtShell::ClickToField() - restrict this to ctrl-click by default (similar to hyperlinks) - ignore empty URLs - extend the tooltip to hint the URL - change pointer to hint that the field is clickable - downgrade the assert to SAL_WARN in SwAuthorityFieldType::RemoveField(), that currently fires every time a biblio field is de-selected Change-Id: I3b4a12d8a7661f7d8d41804f104505c7594debd6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112400 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
Diffstat (limited to 'sw/source/uibase')
-rw-r--r--sw/source/uibase/docvw/edtwin.cxx2
-rw-r--r--sw/source/uibase/docvw/edtwin2.cxx7
-rw-r--r--sw/source/uibase/inc/wrtsh.hxx2
-rw-r--r--sw/source/uibase/shells/basesh.cxx2
-rw-r--r--sw/source/uibase/wrtsh/wrtsh2.cxx21
5 files changed, 30 insertions, 4 deletions
diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx
index 1f95f9bdea31..93560ec91f3b 100644
--- a/sw/source/uibase/docvw/edtwin.cxx
+++ b/sw/source/uibase/docvw/edtwin.cxx
@@ -4809,7 +4809,7 @@ void SwEditWin::MouseButtonUp(const MouseEvent& rMEvt)
}
else
{
- rSh.ClickToField( *aContentAtPos.aFnd.pField );
+ rSh.ClickToField(*aContentAtPos.aFnd.pField, bExecHyperlinks);
// a bit of a mystery what this is good for?
// in this case we assume it's valid since we
// just selected a field
diff --git a/sw/source/uibase/docvw/edtwin2.cxx b/sw/source/uibase/docvw/edtwin2.cxx
index 645878cd855f..c3af8bd54149 100644
--- a/sw/source/uibase/docvw/edtwin2.cxx
+++ b/sw/source/uibase/docvw/edtwin2.cxx
@@ -347,6 +347,13 @@ void SwEditWin::RequestHelp(const HelpEvent &rEvt)
= static_cast<const SwAuthorityField*>(pField);
sText = pAuthorityField->GetAuthority(aContentAtPos.pFndTextAttr,
rSh.GetLayout());
+ if (pAuthorityField->HasURL())
+ {
+ const OUString& rURL
+ = pAuthorityField->GetAuthEntry()->GetAuthorField(
+ AUTH_FIELD_URL);
+ sText += "\n" + SfxHelp::GetURLHelpText(rURL);
+ }
break;
}
diff --git a/sw/source/uibase/inc/wrtsh.hxx b/sw/source/uibase/inc/wrtsh.hxx
index cd50a2f3f7a9..67b626dc70bc 100644
--- a/sw/source/uibase/inc/wrtsh.hxx
+++ b/sw/source/uibase/inc/wrtsh.hxx
@@ -437,7 +437,7 @@ typedef bool (SwWrtShell::*FNSimpleMove)();
// a click at the given field. the cursor is on it.
// execute the predefined actions.
- void ClickToField( const SwField& rField );
+ void ClickToField( const SwField& rField, bool bExecHyperlinks );
void ClickToINetAttr( const SwFormatINetFormat& rItem, LoadUrlFlags nFilter = LoadUrlFlags::NONE );
bool ClickToINetGrf( const Point& rDocPt, LoadUrlFlags nFilter );
inline bool IsInClickToEdit() const ;
diff --git a/sw/source/uibase/shells/basesh.cxx b/sw/source/uibase/shells/basesh.cxx
index 4ec9dccd3113..c91fab016851 100644
--- a/sw/source/uibase/shells/basesh.cxx
+++ b/sw/source/uibase/shells/basesh.cxx
@@ -773,7 +773,7 @@ void SwBaseShell::Execute(SfxRequest &rReq)
bool bRet = rSh.MoveFieldType( pFieldType, nSlot == FN_GOTO_NEXT_MARK );
SwField* pCurField = bRet ? rSh.GetCurField() : nullptr;
if (pCurField)
- rSh.ClickToField(*pCurField);
+ rSh.ClickToField(*pCurField, /*bExecHyperlinks=*/false);
rReq.SetReturnValue(SfxBoolItem( nSlot, bRet));
}
}
diff --git a/sw/source/uibase/wrtsh/wrtsh2.cxx b/sw/source/uibase/wrtsh/wrtsh2.cxx
index c179383bd28a..cbda31185fed 100644
--- a/sw/source/uibase/wrtsh/wrtsh2.cxx
+++ b/sw/source/uibase/wrtsh/wrtsh2.cxx
@@ -46,6 +46,7 @@
#include <cmdid.h>
#include <swabstdlg.hxx>
#include <SwRewriter.hxx>
+#include <authfld.hxx>
#include <com/sun/star/document/XDocumentProperties.hpp>
#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
@@ -334,7 +335,7 @@ void SwWrtShell::UpdateTableOf(const SwTOXBase& rTOX, const SfxItemSet* pSet)
// handler for click on the field given as parameter.
// the cursor is positioned on the field.
-void SwWrtShell::ClickToField( const SwField& rField )
+void SwWrtShell::ClickToField(const SwField& rField, bool bExecHyperlinks)
{
// cross reference field must not be selected because it moves the cursor
if (SwFieldIds::GetRef != rField.GetTyp()->Which())
@@ -396,6 +397,24 @@ void SwWrtShell::ClickToField( const SwField& rField )
}
break;
+ case SwFieldIds::TableOfAuthorities:
+ {
+ if (!bExecHyperlinks)
+ {
+ break;
+ }
+
+ auto pField = static_cast<const SwAuthorityField*>(&rField);
+ if (!pField->HasURL())
+ {
+ break;
+ }
+
+ const OUString& rURL = pField->GetAuthEntry()->GetAuthorField(AUTH_FIELD_URL);
+ ::LoadURL(*this, rURL, LoadUrlFlags::NewView, /*rTargetFrameName=*/OUString());
+ }
+ break;
+
case SwFieldIds::GetRef:
StartAllAction();
SwCursorShell::GotoRefMark( static_cast<const SwGetRefField&>(rField).GetSetRefName(),