Browse Source

[GTK3] Use lower priority for timers created by Signal()

Nikita Tsukanov 8 năm trước cách đây
mục cha
commit
fe6e8a4d2b

+ 1 - 1
src/Gtk/Avalonia.Gtk3/Gtk3Platform.cs

@@ -77,7 +77,7 @@ namespace Avalonia.Gtk3
                 if (!_signaled)
                 {
                     _signaled = true;
-                    GlibTimeout.Add(0, () =>
+                    GlibTimeout.Add(100, 0, () =>
                     {
                         lock (_lock)
                         {

+ 6 - 0
src/Gtk/Avalonia.Gtk3/Interop/GlibTimeout.cs

@@ -35,6 +35,12 @@ namespace Avalonia.Gtk3.Interop
             var handle = GCHandle.Alloc(callback);
             Native.GTimeoutAdd(interval, PinnedHandler, GCHandle.ToIntPtr(handle));
         }
+        
+        public static void Add(int priority, uint interval, Func<bool> callback)
+        {
+            var handle = GCHandle.Alloc(callback);
+            Native.GTimeoutAddFull(priority, interval, PinnedHandler, GCHandle.ToIntPtr(handle), IntPtr.Zero);
+        }
 
         class Timer : IDisposable
         {

+ 3 - 0
src/Gtk/Avalonia.Gtk3/Interop/Native.cs

@@ -241,6 +241,8 @@ namespace Avalonia.Gtk3.Interop
             [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Glib)]
             public delegate ulong g_timeout_add(uint interval, timeout_callback callback, IntPtr data);
             [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Glib)]
+            public delegate ulong g_timeout_add_full(int prio, uint interval, timeout_callback callback, IntPtr data, IntPtr destroy);
+            [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Glib)]
             public delegate ulong g_free(IntPtr data);
             [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Glib)]
             public unsafe delegate void g_slist_free(GSList* data);
@@ -302,6 +304,7 @@ namespace Avalonia.Gtk3.Interop
         public static D.g_signal_connect_object GSignalConnectObject;
         public static D.g_signal_handler_disconnect GSignalHandlerDisconnect;
         public static D.g_timeout_add GTimeoutAdd;
+        public static D.g_timeout_add_full GTimeoutAddFull;
         public static D.g_free GFree;
         public static D.g_slist_free GSlistFree;
         public static D.g_memory_input_stream_new_from_data GMemoryInputStreamNewFromData;