57 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Factor
		
	
	
| 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
 | |
| 
 | |
| LIBRARY: gtk
 | |
| 
 | |
| FUNCTION: GtkWidget* gtk_file_chooser_dialog_new (
 | |
|     gchar* title,
 | |
|     GtkWindow* parent,
 | |
|     GtkFileChooserAction action,
 | |
|     gchar* first_button_text,
 | |
|     gint* first_button_response,
 | |
|     gchar* second_button_text,
 | |
|     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* ;
 | |
| 
 | |
| : 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" <gtk-file-chooser-dialog>
 | |
|         run-and-get-filename
 | |
|     ] with-destructors ;
 | |
| 
 | |
| 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
 | |
|         run-and-get-filename
 | |
|     ] with-destructors ;
 |