[telegramdesktop/tdesktop/public-canary](https://github.com/telegramdesktop/tdesktop/tree/public-canary) • [12682e6](https://github.com/telegramdesktop/tdesktop/commit/12682e643763c2b357feaa549dd4348c62232962) • _1 files, +4/-2_
[ai] Reconcile only the groups the run selected

[telegramdesktop/tdesktop/public-canary](https://github.com/telegramdesktop/tdesktop/tree/public-canary) • [51ac1a6](https://github.com/telegramdesktop/tdesktop/commit/51ac1a6b307b2d5517cc239d3dd4a58e8e4f0b43) • _1 files, +7/-2_
Fixed abort scheduling TTL with a wrong system clock.

The interval was computed from two int32 timestamps, so a wrapped or
stale unixtime::now() - which is what the OS correcting a badly wrong
clock produces - overflowed it negative, and base::Timer aborts on that.

[telegramdesktop/tdesktop/public-canary](https://github.com/telegramdesktop/tdesktop/tree/public-canary) • [fa86363](https://github.com/telegramdesktop/tdesktop/commit/fa863635b451df5c6a24fb3a1fc5f12d40520487) • _2 files, +59/-28_
Fixed stale last message after a topic switch.

The reply fields decide topicRootId(), so setReplyFields() can move an
item to another topic. History::itemRemoved() later notifies only the
current topic(), leaving the old one holding a raw pointer to an item it
would never hear about again.

Also stop publishing item data changes from inside createComponents():
notifying about an item that new HistoryItem() has not finished building
lets a listener re-enter and reach it half-constructed.

[telegramdesktop/tdesktop/public-canary](https://github.com/telegramdesktop/tdesktop/tree/public-canary) • [61be1b5](https://github.com/telegramdesktop/tdesktop/commit/61be1b5672ba0ec50aa755482cd314d29b12f735) • _1 files, +1/-1_
Fixed crash showing a popup menu destroyed inside show().

[telegramdesktop/tdesktop/public-canary](https://github.com/telegramdesktop/tdesktop/tree/public-canary) • [5efbf50](https://github.com/telegramdesktop/tdesktop/commit/5efbf50a213143dc44802fba107e890da6d35b85) • _3 files, +15/-2_
Reset palette icon copies through their own palette.

[telegramdesktop/tdesktop/public-canary](https://github.com/telegramdesktop/tdesktop/tree/public-canary) • [d0b86c6](https://github.com/telegramdesktop/tdesktop/commit/d0b86c639a783251088d632b6425b4601bffb693) • _2 files, +2/-2_
Update Qt patches to guard windows destroyed mid-event.

[telegramdesktop/tdesktop/public-canary](https://github.com/telegramdesktop/tdesktop/tree/public-canary) • [9959fd7](https://github.com/telegramdesktop/tdesktop/commit/9959fd70361e9ed686dfea4c178fffb6fe3cd31b) • _1 files, +14/-3_
Fixed assertion editing a deleted proxy into a duplicate.

replaceItemWith() removed the edited row from the settings list without
restoring it first, so doing that to a row already marked deleted - which
is not in that list at all - failed the Assert. Its sibling
replaceItemValue() has restored first all along.

_list is also a vector, so erasing the edited item shifts everything
after it and left the iterator for the duplicate naming a different item
- or one past the end when the duplicate was last. Read its id and
deleted flag before the erase; everything after it works by id anyway.

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