Typo.
[cl-gtk2.git] / gtk / gtk.text.lisp
index 5c16cdd..c1104ec 100644 (file)
 (defmethod translate-to-foreign (value (type unichar))
   (char-code value))
 
-(define-g-boxed-ref "GtkTextIter" text-iter
-  (:free-function gtk-text-iter-free)
-  (:alloc-function gtk-text-iter-alloc)
-  (:slots (text-iter-buffer :reader "gtk_text_iter_get_buffer" :type (g-object text-buffer))
-          (text-iter-offset :reader "gtk_text_iter_get_offset" :writer "gtk_text_iter_set_offset" :type :int)
-          (text-iter-line :reader "gtk_text_iter_get_line" :writer "gtk_text_iter_set_line" :type :int)
-          (text-iter-line-offset :reader "gtk_text_iter_get_line_offset" :writer "gtk_text_iter_set_line_offset" :type :int)
-          (text-iter-visible-line-offset :reader "gtk_text_iter_get_visible_line_offset" :writer "gtk_text_iter_set_visible_line_offset" :type :int)
-          (text-iter-char :reader "gtk_text_iter_get_char" :type unichar)
-          (text-iter-pixbuf :reader "gtk_text_iter_get_pixbuf" :type (g-object pixbuf))
-          (text-iter-marks :reader "gtk_text_iter_get_marks" :type (gslist (g-object text-mark) :free-from-foreign t))
-          (text-iter-child-anchor :reader "gtk_text_iter_get_child_anchor" :type (g-object text-child-anchor))
-          (text-iter-tags :reader "gtk_text_iter_get_tags" :type (gslist (g-object text-mark) :free-from-foreign t))
-          (text-iter-chars-in-line :reader "gtk_text_iter_get_chars_in_line" :type :int)
-          (text-iter-language :reader "gtk_text_iter_get_language" :type :pointer)
-          (text-iter-is-end :reader "gtk_text_iter_is_end" :type :boolean)
-          (text-iter-is-start :reader "gtk_text_iter_is_start" :type :boolean)
-          (text-iter-can-insert :reader "gtk_text_iter_can_insert" :type :boolean)
-          (text-iter-starts-word :reader "gtk_text_iter_starts_word" :type :boolean)
-          (text-iter-ends-word :reader "gtk_text_iter_ends_word" :type :boolean)
-          (text-iter-inside-word :reader "gtk_text_iter_inside_word" :type :boolean)
-          (text-iter-starts-line :reader "gtk_text_iter_starts_line" :type :boolean)
-          (text-iter-ends-line :reader "gtk_text_iter_ends_line" :type :boolean)
-          (text-iter-starts-sentence :reader "gtk_text_iter_starts_sentence" :type :boolean)
-          (text-iter-ends-sentence :reader "gtk_text_iter_ends_sentence" :type :boolean)
-          (text-iter-inside-sentence :reader "gtk_text_iter_inside_sentence" :type :boolean)
-          (text-iter-is-cursor-position :reader "gtk_text_iter_is_cursor_position" :type :boolean)
-          ))
-(export '(text-iter text-iter-offset text-iter-line text-iter-line-offset text-iter-visible-line-offset text-iter-char text-iter-pixbuf text-iter-marks text-iter-toggled-tags text-iter-child-anchor text-iter-tags text-iter-chars-in-line text-iter-language))
+(at-init () (foreign-funcall "gtk_text_iter_get_type" :int))
+
+(define-g-boxed-opaque text-iter "GtkTextIter"
+  :alloc (gtk-text-iter-alloc))
+
+(define-boxed-opaque-accessor text-iter text-iter-buffer :reader "gtk_text_iter_get_buffer" :type (g-object text-buffer))
+(define-boxed-opaque-accessor text-iter text-iter-offset :reader "gtk_text_iter_get_offset" :writer "gtk_text_iter_set_offset" :type :int)
+(define-boxed-opaque-accessor text-iter text-iter-line :reader "gtk_text_iter_get_line" :writer "gtk_text_iter_set_line" :type :int)
+(define-boxed-opaque-accessor text-iter text-iter-line-offset :reader "gtk_text_iter_get_line_offset" :writer "gtk_text_iter_set_line_offset" :type :int)
+(define-boxed-opaque-accessor text-iter text-iter-visible-line-offset :reader "gtk_text_iter_get_visible_line_offset" :writer "gtk_text_iter_set_visible_line_offset" :type :int)
+(define-boxed-opaque-accessor text-iter text-iter-char :reader "gtk_text_iter_get_char" :type unichar)
+(define-boxed-opaque-accessor text-iter text-iter-pixbuf :reader "gtk_text_iter_get_pixbuf" :type (g-object pixbuf))
+(define-boxed-opaque-accessor text-iter text-iter-marks :reader "gtk_text_iter_get_marks" :type (gslist (g-object text-mark) :free-from-foreign t))
+(define-boxed-opaque-accessor text-iter text-iter-child-anchor :reader "gtk_text_iter_get_child_anchor" :type (g-object text-child-anchor))
+(define-boxed-opaque-accessor text-iter text-iter-tags :reader "gtk_text_iter_get_tags" :type (gslist (g-object text-tag) :free-from-foreign t))
+(define-boxed-opaque-accessor text-iter text-iter-chars-in-line :reader "gtk_text_iter_get_chars_in_line" :type :int)
+(define-boxed-opaque-accessor text-iter text-iter-language :reader "gtk_text_iter_get_language" :type :pointer)
+(define-boxed-opaque-accessor text-iter text-iter-is-end :reader "gtk_text_iter_is_end" :type :boolean)
+(define-boxed-opaque-accessor text-iter text-iter-is-start :reader "gtk_text_iter_is_start" :type :boolean)
+(define-boxed-opaque-accessor text-iter text-iter-starts-word :reader "gtk_text_iter_starts_word" :type :boolean)
+(define-boxed-opaque-accessor text-iter text-iter-ends-word :reader "gtk_text_iter_ends_word" :type :boolean)
+(define-boxed-opaque-accessor text-iter text-iter-inside-word :reader "gtk_text_iter_inside_word" :type :boolean)
+(define-boxed-opaque-accessor text-iter text-iter-starts-line :reader "gtk_text_iter_starts_line" :type :boolean)
+(define-boxed-opaque-accessor text-iter text-iter-ends-line :reader "gtk_text_iter_ends_line" :type :boolean)
+(define-boxed-opaque-accessor text-iter text-iter-starts-sentence :reader "gtk_text_iter_starts_sentence" :type :boolean)
+(define-boxed-opaque-accessor text-iter text-iter-ends-sentence :reader "gtk_text_iter_ends_sentence" :type :boolean)
+(define-boxed-opaque-accessor text-iter text-iter-inside-sentence :reader "gtk_text_iter_inside_sentence" :type :boolean)
+(define-boxed-opaque-accessor text-iter text-iter-is-cursor-position :reader "gtk_text_iter_is_cursor_position" :type :boolean)
+
+(export (boxed-related-symbols 'text-iter))
+(export '(text-iter-buffer text-iter-offset text-iter-line
+          text-iter-line-offset text-iter-visible-line-offset
+          text-iter-char text-iter-pixbuf text-iter-marks
+          text-iter-child-anchor text-iter-tags
+          text-iter-chars-in-line text-iter-language text-iter-is-end
+          text-iter-is-start text-iter-can-insert
+          text-iter-starts-word text-iter-ends-word
+          text-iter-inside-word text-iter-starts-line
+          text-iter-ends-line text-iter-starts-sentence
+          text-iter-ends-sentence text-iter-inside-sentence
+          text-iter-is-cursor-position ))
 
 (defcstruct %text-iter
   (dummy1 :pointer)
   (dummy12 :int)
   (dummy13 :int)
   (dummy14 :pointer))
+(defctype %text-iter (:struct %text-iter))
 
 (defcfun gtk-text-iter-copy :pointer
   (iter :pointer))
 
-(defcfun gtk-text-iter-free :void
-  (iter :pointer))
-
 (defun gtk-text-iter-alloc ()
   (with-foreign-object (iter '%text-iter)
     (gtk-text-iter-copy iter)))
 
-(defcfun (text-iter-slice "gtk_text_iter_get_slice") (:string :free-from-foreign t)
-  (start (g-boxed-ref text-iter))
-  (end (g-boxed-ref text-iter)))
+(defcfun (text-iter-slice "gtk_text_iter_get_slice") (g-string :free-from-foreign t)
+  (start (g-boxed-foreign text-iter))
+  (end (g-boxed-foreign text-iter)))
 
 (export 'text-iter-slice)
 
-(defcfun (text-iter-text "gtk_text_iter_get_text") (:string :free-from-foreign t)
-  (start (g-boxed-ref text-iter))
-  (end (g-boxed-ref text-iter)))
+(defcfun (text-iter-text "gtk_text_iter_get_text") (g-string :free-from-foreign t)
+  (start (g-boxed-foreign text-iter))
+  (end (g-boxed-foreign text-iter)))
 
 (export 'text-iter-text)
 
-(defcfun (text-iter-visible-slice "gtk_text_iter_get_visible_slice") (:string :free-from-foreign t)
-  (start (g-boxed-ref text-iter))
-  (end (g-boxed-ref text-iter)))
+(defcfun (text-iter-visible-slice "gtk_text_iter_get_visible_slice") (g-string :free-from-foreign t)
+  (start (g-boxed-foreign text-iter))
+  (end (g-boxed-foreign text-iter)))
 
 (export 'text-iter-visible-slice)
 
-(defcfun (text-iter-visible-text "gtk_text_iter_get_visible_text") (:string :free-from-foreign t)
-  (start (g-boxed-ref text-iter))
-  (end (g-boxed-ref text-iter)))
+(defcfun (text-iter-visible-text "gtk_text_iter_get_visible_text") (g-string :free-from-foreign t)
+  (start (g-boxed-foreign text-iter))
+  (end (g-boxed-foreign text-iter)))
 
 (export 'text-iter-visible-text)
 
 (defcfun (text-iter-toggled-tags "gtk_text_iter_get_toggled_tags") (gslist (g-object text-tag))
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (toggled-on :boolean))
 
 (export 'text-iter-toggled-tags)
 
 (defcfun (text-iter-begins-tag "gtk_text_iter_begins_tag") :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (tag (g-object text-tag)))
 
 (export 'text-iter-begins-tag)
 
 (defcfun (text-iter-ends-tag "gtk_text_iter_ends_tag") :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (tag (g-object text-tag)))
 
 (export 'text-iter-ends-tag)
 
 (defcfun (text-iter-toggles-tag "gtk_text_iter_toggles_tag") :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (tag (g-object text-tag)))
 
 (export 'text-iter-toggles-tag)
 
 (defcfun (text-iter-has-tag "gtk_text_iter_has_tag") :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (tag (g-object text-tag)))
 
 (export 'text-iter-has-tag)
 
 (defcfun (text-iter-editable "gtk_text_iter_editable") :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (default :boolean))
 
 (export 'text-iter-editable)
 
+(defcfun (text-iter-can-insert "gtk_text_iter_can_insert") :boolean
+  (iter (g-boxed-foreign text-iter))
+  (default-editable :boolean))
+
+(export 'text-iter-can-insert)
+
 (defcfun gtk-text-iter-get-attributes :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (values (g-object text-attributes)))
 
 (defun text-iter-attributes (iter default-attributes)
 (export 'text-iter-attributes)
 
 (defcfun gtk-text-iter-forward-chars :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (count :int))
 
 (defcfun gtk-text-iter-forward-lines :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (count :int))
 
 (defcfun gtk-text-iter-forward-word-ends :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (count :int))
 
 (defcfun gtk-text-iter-backward-word-starts :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (count :int))
 
 (defcfun gtk-text-iter-forward-cursor-positions :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (count :int))
 
 (defcfun gtk-text-iter-forward-sentence-ends :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (count :int))
 
 (defcfun gtk-text-iter-backward-sentence-starts :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (count :int))
 
 (defcfun gtk-text-iter-forward-visible-word-ends :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (count :int))
 
 (defcfun gtk-text-iter-backward-visible-word-starts :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (count :int))
 
 (defcfun gtk-text-iter-forward-visible-cursor-positions :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (count :int))
 
 (defcfun gtk-text-iter-forward-visible-lines :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (count :int))
 
 (defun text-iter-move (iter &key (count 1) (by :char) (direction :forward))
 (export 'text-iter-move)
 
 (defcfun (text-iter-forward-to-end "gtk_text_iter_forward_to_end") :void
-  (iter (g-boxed-ref text-iter)))
+  (iter (g-boxed-foreign text-iter)))
 
 (export 'text-iter-forward-to-end)
 
 (defcfun (text-iter-forward-to-line-end "gtk_text_iter_forward_to_line_end") :boolean
-  (iter (g-boxed-ref text-iter)))
+  (iter (g-boxed-foreign text-iter)))
 
 (export 'text-iter-forward-to-line-end)
 
 (defcfun (text-iter-forward-to-tag-toggle "gtk_text_iter_forward_to_tag_toggle") :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (tag (g-object text-tag)))
 
 (defcfun (text-iter-backward-to-tag-toggle "gtk_text_iter_backward_to_tag_toggle") :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (tag (g-object text-tag)))
 
 (export '(text-iter-forward-to-tag-toggle text-iter-backward-to-tag-toggle))
     (funcall function char)))
 
 (defcfun gtk-text-iter-forward-find-char :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (pred :pointer)
   (user-data :pointer)
-  (limit (g-boxed-ref text-iter)))
+  (limit (g-boxed-foreign text-iter)))
 
 (defcfun gtk-text-iter-backward-find-char :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (pred :pointer)
   (user-data :pointer)
-  (limit (g-boxed-ref text-iter)))
+  (limit (g-boxed-foreign text-iter)))
 
 (defun text-iter-find-char (iter predicate &key limit (direction :forward))
   (assert (typep direction '(member :forward :backward)))
 (export 'text-iter-find-char)
 
 (defcfun gtk-text-iter-forward-search :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (str (:string :free-to-foreign t))
   (flags text-search-flags)
-  (match-start (g-boxed-ref text-iter))
-  (match-end (g-boxed-ref text-iter))
-  (limit (g-boxed-ref text-iter)))
+  (match-start (g-boxed-foreign text-iter))
+  (match-end (g-boxed-foreign text-iter))
+  (limit (g-boxed-foreign text-iter)))
 
 (defcfun gtk-text-iter-backward-search :boolean
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (str (:string :free-to-foreign t))
   (flags text-search-flags)
-  (match-start (g-boxed-ref text-iter))
-  (match-end (g-boxed-ref text-iter))
-  (limit (g-boxed-ref text-iter)))
+  (match-start (g-boxed-foreign text-iter))
+  (match-end (g-boxed-foreign text-iter))
+  (limit (g-boxed-foreign text-iter)))
 
 (defun text-iter-search (start-position string &key flags limit (direction :forward))
   (assert (typep direction '(member :forward :backward)))
             (gtk-text-iter-forward-search start-position string flags i1 i2 limit)
             (gtk-text-iter-backward-search start-position string flags i1 i2 limit))
         (values t i1 i2)
-        (progn (release i1)
-               (release i2)
-               (values nil nil nil)))))
+        (values nil nil nil))))
 
 (export 'text-iter-search)
 
 (defcfun (text-iter-equal "gtk_text_iter_equal") :boolean
-  (iter-1 (g-boxed-ref text-iter))
-  (iter-2 (g-boxed-ref text-iter)))
+  (iter-1 (g-boxed-foreign text-iter))
+  (iter-2 (g-boxed-foreign text-iter)))
 
 (export 'text-iter-equal)
 
 (defcfun (text-iter-compare "gtk_text_iter_compare") :int
-  (iter-1 (g-boxed-ref text-iter))
-  (iter-2 (g-boxed-ref text-iter)))
+  (iter-1 (g-boxed-foreign text-iter))
+  (iter-2 (g-boxed-foreign text-iter)))
 
 (export 'text-iter-compare)
 
 (defcfun (text-iter-in-range "gtk_text_iter_in_range") :boolean
-  (iter (g-boxed-ref text-iter))
-  (start (g-boxed-ref text-iter))
-  (end (g-boxed-ref text-iter)))
+  (iter (g-boxed-foreign text-iter))
+  (start (g-boxed-foreign text-iter))
+  (end (g-boxed-foreign text-iter)))
 
 (export 'text-iter-in-range)
 
 (defcfun (text-iter-order "gtk_text_iter_order") :void
-  (iter-1 (g-boxed-ref text-iter))
-  (iter-2 (g-boxed-ref text-iter)))
+  (iter-1 (g-boxed-foreign text-iter))
+  (iter-2 (g-boxed-foreign text-iter)))
 
 (export 'text-iter-order)
 
-;; text mark
-
-(defcfun (text-mark-visible "gtk_text_mark_get_visible") :boolean
-  (mark (g-object text-mark)))
-
-(defcfun gtk-text-mark-set-visible :void
-  (mark (g-object text-mark))
-  (visible :boolean))
-
-(defun (setf text-mark-visible) (new-value mark)
-  (gtk-text-mark-set-visible mark new-value))
-
-(export 'text-mark-visible)
-
-(defcfun (text-mark-deleted "gtk_text_mark_get_deleted") :boolean
-  (mark (g-object text-mark)))
-
-(export 'text-mark-deleted)
-
-(defcfun (text-mark-buffer "gtk_text_mark_get_buffer") (g-object text-buffer)
-  (mark (g-object text-mark)))
-
-(export 'text-mark-buffer)
-
 ;; text buffer
 
 (defcfun (text-buffer-line-count "gtk_text_buffer_get_line_count") :int
 
 (defcfun gtk-text-buffer-insert :void
   (buffer (g-object text-buffer))
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (text (:string :free-to-foreign t))
   (len :int))
 
 
 (defcfun gtk-text-buffer-insert-interactive :boolean
   (buffer (g-object text-buffer))
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (text (:string :free-to-foreign t))
   (len :int)
   (default-editable :boolean))
 
 (defcfun gtk-text-buffer-insert-range :void
   (buffer (g-object text-buffer))
-  (iter (g-boxed-ref text-iter))
-  (range-start (g-boxed-ref text-iter))
-  (range-end (g-boxed-ref text-iter)))
+  (iter (g-boxed-foreign text-iter))
+  (range-start (g-boxed-foreign text-iter))
+  (range-end (g-boxed-foreign text-iter)))
 
 (defcfun gtk-text-buffer-insert-range-interactive :boolean
   (buffer (g-object text-buffer))
-  (iter (g-boxed-ref text-iter))
-  (range-start (g-boxed-ref text-iter))
-  (range-end (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
+  (range-start (g-boxed-foreign text-iter))
+  (range-end (g-boxed-foreign text-iter))
   (default-editable :boolean))
 
 (defun text-buffer-insert-range (buffer position range-start range-end &key interactive default-editable)
 
 (defcfun gtk-text-buffer-delete :void
   (buffer (g-object text-buffer))
-  (range-start (g-boxed-ref text-iter))
-  (range-end (g-boxed-ref text-iter)))
+  (range-start (g-boxed-foreign text-iter))
+  (range-end (g-boxed-foreign text-iter)))
 
 (defcfun gtk-text-buffer-delete-interactive :boolean
   (buffer (g-object text-buffer))
-  (range-start (g-boxed-ref text-iter))
-  (range-end (g-boxed-ref text-iter))
+  (range-start (g-boxed-foreign text-iter))
+  (range-end (g-boxed-foreign text-iter))
   (default-editable :boolean))
 
 (defun text-buffer-delete (buffer range-start range-end &key interactive default-editable)
 
 (defcfun gtk-text-buffer-backspace :boolean
   (buffer (g-object text-buffer))
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (interactive :boolean)
   (default-editable :boolean))
 
 
 (defcfun gtk-text-buffer-get-slice (:string :free-from-foreign t)
   (buffer (g-object text-buffer))
-  (range-start (g-boxed-ref text-iter))
-  (range-end (g-boxed-ref text-iter))
+  (range-start (g-boxed-foreign text-iter))
+  (range-end (g-boxed-foreign text-iter))
   (include-hidden-chars :boolean))
 
 (defun text-buffer-slice (buffer range-start range-end &key include-hidden-chars)
 
 (defcfun (text-buffer-insert-pixbuf "gtk_text_buffer_insert_pixbuf") :void
   (buffer (g-object text-buffer))
-  (position (g-boxed-ref text-iter))
+  (position (g-boxed-foreign text-iter))
   (pixbuf (g-object pixbuf)))
 
 (export 'text-buffer-insert-pixbuf)
 
 (defcfun gtk-text-buffer-insert-child-anchor :void
   (buffer (g-object text-buffer))
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (anchor (g-object text-child-anchor)))
 
 (defcfun gtk-text-buffer-create-child-anchor (g-object text-child-anchor)
   (buffer (g-object text-buffer))
-  (iter (g-boxed-ref text-iter)))
+  (iter (g-boxed-foreign text-iter)))
 
 (defun text-buffer-insert-child-anchor (buffer position &optional anchor)
   (if anchor
 (defcfun gtk-text-buffer-create-mark (g-object text-mark)
   (buffer (g-object text-buffer))
   (name (:string :free-to-foreign t))
-  (position (g-boxed-ref text-iter))
+  (position (g-boxed-foreign text-iter))
   (left-gravity :boolean))
 
 (defun text-buffer-create-mark (buffer name position &optional (left-gravity t))
 (defcfun gtk-text-buffer-move-mark :void
   (buffer (g-object text-buffer))
   (mark (g-object text-mark))
-  (position (g-boxed-ref text-iter)))
+  (position (g-boxed-foreign text-iter)))
 
 (defcfun gtk-text-buffer-move-mark-by-name :void
   (buffer (g-object text-buffer))
   (name (:string :free-to-foreign t))
-  (position (g-boxed-ref text-iter)))
+  (position (g-boxed-foreign text-iter)))
 
 (defun text-buffer-move-mark (buffer mark position)
   (etypecase mark
 (defcfun (text-buffer-add-mark "gtk_text_buffer_add_mark") :void
   (buffer (g-object text-buffer))
   (mark (g-object text-mark))
-  (position (g-boxed-ref text-iter)))
+  (position (g-boxed-foreign text-iter)))
 
 (export 'text-buffer-add-mark)
 
 (export 'text-buffer-insertion-mark)
 
 (defcfun (text-buffer-selection-bound "gtk_text_buffer_get_selection_bound") (g-object text-mark)
-  (buffer (g-object text-buffer))
-  (name (:string :free-to-foreign t)))
+  (buffer (g-object text-buffer)))
 
 (export 'text-buffer-selection-bound)
 
 (defcfun (text-buffer-place-cursor "gtk_text_buffer_place_cursor") :void
   (buffer (g-object text-buffer))
-  (position (g-boxed-ref text-iter)))
+  (position (g-boxed-foreign text-iter)))
 
 (export 'text-buffer-place-cursor)
 
 (defcfun (text-buffer-select-range "gtk_text_buffer_select_range") :void
   (buffer (g-object text-buffer))
-  (insertion-point (g-boxed-ref text-iter))
-  (selection-bound (g-boxed-ref text-iter)))
+  (insertion-point (g-boxed-foreign text-iter))
+  (selection-bound (g-boxed-foreign text-iter)))
 
 (export 'text-buffer-select-range)
 
 (defcfun gtk-text-buffer-apply-tag :void
   (buffer (g-object text-buffer))
   (tag (g-object text-tag))
-  (start (g-boxed-ref text-iter))
-  (end (g-boxed-ref text-iter)))
+  (start (g-boxed-foreign text-iter))
+  (end (g-boxed-foreign text-iter)))
 
 (defcfun gtk-text-buffer-apply-tag-by-name :void
   (buffer (g-object text-buffer))
   (name (:string :free-to-foreign t))
-  (start (g-boxed-ref text-iter))
-  (end (g-boxed-ref text-iter)))
+  (start (g-boxed-foreign text-iter))
+  (end (g-boxed-foreign text-iter)))
 
 (defun text-buffer-apply-tag (buffer tag start end)
   (etypecase tag
 (defcfun gtk-text-buffer-remove-tag :void
   (buffer (g-object text-buffer))
   (tag (g-object text-tag))
-  (start (g-boxed-ref text-iter))
-  (end (g-boxed-ref text-iter)))
+  (start (g-boxed-foreign text-iter))
+  (end (g-boxed-foreign text-iter)))
 
 (defcfun gtk-text-buffer-remove-tag-by-name :void
   (buffer (g-object text-buffer))
   (name (:string :free-to-foreign t))
-  (start (g-boxed-ref text-iter))
-  (end (g-boxed-ref text-iter)))
+  (start (g-boxed-foreign text-iter))
+  (end (g-boxed-foreign text-iter)))
 
 (defun text-buffer-remove-tag (buffer tag start end)
   (etypecase tag
 
 (defcfun (text-buffer-remove-all-tags "gtk_text_buffer_remove_all_tags") :void
   (buffer (g-object text-buffer))
-  (start (g-boxed-ref text-iter))
-  (end (g-boxed-ref text-iter)))
+  (start (g-boxed-foreign text-iter))
+  (end (g-boxed-foreign text-iter)))
 
 (defcfun gtk-text-buffer-get-iter-at-line-offset :void
   (buffer (g-object text-buffer))
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (line-number :int)
   (char-offset :int))
 
 (defun text-buffer-get-iter-at-line-offset (buffer line-number char-offset)
-  (aprog1 (make-instance 'text-iter)
-    (gtk-text-buffer-get-iter-at-line-offset buffer it line-number char-offset)))
+  (let ((iter (make-instance 'text-iter)))
+    (gtk-text-buffer-get-iter-at-line-offset buffer iter line-number char-offset)
+    iter))
 
 (export 'text-buffer-get-iter-at-line-offset)
 
 (defcfun gtk-text-buffer-get-iter-at-offset :void
   (buffer (g-object text-buffer))
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (char-offset :int))
 
 (defun text-buffer-get-iter-at-offset (buffer offset)
-  (aprog1 (make-instance 'text-iter)
-    (gtk-text-buffer-get-iter-at-offset buffer it offset)))
+  (let ((iter (make-instance 'text-iter)))
+    (gtk-text-buffer-get-iter-at-offset buffer iter offset)
+    iter))
 
 (export 'text-buffer-get-iter-at-offset)
 
 (defcfun gtk-text-buffer-get-iter-at-line :void
   (buffer (g-object text-buffer))
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (line-number :int))
 
 (defun text-buffer-get-iter-at-line (buffer line-number)
-  (aprog1 (make-instance 'text-iter)
-    (gtk-text-buffer-get-iter-at-line buffer it line-number)))
+  (let ((iter (make-instance 'text-iter)))
+    (gtk-text-buffer-get-iter-at-line buffer iter line-number)
+    iter))
 
 (export 'text-buffet-get-iter-at-line)
 
 (defcfun gtk-text-buffer-get-iter-at-mark :void
   (buffer (g-object text-buffer))
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (mark (g-object text-mark)))
 
 (defun text-buffer-get-iter-at-mark (buffer mark)
   (when (stringp mark)
     (setf mark (text-buffer-get-mark buffer mark)))
-  (aprog1 (make-instance 'text-iter)
-    (gtk-text-buffer-get-iter-at-mark buffer it mark)))
+  (let ((iter (make-instance 'text-iter)))
+    (gtk-text-buffer-get-iter-at-mark buffer iter mark)
+    iter))
 
 (export 'text-buffer-get-iter-at-mark)
 
 (defcfun gtk-text-buffer-get-iter-at-child-anchor :void
   (buffer (g-object text-buffer))
-  (iter (g-boxed-ref text-iter))
+  (iter (g-boxed-foreign text-iter))
   (anchor (g-object text-child-anchor)))
 
 (defun text-buffer-get-iter-at-child-anchor (buffer anchor)
-  (aprog1 (make-instance 'text-iter)
-    (gtk-text-buffer-get-iter-at-child-anchor buffer it anchor)))
+  (let ((iter (make-instance 'text-iter)))
+    (gtk-text-buffer-get-iter-at-child-anchor buffer iter anchor)
+    iter))
 
 (export 'text-buffer-get-iter-at-child-anchor)
 
 (defcfun gtk-text-buffer-get-start-iter :void
   (buffer (g-object text-buffer))
-  (iter (g-boxed-ref text-iter)))
+  (iter (g-boxed-foreign text-iter)))
 
 (defun text-buffer-get-start-iter (buffer)
-  (aprog1 (make-instance 'text-iter)
-    (gtk-text-buffer-get-start-iter buffer it)))
+  (let ((iter (make-instance 'text-iter)))
+    (gtk-text-buffer-get-start-iter buffer iter)
+    iter))
 
 (export 'text-buffer-get-start-iter)
 
 (defcfun gtk-text-buffer-get-end-iter :void
   (buffer (g-object text-buffer))
-  (iter (g-boxed-ref text-iter)))
+  (iter (g-boxed-foreign text-iter)))
 
 (defun text-buffer-get-end-iter (buffer)
-  (aprog1 (make-instance 'text-iter)
-    (gtk-text-buffer-get-end-iter buffer it)))
+  (let ((iter (make-instance 'text-iter)))
+    (gtk-text-buffer-get-end-iter buffer iter)
+    iter))
 
 (export 'text-buffer-get-end-iter)
 
 (defcfun gtk-text-buffer-get-bounds :void
   (buffer (g-object text-buffer))
-  (start (g-boxed-ref text-iter))
-  (end (g-boxed-ref text-iter)))
+  (start (g-boxed-foreign text-iter))
+  (end (g-boxed-foreign text-iter)))
 
 (defun text-buffer-get-bounds (buffer)
   (let ((start (make-instance 'text-iter))
         (end (make-instance 'text-iter)))
-    (gtk-text-buffer-get-bounds buffer start end)))
+    (gtk-text-buffer-get-bounds buffer start end)
+    (values start end)))
 
 (export 'text-buffer-get-bounds)
 
 (defcfun gtk-text-buffer-paste-clipboard :void
   (buffer (g-object text-buffer))
   (clipboard (g-object clipboard))
-  (override-location (g-boxed-ref text-iter))
+  (override-location (g-boxed-foreign text-iter))
   (default-editable :boolean))
 
 (defun text-buffer-paste-clipboard (buffer clipboard &key position default-editable)
 
 (defcfun (text-buffer-cut-clipboard "gtk_text_buffer_cut_clipboard") :void
   (buffer (g-object text-buffer))
-  (clipboard (g-object clipboard)))
+  (clipboard (g-object clipboard))
+  (default-editable :boolean))
 
 (export 'text-buffer-cut-clipboard)
 
 (defcfun gtk-text-buffer-get-selection-bounds :boolean
   (buffer (g-object text-buffer))
-  (start (g-boxed-ref text-iter))
-  (end (g-boxed-ref text-iter)))
+  (start (g-boxed-foreign text-iter))
+  (end (g-boxed-foreign text-iter)))
 
 (defun text-buffer-get-selection-bounds (buffer)
   (let ((i1 (make-instance 'text-iter))
         (i2 (make-instance 'text-iter)))
     (if (gtk-text-buffer-get-selection-bounds buffer i1 i2)
         (values i1 i2)
-        (progn (release i1)
-               (release i2)
-               (values nil nil)))))
+        (values nil nil))))
 
 (export 'text-buffer-get-selection-bounds)
 
 
 (export 'text-buffer-remove-selection-clipboard)
 
-;; enum                GtkTextBufferTargetInfo;
-;; gboolean            (*GtkTextBufferDeserializeFunc)     (GtkTextBuffer *register_buffer,
-;;                                                          GtkTextBuffer *content_buffer,
-;;                                                          GtkTextIter *iter,
-;;                                                          const guint8 *data,
-;;                                                          gsize length,
-;;                                                          gboolean create_tags,
-;;                                                          gpointer user_data,
-;;                                                          GError **error);
-;; gboolean            gtk_text_buffer_deserialize         (GtkTextBuffer *register_buffer,
-;;                                                          GtkTextBuffer *content_buffer,
-;;                                                          GdkAtom format,
-;;                                                          GtkTextIter *iter,
-;;                                                          const guint8 *data,
-;;                                                          gsize length,
-;;                                                          GError **error);
-;; gboolean            gtk_text_buffer_deserialize_get_can_create_tags
-;;                                                         (GtkTextBuffer *buffer,
-;;                                                          GdkAtom format);
-;; void                gtk_text_buffer_deserialize_set_can_create_tags
-;;                                                         (GtkTextBuffer *buffer,
-;;                                                          GdkAtom format,
-;;                                                          gboolean can_create_tags);
-;; GtkTargetList*      gtk_text_buffer_get_copy_target_list
-;;                                                         (GtkTextBuffer *buffer);
-;; GdkAtom*            gtk_text_buffer_get_deserialize_formats
-;;                                                         (GtkTextBuffer *buffer,
-;;                                                          gint *n_formats);
-;; GtkTargetList*      gtk_text_buffer_get_paste_target_list
-;;                                                         (GtkTextBuffer *buffer);
-;; GdkAtom*            gtk_text_buffer_get_serialize_formats
-;;                                                         (GtkTextBuffer *buffer,
-;;                                                          gint *n_formats);
-;; GdkAtom             gtk_text_buffer_register_deserialize_format
-;;                                                         (GtkTextBuffer *buffer,
-;;                                                          const gchar *mime_type,
-;;                                                          GtkTextBufferDeserializeFunc function,
-;;                                                          gpointer user_data,
-;;                                                          GDestroyNotify user_data_destroy);
-;; GdkAtom             gtk_text_buffer_register_deserialize_tagset
-;;                                                         (GtkTextBuffer *buffer,
-;;                                                          const gchar *tagset_name);
-;; GdkAtom             gtk_text_buffer_register_serialize_format
-;;                                                         (GtkTextBuffer *buffer,
-;;                                                          const gchar *mime_type,
-;;                                                          GtkTextBufferSerializeFunc function,
-;;                                                          gpointer user_data,
-;;                                                          GDestroyNotify user_data_destroy);
-;; GdkAtom             gtk_text_buffer_register_serialize_tagset
-;;                                                         (GtkTextBuffer *buffer,
-;;                                                          const gchar *tagset_name);
-;; guint8*             (*GtkTextBufferSerializeFunc)       (GtkTextBuffer *register_buffer,
-;;                                                          GtkTextBuffer *content_buffer,
-;;                                                          const GtkTextIter *start,
-;;                                                          const GtkTextIter *end,
-;;                                                          gsize *length,
-;;                                                          gpointer user_data);
-;; guint8*             gtk_text_buffer_serialize           (GtkTextBuffer *register_buffer,
-;;                                                          GtkTextBuffer *content_buffer,
-;;                                                          GdkAtom format,
-;;                                                          const GtkTextIter *start,
-;;                                                          const GtkTextIter *end,
-;;                                                          gsize *length);
-;; void                gtk_text_buffer_unregister_deserialize_format
-;;                                                         (GtkTextBuffer *buffer,
-;;                                                          GdkAtom format);
-;; void                gtk_text_buffer_unregister_serialize_format
-;;                                                         (GtkTextBuffer *buffer,
-;;                                                          GdkAtom format);
+(defcfun gtk-text-buffer-deserialize :boolean
+  (register-buffer (g-object text-buffer))
+  (content-buffer (g-object text-buffer))
+  (format gdk-atom-as-string)
+  (iter (g-boxed-foreign text-iter))
+  (data :pointer)
+  (length gsize)
+  (error :pointer))
+
+(defun text-buffer-deserialize (register-buffer content-buffer format iter data)
+  (let ((bytes (foreign-alloc :uint8 :count (length data))))
+    (iter (for i from 0 below (length data))
+          (setf (mem-aref bytes :uint8 i) (aref data i)))
+    (unwind-protect
+         (with-g-error (err)
+           (gtk-text-buffer-deserialize register-buffer content-buffer
+                                        format iter bytes (length data) err))
+      (foreign-free bytes))))
+
+(export 'text-buffer-deserialize)
+
+(defcfun (text-buffer-deserialize-can-create-tags "gtk_text_buffer_deserialize_get_can_create_tags") :boolean
+  (buffer (g-object text-buffer))
+  (format gdk-atom-as-string))
 
-;; text tag
+(defcfun gtk-text-buffer-deserialize-set-can-create-tags :void
+  (buffer (g-object text-buffer))
+  (format gdk-atom-as-string)
+  (can-create-tags :boolean))
+
+(defun (setf text-buffer-deserialize-can-create-tags) (new-value buffer format)
+  (gtk-text-buffer-deserialize-set-can-create-tags buffer format new-value))
+
+(export 'text-buffer-deserialize-can-create-tags)
+
+(defcfun gtk-text-buffer-get-deserialize-formats (:pointer gdk-atom-as-string)
+  (text-buffer (g-object text-buffer))
+  (n-formats (:pointer :int)))
+
+(defun text-buffer-get-deserialize-formats (text-buffer)
+  (with-foreign-object (n-formats :int)
+    (let ((atoms-ptr (gtk-text-buffer-get-deserialize-formats text-buffer n-formats)))
+      (iter (for i from 0 below (mem-ref n-formats :int))
+            (for atom = (mem-aref atoms-ptr 'gdk-atom-as-string i))
+            (collect atom)))))
+
+(export 'text-buffer-get-deserialize-formats)
+
+(defcfun gtk-text-buffer-get-serialize-formats (:pointer gdk-atom-as-string)
+  (text-buffer (g-object text-buffer))
+  (n-formats (:pointer :int)))
+
+(defun text-buffer-get-serialize-formats (text-buffer)
+  (with-foreign-object (n-formats :int)
+    (let ((atoms-ptr (gtk-text-buffer-get-serialize-formats text-buffer n-formats)))
+      (iter (for i from 0 below (mem-ref n-formats :int))
+            (for atom = (mem-aref atoms-ptr 'gdk-atom-as-string i))
+            (collect atom)))))
+
+(export 'text-buffer-get-serialize-formats)
+
+(defcallback gtk-text-buffer-deserialize-cb :boolean
+    ((register-buffer (g-object text-buffer))
+     (content-buffer (g-object text-buffer))
+     (iter (g-boxed-foreign text-iter))
+     (data :pointer)
+     (length gsize)
+     (create-tags :boolean)
+     (user-data :pointer)
+     (error :pointer))
+  (with-catching-to-g-error (error)
+    (let ((fn (stable-pointer-value user-data)))
+      (restart-case
+          (let ((bytes (iter (with bytes = (make-array length :element-type '(unsigned-byte 8)))
+                             (for i from 0 below length)
+                             (setf (aref bytes i) (mem-ref data :uint8 i))
+                             (finally (return bytes)))))
+            (progn (funcall fn register-buffer content-buffer iter bytes create-tags) t))
+        (return-from-text-buffer-deserialize-cb ()
+          (error 'g-error-condition
+                 :domain "cl-gtk2"
+                 :code 0
+                 :message "'return-from-text-buffer-deserialize-cb' restart was called"))))))
+
+(defcfun gtk-text-buffer-register-deserialize-format gdk-atom-as-string
+  (buffer (g-object text-buffer))
+  (mime-type :string)
+  (function :pointer)
+  (user-data :pointer)
+  (destroy-notify :pointer))
 
-(defcfun (text-tag-priority "gtk_text_tag_get_priority") :int
-  (tag (g-object text-tag)))
+(defun text-buffer-register-deserialize-format (buffer mime-type function)
+  (gtk-text-buffer-register-deserialize-format buffer mime-type
+                                               (callback gtk-text-buffer-deserialize-cb)
+                                               (allocate-stable-pointer function)
+                                               (callback stable-pointer-free-destroy-notify-callback)))
 
-(defcfun gtk-text-tag-set-priority :void
-  (tag (g-object text-tag))
-  (priority :int))
+(export 'text-buffer-register-deserialize-format)
+
+(defcfun (text-buffer-register-deserialize-tagset "gtk_text_buffer_register_deserialize_tagset") gdk-atom-as-string
+  (buffer (g-object text-buffer))
+  (tagset-name :string))
+
+(export 'text-buffer-register-deserialize-tagset)
+
+(defcallback gtk-text-buffer-serialize-cb :pointer
+    ((register-buffer (g-object text-buffer))
+     (content-buffer (g-object text-buffer))
+     (start-iter (g-boxed-foreign text-iter))
+     (end-iter (g-boxed-foreign text-iter))
+     (length (:pointer gsize))
+     (user-data :pointer))
+  (let ((fn (stable-pointer-value user-data)))
+    (restart-case
+        (let* ((bytes (funcall fn register-buffer content-buffer start-iter end-iter))
+               (bytes-ptr (g-malloc (length bytes))))
+          (setf (mem-ref length 'gsize) (length bytes))
+          (iter (for i from 0 below (length bytes))
+                (setf (mem-aref bytes-ptr :uint8 i) (aref bytes i)))
+          bytes-ptr)
+      (return-from-text-buffer-serialize-cb () nil))))
+
+(defcfun gtk-text-buffer-register-serialize-format gdk-atom-as-string
+  (buffer (g-object text-buffer))
+  (mime-type :string)
+  (function :pointer)
+  (user-data :pointer)
+  (destroy-notify :pointer))
+
+(defun text-buffer-register-serialize-format (buffer mime-type function)
+  (gtk-text-buffer-register-serialize-format buffer mime-type
+                                             (callback gtk-text-buffer-serialize-cb)
+                                             (allocate-stable-pointer function)
+                                             (callback stable-pointer-free-destroy-notify-callback)))
+
+(export 'text-buffer-register-serialize-format)
+
+(defcfun (text-buffer-register-serialize-tagset "gtk_text_buffer_register_serialize_tagset") gdk-atom-as-string
+  (buffer (g-object text-buffer))
+  (tagset-name :string))
+
+(export 'text-buffer-register-serialize-tagset)
+
+(defcfun gtk-text-buffer-serialize :pointer
+  (register-buffer (g-object text-buffer))
+  (content-buffer (g-object text-buffer))
+  (format gdk-atom-as-string)
+  (start (g-boxed-foreign text-iter))
+  (end (g-boxed-foreign text-iter))
+  (length (:pointer gsize)))
+
+(defun text-buffer-serialize (register-buffer content-buffer format start end)
+  (with-foreign-object (length 'gsize)
+    (let ((bytes (gtk-text-buffer-serialize register-buffer content-buffer format start end length)))
+      (iter (for i from 0 to (mem-ref length 'gsize))
+            (for byte = (mem-aref bytes :uint8 i))
+            (collect byte result-type vector)
+            (finally (g-free bytes))))))
+
+(export 'text-buffer-serialize)
 
-(defun (setf text-tag-priority) (new-value tag)
-  (gtk-text-tag-set-priority tag new-value))
+(defcfun (text-buffer-unregister-deserialize-format "gtk_text_buffer_unregister_deserialize_format") :void
+  (buffer (g-object text-buffer))
+  (format gdk-atom-as-string))
+
+(export 'text-buffer-unregister-deserialize-format)
+
+(defcfun (text-buffer-unregister-serialize-format "gtk_text_buffer_unregister_serialize_format") :void
+  (buffer (g-object text-buffer))
+  (format gdk-atom-as-string))
 
-(export 'text-tag-priority)
+(export 'text-buffer-unregister-serialize-format)
+
+;; text tag
 
 ;; text tag table
 
 
 (defun text-tag-table-foreach (table function)
   (with-stable-pointer (ptr function)
-    (gtk-text-tag-table-foreach table (callback gtk-text-table-foreach-function) ptr)))
+    (gtk-text-tag-table-foreach table (callback gtk-text-tag-table-foreach-function) ptr)))
 
 (export 'text-tag-table-foreach)
 
   (y-align :double))
 
 (defun text-view-scroll-to-mark (text-view mark &key (within-margin 0.4) (x-align 0.0 x-align-supplied) (y-align 0.0 y-align-supplied))
-  (gtk-text-view-scroll-to-mark text-view mark within-margin (or x-align-supplied y-align-supplied) (coerce x-align 'double-float) (coerce y-align 'double-float)))
+  (gtk-text-view-scroll-to-mark text-view mark (coerce within-margin 'double-float) (or x-align-supplied y-align-supplied) (coerce x-align 'double-float) (coerce y-align 'double-float)))
 
 (export 'text-view-scroll-to-mark)
 
 (defcfun gtk-text-view-scroll-to-iter :void
   (text-view (g-object text-view))
-  (iter (g-object text-iter))
+  (iter (g-boxed-foreign text-iter))
   (within-margin :double)
   (use-align :boolean)
   (x-align :double)
   (y-align :double))
 
 (defun text-view-scroll-to-iter (text-view iter &key (within-margin 0.4) (x-align 0.0 x-align-supplied) (y-align 0.0 y-align-supplied))
-  (gtk-text-view-scroll-to-iter text-view iter within-margin (or x-align-supplied y-align-supplied) (coerce x-align 'double-float) (coerce y-align 'double-float)))
+  (gtk-text-view-scroll-to-iter text-view iter (coerce within-margin 'double-float) (or x-align-supplied y-align-supplied) (coerce x-align 'double-float) (coerce y-align 'double-float)))
 
 (export 'text-view-scroll-to-iter)
 
+(defcfun (text-view-scroll-mark-onscreen "gtk_text_view_scroll_mark_onscreen") :void
+  (text-view (g-object text-view))
+  (mark (g-object text-mark)))
+
+(export 'text-view-scroll-mark-onscreen)
+
 (defcfun (text-view-move-mark-onscreen "gtk_text_view_move_mark_onscreen") :boolean
   (text-view (g-object text-view))
   (mark (g-object text-mark)))
 
 (defcfun gtk-text-view-get-visible-rect :void
   (text-view (g-object text-view))
-  (visible-rect (g-boxed-ptr rectangle :in-out)))
+  (visible-rect (g-boxed-foreign rectangle)))
 
 (defun text-view-visible-rect (text-view)
-  (aprog1 (make-rectangle :x 0 :y 0 :width 0 :height 0)
-    (gtk-text-view-get-visible-rect text-view it)))
+  (let ((rect (make-rectangle :x 0 :y 0 :width 0 :height 0)))
+    (gtk-text-view-get-visible-rect text-view rect)
+    rect))
 
 (export 'text-view-visible-rect)
 
 (defcfun gtk-text-view-get-iter-location :void
   (text-view (g-object text-view))
-  (iter (g-boxed-ref text-iter))
-  (location (g-boxed-ptr rectangle :in-out)))
+  (iter (g-boxed-foreign text-iter))
+  (location (g-boxed-foreign rectangle)))
 
 (defun text-view-iter-location (text-view iter)
-  (aprog1 (make-rectangle :x 0 :y 0 :width 0 :height 0)
-    (gtk-text-view-get-iter-location text-view iter it)))
+  (let ((rect (make-rectangle :x 0 :y 0 :width 0 :height 0)))
+    (gtk-text-view-get-iter-location text-view iter rect)
+    rect))
 
 (export 'text-view-iter-location)
 
+(defcfun gtk-text-view-get-line-at-y :void
+  (text-view (g-object text-view))
+  (target-iter (g-boxed-foreign text-iter))
+  (y :int)
+  (line-top (:pointer :int)))
+
+(defun text-view-get-line-at-y (text-view y)
+  (let ((iter (make-instance 'text-iter)))
+    (with-foreign-object (line-top :int)
+      (gtk-text-view-get-line-at-y text-view iter y line-top)
+      (values iter (mem-ref line-top :int)))))
+
+(export 'text-view-get-line-at-y)
+
+(defcfun gtk-text-view-get-line-yrange :void
+  (text-view (g-object text-view))
+  (iter (g-boxed-foreign text-iter))
+  (y (:pointer :int))
+  (height (:pointer :int)))
+
+(defun text-view-get-line-yrange (text-view iter)
+  (with-foreign-objects ((y :int) (height :int))
+    (gtk-text-view-get-line-yrange text-view iter y height)
+    (values (mem-ref y :int) (mem-ref height :int))))
+
+(export 'text-view-get-line-yrange)
+
+(defcfun gtk-text-view-get-iter-at-location :void
+  (text-view (g-object text-view))
+  (iter (g-boxed-foreign text-iter))
+  (x :int)
+  (y :int))
+
+(defun text-view-get-iter-at-location (view x y)
+  (let ((iter (make-instance 'text-iter)))
+    (gtk-text-view-get-iter-at-location view iter x y)
+    iter))
+
+(export 'text-view-get-iter-at-location)
+
+(defcfun gtk-text-view-get-iter-at-position :void
+  (text-view (g-object text-view))
+  (iter (g-boxed-foreign text-iter))
+  (trailing (:pointer :int))
+  (x :int)
+  (y :int))
+
+(defun text-view-get-iter-at-position (text-view x y)
+  (with-foreign-object (trailing :int)
+    (let ((iter (make-instance 'text-iter)))
+      (gtk-text-view-get-iter-at-position text-view iter trailing x y)
+      (values iter (mem-ref trailing :int)))))
+
+(export 'text-view-get-iter-at-position)
+
+(defcfun gtk-text-view-buffer-to-window-coords :void
+  (text-view (g-object text-view))
+  (win text-window-type)
+  (buffer-x :int)
+  (buffer-y :int)
+  (window-x (:pointer :int))
+  (window-y (:pointer :int)))
+
+(defun text-view-buffer-to-window-coords (text-view window-type buffer-x buffer-y)
+  (with-foreign-objects ((window-x :int) (window-y :int))
+    (gtk-text-view-buffer-to-window-coords text-view window-type buffer-x buffer-y window-x window-y)
+    (values (mem-ref window-x :int) (mem-ref window-y :int))))
+
+(export 'text-view-buffer-to-window-coords)
+
+(defcfun gtk-text-view-window-to-buffer-coords :void
+  (text-view (g-object text-view))
+  (win text-window-type)
+  (window-x :int)
+  (window-y :int)
+  (buffer-x :pointer)
+  (buffer-y :pointer))
+
+(defun text-view-window-to-buffer-coords (text-view win window-x window-y)
+  (with-foreign-objects ((buffer-x :int) (buffer-y :int))
+    (gtk-text-view-window-to-buffer-coords text-view win window-x window-y buffer-x buffer-y)
+    (values (mem-ref buffer-x :int)
+            (mem-ref buffer-y :int))))
+
+(export 'text-view-window-to-buffer-coords)
+
+(defcfun gtk-text-view-get-window (g-object gdk:gdk-window)
+  (text-view (g-object text-view))
+  (win text-window-type))
+
+(defun text-view-get-window (text-view win)
+  (gtk-text-view-get-window text-view win))
+
+(export 'text-view-get-window)
+
+(defcfun (text-view-get-window-type "gtk_text_view_get_window_type") text-window-type
+  (text-view (g-object text-view))
+  (window (g-object gdk-window)))
+
+(export 'text-view-get-window-type)
+
+(defcfun gtk-text-view-set-border-window-size :void
+  (text-view (g-object text-view))
+  (window-type text-window-type)
+  (size :int))
+
+(defcfun (text-view-border-window-size "gtk_text_view_get_border_window_size") :int
+  (text-view (g-object text-view))
+  (window-type text-window-type))
+
+(defun (setf text-view-border-window-size) (new-value text-view window-type)
+  (gtk-text-view-set-border-window-size text-view window-type new-value)
+  new-value)
+
+(export 'text-view-border-window-size)
+
+(defcfun (text-view-forward-display-line "gtk_text_view_forward_display_line") :boolean
+  (text-view (g-object text-view))
+  (iter (g-boxed-foreign text-iter)))
+
+(export 'text-view-forward-display-line)
+
+(defcfun (text-view-backward-display-line "gtk_text_view_backward_display_line") :boolean
+  (text-view (g-object text-view))
+  (iter (g-boxed-foreign text-iter)))
+
+(export 'text-view-backward-display-line)
+
+(defcfun (text-view-forward-display-line-end "gtk_text_view_forward_display_line_end") :boolean
+  (text-view (g-object text-view))
+  (iter (g-boxed-foreign text-iter)))
+
+(export 'text-view-forward-display-line-end)
+
+(defcfun (text-view-backward-display-line-start "gtk_text_view_backward_display_line_start") :boolean
+  (text-view (g-object text-view))
+  (iter (g-boxed-foreign text-iter)))
+
+(export 'text-view-backward-display-line-start)
+
+(defcfun (text-view-starts-display-line "gtk_text_view_starts_display_line") :boolean
+  (text-view (g-object text-view))
+  (iter (g-boxed-foreign text-iter)))
+
+(export 'text-view-starts-display-line)
+
+(defcfun (text-view-move-visually "gtk_text_view_move_visually") :boolean
+  (text-view (g-object text-view))
+  (iter (g-boxed-foreign text-iter))
+  (count :int))
+
+(export 'text-view-move-visually)
+
+(defcfun (text-view-add-child-at-anchor "gtk_text_view_add_child_at_anchor") :void
+  (text-view g-object)
+  (child g-object)
+  (anchor g-object))
+
+(export 'text-view-add-child-at-anchor)
+
+(defcfun (text-child-anchor-widgets "gtk_text_child_anchor_get_widgets") (glist (g-object widget) :free-from-foreign t)
+  (anchor (g-object text-child-anchor)))
+
+(export 'text-child-anchor-widgets)
+
+(defcfun (text-view-add-child-in-window "gtk_text_view_add_child_in_window") :void
+  (text-view (g-object text-view))
+  (child (g-object widget))
+  (which-window text-window-type)
+  (x-pos :int)
+  (y-pos :int))
+
+(export 'text-view-add-child-in-window)
+
+(defcfun (text-view-move-child "gtk_text_view_move_child") :void
+  (text-view (g-object text-view))
+  (child (g-object widget))
+  (x-pos :int)
+  (y-pos :int))
 
-;; void                gtk_text_view_get_line_at_y         (GtkTextView *text_view,
-;;                                                          GtkTextIter *target_iter,
-;;                                                          gint y,
-;;                                                          gint *line_top);
-;; void                gtk_text_view_get_line_yrange       (GtkTextView *text_view,
-;;                                                          const GtkTextIter *iter,
-;;                                                          gint *y,
-;;                                                          gint *height);
-;; void                gtk_text_view_get_iter_at_location  (GtkTextView *text_view,
-;;                                                          GtkTextIter *iter,
-;;                                                          gint x,
-;;                                                          gint y);
-;; void                gtk_text_view_get_iter_at_position  (GtkTextView *text_view,
-;;                                                          GtkTextIter *iter,
-;;                                                          gint *trailing,
-;;                                                          gint x,
-;;                                                          gint y);
-;; void                gtk_text_view_buffer_to_window_coords
-;;                                                         (GtkTextView *text_view,
-;;                                                          GtkTextWindowType win,
-;;                                                          gint buffer_x,
-;;                                                          gint buffer_y,
-;;                                                          gint *window_x,
-;;                                                          gint *window_y);
-;; void                gtk_text_view_window_to_buffer_coords
-;;                                                         (GtkTextView *text_view,
-;;                                                          GtkTextWindowType win,
-;;                                                          gint window_x,
-;;                                                          gint window_y,
-;;                                                          gint *buffer_x,
-;;                                                          gint *buffer_y);
-;; GdkWindow*          gtk_text_view_get_window            (GtkTextView *text_view,
-;;                                                          GtkTextWindowType win);
-;; GtkTextWindowType   gtk_text_view_get_window_type       (GtkTextView *text_view,
-;;                                                          GdkWindow *window);
-;; void                gtk_text_view_set_border_window_size
-;;                                                         (GtkTextView *text_view,
-;;                                                          GtkTextWindowType type,
-;;                                                          gint size);
-;; gint                gtk_text_view_get_border_window_size
-;;                                                         (GtkTextView *text_view,
-;;                                                          GtkTextWindowType type);
-;; gboolean            gtk_text_view_forward_display_line  (GtkTextView *text_view,
-;;                                                          GtkTextIter *iter);
-;; gboolean            gtk_text_view_backward_display_line (GtkTextView *text_view,
-;;                                                          GtkTextIter *iter);
-;; gboolean            gtk_text_view_forward_display_line_end
-;;                                                         (GtkTextView *text_view,
-;;                                                          GtkTextIter *iter);
-;; gboolean            gtk_text_view_backward_display_line_start
-;;                                                         (GtkTextView *text_view,
-;;                                                          GtkTextIter *iter);
-;; gboolean            gtk_text_view_starts_display_line   (GtkTextView *text_view,
-;;                                                          const GtkTextIter *iter);
-;; gboolean            gtk_text_view_move_visually         (GtkTextView *text_view,
-;;                                                          GtkTextIter *iter,
-;;                                                          gint count);
-;; void                gtk_text_view_add_child_at_anchor   (GtkTextView *text_view,
-;;                                                          GtkWidget *child,
-;;                                                          GtkTextChildAnchor *anchor);
-;;                     GtkTextChildAnchor;
-;; GtkTextChildAnchor* gtk_text_child_anchor_new           (void);
-;; GList*              gtk_text_child_anchor_get_widgets   (GtkTextChildAnchor *anchor);
-;; gboolean            gtk_text_child_anchor_get_deleted   (GtkTextChildAnchor *anchor);
-;; void                gtk_text_view_add_child_in_window   (GtkTextView *text_view,
-;;                                                          GtkWidget *child,
-;;                                                          GtkTextWindowType which_window,
-;;                                                          gint xpos,
-;;                                                          gint ypos);
-;; void                gtk_text_view_move_child            (GtkTextView *text_view,
-;;                                                          GtkWidget *child,
-;;                                                          gint xpos,
-;;                                                          gint ypos);
+(export 'text-view-move-child)