void gtkui_file_open() { // Open a file using a GTK+ dialog GtkWidget *dialog = gtk_file_chooser_dialog_new( "Select a ROM", GTK_WINDOW(gtkwindow), GTK_FILE_CHOOSER_ACTION_OPEN, "Cancel", GTK_RESPONSE_CANCEL, "Open", GTK_RESPONSE_ACCEPT, NULL); if(conf.misc_last_folder != NULL) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), conf.misc_last_folder); GtkFileFilter *filter = gtk_file_filter_new(); gtk_file_filter_set_name(filter, "NES ROMs and Archives"); gtk_file_filter_add_pattern(filter, "*.nes"); gtk_file_filter_add_pattern(filter, "*.fds"); gtk_file_filter_add_pattern(filter, "*.unf"); gtk_file_filter_add_pattern(filter, "*.unif"); gtk_file_filter_add_pattern(filter, "*.nsf"); gtk_file_filter_add_pattern(filter, "*.zip"); gtk_file_filter_add_pattern(filter, "*.7z"); gtk_file_filter_add_pattern(filter, "*.txz"); gtk_file_filter_add_pattern(filter, "*.tar.xz"); gtk_file_filter_add_pattern(filter, "*.xz"); gtk_file_filter_add_pattern(filter, "*.tgz"); gtk_file_filter_add_pattern(filter, "*.tar.gz"); gtk_file_filter_add_pattern(filter, "*.gz"); gtk_file_filter_add_pattern(filter, "*.tbz"); gtk_file_filter_add_pattern(filter, "*.tar.bz2"); gtk_file_filter_add_pattern(filter, "*.bz2"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char *filename; filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); if(conf.misc_last_folder != NULL) free(conf.misc_last_folder); conf.misc_last_folder = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(dialog)); gtk_widget_destroy(dialog); nst_load(filename); g_free(filename); } else { gtk_widget_destroy(dialog); } }
void gtkui_drag_data(GtkWidget *widget, GdkDragContext *dragcontext, gint x, gint y, GtkSelectionData *seldata, guint info, guint time, gpointer data) { // Handle the Drag and Drop if ((widget == NULL) || (dragcontext == NULL) || (seldata == NULL)) { return; } if (info == 0) { gchar *fileuri = (gchar*)gtk_selection_data_get_data(seldata); gchar *filename = g_filename_from_uri(fileuri, NULL, NULL); // Dirty hack. g_filename_from_uri adds a \r\n to the string size_t ln = strlen(filename) - 2; if (filename[ln] == '\r') { filename[ln] = '\0'; } nst_load(filename); } }
void gtkui_open_recent(GtkWidget *widget, gpointer userdata) { // Open a recently used item gchar *uri = gtk_recent_chooser_get_current_uri((GtkRecentChooser*)widget); nst_load(g_filename_from_uri(uri, NULL, NULL)); }