X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/clg/blobdiff_plain/e7225d0fbfd6ba01fc0a5125af1ab7b4f84bbe61..afa01e1b95c480818761b9e337ff08da44e9d49f:/glib/gcallback.lisp diff --git a/glib/gcallback.lisp b/glib/gcallback.lisp index 2ee583f..7e3ccd2 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.36 2006-07-14 10:51:07 espen Exp $ +;; $Id: gcallback.lisp,v 1.38 2006-09-12 14:00:59 espen Exp $ (in-package "GLIB") @@ -119,7 +119,7 @@ (defbinding source-remove () boolean (tag unsigned-int)) (define-callback source-callback-marshal nil ((callback-id unsigned-int)) - (callback-trampoline callback-id 0 nil)) + (callback-trampoline #'invoke-callback callback-id 0 nil)) (defbinding (timeout-add "g_timeout_add_full") (interval function &optional (priority +priority-default+)) unsigned-int @@ -360,11 +360,21 @@ (defbinding signal-handler-is-connected-p () boolean (instance ginstance) (handler-id unsigned-long)) -(defbinding (callback-closure-new "clg_callback_closure_new") () gclosure +(defbinding (closure-new "g_cclosure_new") () gclosure + ((make-pointer #xFFFFFFFF) pointer) (callback-id unsigned-int) - (callback callback) (destroy-notify callback)) +(defbinding closure-set-meta-marshal () nil + (gclosure gclosure) + (callback-id unsigned-int) + (callback callback)) + +(defun callback-closure-new (callback-id callback destroy-notify) + (let ((gclosure (closure-new callback-id destroy-notify))) + (closure-set-meta-marshal gclosure callback-id callback) + gclosure)) + (defun make-callback-closure (function marshaller) (let ((callback-id (register-callback-function function))) (values