[UnigramDev/Unigram/temp](https://github.com/UnigramDev/Unigram/tree/temp) • [9b6feb4](https://github.com/UnigramDev/Unigram/commit/9b6feb4f27c627e4f453f3ef148a115d451ea322) • _1 files, +3/-39_
Reuse UpdateMessageTopic from UpdateContent

The MessageHeaderMessageTopic branch was a verbatim copy of it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

[UnigramDev/Unigram/temp](https://github.com/UnigramDev/Unigram/tree/temp) • [8282849](https://github.com/UnigramDev/Unigram/commit/828284963cbc6111bfde15975159591867b57b7e) • _2 files, +23/-0_
Recycle service message containers

Only MessageSelector was recycled, so a service message leaving the viewport
went back on the queue still holding its view model and its text inlines.

Also gives the per-content subclasses a place to reset the state they set,
which the shared templates need.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

[UnigramDev/Unigram/temp](https://github.com/UnigramDev/Unigram/tree/temp) • [3bd2fe4](https://github.com/UnigramDev/Unigram/commit/3bd2fe467e7fdb622176b086d5bc87ec92a9aa6d) • _1 files, +16/-0_
Fix stale publisher chip on recycled gift messages

MessageGift, MessageGiftedPremium, MessageGiftedStars and MessagePremiumGiftCode
share one template, but only the first one touches the publisher border, so a
recycled container kept showing the previous message's publisher.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

[UnigramDev/Unigram/temp](https://github.com/UnigramDev/Unigram/tree/temp) • [551580a](https://github.com/UnigramDev/Unigram/commit/551580a5c69e1f9628566e94c2714789517bafeb) • _1 files, +7/-9_
Start a selection only on a direct hit

ResolvePosition resolves a point to the nearest selectable, clamping when the
pointer is past the end of a line, below the last block or beside a cell. A drag
needs that clamp, but a press was taking it too: pressing on media resolved to a
neighbouring caption, and the capture that follows moved the whole pointer
sequence to the selection root. Nothing else saw it, so a drag out of
PhotoContent never began.

The press now requires ResolvePosition to report a direct hit. Drags still clamp,
so extending a selection past the end of a line is unchanged.

The multi-tap branch tested the same flag to keep gap presses out of the tap
sequence, which the anchor now guarantees.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

[UnigramDev/Unigram/temp](https://github.com/UnigramDev/Unigram/tree/temp) • [34ab631](https://github.com/UnigramDev/Unigram/commit/34ab631eeb3296666730de6470474f62480d24eb) • _1 files, +24/-6_
Fix null dereferences in service message text

- a gift purchase offer in a chat that isn't a user
- a stopped poll event whose message isn't a poll
- a refunded suggested post whose replied-to message has no post info
- an empty task list on a checklist update

All of them dereferenced without checking; they now fall back to no text.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

[UnigramDev/Unigram/temp](https://github.com/UnigramDev/Unigram/tree/temp) • [ab2e714](https://github.com/UnigramDev/Unigram/commit/ab2e7145ec3134d05784c24e429f6e004b84a942) • _1 files, +18/-13_
Guard the entity offset in the suggested photo action

The bold entity was placed at the index of {0} in the format string, with no
check: a translation without the placeholder gave a negative offset.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

[#unigram](?q=%23unigram)