Skip to content

Commit 2de685f

Browse files
committed
Show press ripples on rich buttons of part rich pages
Task: 2026/10/29/make-rich-buttons-respond-to-presses-in-album-captions-and-part-rich-pages
1 parent 72882e4 commit 2de685f

3 files changed

Lines changed: 53 additions & 44 deletions

File tree

‎Telegram/SourceFiles/history/view/history_view_element.cpp‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2183,6 +2183,8 @@ void Element::validateText() {
21832183
runtime->handlerMediaActivation = {};
21842184
runtime->handlerPlaceholderId = {};
21852185
runtime->handlerPlaceholderPoint = QPoint();
2186+
runtime->pressedPlaceholderId = {};
2187+
runtime->pressedPlaceholderHandler = nullptr;
21862188
runtime->handlerButtonRow = {};
21872189
runtime->handlerButtonRowHandler = nullptr;
21882190
runtime->pressedButtonRow = {};

‎Telegram/SourceFiles/history/view/history_view_message.cpp‎

Lines changed: 49 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -3385,49 +3385,11 @@ void Message::clickHandlerPressedChanged(
33853385
toggleCommentsButtonRipple(pressed);
33863386
} else if (_topicButton && (handler == _topicButton->link)) {
33873387
toggleTopicButtonRipple(pressed);
3388-
} else if (_viewButton) {
3389-
_viewButton->checkLink(handler, pressed);
3390-
} else if (const auto reply = Get<Reply>()
3391-
; reply && (handler == reply->link())) {
3392-
toggleReplyRipple(pressed);
3393-
} else if (const auto summaryHeader = Get<SummaryHeader>()
3394-
; summaryHeader && (handler == summaryHeader->link())) {
3395-
toggleSummaryHeaderRipple(pressed);
3396-
} else if (_summarize && (handler == _summarize->link())) {
3397-
if (pressed) {
3398-
_summarize->addRipple([=] { repaint(); });
3399-
} else {
3400-
_summarize->stopRipple();
3401-
}
3402-
} else if (const auto badge = Get<RightBadge>()
3403-
; badge && badge->tagLink && handler == badge->tagLink) {
3404-
toggleBadgeRipple(pressed);
3405-
} else if (displayFromName() && handler == fromLink()) {
3406-
if (_fromLinkRipplePointSet || !pressed) {
3407-
startLinkRipple();
3408-
}
3409-
} else if (const auto via = data()->Get<HistoryMessageVia>()
3410-
; via
3411-
&& (handler == via->link)
3412-
&& !displayForwardedFrom()) {
3413-
startLinkRipple();
3414-
} else if (const auto guestChat = data()->Get<HistoryMessageGuestChat>()
3415-
; guestChat
3416-
&& (handler == guestChat->link)) {
3417-
startLinkRipple();
3418-
} else if (const auto forwarded = data()->Get<HistoryMessageForwarded>()
3419-
; forwarded
3420-
&& displayForwardedFrom()
3421-
&& !forwarded->text.linkRangeFor(handler).empty()) {
3422-
startLinkRipple();
3423-
} else if (hasVisibleText()
3424-
&& IsRippleLink(handler)
3425-
&& !text().linkRangeFor(handler).empty()) {
3426-
startLinkRipple();
34273388
} else if (const auto rich = richpage()
34283389
; rich
34293390
&& ((handler == rich->handler)
34303391
|| (handler == rich->handlerHorizontalScrollPressed)
3392+
|| (handler == rich->pressedPlaceholderHandler)
34313393
|| (handler == rich->handlerButtonRowHandler)
34323394
|| (handler == rich->pressedButtonRowHandler)
34333395
|| (handler == rich->handlerInlineButtonHandler)
@@ -3447,14 +3409,18 @@ void Message::clickHandlerPressedChanged(
34473409
rich->handlerHorizontalScrollActive = false;
34483410
rich->handlerHorizontalScrollPressed = nullptr;
34493411
}
3450-
if ((handler == rich->handler) && rich->handlerPlaceholderId) {
3451-
if (pressed) {
3412+
if (pressed) {
3413+
if ((handler == rich->handler) && rich->handlerPlaceholderId) {
3414+
rich->pressedPlaceholderId = rich->handlerPlaceholderId;
3415+
rich->pressedPlaceholderHandler = handler;
34523416
rich->article.addPlaceholderRipple(
3453-
rich->handlerPlaceholderId,
3417+
rich->pressedPlaceholderId,
34543418
rich->handlerPlaceholderPoint);
3455-
} else {
3456-
rich->article.stopPlaceholderRipple(rich->handlerPlaceholderId);
34573419
}
3420+
} else if (handler == rich->pressedPlaceholderHandler) {
3421+
rich->article.stopPlaceholderRipple(
3422+
base::take(rich->pressedPlaceholderId));
3423+
rich->pressedPlaceholderHandler = nullptr;
34583424
}
34593425
if (pressed) {
34603426
if ((handler == rich->handlerButtonRowHandler)
@@ -3482,6 +3448,45 @@ void Message::clickHandlerPressedChanged(
34823448
rich->article.stopInlineButtonRipple();
34833449
rich->pressedInlineButtonHandler = nullptr;
34843450
}
3451+
} else if (_viewButton) {
3452+
_viewButton->checkLink(handler, pressed);
3453+
} else if (const auto reply = Get<Reply>()
3454+
; reply && (handler == reply->link())) {
3455+
toggleReplyRipple(pressed);
3456+
} else if (const auto summaryHeader = Get<SummaryHeader>()
3457+
; summaryHeader && (handler == summaryHeader->link())) {
3458+
toggleSummaryHeaderRipple(pressed);
3459+
} else if (_summarize && (handler == _summarize->link())) {
3460+
if (pressed) {
3461+
_summarize->addRipple([=] { repaint(); });
3462+
} else {
3463+
_summarize->stopRipple();
3464+
}
3465+
} else if (const auto badge = Get<RightBadge>()
3466+
; badge && badge->tagLink && handler == badge->tagLink) {
3467+
toggleBadgeRipple(pressed);
3468+
} else if (displayFromName() && handler == fromLink()) {
3469+
if (_fromLinkRipplePointSet || !pressed) {
3470+
startLinkRipple();
3471+
}
3472+
} else if (const auto via = data()->Get<HistoryMessageVia>()
3473+
; via
3474+
&& (handler == via->link)
3475+
&& !displayForwardedFrom()) {
3476+
startLinkRipple();
3477+
} else if (const auto guestChat = data()->Get<HistoryMessageGuestChat>()
3478+
; guestChat
3479+
&& (handler == guestChat->link)) {
3480+
startLinkRipple();
3481+
} else if (const auto forwarded = data()->Get<HistoryMessageForwarded>()
3482+
; forwarded
3483+
&& displayForwardedFrom()
3484+
&& !forwarded->text.linkRangeFor(handler).empty()) {
3485+
startLinkRipple();
3486+
} else if (hasVisibleText()
3487+
&& IsRippleLink(handler)
3488+
&& !text().linkRangeFor(handler).empty()) {
3489+
startLinkRipple();
34853490
} else if (_reactions) {
34863491
_reactions->clickHandlerPressedChanged(
34873492
handler,

‎Telegram/SourceFiles/history/view/history_view_message.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ struct HistoryMessageRichPage
120120
mutable Iv::Markdown::MediaActivation handlerMediaActivation;
121121
mutable Iv::Markdown::PreparedPlaceholderBlockId handlerPlaceholderId;
122122
mutable QPoint handlerPlaceholderPoint;
123+
mutable Iv::Markdown::PreparedPlaceholderBlockId pressedPlaceholderId;
124+
mutable ClickHandlerPtr pressedPlaceholderHandler;
123125
mutable Iv::Markdown::MarkdownArticleButtonRowHit handlerButtonRow;
124126
mutable ClickHandlerPtr handlerButtonRowHandler;
125127
mutable Iv::Markdown::MarkdownArticleButtonRowHit pressedButtonRow;

0 commit comments

Comments
 (0)