]> gitweb.factorcode.org Git - factor.git/commitdiff
file-picker.linux: fixing open-file-dialog and save-file-dialog
authorBjörn Lindqvist <bjourne@gmail.com>
Sat, 24 Jun 2017 21:49:07 +0000 (23:49 +0200)
committerBjörn Lindqvist <bjourne@gmail.com>
Sat, 24 Jun 2017 21:49:07 +0000 (23:49 +0200)
I had to use utf8 string>alien over utf8 encode because the latter
doesnt null-terminate the string.

extra/file-picker/linux/linux.factor

index 9e7ff65ec4fac322ee0a88a4fa3665a45fd2cb0c..66db140e52b241d4e9933989cbf8eec0ae76fc36 100644 (file)
@@ -1,8 +1,8 @@
 ! 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
@@ -14,29 +14,27 @@ FUNCTION: GtkWidget* gtk_file_chooser_dialog_new (
     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 ;
@@ -53,6 +51,6 @@ M: linux save-file-dialog
     [
         "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 ;