! 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
GtkWindow* parent,
GtkFileChooserAction action,
gchar* first_button_text,
- gint* first_button_response,
+ gint first_button_response,
gchar* second_button_text,
- gint* second_button_response,
+ gint second_button_response,
void* sentinel )
-: <gtk-file-chooser-dialog> ( title action -- dialog )
- [
- utf8 encode
- f
- GTK_FILE_CHOOSER_ACTION_OPEN
- "Cancel" utf8 encode
- GTK_RESPONSE_CANCEL gint <ref>
- ] [
- utf8 encode
- GTK_RESPONSE_ACCEPT gint <ref>
- f
- gtk_file_chooser_dialog_new
- >k_widget_destroy
- ] bi* ;
+:: <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 >k_widget_destroy ;
+
: run-and-get-filename ( dialog -- path/f )
dup gtk_dialog_run GTK_RESPONSE_ACCEPT = [
- gtk_file_chooser_get_filename alien>native-string
+ gtk_file_chooser_get_filename utf8 alien>string
] [
drop f
] if ;
[
"Save File" "Save" <gtk-file-chooser-dialog>
dup t gtk_file_chooser_set_do_overwrite_confirmation
- dup rot gtk_file_chooser_set_filename drop
+ dup rot utf8 string>alien gtk_file_chooser_set_filename drop
run-and-get-filename
] with-destructors ;