file-picker.linux: fixing open-file-dialog and save-file-dialog

I had to use utf8 string>alien over utf8 encode because the latter
doesnt null-terminate the string.
modern-harvey2
Björn Lindqvist 2017-06-24 23:49:07 +02:00
parent 0d8338ceb8
commit e66b1a594a
1 changed files with 19 additions and 21 deletions

View 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 ;