When subscribed to many active chats, the list reorders too quickly,
causing misclicks. Freeze the visual order while the mouse is over the
chat list and replay deferred reorderings when the mouse leaves or
after 5 seconds of inactivity.
Fixes#1504.
Instead of reading all sticker sets synchronously in crl::on_main,
chain each read step via crl::on_main so that paint events can be
processed between heavy file reads. This moves first paint from
~2807ms to ~1294ms by allowing the UI to render before sticker
loading completes.
Replace the expensive file copy in Logs::instanceChecked() with an
atomic rename. The old code copied log_startX.txt to log.txt then
deleted the original, which took ~83ms of synchronous I/O. A simple
rename on the same filesystem is nearly instant (~0.3ms).
Iv::ShowButton() and LocationPicker::Available() each called
Webview::Availability() separately (~200ms each on Linux). Replace
the per-caller static caches with a single shared cache in
Core::CachedWebviewAvailability(), reducing startup from two
~200ms calls to one.
Replace base::flat_map (sorted vector with O(n) insertion) with
std::unordered_map for CustomEmojiManager::_instances and std::map
for EmojiListWidget::_customEmoji. These maps accumulate ~8000
entries during startup with unsorted keys, causing O(n²) total
insertion cost. This change reduces refreshCustom() from ~3s to
~50ms (57x speedup).
Enables the desktop share audio flow on Linux within Calls UI and plumbing.
- calls_call: add withAudio parameter to toggleScreenSharing, track
_screenWithAudio flag, create/destroy SystemAudioCapture when sharing
starts with audio, and clean it up in destroyController.
- calls_panel / calls_group_panel: use LoopbackAudioCaptureSupported()
to report audio support on all platforms; show a GenericBox with audio
toggle when a unique desktop capture source is available (PipeWire),
then start sharing with the chosen audio setting.
Depends on desktop-app/lib_webrtc#22
Closes#26642