! Copyright (C) 2014, 2015 John Benediktsson. ! See http://factorcode.org/license.txt for BSD license. 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 ( 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 >k_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 ; PRIVATE> M: linux open-file-dialog [ "Open File" "Open" run-and-get-filename ] with-destructors ; M: linux save-file-dialog [ "Save File" "Save" dup t gtk_file_chooser_set_do_overwrite_confirmation dup rot utf8 string>alien gtk_file_chooser_set_filename drop run-and-get-filename ] with-destructors ;