Refactoring of gobject:define-vtable
[cl-gtk2.git] / glib / gobject.gvalue.lisp
index 78fcfbe..f7922fa 100644 (file)
                     `(t ,@forms)
                     `((equalp ,key ,value) ,@forms)))))))
 
-(defgeneric parse-g-value-for-type (gvalue-ptr type-numeric))
+(defgeneric parse-g-value-for-type (gvalue-ptr type-numeric parse-kind))
 
-(defmethod parse-g-value-for-type (gvalue-ptr type-numeric)
-  (if (= type-numeric (g-type-numeric (g-type-fundamental type-numeric)))
+(defmethod parse-g-value-for-type (gvalue-ptr type-numeric parse-kind)
+  (if (g-type= type-numeric (g-type-fundamental type-numeric))
       (call-next-method)
-      (parse-g-value-for-type gvalue-ptr (g-type-numeric (g-type-fundamental type-numeric)))))
+      (parse-g-value-for-type gvalue-ptr (g-type-numeric (g-type-fundamental type-numeric)) parse-kind)))
 
-(defun parse-g-value (gvalue)
+(defun parse-g-value (gvalue &key (parse-kind :get-property))
   "Parses the GValue structure and returns the corresponding Lisp object.
 
 @arg[value]{a C pointer to the GValue structure}
       (+g-type-float+ (g-value-get-float gvalue))
       (+g-type-double+ (g-value-get-double gvalue))
       (+g-type-string+ (g-value-get-string gvalue))
-      (t (parse-g-value-for-type gvalue type)))))
+      (t (parse-g-value-for-type gvalue type parse-kind)))))
 
-(defmethod parse-g-value-for-type (gvalue-ptr (type-numeric (eql +g-type-pointer+)))
+(defmethod parse-g-value-for-type (gvalue-ptr (type-numeric (eql +g-type-pointer+)) parse-kind)
+  (declare (ignore parse-kind))
   (g-value-get-pointer gvalue-ptr))
 
-(defmethod parse-g-value-for-type (gvalue-ptr (type-numeric (eql +g-type-param+)))
+(defmethod parse-g-value-for-type (gvalue-ptr (type-numeric (eql +g-type-param+)) parse-kind)
+  (declare (ignore parse-kind))
   (parse-g-param-spec (g-value-get-param gvalue-ptr)))
 
 (defgeneric set-gvalue-for-type (gvalue-ptr type-numeric value))
 
 (defmethod set-gvalue-for-type (gvalue-ptr type-numeric value)
-  (if (= type-numeric (g-type-numeric (g-type-fundamental type-numeric)))
+  (if (g-type= type-numeric (g-type-fundamental type-numeric))
       (call-next-method)
       (set-gvalue-for-type gvalue-ptr (g-type-numeric (g-type-fundamental type-numeric)) value)))
 
   (g-value-set-pointer gvalue-ptr value))
 
 (defmethod set-gvalue-for-type (gvalue-ptr (type-numeric (eql +g-type-param+)) value)
+  (declare (ignore gvalue-ptr value))
   (error "Setting of GParam is not implemented"))
 
 ;;Enums