anchor.diff:  ;; 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.25 2004-12-28 20:29:05 espen Exp $
  +;; $Id: gobject.lisp,v 1.26 2004-12-29 21:07:46 espen Exp $
   
   (in-package "GLIB")
   
  
positive.code: 
  ;;;; User data
  
  (defun (setf object-data) (data object key &key (test #'eq))
    (%object-set-qdata-full
     object (quark-from-object key :test test)
     (register-user-data data) (callback %destroy-user-data))
    data)
  
  (defbinding %object-get-qdata () unsigned-long
    (object gobject)		 
    (id quark))
  
  (defun object-data (object key &key (test #'eq))
    (find-user-data
     (%object-get-qdata object (quark-from-object key :test test))))
  
  
  ;;;;
  
negative.code: (defmethod direct-slot-definition-class ((class gobject-class) &rest initargs)
    (case (getf initargs :allocation)
      (:property (find-class 'direct-property-slot-definition))
      (:user-data (find-class 'direct-user-data-slot-definition))
      (t (call-next-method))))
  
  (defmethod effective-slot-definition-class ((class gobject-class) &rest initargs)
    (case (getf initargs :allocation)
      (:property (find-class 'effective-property-slot-definition))
      (:user-data (find-class 'effective-user-data-slot-definition))
      (t (call-next-method))))
  
  (defmethod compute-effective-slot-definition-initargs ((class gobject-class) direct-slotds)
  