chiark / gitweb /
Bug fix
[clg] / glib / gcallback.lisp
index 2ee583f93c8caca4ccc6d4b8f3a8e2a53def0b3c..7e3ccd23625b3af24512c3e2fb31178663a4ff43 100644 (file)
@@ -20,7 +20,7 @@
 ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-;; $Id: gcallback.lisp,v 1.36 2006-07-14 10:51:07 espen Exp $
+;; $Id: gcallback.lisp,v 1.38 2006-09-12 14:00:59 espen Exp $
 
 (in-package "GLIB")
 
@@ -119,7 +119,7 @@ (defbinding source-remove () boolean
   (tag unsigned-int))
 
 (define-callback source-callback-marshal nil ((callback-id unsigned-int))
-  (callback-trampoline callback-id 0 nil))
+  (callback-trampoline #'invoke-callback callback-id 0 nil))
 
 (defbinding (timeout-add "g_timeout_add_full")
     (interval function &optional (priority +priority-default+)) unsigned-int 
@@ -360,11 +360,21 @@ (defbinding signal-handler-is-connected-p () boolean
   (instance ginstance)
   (handler-id unsigned-long))
 
-(defbinding (callback-closure-new "clg_callback_closure_new") () gclosure
+(defbinding (closure-new "g_cclosure_new") () gclosure
+  ((make-pointer #xFFFFFFFF) pointer)
   (callback-id unsigned-int) 
-  (callback callback)
   (destroy-notify callback))
 
+(defbinding closure-set-meta-marshal () nil
+  (gclosure gclosure)
+  (callback-id unsigned-int)
+  (callback callback))
+
+(defun callback-closure-new (callback-id callback destroy-notify)
+  (let ((gclosure (closure-new callback-id destroy-notify)))
+    (closure-set-meta-marshal gclosure callback-id callback)
+    gclosure))
+
 (defun make-callback-closure (function marshaller)
   (let ((callback-id (register-callback-function function)))
     (values