diff --git a/ui/basic_click_handlers.cpp b/ui/basic_click_handlers.cpp index ca59447..c1e9d54 100644 --- a/ui/basic_click_handlers.cpp +++ b/ui/basic_click_handlers.cpp @@ -41,13 +41,16 @@ QString UrlClickHandler::copyToClipboardContextItemText() const { : Ui::Integration::Instance().phraseContextCopyLink(); } -QString UrlClickHandler::url() const { - if (isEmail()) { - return _originalUrl; +QString UrlClickHandler::EncodeForOpening(const QString &originalUrl) { + if (IsEmail(originalUrl)) { + return originalUrl; } - QUrl u(_originalUrl), good(u.isValid() ? u.toEncoded() : QString()); - QString result(good.isValid() ? QString::fromUtf8(good.toEncoded()) : _originalUrl); + const auto u = QUrl(originalUrl); + const auto good = QUrl(u.isValid() ? u.toEncoded() : QString()); + const auto result = good.isValid() + ? QString::fromUtf8(good.toEncoded()) + : originalUrl; if (!result.isEmpty() && !QRegularExpression( diff --git a/ui/basic_click_handlers.h b/ui/basic_click_handlers.h index 53969c6..ac8c7e3 100644 --- a/ui/basic_click_handlers.h +++ b/ui/basic_click_handlers.h @@ -59,11 +59,17 @@ public: const auto at = url.indexOf('@'), slash = url.indexOf('/'); return ((at > 0) && (slash < 0 || slash > at)); } + [[nodiscard]] static QString EncodeForOpening(const QString &originalUrl); [[nodiscard]] static bool IsSuspicious(const QString &url); [[nodiscard]] static QString ShowEncoded(const QString &url); protected: - QString url() const override; + [[nodiscard]] QString originalUrl() const { + return _originalUrl; + } + QString url() const override { + return EncodeForOpening(_originalUrl); + } QString readable() const override { return _readable; } diff --git a/ui/text/text.cpp b/ui/text/text.cpp index 9d1f8a1..8ce15c4 100644 --- a/ui/text/text.cpp +++ b/ui/text/text.cpp @@ -3270,7 +3270,9 @@ TextForMimeData String::toText( return; } const auto skipLink = (entity.type == EntityType::CustomUrl) - && (entity.data.startsWith(qstr("internal:"))); + && (entity.data.startsWith(qstr("internal:")) + || (entity.data + == UrlClickHandler::EncodeForOpening(full.toString()))); if (composeExpanded) { result.expanded.append(full); if (entity.type == EntityType::CustomUrl && !skipLink) {