🔌 New pull request Unigram#3406 Pass the projected sender vector to VideoChatAliasesPopup
by: @FrayxRulez
Reported by crash telemetry on 12.10.1.
ArgumentException: The parameter is incorrect. (0x80070057)
at WinRT.ExceptionHelpers.<ThrowExceptionForHR>g__Throw|41_0(Int32)
at ABI.Windows.UI.Xaml.Controls.IItemsControlMethods.set_ItemsSource(IObjectReference, Object)
at Telegram.Views.Calls.Popups.VideoChatAliasesPopup..ctor(IClientService, Chat, Boolean, IList`1)
at Telegram.Services.Calls.VoipGroupCall.<RejoinAsync>d__97.MoveNext()
at Telegram.Views.Calls.GroupCallWindow.<<Menu_ContextRequested>b__60_0>d.MoveNext()
## Cause
VideoChatAliasesPopup assigns its senders argument straight to ScrollingHost.ItemsSource.
Two of the three call sites hand it MessageSenders.Senders - the projected vector, a real WinRT
object. RejoinAsync is the odd one out: it calls .ToArray() first, so XAML is handed a managed
MessageSender[].
A managed array does not survive that boundary under CsWinRT. ItemsSource takes an
IInspectable and XAML queries it for a collection interface it recognises; the wrapper CsWinRT
builds for an array exposes none, so the setter returns E_INVALIDARG. The same shape is
reported upstream for arrays assigned to ItemsSource under AOT
(microsoft/CsWinRT#1798). It worked on .NET Native, which projected arrays as IVector<T>.
## Fix
Pass available.Senders - the vector the awaited call just returned, which is also what
_availableAliases was set to a line earlier - instead of copying it into an array. That makes
the third call site identical to the other two.
Two other places still assign an array literal to ItemsSource, EmojiSkinFlyout and
`GiftPopup`; neither shows up in telemetry, so I have left them alone rather than change working
code on the strength of this one report.
Not built or run.
Reply to this message to post a comment on GitHub.
27 August 2026
🔌 New pull request Unigram#3407 Translate two more wrong-thread and three more no-interface messages
by: @FrayxRulez
Five system sentences 12.10.1 reports arrive with that TranslateText does not know, so each
of them lands in its own group instead of joining the English one.
RPC_E_WRONG_THREAD - the code itself is already translated, but the originating description
Windows puts on the second line is not:
- Turkish: Uygulama, farklı bir iş parçacığı için sıraya konan bir arabirimi çağırdı.
- Danish: Programmet kaldte en grænseflade, der var arrangeret for en anden tråd.
E_NOINTERFACE - the message of an InvalidCastException is never rebuilt from the HRESULT, so
the sentence is all there is to match on:
- French: Cette interface n’est pas prise en charge
- Spanish: Interfaz no compatible
- Portuguese: Não há suporte para esta interface
Each is mapped onto the English wording the same failure already produces in the existing
groups - "The application called an interface that was marshalled for a different thread." and
"No such interface supported" - not onto a translation of my own.
Not built or run.
Reply to this message to post a comment on GitHub.
🔌 New pull request Unigram#3408 Skip the auto-download limit bind-back when there is no view model
by: @FrayxRulez
Reported by crash telemetry on 12.10.1.
NullReferenceException: Object reference not set to an instance of an object.
at Telegram.Views.Settings.Popups.SettingsDataAutoView.ConvertLimitBack(Double)
at ABI.Windows.UI.Xaml.DependencyPropertyChangedCallback.Do_Abi_Invoke(IntPtr, IntPtr, IntPtr)
## Cause
The size slider is bound Mode=TwoWay, BindBack=ConvertLimitBack, so XAML calls the method for
every change of Value - including the ones that happen while the view is being torn down. The
only dereference in it is the last line, ViewModel.Limit = size, and ViewModel is
DataContext as SettingsDataAutoViewModel: once the DataContext is cleared it is null and the
write throws. The exception comes out of a DependencyPropertyChangedCallback, which the app has
no chance to handle.
## Fix
Return early when there is no view model. A write-back with nothing to write to has nothing to do.
Not built or run.
Reply to this message to post a comment on GitHub.
💬 New comment on Unigram#3408 Skip the auto-download limit bind-back when there is no view model
by @FrayxRulez
Closing this: it stops the crash without fixing what causes it, and the cause turns out not to be ours.
Following the chain back from the NRE:
ConvertLimitBack fires with a null ViewModel because the page never assigned the control's
DataContext. That assignment is one statement inside the generated
SettingsDataAndStoragePage_obj1_Bindings.Update_ViewModel, below
Update_ViewModel_IsDownloadFolderEnabled, in a method with no try/catch - so when that call
throws, the three `SettingsDataAutoView`s never get a view model, and because a null source means
no target writes at all, the Grid around the slider keeps its markup default instead of the
Collapsed its IsLimitSupported binding would have given it. The slider is on screen, bound to
nothing, and dragging it throws.
The call above it is the other 12.10.1 group, and its stowed record says where the failure really
starts:
Stowed HRESULT 0x80070057 on thread 0
RuntimeBroker.exe: combase … RPCRT4 … combase
The parameter is incorrect.
at ABI.Windows.UI.Xaml.Controls.Primitives.IToggleButtonMethods.set_IsChecked(IObjectReference, Nullable`1)
at SettingsDataAndStoragePage_obj1_Bindings.Update_ViewModel_IsDownloadFolderEnabled(Boolean, Int32)
E_INVALIDARG raised in RuntimeBroker and marshalled back over RPC, which XAML surfaces as E_FAIL
out of set_IsChecked on a SettingsRadioButton that Update_ViewModel_HasDownloadFolder
realized through x:Load a moment earlier. Nothing on that path is app code, and neither is the
generated Update_ViewModel that strands the assignments below it.
So the guard would only convert "crash when you drag the slider" into "the auto-download section
silently shows unchecked boxes and an inert slider", and hide the group that still points at the
real failure. Better to leave the report intact.
What is worth considering separately, and is ours: the page hands its three sub-vie
id 1057176757Ссылка
The addition of a Rich Text Editor and Communities significantly bridges the gap between Unigram and the mobile experience. Will these updates improve synchronization across devices, and are there plans to implement more advanced formatting options for power users in future builds?
🔌 New pull request Unigram#3409 Fix a crash when a MoreButton is disabled
by: @FrayxRulez
System.Runtime.InteropServices.COMException (0x800F1000): No installed components were detected. Cannot resolve TargetName ContentPresenter.
Reported by crash telemetry on 12.10.1.0 (X64).
0 CTimeline::ResolveLocalTarget animation\timeline.cpp:549
2 CAnimation::OnBegin animation\animation.cpp:529
3 CStoryboard::BeginPrivate animation\storyboard.cpp:502
4 VisualStateManagerActuator::AttemptStartStoryboard
5 VisualStateManagerActuator::ChangeVisualState
7 CVisualStateManager::GoToState elements\visualstatemanager.cpp:82
12 DirectUI::Control::GoToState control_partial.cpp:1134
13 DirectUI::Button::ChangeVisualState button_partial.cpp:39
14 DirectUI::Control::UpdateVisualState control_partial.cpp:849
15 DirectUI::ButtonBase::OnApplyTemplate buttonbase_partial.cpp:886
20 CFrameworkElement::InvokeApplyTemplate elements\framework.cpp:1289
25 CGrid::MeasureOverride elements\grid.cpp:1184
33 Telegram.Controls.HeaderedControlPanel.MeasureOverride HeaderedControl.cs:254
60 Telegram.Controls.HeaderedControl.MeasureOverride HeaderedControl.cs:146
69 Telegram.Controls.SettingsPanel.MeasureOverride SettingsPanel.cs:41
The log tail ends on Navigate: Telegram.Views.Chats.ChatInviteLinksPage, 240 ms before the crash — the page's first layout pass.
## Cause
MoreButton`'s template in `Themes/Generic.xaml has no element named ContentPresenter — only RootGrid (a Border) and Icon (an AnimatedIcon). Its Disabled visual state nevertheless drives a storyboard at Storyboard.TargetName="ContentPresenter", left over from the SettingsButton template it was derived from, which does have that part.
ButtonBase::OnApplyTemplate calls UpdateVisualState, so the first state change happens as soon as the template is applied. When IsEnabled
MAKHLWFWhy don't you work locally and push directly I don't think the current way is efficient
Because it's Claude to do this
🔨 7 new commits to Unigram:develop:
668d6d2: Move downloads logic to DownloadFolderService by Fela
d9d72de: Use Logger.TickCount in charts by Fela
5696da9: Record that a shared Backdrop acrylic falls back across islands by Fela
7dfc573: State that every Win32 window is on the main thread by Fela
051857b: Split range operations out of DiffObservableCollection by Fela
d0d35ee: Make HasMoreItems part of the incremental loading contract by Fela
3d96c87: Remove LegacyIncrementalCollection by Fela
Hello.
I noticed another place that still has some accessibility issues. NVDA does not correctly read the description of Telegram Premium features. Go to Settings > Telegram Premium. NVDA reads something like "Telegram.Td.Api.PremiumFeatureVoiceRecognition".
The description is there if we use a review cursor or something similar, but NVDA cannot access these directly, just like all other similar Telegram.TD.* bugs.