X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=glib%2Fgobject.signals.lisp;h=69354517e87e0a96ce604e64a9610f0326af925c;hb=b7d91ee8fe18086134b55f3ec1423d97cb42a050;hp=667f0d9e960ae16cf1924c90a7c9d38f2e0d2156;hpb=81dbd7c557f4b03ccac07490255471ad7ddfa4e5;p=cl-gtk2.git diff --git a/glib/gobject.signals.lisp b/glib/gobject.signals.lisp index 667f0d9..6935451 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)) @@ -126,3 +128,9 @@ 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)) + +(export 'disconnect-signal)