Added timeouts
authorDmitry Kalyanov <Kalyanov.Dmitry@gmail.com>
Fri, 28 Aug 2009 22:04:22 +0000 (02:04 +0400)
committerDmitry Kalyanov <Kalyanov.Dmitry@gmail.com>
Fri, 28 Aug 2009 22:07:15 +0000 (02:07 +0400)
glib/glib.lisp
gtk/gtk.misc.lisp
gtk/gtk.package.lisp

index 29cd6e4..df8af72 100644 (file)
@@ -23,7 +23,9 @@
            #:+g-priority-default-idle+
            #:+g-priority-low+
            #:g-idle-add-full
-           #:g-idle-add)
+           #:g-idle-add
+           #:g-timeout-add-full
+           #:g-source-remove)
   (:documentation
    "Cl-gtk2-glib is wrapper for @a[http://library.gnome.org/devel/glib/]{GLib}."))
 
index fbfaa77..1dfa2cb 100644 (file)
 
 (export 'call-from-gtk-main-loop)
 
+(defcallback call-timeout-from-main-loop-callback :boolean
+    ((data :pointer))
+  (restart-case
+      (progn (funcall (get-stable-pointer-value data)))
+    (return-from-callback () nil)))
+
+(defun gtk-main-add-timeout (milliseconds function &key (priority +g-priority-default+))
+  (g-timeout-add-full priority milliseconds
+                      (callback call-timeout-from-main-loop-callback)
+                      (allocate-stable-pointer function)
+                      (callback stable-pointer-free-destroy-notify-callback)))
+
+(export 'gtk-main-add-timeout)
+
 (defmacro within-main-loop (&body body)
   `(call-from-gtk-main-loop (lambda () ,@body)))
 
index f67b460..cd4ee40 100644 (file)
@@ -20,7 +20,8 @@
            #:tree-node-insert-at
            #:tree-node-remove-at
            #:tree-node-child-at
-           #:tree-lisp-store-add-column))
+           #:tree-lisp-store-add-column
+           #:gtk-main-add-timeout))
 
 (defpackage :gtk-examples
   (:use :cl :gtk :gdk :gobject)