summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Gtk/Internal.dcl4
-rw-r--r--src/Gtk/Internal.icl12
-rw-r--r--src/Gtk/Signal.icl9
-rw-r--r--src/clean_gtk_support.c9
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);
-}