Renamed to export.lisp
[clg] / glib / gobject.lisp
index 1611fda..15bf369 100644 (file)
@@ -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")
 
     ()
     (: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
 
 ;   (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)
               (%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)))))))
 
 (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
           #'(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
          (push slot-def expanded-slots))))
     
     `(progn
-       (defclass ,class (,super)
+       (defclass ,class ,supers
         ,expanded-slots
         (:metaclass ,metaclass)
         (:alien-name ,(find-type-name type-number))))))