Fix clickable geometry of "via @bot".

This commit is contained in:
John Preston
2026-04-21 22:59:44 +07:00
parent 7e77f629f6
commit 810ebff849
2 changed files with 13 additions and 4 deletions
@@ -153,6 +153,7 @@ void HistoryMessageVia::resize(int32 availw) const {
tr::now, tr::now,
lt_inline_bot, lt_inline_bot,
'@' + bot->username()); '@' + bot->username());
maxWidth = st::msgServiceNameFont->width(text);
if (availw < maxWidth) { if (availw < maxWidth) {
text = st::msgServiceNameFont->elided(text, availw); text = st::msgServiceNameFont->elided(text, availw);
width = st::msgServiceNameFont->width(text); width = st::msgServiceNameFont->width(text);
@@ -1865,7 +1865,6 @@ void Message::paintFromName(
} else { } else {
st::dialogsPremiumIcon.icon.paint(p, x, y, width(), color); st::dialogsPremiumIcon.icon.paint(p, x, y, width(), color);
} }
availableWidth -= statusWidth;
} }
p.setFont(st::msgNameFont); p.setFont(st::msgNameFont);
p.setPen(nameFg); p.setPen(nameFg);
@@ -3297,7 +3296,6 @@ bool Message::getStateFromName(
outResult->link = _fromNameStatus->link; outResult->link = _fromNameStatus->link;
return true; return true;
} }
availableWidth -= statusWidth;
} }
if (point.x() >= availableLeft if (point.x() >= availableLeft
&& point.x() < availableLeft + availableWidth && point.x() < availableLeft + availableWidth
@@ -3307,12 +3305,22 @@ bool Message::getStateFromName(
_fromLinkRipplePointSet = 1; _fromLinkRipplePointSet = 1;
return true; return true;
} }
const auto skipWidth = nameText->maxWidth()
+ (_fromNameStatus
? (st::dialogsPremiumIcon.icon.width()
+ st::msgServiceFont->spacew)
: 0)
+ st::msgServiceFont->spacew;
availableLeft += skipWidth;
availableWidth -= skipWidth;
auto via = item->Get<HistoryMessageVia>(); auto via = item->Get<HistoryMessageVia>();
if (via if (via
&& !displayForwardedFrom() && !displayForwardedFrom()
&& point.x() >= availableLeft + nameText->maxWidth() + st::msgServiceFont->spacew && point.x() >= availableLeft
&& point.x() < availableLeft + availableWidth && point.x() < availableLeft + availableWidth
&& point.x() < availableLeft + nameText->maxWidth() + st::msgServiceFont->spacew + via->width) { && point.x() < availableLeft + via->width) {
outResult->link = via->link; outResult->link = via->link;
recordLinkRipplePoint(point, trect.topLeft()); recordLinkRipplePoint(point, trect.topLeft());
return true; return true;