From 078dd94c3083fcebbfdd4173d382335fe7d8e202 Mon Sep 17 00:00:00 2001 From: Dmitry Kalyanov Date: Mon, 3 Aug 2009 22:40:26 +0400 Subject: [PATCH] Glib: Fixed native-to-proxy for opaque wrappers; fixed typo defmethod boxed-native-to-proxy ((type g-boxed-opaque-wrapper-info) native --- glib/gobject.boxed.lisp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/glib/gobject.boxed.lisp b/glib/gobject.boxed.lisp index 32a3aad..bc1a817 100644 --- a/glib/gobject.boxed.lisp +++ b/glib/gobject.boxed.lisp @@ -124,14 +124,18 @@ (defmethod boxed-proxy-to-native ((type g-boxed-opaque-wrapper-info) proxy) (g-boxed-copy (g-boxed-info-g-type type) (g-boxed-opaque-pointer proxy))) +(defun make-boxed-free-finalizer (g-type pointer) + (lambda () (g-boxed-free g-type pointer))) + (defmethod boxed-native-to-proxy ((type g-boxed-opaque-wrapper-info) native) - (let ((g-type (g-boxed-info-g-type type))) - (flet ((finalizer () (g-boxed-free g-type native))) - (let ((proxy (make-instance (g-boxed-info-name type) :pointer native))) - (tg:finalize proxy #'finalizer))))) + (let* ((g-type (g-boxed-info-g-type type)) + (proxy (make-instance (g-boxed-info-name type) :pointer native))) + (tg:finalize proxy (make-boxed-free-finalizer g-type native)))) (defmethod boxed-read-values-from-native ((type g-boxed-opaque-wrapper-info) proxy native) - (declare (ignore type proxy native))) + (g-boxed-free (g-boxed-info-g-type type) (g-boxed-opaque-pointer proxy)) + (tg:cancel-finalization proxy) + (tg:finalize proxy (make-boxed-free-finalizer (g-boxed-info-g-type type) native))) (defmethod boxed-write-values-to-native-and-free ((type g-boxed-opaque-wrapper-info) proxy native) (declare (ignore type native)) @@ -404,7 +408,7 @@ (native (if (boxed-native-to-proxy-needs-copy-for-gvalue-get boxed-type) (g-boxed-copy type-numeric (g-value-get-boxed gvalue-ptr)) (g-value-get-boxed gvalue-ptr)))) - (create-proxy-for-native boxed-type native)))) + (boxed-native-to-proxy boxed-type native)))) (defmethod set-gvalue-for-type (gvalue-ptr (type-numeric (eql +g-type-boxed+)) value) (if (g-type= (g-value-type gvalue-ptr) (g-strv-get-type)) -- 1.7.10.4