From 48b1e8a0aca2f3f3faa8f1f800568e47792ba9a0 Mon Sep 17 00:00:00 2001 From: Pavel Sanda Date: Fri, 14 Aug 2020 19:46:13 +0200 Subject: [PATCH] New attempt on #9906: allow following hyperlinks via context menu. Now safer version with the help of Qt. --- lib/ui/stdcontext.inc | 2 ++ src/insets/InsetHyperlink.cpp | 19 ++++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/ui/stdcontext.inc b/lib/ui/stdcontext.inc index 0a2cbda724..c2beb316f4 100644 --- a/lib/ui/stdcontext.inc +++ b/lib/ui/stdcontext.inc @@ -673,6 +673,8 @@ Menuset # Menu "context-hyperlink" Item "Settings...|S" "inset-settings" + Separator + Item "Open Target...|O" "inset-edit" End # diff --git a/src/insets/InsetHyperlink.cpp b/src/insets/InsetHyperlink.cpp index 26850cd9be..bfa478d2f1 100644 --- a/src/insets/InsetHyperlink.cpp +++ b/src/insets/InsetHyperlink.cpp @@ -12,6 +12,9 @@ #include #include "InsetHyperlink.h" +#include +#include + #include "Buffer.h" #include "DispatchResult.h" #include "Encoding.h" @@ -30,6 +33,7 @@ #include "support/filetools.h" #include "support/gettext.h" #include "support/lstrings.h" +#include "support/qstring_helpers.h" #include "frontends/alert.h" @@ -106,9 +110,13 @@ bool InsetHyperlink::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & flag) const { switch (cmd.action()) { - case LFUN_INSET_EDIT: - flag.setEnabled(getParam("type").empty() || getParam("type") == "file:"); + case LFUN_INSET_EDIT: { + QUrl url(toqstr(getParam("target")),QUrl::StrictMode); + bool url_valid = getParam("type").empty() && url.isValid(); + + flag.setEnabled(url_valid || getParam("type") == "file:"); return true; + } default: return InsetCommand::getStatus(cur, cmd, flag); @@ -118,7 +126,12 @@ bool InsetHyperlink::getStatus(Cursor & cur, FuncRequest const & cmd, void InsetHyperlink::viewTarget() const { - if (getParam("type") == "file:") { + if (getParam("type").empty()) { //==Web + QUrl url(toqstr(getParam("target")),QUrl::StrictMode); + if (!QDesktopServices::openUrl(url)) + LYXERR0("Unable to open URL!"); + + } else if (getParam("type") == "file:") { FileName url = makeAbsPath(to_utf8(getParam("target")), buffer().filePath()); string const format = theFormats().getFormatFromFile(url); theFormats().view(buffer(), url, format);