X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=glib%2Fgobject.signals.lisp;h=99d77e54e1055a0c683052b2104c0148c8326925;hb=7bca05f5d857c03b74eafd7c0c85495dfe3330ff;hp=667f0d9e960ae16cf1924c90a7c9d38f2e0d2156;hpb=e6ec5def79916d6ecf3b1ea9aaecbbc295fdad95;p=cl-gtk2.git diff --git a/glib/gobject.signals.lisp b/glib/gobject.signals.lisp index 667f0d9..99d77e5 100644 --- a/glib/gobject.signals.lisp +++ b/glib/gobject.signals.lisp @@ -1,5 +1,7 @@ (in-package :gobject) +;;; Signal handler closures + (defcstruct lisp-signal-handler-closure (:parent-instance g-closure) (:object :pointer) @@ -68,8 +70,8 @@ (let ((id (find-free-signal-handler-id object)) (handlers (g-object-signal-handlers object))) (if id - (setf (aref handlers id) handler) - (vector-push-extend handler handlers)))) + (progn (setf (aref handlers id) handler) id) + (progn (vector-push-extend handler handlers) (1- (length handlers)))))) (defun retrieve-handler-from-object (object handler-id) (aref (g-object-signal-handlers object) handler-id)) @@ -117,7 +119,7 @@ If @code{after} is true, then the function will be called after the default hand (for type in (signal-info-param-types signal-info)) (set-g-value (mem-aref params 'g-value (1+ i)) arg type :zero-g-value t)) (prog1 - (if (g-type= (signal-info-return-type signal-info) +g-type-void+) + (if (eq (signal-info-return-type signal-info) (gtype +g-type-void+)) (g-signal-emitv params (signal-info-id signal-info) signal-name (null-pointer)) (with-foreign-object (return-value 'g-value) (g-value-zero return-value) @@ -126,3 +128,7 @@ If @code{after} is true, then the function will be called after the default hand (g-value-unset return-value)))) (iter (for i from 0 below (1+ params-count)) (g-value-unset (mem-aref params 'g-value i)))))))) + +(defcfun (disconnect-signal "g_signal_handler_disconnect") :void + (object g-object) + (handler-id :ulong))