/* File->Import Into Skein... */ void action_import_into_skein(GtkAction *action, I7Story *story) { GError *err = NULL; /* Ask the user for a file to import */ /* TRANSLATORS: File->Import Into Skein... */ GtkWidget *dialog = gtk_file_chooser_dialog_new( _("Select the file to import into the skein"), GTK_WINDOW(story), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ON_PARENT); /* Create appropriate file filters */ GtkFileFilter *filter1 = gtk_file_filter_new(); gtk_file_filter_set_name(filter1, _("Interpreter recording files (*.rec)")); gtk_file_filter_add_pattern(filter1, "*.rec"); GtkFileFilter *filter2 = gtk_file_filter_new(); gtk_file_filter_set_name(filter2, _("All Files")); gtk_file_filter_add_pattern(filter2, "*"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter1); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter2); if(gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_ACCEPT) { gtk_widget_destroy(dialog); return; } GFile *file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(dialog)); gtk_widget_destroy(dialog); if(!file) return; /* Fail silently */ /* Provide some visual feedback that the command did something */ if(!i7_skein_import(i7_story_get_skein(story), file, &err)) error_dialog_file_operation(GTK_WINDOW(story), file, err, I7_FILE_ERROR_OPEN, NULL); else i7_story_show_pane(story, I7_PANE_SKEIN); g_object_unref(file); }
static void extension_search_result(GFile *parent, GFileInfo *info, gpointer unused, I7SearchWindow *self) { I7_SEARCH_WINDOW_USE_PRIVATE(self, priv); GError *err = NULL; const char *basename = g_file_info_get_name(info); GFile *file = g_file_get_child(parent, basename); char *contents; GtkTextBuffer *buffer; GtkTreeIter result; GtkTextIter search_from, match_start, match_end; if(!g_file_load_contents(file, NULL, &contents, NULL, NULL, &err)) { char *author_display_name = file_get_display_name(parent); const char *ext_display_name = g_file_info_get_display_name(info); error_dialog_file_operation(GTK_WINDOW(self), file, err, I7_FILE_ERROR_OTHER, /* TRANSLATORS: Error opening EXTENSION_NAME by AUTHOR_NAME */ _("Error opening extension '%s' by '%s':"), author_display_name, ext_display_name); g_free(author_display_name); g_object_unref(file); return; } buffer = GTK_TEXT_BUFFER(gtk_source_buffer_new(NULL)); gtk_text_buffer_set_text(buffer, contents, -1); g_free(contents); gtk_text_buffer_get_start_iter(buffer, &search_from); start_spinner(self); while(find_no_wrap(&search_from, priv->text, TRUE, GTK_SOURCE_SEARCH_TEXT_ONLY | (priv->ignore_case? GTK_SOURCE_SEARCH_CASE_INSENSITIVE : 0), priv->algorithm, &match_start, &match_end)) { unsigned lineno; char *sort, *context; while(gtk_events_pending()) gtk_main_iteration(); search_from = match_end; /* Get the line number (counted from 0) */ lineno = gtk_text_iter_get_line(&match_start) + 1; context = extract_context(buffer, &match_start, &match_end); /* Make a sort string */ sort = g_strdup_printf("%s %04i", basename, lineno); gtk_list_store_append(priv->results, &result); gtk_list_store_set(priv->results, &result, I7_RESULT_CONTEXT_COLUMN, context, I7_RESULT_SORT_STRING_COLUMN, sort, I7_RESULT_FILE_COLUMN, file, I7_RESULT_RESULT_TYPE_COLUMN, I7_RESULT_TYPE_EXTENSION, I7_RESULT_LINE_NUMBER_COLUMN, lineno, -1); g_free(context); g_free(sort); } stop_spinner(self); g_object_unref(buffer); g_object_unref(file); }