[UnigramDev/Unigram/temp](https://github.com/UnigramDev/Unigram/tree/temp) • [1f8ad8a](https://github.com/UnigramDev/Unigram/commit/1f8ad8a40d09f5407dafc7ef5f86ee0abd83ae52) • _5 files, +123/-84_
Move the chat background service message into its own control

Covers the event log counterpart too, which shares the template.

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

[UnigramDev/Unigram/temp](https://github.com/UnigramDev/Unigram/tree/temp) • [bbce8fa](https://github.com/UnigramDev/Unigram/commit/bbce8fa8de328fc55673147575331c8cae44d3e6) • _6 files, +205/-165_
Move the photo service message into its own control

Chat photo, suggested profile photo and story mention share one template; the
story-opening click moves with them, so ChatView no longer reaches into the
template by name to find the segments to animate from.

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

[UnigramDev/Unigram/temp](https://github.com/UnigramDev/Unigram/tree/temp) • [a8e0f54](https://github.com/UnigramDev/Unigram/commit/a8e0f54118af2eae258b92466b8d81caaf8401f9) • _8 files, +80/-145_
Move the unsupported message into its own control

Unsupported messages have been rendered by the service template for a while, so
the old Content&#092;UnsupportedContent control was only still reachable through the
bubble content factory. Its update check, the one part still in use, moves with
the template.

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

[UnigramDev/Unigram/temp](https://github.com/UnigramDev/Unigram/tree/temp) • [9c0ff6d](https://github.com/UnigramDev/Unigram/commit/9c0ff6ddc4108340101a90f046e5d286c833eed9) • _10 files, +342/-243_
Move the header service messages into their own controls

The account info and message topic headers were the last two contents
UpdateContent knew about, so the base implementation is now empty and
MessageService no longer reaches into a template it doesn't own.

UpdateServiceWithForumTopic dropped its action parameter with them: it existed
to call UpdateMessageTopic, which is now the header control's own method.

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

[UnigramDev/Unigram/temp](https://github.com/UnigramDev/Unigram/tree/temp) • [03f7b19](https://github.com/UnigramDev/Unigram/commit/03f7b19b6a71e145be5f56d07184e5e2b392643f) • _1 files, +38/-7_
Allow a selection to start from the bubble surface

Requiring a direct hit kept media drags working but took the gap with it: a press
in the padding beside the text, which ResolvePosition clamps to the nearest
block, no longer began a selection.

The press is now filtered by what it landed on rather than by whether the
position was clamped. Walking up from the pressed element to the root, a
selectable starts a gesture, any other IContent refuses it, and reaching the root
without crossing either means the press was on the bubble itself. Testing the
root by identity would not do: a press on the bubble background reports whichever
template element carries the brush, never the root the manager was attached to.

The multi-tap branch tests the clamp again, since clamped presses can begin a
gesture once more and a click beside the text should not turn the next one into a
word selection.

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

[UnigramDev/Unigram/temp](https://github.com/UnigramDev/Unigram/tree/temp) • [13b0aa2](https://github.com/UnigramDev/Unigram/commit/13b0aa22f8f369c376e9f6bdc76a37b67677c2d5) • _1 files, +1/-1_
Update TDLib

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