- if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
- GError *error = NULL;
- char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
-
- /* Open a new player window */
- ChimaraPlayer *player = CHIMARA_PLAYER(chimara_player_new());
- gtk_widget_show_all(GTK_WIDGET(player));
- gtk_window_present(GTK_WINDOW(player));
-
- gchar *blorbfile = search_for_graphics_file(filename);
- if(blorbfile) {
- g_object_set(player->glk, "graphics-file", blorbfile, NULL);
- g_free(blorbfile);
- }
- if(!chimara_if_run_game(CHIMARA_IF(player->glk), filename, &error)) {
- error_dialog(GTK_WINDOW(player), error, _("Could not open game file '%s': "), filename);
- g_free(filename);
- gtk_widget_destroy(dialog);
- return;
- }
-
- path = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(dialog));
- if(path) {
- g_settings_set(theapp->state_settings, "last-open-path", "ms", path);
- g_free(path);
- }
-
- /* Add file to recent files list */
- GtkRecentManager *manager = gtk_recent_manager_get_default();
- gchar *uri;
-
- if(!(uri = g_filename_to_uri(filename, NULL, &error)))
- g_warning(_("Could not convert filename '%s' to URI: %s"), filename, error->message);
- else {
- if(!gtk_recent_manager_add_item(manager, uri))
- g_warning(_("Could not add URI '%s' to recent files list."), uri);
- g_free(uri);
- }
- g_free(filename);
+ if(gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_ACCEPT)
+ goto finally;
+
+ GError *error = NULL;
+ char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+
+ if(!chimara_app_open_game(theapp, filename))
+ goto finally2;
+
+ path = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(dialog));
+ if(path) {
+ g_settings_set(theapp->state_settings, "last-open-path", "ms", path);
+ g_free(path);
+ }
+
+ /* Add file to recent files list */
+ GtkRecentManager *manager = gtk_recent_manager_get_default();
+ gchar *uri;
+
+ if(!(uri = g_filename_to_uri(filename, NULL, &error)))
+ g_warning(_("Could not convert filename '%s' to URI: %s"), filename, error->message);
+ else {
+ if(!gtk_recent_manager_add_item(manager, uri))
+ g_warning(_("Could not add URI '%s' to recent files list."), uri);
+ g_free(uri);