Typo.
[cl-gtk2.git] / glib / gobject.signals.lisp
index 667f0d9..3d6925d 100644 (file)
@@ -1,9 +1,12 @@
 (in-package :gobject)
 
+;;; Signal handler closures
+
 (defcstruct lisp-signal-handler-closure
   (:parent-instance g-closure)
   (:object :pointer)
   (:function-id :int))
+(defctype lisp-signal-handler-closure (:struct lisp-signal-handler-closure))
 
 (defun finalize-lisp-signal-handler-closure (closure)
   (let* ((function-id (foreign-slot-value closure 'lisp-signal-handler-closure :function-id))
@@ -68,8 +71,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 +120,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 +129,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))