diff --git a/ui/widgets/labels.cpp b/ui/widgets/labels.cpp index 65bd7e5..034c75e 100644 --- a/ui/widgets/labels.cpp +++ b/ui/widgets/labels.cpp @@ -378,6 +378,30 @@ void FlatLabel::setClickHandlerFilter(ClickHandlerFilter &&filter) { _clickHandlerFilter = std::move(filter); } +void FlatLabel::overrideLinkClickHandler(Fn handler) { + setClickHandlerFilter([=]( + const ClickHandlerPtr &link, + Qt::MouseButton button) { + if (button != Qt::LeftButton) { + return true; + } + handler(); + return false; + }); +} + +void FlatLabel::overrideLinkClickHandler(Fn handler) { + setClickHandlerFilter([=]( + const ClickHandlerPtr &link, + Qt::MouseButton button) { + if (button != Qt::LeftButton) { + return true; + } + handler(link->dragText()); + return false; + }); +} + void FlatLabel::mouseMoveEvent(QMouseEvent *e) { _lastMousePos = e->globalPos(); dragActionUpdate(); diff --git a/ui/widgets/labels.h b/ui/widgets/labels.h index 656e6b2..b7ab34d 100644 --- a/ui/widgets/labels.h +++ b/ui/widgets/labels.h @@ -139,6 +139,8 @@ public: using ClickHandlerFilter = Fn; void setClickHandlerFilter(ClickHandlerFilter &&filter); + void overrideLinkClickHandler(Fn handler); + void overrideLinkClickHandler(Fn handler); // ClickHandlerHost interface void clickHandlerActiveChanged(const ClickHandlerPtr &action, bool active) override;