From e69e261866aaac26d68697d2b36e1783be232c1c Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Mon, 20 Aug 2007 11:15:13 +0000 Subject: [PATCH] New type USER-CALLBACK and a bug fix Organization: Straylight/Edgeware From: espen --- glib/gcallback.lisp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/glib/gcallback.lisp b/glib/gcallback.lisp index 9e2c8fc..329bb60 100644 --- a/glib/gcallback.lisp +++ b/glib/gcallback.lisp @@ -20,7 +20,7 @@ ;; 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.45 2007-06-25 13:49:05 espen Exp $ +;; $Id: gcallback.lisp,v 1.46 2007-08-20 11:15:13 espen Exp $ (in-package "GLIB") @@ -36,6 +36,17 @@ (defun register-callback-function (function) (check-type function (or null symbol function)) (register-user-data function)) +(deftype user-callback () '(or function symbol)) + +(define-type-method alien-type ((type user-callback)) + (declare (ignore type)) + (alien-type 'pointer-data)) + +(define-type-method to-alien-form ((type user-callback) func &optional copy-p) + (declare (ignore type copy-p)) + `(register-callback-function ,func)) + + ;; Callback marshaller for regular signal handlers (define-callback signal-handler-marshal nil ((gclosure gclosure) (return-value gvalue) (n-params unsigned-int) @@ -90,9 +101,9 @@ (defun invoke-signal-handler (callback-id return-type &rest args) (disconnect () :report "Disconnect and exit signal handler" (when (signal-handler-is-connected-p instance handler-id) (signal-handler-disconnect instance handler-id)) - (values nil t)))) + (values nil t))) (when (signal-handler-is-connected-p instance handler-id) - (signal-handler-unblock instance handler-id)))) + (signal-handler-unblock instance handler-id))))) (defun invoke-callback (callback-id return-type &rest args) (restart-case (apply (find-user-data callback-id) args) -- [mdw]