Typo.
[cl-gtk2.git] / glib / glib.glist.lisp
index 22ea6bc..686e9d0 100644 (file)
@@ -16,6 +16,7 @@
   (data :pointer)
   (next :pointer)
   (prev :pointer))
+(defctype g-list (:struct g-list))
 
 (defcfun g-list-first (:pointer g-list) (list (:pointer g-list)))
 
@@ -50,6 +51,9 @@
 (defcstruct g-slist
   (data :pointer)
   (next :pointer))
+(defctype g-slist (:struct g-slist))
+
+(defcfun g-slist-alloc (:pointer g-slist))
 
 (defcfun g-slist-free :void (list (:pointer g-slist)))
 
             (until (null-pointer-p c))
             (collect (convert-from-foreign (foreign-slot-value c 'g-slist 'data) (gslist-type-type type))))
     (when (gslist-type-free-from-foreign type)
-      (g-slist-free pointer))))
\ No newline at end of file
+      (g-slist-free pointer))))
+
+(defmethod translate-to-foreign (list (type gslist-type))
+  (let ((result (null-pointer)) last)
+    (iter (for item in list)
+          (for n = (g-slist-alloc))
+          (for ptr = (convert-to-foreign item (gslist-type-type type)))
+          (setf (foreign-slot-value n 'g-slist 'data) ptr)
+          (setf (foreign-slot-value n 'g-slist 'next) (null-pointer))
+          (when last
+            (setf (foreign-slot-value last 'g-slist 'next) n))
+          (setf last n)
+          (when (first-iteration-p)
+            (setf result n)))
+    result))
+