Kaynağa Gözat

[GTK3] Priority and rendering fixes

Nikita Tsukanov 8 yıl önce
ebeveyn
işleme
6514723fb7
1 değiştirilmiş dosya ile 11 ekleme ve 11 silme
  1. 11 11
      src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs

+ 11 - 11
src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs

@@ -54,11 +54,6 @@ namespace Avalonia.Gtk3
             Connect<Native.D.signal_generic>("destroy", OnDestroy);
             Native.GtkWidgetRealize(gtkWidget);
             _lastSize = ClientSize;
-            GlibTimeout.Add(0, 16, () =>
-            {
-                Invalidate(default(Rect));
-                return true;
-            });
             if (Gtk3Platform.UseDeferredRendering)
             {
                 Native.GtkWidgetSetDoubleBuffered(gtkWidget, false);
@@ -138,7 +133,7 @@ namespace Avalonia.Gtk3
                         ? RawMouseEventType.LeftButtonDown
                         : evnt->button == 3 ? RawMouseEventType.RightButtonDown : RawMouseEventType.MiddleButtonDown,
                 new Point(evnt->x, evnt->y), GetModifierKeys(evnt->state));
-            Input?.Invoke(e);
+            OnInput(e);
             return true;
         }
 
@@ -166,7 +161,7 @@ namespace Avalonia.Gtk3
                 _inputRoot,
                 RawMouseEventType.Move,
                 position, GetModifierKeys(evnt->state));
-            Input(e);
+            OnInput(e);
             
             return true;
         }
@@ -195,7 +190,7 @@ namespace Avalonia.Gtk3
             }
             var e = new RawMouseWheelEventArgs(Gtk3Platform.Mouse, evnt->time, _inputRoot,
                 new Point(evnt->x, evnt->y), delta, GetModifierKeys(evnt->state));
-            Input(e);
+            OnInput(e);
             return true;
         }
 
@@ -210,7 +205,7 @@ namespace Avalonia.Gtk3
                 evnt->time,
                 evnt->type == GdkEventType.KeyPress ? RawKeyEventType.KeyDown : RawKeyEventType.KeyUp,
                 Avalonia.Gtk.Common.KeyTransform.ConvertKey((GdkKey)evnt->keyval), GetModifierKeys((GdkModifierType)evnt->state));
-            Input(e);
+            OnInput(e);
             return true;
         }
 
@@ -218,7 +213,7 @@ namespace Avalonia.Gtk3
         {
             var evnt = (GdkEventCrossing*) pev;
             var position = new Point(evnt->x, evnt->y);
-            Input(new RawMouseEventArgs(Gtk3Platform.Mouse,
+            OnInput(new RawMouseEventArgs(Gtk3Platform.Mouse,
                 evnt->time,
                 _inputRoot,
                 RawMouseEventType.Move,
@@ -228,7 +223,7 @@ namespace Avalonia.Gtk3
 
         private unsafe bool OnCommit(IntPtr gtkwidget, IntPtr utf8string, IntPtr userdata)
         {
-            Input(new RawTextInputEventArgs(Gtk3Platform.Keyboard, _lastKbdEvent, Utf8Buffer.StringFromPtr(utf8string)));
+            OnInput(new RawTextInputEventArgs(Gtk3Platform.Keyboard, _lastKbdEvent, Utf8Buffer.StringFromPtr(utf8string)));
             return true;
         }
 
@@ -338,6 +333,11 @@ namespace Avalonia.Gtk3
 
         public void SetInputRoot(IInputRoot inputRoot) => _inputRoot = inputRoot;
 
+        void OnInput(RawInputEventArgs args)
+        {
+            Dispatcher.UIThread.InvokeAsync(() => Input?.Invoke(args), DispatcherPriority.Input);
+        }
+
         public Point PointToClient(Point point)
         {
             int x, y;