Skip to content

Conversation

@jl0pd
Copy link
Contributor

@jl0pd jl0pd commented Sep 24, 2025

Our application have several popups, one of which is shown when mouse is over member. Lifetime of all popups in controlled manually and CompletionWindowBase.Hide() is called when selection is changed. Hiding popup results in following exception:

AvaloniaEdit.Rendering.VisualLinesInvalidException: Exception of type 'AvaloniaEdit.Rendering.VisualLinesInvalidException' was thrown.
   at AvaloniaEdit.Rendering.TextView.get_VisualLines()
   at AvaloniaEdit.Rendering.BackgroundGeometryBuilder.GetRectsForSegmentImpl(TextView textView, ISegment segment, Boolean extendToFullWidthAtLineEnd)+MoveNext()
   at AvaloniaEdit.Rendering.BackgroundGeometryBuilder.AddSegment(TextView textView, ISegment segment)
   at AvaloniaEdit.Editing.SelectionLayer.Render(DrawingContext drawingContext)
   at Avalonia.Rendering.Composition.CompositingRenderer.UpdateCore()
   at Avalonia.Rendering.Composition.CompositingRenderer.Update()
   at Avalonia.Rendering.Composition.Compositor.CommitCore()
   at Avalonia.Rendering.Composition.Compositor.Commit()
   at Avalonia.Media.MediaContext.CommitCompositor(Compositor compositor)
   at Avalonia.Media.MediaContext.SyncCommit(Compositor compositor, Boolean waitFullRender, Boolean catchExceptions)
   at Avalonia.Media.MediaContext.SyncDisposeCompositionTarget(CompositionTarget compositionTarget)
   at Avalonia.Rendering.Composition.CompositingRenderer.Dispose()
   at Avalonia.Controls.TopLevel.HandleClosed()
   at Avalonia.Controls.WindowBase.HandleClosed()
   at Avalonia.Win32.WindowImpl.AppWndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam)
   at Avalonia.Win32.PopupImpl.WndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam)
   at Avalonia.Win32.WindowImpl.WndProcMessageHandler(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam)
   at Avalonia.Win32.Interop.UnmanagedMethods.DestroyWindow(IntPtr hwnd)
   at Avalonia.Win32.Interop.UnmanagedMethods.DestroyWindow(IntPtr hwnd)
   at Avalonia.Win32.WindowImpl.Dispose()
   at Avalonia.Controls.Primitives.PopupRoot.Dispose()
   at Avalonia.Controls.Primitives.Popup.<>c.<Open>b__101_8(ValueTuple`2 state)
   at Avalonia.Reactive.Disposable.AnonymousDisposable`1.Dispose()
   at Avalonia.Controls.Primitives.Popup.PopupOpenState.Dispose()
   at Avalonia.Controls.Primitives.Popup.CloseCore()
   at Avalonia.Controls.Primitives.Popup.Close()
   at OurApp.EditorView.CloseAllWindows()
   at OurApp.EditorView.<.ctor>b__7_0(Object _, EventArgs _)
   at AvaloniaEdit.Editing.TextArea.set_Selection(Selection value)
   at AvaloniaEdit.Editing.SelectionMouseHandler.ExtendSelectionToMouse(PointerEventArgs e)
   at AvaloniaEdit.Editing.SelectionMouseHandler.TextArea_MouseMove(Object sender, PointerEventArgs e)
   at Avalonia.Interactivity.EventRoute.RaiseEventImpl(RoutedEventArgs e)
   at Avalonia.Interactivity.Interactive.RaiseEvent(RoutedEventArgs e)
   at Avalonia.Input.MouseDevice.ProcessRawEvent(RawPointerEventArgs e)
   at Avalonia.Threading.Dispatcher.Send(SendOrPostCallback action, Object arg, Nullable`1 priority)
   at Avalonia.Controls.TopLevel.HandleInput(RawInputEventArgs e)
   at Avalonia.Win32.WindowImpl.AppWndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam)
   at Avalonia.Win32.WindowImpl.WndProcMessageHandler(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam)
   at Avalonia.Win32.Interop.UnmanagedMethods.DispatchMessage(MSG& lpmsg)
   at Avalonia.Win32.Interop.UnmanagedMethods.DispatchMessage(MSG& lpmsg)
   at Avalonia.Win32.Win32DispatcherImpl.RunLoop(CancellationToken cancellationToken)
   at Avalonia.Threading.DispatcherFrame.Run(IControlledDispatcherImpl impl)
   at Avalonia.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at Avalonia.Threading.Dispatcher.MainLoop(CancellationToken cancellationToken)
   at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.StartCore(String[] args)
   at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(String[] args)
   at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime(AppBuilder builder, String[] args, Action`1 lifetimeBuilder)
   at OurApp.Program.Main(String[] args)

I was unable to reproduce same error on sample project

@maxkatz6
Copy link
Member

This issue was fixed on Avalonia side
AvaloniaUI/Avalonia#17784
AvaloniaUI/Avalonia#18119

Root of the problem was extra render call during window disposal.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants