;; 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.30 2006/02/19 19:31:14 espen Exp $
+;; $Id: gcallback.lisp,v 1.33 2006/03/02 21:13:01 espen Exp $
(in-package "GLIB")
;;;; Callback invokation
+(deftype gclosure () 'pointer)
+(register-type 'gclosure '|g_closure_get_type|)
+
(defun register-callback-function (function)
(check-type function (or null symbol function))
(register-user-data function))
(define-callback signal-emission-hook nil
((invocation-hint pointer) (n-params unsigned-int) (param-values pointer)
(callback-id unsigned-int))
+ (declare (ignore invocation-hint))
(callback-trampoline callback-id n-params param-values))
(defun callback-trampoline (callback-id n-params param-values &optional
(instance ginstance)
(handler-id unsigned-int))
-(deftype gclosure () 'pointer)
-(register-type 'gclosure '|g_closure_get_type|)
-
(defbinding (callback-closure-new "clg_callback_closure_new") () gclosure
(callback-id unsigned-int)
(callback callback)
(:first `((callback-id unsigned-int) ,@(mapcar #'list names types)))
(:last `(,@(mapcar #'list names types) (callback-id unsigned-int))))
(declare (ignore ,@ignore))
- (invoke-callback callback-id ',return-type ,@params))))
+ (invoke-callback callback-id ',return-type ,@(nreverse params)))))
(defmacro with-callback-function ((id function) &body body)
`(let ((,id (register-callback-function ,function)))