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 ; IN: file-picker.linux ( title action -- dialog ) [ utf8 encode f GTK_FILE_CHOOSER_ACTION_OPEN "Cancel" utf8 encode GTK_RESPONSE_CANCEL int ] [ utf8 encode GTK_RESPONSE_ACCEPT int f gtk_file_chooser_dialog_new >k_widget_destroy ] bi* ; : run-and-get-filename ( dialog -- path/f ) dup gtk_dialog_run GTK_RESPONSE_ACCEPT = [ gtk_file_chooser_get_filename alien>native-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 gtk_file_chooser_set_filename drop run-and-get-filename ] with-destructors ;