#include <gtk/gtk.h>
#include <glib/gstdio.h>
#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:
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;
f->filename = g_strdup(filename);
f->usage = usage;
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;
}
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;
/* 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,
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,
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 =
frefid_t f = fileref_new(filename, rock, usage, fmode);
g_free(filename);
gtk_widget_destroy(chooser);
+
+ gdk_threads_leave();
return f;
}
&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;
}
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);
{
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);
}
/**