X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/clg/blobdiff_plain/383653f5b4c1bb2065e109aade5250ed8a46a1f4..fc3589457c02c8fdc76b36bf427684bfffe32ebf:/glib/gobject.lisp diff --git a/glib/gobject.lisp b/glib/gobject.lisp index 1611fda..15bf369 100644 --- a/glib/gobject.lisp +++ b/glib/gobject.lisp @@ -15,7 +15,7 @@ ;; 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: gobject.lisp,v 1.9 2001/10/21 21:52:53 espen Exp $ +;; $Id: gobject.lisp,v 1.12 2002/04/02 14:57:19 espen Exp $ (in-package "GLIB") @@ -25,24 +25,33 @@ (defclass gobject (ginstance) () (:metaclass ginstance-class) (:alien-name "GObject") - (:ref "g_object_ref") - (:unref "g_object_unref"))) + (:copy %object-ref) + (:free %object-unref))) (defmethod initialize-instance ((object gobject) &rest initargs) (declare (ignore initargs)) - (setf - (slot-value object 'location) - (%gobject-new (type-number-of object))) -; (funcall (proxy-class-copy (class-of object)) nil (proxy-location object)) - (call-next-method) -; (funcall (proxy-class-free (class-of object)) nil (proxy-location object)) - ) + (setf (slot-value object 'location) (%gobject-new (type-number-of object))) + (call-next-method)) (defbinding (%gobject-new "g_object_new") () pointer (type type-number) (nil null)) +(defbinding %object-ref (type location) pointer + (location pointer)) + +(defbinding %object-unref (type location) nil + (location pointer)) + + +(defun object-ref (object) + (%object-ref nil (proxy-location object))) + +(defun object-unref (object) + (%object-unref nil (proxy-location object))) + + ;;;; Property stuff @@ -113,6 +122,8 @@ (defclass effective-gobject-slot-definition ; (class pointer) ; (name string)) +(defun signal-name-to-string (name) + (substitute #\_ #\- (string-downcase (string name)))) (defmethod initialize-instance :after ((slotd direct-gobject-slot-definition) &rest initargs &key pname) @@ -145,17 +156,17 @@ (defmethod compute-virtual-slot-accessors (%object-get-property object pname gvalue) (unwind-protect (funcall - (intern-reader-function type) gvalue +gvalue-value-offset+) + (intern-reader-function (type-from-number type-number)) gvalue +gvalue-value-offset+) ; temporary workaround for wrong topological sorting of types (gvalue-free gvalue t))))) #'(lambda (value object) (with-gc-disabled (let ((gvalue (gvalue-new type-number))) (funcall - (intern-writer-function type) + (intern-writer-function (type-from-number type-number)) ; temporary value gvalue +gvalue-value-offset+) (%object-set-property object pname gvalue) (funcall - (intern-destroy-function type) + (intern-destroy-function (type-from-number type-number)) ; temporary gvalue +gvalue-value-offset+) (gvalue-free gvalue nil) value))))))) @@ -201,7 +212,7 @@ (defun default-slot-accessor (class-name slot-name type) (defun expand-gobject-type (type-number &optional options (metaclass 'gobject-class)) - (let* ((super (supertype type-number)) + (let* ((supers (cons (supertype type-number) (implements type-number))) (class (type-from-number type-number)) (override-slots (getf options :slots)) (expanded-slots @@ -209,9 +220,9 @@ (defun expand-gobject-type (type-number &optional options #'(lambda (param) (with-slots (name flags value-type documentation) param (let* ((slot-name (default-slot-name name)) - (slot-type (type-from-number value-type #|t|#)) + (slot-type value-type) ;(type-from-number value-type t)) (accessor - (default-slot-accessor class slot-name slot-type))) + (default-slot-accessor class slot-name (type-from-number slot-type)))) ; temporary workaround for wrong topological sorting of types `(,slot-name :allocation :property :pname ,name @@ -251,7 +262,7 @@ (default-slot-accessor class slot-name slot-type))) (push slot-def expanded-slots)))) `(progn - (defclass ,class (,super) + (defclass ,class ,supers ,expanded-slots (:metaclass ,metaclass) (:alien-name ,(find-type-name type-number))))))