X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=src%2Ffileref.c;h=be4f23f816aa1783c82f6419cef3d2da3168d73b;hb=47d20aad0aecf8161a3ec94bdc7da9cd42f4ae62;hp=1b7cf57cfc435d1af8fea1092d2c619e841dac94;hpb=3bcfb092671765e3ece0c4225c4e69ad960b31cc;p=rodin%2Fchimara.git diff --git a/src/fileref.c b/src/fileref.c index 1b7cf57..be4f23f 100644 --- a/src/fileref.c +++ b/src/fileref.c @@ -3,10 +3,9 @@ #include #include #include "fileref.h" -#include "error.h" +#include "chimara-glk-private.h" -/* List of streams currently in existence */ -static GList *fileref_list = NULL; +extern ChimaraGlkPrivate *glk_data; /** * glk_fileref_iterate: @@ -31,7 +30,7 @@ glk_fileref_iterate(frefid_t fref, glui32 *rockptr) GList *retnode; if(fref == NULL) - retnode = fileref_list; + retnode = glk_data->fileref_list; else retnode = fref->fileref_list->next; frefid_t retval = retnode? (frefid_t)retnode->data : NULL; @@ -71,8 +70,8 @@ fileref_new(gchar *filename, glui32 rock, glui32 usage, glui32 orig_filemode) f->orig_filemode = orig_filemode; /* Add it to the global fileref list */ - fileref_list = g_list_prepend(fileref_list, f); - f->fileref_list = fileref_list; + glk_data->fileref_list = g_list_prepend(glk_data->fileref_list, f); + f->fileref_list = glk_data->fileref_list; return f; } @@ -102,14 +101,14 @@ glk_fileref_create_temp(glui32 usage, glui32 rock) gint handle = g_file_open_tmp("glkXXXXXX", &filename, &error); if(handle == -1) { - error_dialog(NULL, error, "Error creating temporary file: "); + g_warning("Error creating temporary file: %s", error->message); if(filename) g_free(filename); return NULL; } if(close(handle) == -1) /* There is no g_close()? */ { - error_dialog(NULL, NULL, "Error closing temporary file."); + g_warning("Error closing temporary file."); if(filename) g_free(filename); return NULL; @@ -144,10 +143,13 @@ glk_fileref_create_by_prompt(glui32 usage, glui32 fmode, glui32 rock) /* TODO: Remember current working directory and last used filename for each usage */ GtkWidget *chooser; + + gdk_threads_enter(); + switch(fmode) { case filemode_Read: - chooser = gtk_file_chooser_dialog_new("Select a file", NULL, + chooser = gtk_file_chooser_dialog_new("Select a file to open", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, @@ -156,9 +158,7 @@ glk_fileref_create_by_prompt(glui32 usage, glui32 fmode, glui32 rock) GTK_FILE_CHOOSER_ACTION_OPEN); break; case filemode_Write: - case filemode_ReadWrite: - case filemode_WriteAppend: - chooser = gtk_file_chooser_dialog_new("Select a file", NULL, + chooser = gtk_file_chooser_dialog_new("Select a file to save to", NULL, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, @@ -168,14 +168,26 @@ glk_fileref_create_by_prompt(glui32 usage, glui32 fmode, glui32 rock) gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER(chooser), TRUE); break; + case filemode_ReadWrite: + case filemode_WriteAppend: + chooser = gtk_file_chooser_dialog_new("Select a file to save to", NULL, + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, + NULL); + gtk_file_chooser_set_action(GTK_FILE_CHOOSER(chooser), + GTK_FILE_CHOOSER_ACTION_SAVE); + break; default: g_warning("glk_fileref_create_by_prompt: Unsupported mode"); + gdk_threads_leave(); return NULL; } if(gtk_dialog_run( GTK_DIALOG(chooser) ) != GTK_RESPONSE_ACCEPT) { gtk_widget_destroy(chooser); + gdk_threads_leave(); return NULL; } gchar *filename = @@ -183,6 +195,8 @@ glk_fileref_create_by_prompt(glui32 usage, glui32 fmode, glui32 rock) frefid_t f = fileref_new(filename, rock, usage, fmode); g_free(filename); gtk_widget_destroy(chooser); + + gdk_threads_leave(); return f; } @@ -212,7 +226,7 @@ glk_fileref_create_by_name(glui32 usage, char *name, glui32 rock) &error); if(osname == NULL) { - error_dialog(NULL, error, "Error during latin1->filename conversion: "); + g_warning("Error during latin1->filename conversion: %s", error->message); return NULL; } @@ -260,7 +274,7 @@ glk_fileref_create_from_fileref(glui32 usage, frefid_t fref, glui32 rock) void glk_fileref_destroy(frefid_t fref) { - fileref_list = g_list_delete_link(fileref_list, fref->fileref_list); + glk_data->fileref_list = g_list_delete_link(glk_data->fileref_list, fref->fileref_list); if(fref->filename) g_free(fref->filename); g_free(fref); @@ -277,7 +291,7 @@ glk_fileref_delete_file(frefid_t fref) { if( glk_fileref_does_file_exist(fref) ) if(g_unlink(fref->filename) == -1) - error_dialog(NULL, NULL, "Error deleting file %s", fref->filename); + g_warning("Error deleting file %s", fref->filename); } /**