+(defbinding entry-layout-index-to-text-index () int
+ (entry entry)
+ (layout-index int))
+
+(defbinding entry-text-index-to-layout-index () int
+ (entry entry)
+ (text-index int))
+
+
+;;; Entry Completion
+
+(def-callback-marshal %entry-completion-match-func
+ (boolean entry-completion string (copy-of tree-iter)))
+
+(defbinding entry-completion-set-match-func (completion function) nil
+ (completion entry-completion)
+ ((callback %entry-completion-match-func) pointer)
+ ((register-callback-function function) unsigned-int)
+ ((callback %destroy-user-data) pointer))
+
+(defbinding entry-completion-complete () nil
+ (completion entry-completion))
+
+#+gtk2.6
+(defbinding entry-completion-insert-prefix () nil
+ (completion entry-completion))
+
+(defbinding entry-completion-insert-action-text () nil
+ (completion entry-completion)
+ (index int)
+ (text string))
+
+(defbinding entry-completion-insert-action-markup () nil
+ (completion entry-completion)
+ (index int)
+ (markup string))
+
+(defbinding entry-completion-delete-action () nil
+ (completion entry-completion)
+ (index int))
+
+
+;;; Image
+
+(defbinding image-set-from-file () nil
+ (image image)
+ (filename pathname))
+
+(defmethod (setf image-pixmap) ((data vector) (image image))
+ (multiple-value-bind (pixmap mask) (gdk:pixmap-create data)
+ (setf (image-pixmap image) pixmap)
+ (setf (image-mask image) mask)))
+
+(defmethod initialize-instance ((image image) &rest initargs &key pixmap file)
+ (cond
+ ((typep pixmap 'vector)
+ (multiple-value-bind (pixmap mask) (gdk:pixmap-create pixmap)
+ (apply #'call-next-method image :pixmap pixmap :mask mask initargs)))
+ (file
+ (prog1
+ (call-next-method)
+ (image-set-from-file image file)))
+ ((call-next-method))))
+
+(defun create-image-widget (source &optional mask)
+ (etypecase source
+ (gdk:pixbuf (make-instance 'image :pixbuf source))
+ (string (make-instance 'image :stock source))
+ (pathname (make-instance 'image :file source))
+ ((or list vector) (make-instance 'image :pixmap source))
+ (gdk:pixmap (make-instance 'image :pixmap source :mask mask))))
+
+
+;;; Image menu item
+
+(defmethod initialize-instance ((item image-menu-item) &rest initargs &key image)
+ (if (and image (not (typep image 'widget)))
+ (apply #'call-next-method item :image (create-image-widget image) initargs)
+ (call-next-method)))
+
+
+(defmethod (setf image-menu-item-image) ((widget widget) (item image-menu-item))
+ (setf (slot-value item 'image) widget))
+
+(defmethod (setf image-menu-item-image) (image (item image-menu-item))
+ (setf (image-menu-item-image item) (create-image-widget image)))