(in-package :gtk)
+(defcfun (%gtk-color-selection-get-previous-color "gtk_color_selection_get_previous_color") :void
+ (color-selection (g-object color-selection))
+ (color (g-boxed-foreign color)))
+
+(defun gtk-color-selection-get-previous-color (color-selection)
+ (let ((color (make-color)))
+ (%gtk-color-selection-get-previous-color color-selection color)
+ color))
+
+(defcfun gtk-color-selection-set-previous-color :void
+ (color-selection (g-object color-selection))
+ (color (g-boxed-foreign color)))
+
(defcfun (color-selection-adjusting-p "gtk_color_selection_is_adjusting") :boolean
(color-selection g-object))
(export 'color-selection-adjusting-p)
-; TODO: gtk_color_selection_palette_from_string
+(defcfun gtk-color-selection-palette-from-string :boolean
+ (str :string)
+ (colors :pointer)
+ (n-colors :pointer))
+
+(defun color-selection-palette-from-string (str)
+ (with-foreign-objects ((colors :pointer) (n-colors :int))
+ (when (gtk-color-selection-palette-from-string str colors n-colors)
+ (iter (with colors-ar = (mem-ref colors :pointer))
+ (for i from 0 below (mem-ref n-colors :int))
+ (for color-ptr =
+ (inc-pointer colors-ar
+ (* i (foreign-type-size 'gdk::color-cstruct))))
+ (for color = (convert-from-foreign color-ptr '(g-boxed-foreign color)))
+ (collect color)
+ (finally (g-free colors-ar))))))
+
+(defcfun gtk-color-selection-palette-to-string (g-string :free-from-foreign t)
+ (colors :pointer)
+ (n-colors :int))
; TODO: gtk_color_selection_palette_to_string
(export 'file-chooser-unselect-uri)
-(defcfun (file-chooser-uris "gtk_file_chooser_get_uris") (gslist (g-string :free-from-foreign t))
+(defcfun (file-chooser-uris "gtk_file_chooser_get_uris") (gslist (g-string :free-from-foreign t) :free-from-foreign t)
(file-chooser g-object))
(export 'file-chooser-uris)
-; TODO: gtk_file_chooser_add_filter
-; --- ownership issues
+(defcfun (file-chooser-add-filter "gtk_file_chooser_add_filter") :void
+ (chooser (g-object file-chooser))
+ (filter (g-object file-filter)))
+
+(export 'file-chooser-add-filter)
+
+(defcfun (file-chooser-remove-filter "gtk_file_chooser_remove_filter") :void
+ (chooser (g-object file-chooser))
+ (filter (g-object file-filter)))
-; TODO: gtk_file_chooser_remove_filter
+(export 'file-chooser-remove-filter)
-; TODO: gtk_file_chooser_list_filters
+(defcfun (file-chooser-filters "gtk_file_chooser_list_filters") (glist (g-string :free-from-foreign t) :free-from-foreign t)
+ (chooser (g-object file-chooser)))
+
+(export 'file-chooser-filters)
(defcfun gtk-file-chooser-add-shortcut-folder :boolean
(file-chooser g-object)
(export 'file-chooser-shortcut-folder-uris)
-; TODO: gtk_file_chooser_get_current_folder_file
+(defcfun (file-chooser-get-current-folder-file "gtk_file_chooser_get_current_folder_file") g-object
+ (chooser (g-object file-chooser)))
+
+(defcfun gtk-file-chooser-set-current-folder-file :boolean
+ (file-chooser (g-object file-chooser))
+ (file g-object)
+ (error :pointer))
-; TODO: gtk_file_chooser_get_file
+(defun file-chooser-set-current-folder-file (file-chooser file)
+ (gtk-file-chooser-set-current-folder-file file-chooser file (null-pointer)))
-; TODO: gtk_file_chooser_get_files
+(export '(file-chooser-get-current-folder-file file-chooser-set-current-folder-file))
-; TODO: gtk_file_chooser_get_preview_file
+(defcfun (file-chooser-get-file "gtk_file_chooser_get_file") g-object
+ (file-chooser (g-object file-chooser)))
+
+(defcfun gtk-file-chooser-set-file g-object
+ (file-chooser (g-object file-chooser))
+ (file g-object)
+ (error :pointer))
-; TODO: gtk_file_chooser_select_file
+(defun file-chooser-set-file (file-chooser file)
+ (gtk-file-chooser-set-file file-chooser file (null-pointer)))
-; TODO: gtk_file_chooser_set_current_folder_file
+(export '(file-chooser-get-file file-chooser-set-file))
-; TODO: gtk_file_chooser_set_file
+(defcfun (file-chooser-unselect-file "gtk_file_chooser_unselect_file") :void
+ (file-chooser (g-object file-chooser))
+ (file g-object))
-; TODO: gtk_file_chooser_unselect_file
+(export 'file-chooser-unselect-file)
(defcfun (file-filter-add-pattern "gtk_file_filter_add_pattern") :void
(file-filter g-object)