X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/clg/blobdiff_plain/a905f5d98e5623f6a6be5508600427d33c780b07..ae9c3069aeba7f2aaa942a2556a27bf34c0e8eaa:/gtk/gtkobject.lisp diff --git a/gtk/gtkobject.lisp b/gtk/gtkobject.lisp index 7705de9..beee47b 100644 --- a/gtk/gtkobject.lisp +++ b/gtk/gtkobject.lisp @@ -1,5 +1,5 @@ ;; Common Lisp bindings for GTK+ v2.0 -;; Copyright (C) 1999-2000 Espen S. Johnsen +;; Copyright (C) 1999-2000 Espen S. Johnsen ;; ;; This library is free software; you can redistribute it and/or ;; modify it under the terms of the GNU Lesser General Public @@ -15,11 +15,17 @@ ;; License along with this library; if not, write to the Free Software ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -;; $Id: gtkobject.lisp,v 1.5 2000/08/23 21:41:10 espen Exp $ +;; $Id: gtkobject.lisp,v 1.7 2000/11/09 20:30:16 espen Exp $ (in-package "GTK") + +;;;; Initializing + +(setf (alien-type-name 'pointer) "gpointer") + + ;;;; Misc utils (defun name-to-string (name) @@ -165,61 +171,6 @@ (defun (setf object-arg) (value object name) value) -;;;; Callback mechanism - -(defun register-callback-function (function) - (check-type function (or null symbol function)) - ; We treat callbacks just as ordinary user data - (register-user-data function)) - -(defun callback-trampoline (callback-id nargs arg-array) - (declare (fixnum callback-id nargs)) - (let* ((return-arg (unless (null-pointer-p arg-array) - (arg-array-ref arg-array nargs))) - (return-type (if return-arg - (type-from-number (arg-type return-arg)) - nil)) - (args nil) - (callback-function (find-user-data callback-id))) - - (dotimes (n nargs) - (push (arg-value (arg-array-ref arg-array (- nargs n 1))) args)) - - (labels ((invoke-callback () - (restart-case - (unwind-protect - (let ((return-value (apply callback-function args))) - (when return-type - (setf (return-arg-value return-arg) return-value)))) - - (continue nil :report "Return from callback function" - (when return-type - (format - *query-io* - "Enter return value of type ~S: " - return-type) - (force-output *query-io*) - (setf - (return-arg-value return-arg) - (eval (read *query-io*))))) - (re-invoke nil :report "Re-invoke callback function" - (invoke-callback))))) - (invoke-callback)))) - -(defvar *callback-marshal* (system:foreign-symbol-address "callback_marshal")) -(setq *destroy-marshal* (system:foreign-symbol-address "destroy_marshal")) - -(defun after-gc-hook () - (setf - (extern-alien "callback_trampoline" system-area-pointer) - (make-pointer (kernel:get-lisp-obj-address #'callback-trampoline)) - (extern-alien "destroy_user_data" system-area-pointer) - (make-pointer (kernel:get-lisp-obj-address #'destroy-user-data)))) - -(pushnew 'after-gc-hook ext:*after-gc-hooks*) -(after-gc-hook) - - ;;;; Main loop, timeouts and idle functions @@ -278,56 +229,6 @@ (setq lisp::*max-event-to-usec* 1000) -;;;; Signals - -(define-foreign %signal-emit-stop () nil - (object object) - (signal-id unsigned-int)) - -(define-foreign %signal-emit-stop-by-name (object signal) nil - (object object) - ((name-to-string signal) string)) - -(defun signal-emit-stop (object signal) - (if (numberp signal) - (%signal-emit-stop object signal) - (%signal-emit-stop-by-name object signal))) - -(define-foreign %signal-connect-full - (object signal function after) unsigned-int - (object object) - ((name-to-string signal) string) - (0 unsigned-long) - (*callback-marshal* pointer) - ((register-callback-function function) unsigned-long) - (*destroy-marshal* pointer) - (nil boolean) - (after boolean)) - -(defun signal-connect (object signal function - &key after ((:object callback-object))) - (let* ((callback-object (if (eq callback-object t) - object - callback-object)) - (callback-function - (if callback-object - #'(lambda (&rest args) (apply function callback-object args)) - function))) - (%signal-connect-full object signal callback-function after))) - -(define-foreign signal-disconnect () nil - (object object) - (handler unsigned-int)) - -(define-foreign signal-handler-block () nil - (object object) - (handler unsigned-int)) - -(define-foreign signal-handler-unblock () nil - (object object) - (handler unsigned-int)) - - ;;;; Metaclass used for subclasses of object (eval-when (:compile-toplevel :load-toplevel :execute)