Browse Source

[X11] Handle Expose events using dispatcher with Render priority

pull/2011/head
Nikita Tsukanov 8 years ago
parent
commit
0275907997
  1. 13
      src/Avalonia.X11/X11Window.cs

13
src/Avalonia.X11/X11Window.cs

@ -25,6 +25,7 @@ namespace Avalonia.X11
private bool _invalidated; private bool _invalidated;
private XConfigureEvent? _configure; private XConfigureEvent? _configure;
private Point? _configurePoint; private Point? _configurePoint;
private bool _triggeredExpose;
private IInputRoot _inputRoot; private IInputRoot _inputRoot;
private readonly IMouseDevice _mouse; private readonly IMouseDevice _mouse;
private readonly IKeyboardDevice _keyboard; private readonly IKeyboardDevice _keyboard;
@ -244,7 +245,17 @@ namespace Avalonia.X11
else if (ev.type == XEventName.UnmapNotify) else if (ev.type == XEventName.UnmapNotify)
_mapped = false; _mapped = false;
else if (ev.type == XEventName.Expose) 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) else if (ev.type == XEventName.FocusIn)
{ {
if (ActivateTransientChildIfNeeded()) if (ActivateTransientChildIfNeeded())

Loading…
Cancel
Save