diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Gtk/Internal.dcl | 4 | ||||
-rw-r--r-- | src/Gtk/Internal.icl | 12 | ||||
-rw-r--r-- | src/Gtk/Signal.icl | 9 | ||||
-rw-r--r-- | src/clean_gtk_support.c | 9 |
4 files changed, 15 insertions, 19 deletions
diff --git a/src/Gtk/Internal.dcl b/src/Gtk/Internal.dcl index 4e4fc96..cff9cbf 100644 --- a/src/Gtk/Internal.dcl +++ b/src/Gtk/Internal.dcl @@ -10,8 +10,8 @@ g_object_unref :: !Pointer !.a -> .a g_signal_connect :: !Int !Pointer !String !Int !.a -> .a -g_timeout_add :: !Int !Int !.a -> .a -g_timeout_add_seconds :: !Int !Int !.a -> .a +g_timeout_add :: !Int !Pointer !Int !.a -> .a +g_timeout_add_seconds :: !Int !Pointer !Int !.a -> .a gtk_accel_group_new :: !.a -> (!Pointer, !.a) diff --git a/src/Gtk/Internal.icl b/src/Gtk/Internal.icl index 987ae85..c76f01a 100644 --- a/src/Gtk/Internal.icl +++ b/src/Gtk/Internal.icl @@ -26,14 +26,14 @@ where ccall clean_g_signal_connect "IpsI:V:A" } -g_timeout_add :: !Int !Int !.a -> .a -g_timeout_add interval id env = code { - ccall clean_g_timeout_add "II:V:A" +g_timeout_add :: !Int !Pointer !Int !.a -> .a +g_timeout_add interval address id env = code { + ccall g_timeout_add "IpI:V:A" } -g_timeout_add_seconds :: !Int !Int !.a -> .a -g_timeout_add_seconds interval id env = code { - ccall clean_g_timeout_add_seconds "II:V:A" +g_timeout_add_seconds :: !Int !Pointer !Int !.a -> .a +g_timeout_add_seconds interval address id env = code { + ccall g_timeout_add_seconds "IpI:V:A" } gtk_accel_group_new :: !.a -> (!Pointer, !.a) diff --git a/src/Gtk/Signal.icl b/src/Gtk/Signal.icl index 94d6ecd..3ed3bca 100644 --- a/src/Gtk/Signal.icl +++ b/src/Gtk/Signal.icl @@ -132,8 +132,8 @@ addTimeout interval callback = , timeout_counter = id }) >>= \{timeout_counter=id} -> case interval of - Milliseconds ms -> toState (g_timeout_add ms id) - Seconds s -> toState (g_timeout_add_seconds s id) + Milliseconds ms -> toState (g_timeout_add ms get_handleTimeout_address id) + Seconds s -> toState (g_timeout_add_seconds s get_handleTimeout_address id) where wrapped_callback id = callback >>= \r -> @@ -142,6 +142,11 @@ where (modState \st -> {st & timeouts='Data.Map'.del id st.timeouts}) >>| pure r + get_handleTimeout_address :: Pointer + get_handleTimeout_address = code { + pushLc handleTimeout + } + foreign export handleTimeout handleTimeout :: !Int -> Int handleTimeout id diff --git a/src/clean_gtk_support.c b/src/clean_gtk_support.c index c6f6db1..7106b57 100644 --- a/src/clean_gtk_support.c +++ b/src/clean_gtk_support.c @@ -3,7 +3,6 @@ typedef long CleanInt; extern CleanInt handleSignal (CleanInt,CleanInt*); -extern CleanInt handleTimeout (CleanInt); static void clean_g_signal_handler_void (GtkWidget *target,gpointer data) { CleanInt args[2]; @@ -53,11 +52,3 @@ void clean_g_signal_connect (int type,GtkWidget *widget,char *signal,CleanInt id g_signal_connect (widget,signal,G_CALLBACK (callback),(gpointer)id); } - -void clean_g_timeout_add (CleanInt interval,CleanInt id) { - g_timeout_add (interval,G_SOURCE_FUNC (handleTimeout),(gpointer)id); -} - -void clean_g_timeout_add_seconds (CleanInt interval,CleanInt id) { - g_timeout_add_seconds (interval,G_SOURCE_FUNC (handleTimeout),(gpointer)id); -} |