mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
File Open now closes the previous file, first
This is a pretty significant semantic change - Open used to act more like Import; you added more dives to the divelist. With this change it instead acts more like the traditional File->Open in that it closes the previous file, first. The diff hides the minimalistic nature of the change - it seemed cleaner to move the file_open function around than to do a forward declaration of file_close. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
65d9d48845
commit
d3bf8af7fe
1 changed files with 50 additions and 47 deletions
97
gtk-gui.c
97
gtk-gui.c
|
@ -126,53 +126,6 @@ void report_error(GError* error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void file_open(GtkWidget *w, gpointer data)
|
|
||||||
{
|
|
||||||
GtkWidget *dialog;
|
|
||||||
GtkFileFilter *filter;
|
|
||||||
|
|
||||||
dialog = gtk_file_chooser_dialog_new("Open File",
|
|
||||||
GTK_WINDOW(main_window),
|
|
||||||
GTK_FILE_CHOOSER_ACTION_OPEN,
|
|
||||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
|
||||||
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
|
|
||||||
NULL);
|
|
||||||
gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE);
|
|
||||||
|
|
||||||
filter = gtk_file_filter_new();
|
|
||||||
gtk_file_filter_add_pattern(filter, "*.xml");
|
|
||||||
gtk_file_filter_add_pattern(filter, "*.XML");
|
|
||||||
gtk_file_filter_add_pattern(filter, "*.sda");
|
|
||||||
gtk_file_filter_add_pattern(filter, "*.SDA");
|
|
||||||
gtk_file_filter_add_mime_type(filter, "text/xml");
|
|
||||||
gtk_file_filter_set_name(filter, "XML file");
|
|
||||||
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter);
|
|
||||||
|
|
||||||
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
|
|
||||||
GSList *filenames, *fn_glist;
|
|
||||||
char *filename;
|
|
||||||
filenames = fn_glist = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog));
|
|
||||||
|
|
||||||
GError *error = NULL;
|
|
||||||
while(filenames != NULL) {
|
|
||||||
filename = filenames->data;
|
|
||||||
parse_file(filename, &error);
|
|
||||||
if (error != NULL)
|
|
||||||
{
|
|
||||||
report_error(error);
|
|
||||||
g_error_free(error);
|
|
||||||
error = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free(filename);
|
|
||||||
filenames = g_slist_next(filenames);
|
|
||||||
}
|
|
||||||
g_slist_free(fn_glist);
|
|
||||||
report_dives(FALSE);
|
|
||||||
}
|
|
||||||
gtk_widget_destroy(dialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void file_save_as(GtkWidget *w, gpointer data)
|
static void file_save_as(GtkWidget *w, gpointer data)
|
||||||
{
|
{
|
||||||
GtkWidget *dialog;
|
GtkWidget *dialog;
|
||||||
|
@ -307,6 +260,56 @@ static void file_close(GtkWidget *w, gpointer data)
|
||||||
show_dive_info(NULL);
|
show_dive_info(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void file_open(GtkWidget *w, gpointer data)
|
||||||
|
{
|
||||||
|
GtkWidget *dialog;
|
||||||
|
GtkFileFilter *filter;
|
||||||
|
|
||||||
|
/* first, close the existing file, if any */
|
||||||
|
file_close(w, data);
|
||||||
|
|
||||||
|
dialog = gtk_file_chooser_dialog_new("Open File",
|
||||||
|
GTK_WINDOW(main_window),
|
||||||
|
GTK_FILE_CHOOSER_ACTION_OPEN,
|
||||||
|
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||||
|
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
|
||||||
|
NULL);
|
||||||
|
gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE);
|
||||||
|
|
||||||
|
filter = gtk_file_filter_new();
|
||||||
|
gtk_file_filter_add_pattern(filter, "*.xml");
|
||||||
|
gtk_file_filter_add_pattern(filter, "*.XML");
|
||||||
|
gtk_file_filter_add_pattern(filter, "*.sda");
|
||||||
|
gtk_file_filter_add_pattern(filter, "*.SDA");
|
||||||
|
gtk_file_filter_add_mime_type(filter, "text/xml");
|
||||||
|
gtk_file_filter_set_name(filter, "XML file");
|
||||||
|
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter);
|
||||||
|
|
||||||
|
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
|
||||||
|
GSList *filenames, *fn_glist;
|
||||||
|
char *filename;
|
||||||
|
filenames = fn_glist = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog));
|
||||||
|
|
||||||
|
GError *error = NULL;
|
||||||
|
while(filenames != NULL) {
|
||||||
|
filename = filenames->data;
|
||||||
|
parse_file(filename, &error);
|
||||||
|
if (error != NULL)
|
||||||
|
{
|
||||||
|
report_error(error);
|
||||||
|
g_error_free(error);
|
||||||
|
error = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free(filename);
|
||||||
|
filenames = g_slist_next(filenames);
|
||||||
|
}
|
||||||
|
g_slist_free(fn_glist);
|
||||||
|
report_dives(FALSE);
|
||||||
|
}
|
||||||
|
gtk_widget_destroy(dialog);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean on_delete(GtkWidget* w, gpointer data)
|
static gboolean on_delete(GtkWidget* w, gpointer data)
|
||||||
{
|
{
|
||||||
/* Make sure to flush any modified dive data */
|
/* Make sure to flush any modified dive data */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue