 ! Copyright (C) 2014, 2015 John Benediktsson.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: alien.c-types alien.data alien.strings alien.syntax
-destructors file-picker gobject-introspection.standard-types
-gtk.ffi io.encodings.string io.encodings.utf8 kernel system ;
+USING: accessors alien.c-types alien.strings alien.syntax destructors
+file-picker gobject-introspection.standard-types gtk.ffi
+io.encodings.utf8 kernel locals namespaces system ui.gadgets.worlds ;
 IN: file-picker.linux
 
 <PRIVATE

    [
        "Save File" "Save" <gtk-file-chooser-dialog>
        dup t gtk_file_chooser_set_do_overwrite_confirmation
        dup rot gtk_file_chooser_set_filename drop
        run-and-get-filename
    ] with-destructors ;

    GtkWindow* parent,
    GtkFileChooserAction action,
    gchar* first_button_text,
    gint first_button_response,
    gchar* second_button_text,
    gint second_button_response,
    void* sentinel )

:: <gtk-file-chooser-dialog> ( title action -- dialog )
    title utf8 string>alien
    ! Current active window becomes the parent
    world get handle>> window>>
    GTK_FILE_CHOOSER_ACTION_OPEN
    "Cancel" utf8 string>alien
    GTK_RESPONSE_CANCEL
    action utf8 string>alien
    GTK_RESPONSE_ACCEPT
    f
    gtk_file_chooser_dialog_new &gtk_widget_destroy ;


: run-and-get-filename ( dialog -- path/f )
    dup gtk_dialog_run GTK_RESPONSE_ACCEPT = [
        gtk_file_chooser_get_filename utf8 alien>string
    ] [
        drop f
    ] if ;
