     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
-        &gtk_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 &gtk_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 ;

! 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 ;
IN: file-picker.linux

<PRIVATE

    [
        "Save File" "Save" <gtk-file-chooser-dialog>
        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 ;
