From 02759079971fa7aaa5e60cb23355f54fb56c1b5e Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 16 Jan 2019 22:02:31 +0300 Subject: [PATCH] [X11] Handle Expose events using dispatcher with Render priority --- src/Avalonia.X11/X11Window.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.X11/X11Window.cs b/src/Avalonia.X11/X11Window.cs index 70d90d7b95..306897f20a 100644 --- a/src/Avalonia.X11/X11Window.cs +++ b/src/Avalonia.X11/X11Window.cs @@ -25,6 +25,7 @@ namespace Avalonia.X11 private bool _invalidated; private XConfigureEvent? _configure; private Point? _configurePoint; + private bool _triggeredExpose; private IInputRoot _inputRoot; private readonly IMouseDevice _mouse; private readonly IKeyboardDevice _keyboard; @@ -244,7 +245,17 @@ namespace Avalonia.X11 else if (ev.type == XEventName.UnmapNotify) _mapped = false; else if (ev.type == XEventName.Expose) - DoPaint(); + { + if (!_triggeredExpose) + { + _triggeredExpose = true; + Dispatcher.UIThread.Post(() => + { + _triggeredExpose = false; + DoPaint(); + }, DispatcherPriority.Render); + } + } else if (ev.type == XEventName.FocusIn) { if (ActivateTransientChildIfNeeded())