diff --git a/ui/click_handler.cpp b/ui/click_handler.cpp index f5129cb..4cb8ae2 100644 --- a/ui/click_handler.cpp +++ b/ui/click_handler.cpp @@ -8,6 +8,7 @@ #include "base/algorithm.h" #include "ui/text/text_entity.h" +#include "ui/integration.h" #include @@ -170,7 +171,9 @@ void ActivateClickHandler( ClickContext context) { crl::on_main(guard, [=, weak = std::weak_ptr(handler)] { if (const auto strong = weak.lock()) { - strong->onClick(context); + if (Ui::Integration::Instance().allowClickHandlerActivation(strong, context)) { + strong->onClick(context); + } } }); } diff --git a/ui/integration.cpp b/ui/integration.cpp index 495e17a..722b433 100644 --- a/ui/integration.cpp +++ b/ui/integration.cpp @@ -76,6 +76,12 @@ Fn Integration::createSpoilerRepaint(const std::any &context) { return nullptr; } +bool Integration::allowClickHandlerActivation( + const std::shared_ptr &handler, + const ClickContext &context) { + return true; +} + bool Integration::handleUrlClick( const QString &url, const QVariant &context) { diff --git a/ui/integration.h b/ui/integration.h index 09b4da0..93603ef 100644 --- a/ui/integration.h +++ b/ui/integration.h @@ -20,6 +20,7 @@ class QVariant; struct TextParseOptions; class ClickHandler; +struct ClickContext; struct EntityLinkData; namespace Ui { @@ -64,6 +65,9 @@ public: const std::any &context) -> std::unique_ptr; [[nodiscard]] virtual Fn createSpoilerRepaint( const std::any &context); + [[nodiscard]] virtual bool allowClickHandlerActivation( + const std::shared_ptr &handler, + const ClickContext &context); [[nodiscard]] virtual rpl::producer<> forcePopupMenuHideRequests();