AvaloniaUI / AvaloniaEdit

Avalonia-based text editor (port of AvalonEdit)
MIT License
746 stars 148 forks source link

AvaloniaEdit 11.0.0 - Mac OSX bug - after editing text #350

Closed alexandrehtrb closed 1 year ago

alexandrehtrb commented 1 year ago

My TextEditor`s Document is binded with the ViewModel like this:

[Reactive]
    public TextDocument? RequestRawContentTextDocument { get; set; }

    public string? RequestRawContent
    {
        get => RequestRawContentTextDocument?.Text;
        set => RequestRawContentTextDocument = new(value ?? string.Empty);
    }

The TextEditor has the following text, that I edit by backspacing and reinserting the }}, characters:

{
  "id": {{MyIdSecret}},
  "nome": "Alexandre"
}

When accessing the property, the app crashes

admin@DNY067 Pororoca.Desktop % dotnet run
2023-07-07 09:18:12.273 Pororoca.Desktop[72902:2699023] +[CATransaction synchronize] called within transaction
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
   at AvaloniaEdit.Editing.TextArea.TextAreaTextInputMethodClient.get_Selection()
   at Avalonia.Native.AvaloniaNativeTextInputMethod.OnSurroundingTextChanged(Object sender, EventArgs e) in /_/src/Avalonia.Native/AvaloniaNativeTextInputMethod.cs:line 100
   at Avalonia.Input.TextInput.TextInputMethodClient.RaiseSurroundingTextChanged() in /_/src/Avalonia.Base/Input/TextInput/TextInputMethodClient.cs:line 75
   at AvaloniaEdit.Editing.TextArea.TextAreaTextInputMethodClient.SetTextArea(TextArea textArea)
   at AvaloniaEdit.Editing.TextArea.OnLostFocus(RoutedEventArgs e)
   at Avalonia.Reactive.LightweightObservableBase`1.PublishNext(T value) in /_/src/Avalonia.Base/Reactive/LightweightObservableBase.cs:line 149
   at Avalonia.Interactivity.EventRoute.RaiseEventImpl(RoutedEventArgs e) in /_/src/Avalonia.Base/Interactivity/EventRoute.cs:line 118
   at Avalonia.Interactivity.EventRoute.RaiseEvent(Interactive source, RoutedEventArgs e) in /_/src/Avalonia.Base/Interactivity/EventRoute.cs:line 79
   at Avalonia.Interactivity.Interactive.RaiseEvent(RoutedEventArgs e) in /_/src/Avalonia.Base/Interactivity/Interactive.cs:line 126
   at Avalonia.Input.KeyboardDevice.SetFocusedElement(IInputElement element, NavigationMethod method, KeyModifiers keyModifiers) in /_/src/Avalonia.Base/Input/KeyboardDevice.cs:line 152
   at Avalonia.Input.FocusManager.SetFocusedElement(IFocusScope scope, IInputElement element, NavigationMethod method, KeyModifiers keyModifiers) in /_/src/Avalonia.Base/Input/FocusManager.cs:line 145
   at Avalonia.Input.FocusManager.Focus(IInputElement control, NavigationMethod method, KeyModifiers keyModifiers) in /_/src/Avalonia.Base/Input/FocusManager.cs:line 69
   at Avalonia.Input.InputElement.Focus(NavigationMethod method, KeyModifiers keyModifiers) in /_/src/Avalonia.Base/Input/InputElement.cs:line 503
   at Avalonia.Input.FocusManager.OnPreviewPointerPressed(Object sender, RoutedEventArgs e) in /_/src/Avalonia.Base/Input/FocusManager.cs:line 264
   at Avalonia.Reactive.LightweightObservableBase`1.PublishNext(T value) in /_/src/Avalonia.Base/Reactive/LightweightObservableBase.cs:line 149
   at Avalonia.Interactivity.EventRoute.RaiseEventImpl(RoutedEventArgs e) in /_/src/Avalonia.Base/Interactivity/EventRoute.cs:line 118
   at Avalonia.Interactivity.EventRoute.RaiseEvent(Interactive source, RoutedEventArgs e) in /_/src/Avalonia.Base/Interactivity/EventRoute.cs:line 79
   at Avalonia.Interactivity.Interactive.RaiseEvent(RoutedEventArgs e) in /_/src/Avalonia.Base/Interactivity/Interactive.cs:line 126
   at Avalonia.Input.MouseDevice.MouseDown(IMouseDevice device, UInt64 timestamp, IInputElement root, Point p, PointerPointProperties properties, KeyModifiers inputModifiers, IInputElement hitTest) in /_/src/Avalonia.Base/Input/MouseDevice.cs:line 152
   at Avalonia.Input.MouseDevice.ProcessRawEvent(RawPointerEventArgs e) in /_/src/Avalonia.Base/Input/MouseDevice.cs:line 58
   at Avalonia.Input.InputManager.ProcessInput(RawInputEventArgs e) in /_/src/Avalonia.Base/Input/InputManager.cs:line 37
   at Avalonia.Controls.TopLevel.HandleInput(RawInputEventArgs e) in /_/src/Avalonia.Controls/TopLevel.cs:line 749
   at Avalonia.Native.WindowBaseImpl.RawMouseEvent(AvnRawMouseEventType type, UInt64 timeStamp, AvnInputModifiers modifiers, AvnPoint point, AvnVector delta) in /_/src/Avalonia.Native/WindowImplBase.cs:line 379
   at Avalonia.Native.Interop.Impl.__MicroComIAvnWindowBaseEventsVTable.RawMouseEvent(Void* this, AvnRawMouseEventType type, UInt64 timeStamp, AvnInputModifiers modifiers, AvnPoint point, AvnVector delta) in /_/src/Avalonia.Native/Interop.Generated.cs:line 4290
--- End of stack trace from previous location ---
   at Avalonia.Native.DispatcherImpl.RunLoop(CancellationToken token) in /_/src/Avalonia.Native/DispatcherImpl.cs:line 113
   at Avalonia.Threading.DispatcherFrame.Run(IControlledDispatcherImpl impl) in /_/src/Avalonia.Base/Threading/DispatcherFrame.cs:line 117
   at Avalonia.Threading.Dispatcher.PushFrame(DispatcherFrame frame) in /_/src/Avalonia.Base/Threading/Dispatcher.MainLoop.cs:line 53
   at Avalonia.Threading.Dispatcher.MainLoop(CancellationToken cancellationToken) in /_/src/Avalonia.Base/Threading/Dispatcher.MainLoop.cs:line 80
   at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(String[] args) in /_/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs:line 127
   at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime(AppBuilder builder, String[] args, ShutdownMode shutdownMode) in /_/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs:line 220
   at Pororoca.Desktop.Program.Main(String[] args) in /Users/admin/Downloads/Pororoca-develop/src/Pororoca.Desktop/Program.cs:line 17

Bug detected only on Mac OSX, does not happen on Windows nor Linux

danipen commented 1 year ago

@Gillibald It seems something related to the IME.

Gillibald commented 1 year ago

Y there is a null check missing when focus gets lost

chenjing1294 commented 1 year ago

Command+F also causes this error

danipen commented 1 year ago

@Gillibald are you planning taking a look into this one?

bastuijnman commented 1 year ago

I was experiencing the same issue, which was fixed with https://github.com/AvaloniaUI/AvaloniaEdit/commit/1a2a644661957d38e1d14f48d58e726a7aa29d9f (validated the fix by running a variant of the package based on the master branch).

Not sure when a 11.0.1 version is planned to be released?

danipen commented 1 year ago

@Takoooooo is possible you to build a new nuget?

Takoooooo commented 1 year ago

@danipen Done https://github.com/AvaloniaUI/AvaloniaEdit/releases/tag/11.0.1