/* Mean:It seems it is attached to the dialog & destroyed with it As it leads to crash if we don't recreate them each time....*/ uint8_t initFileSelector(void) { #define ADD_PAT(x,y) gtk_file_filter_add_pattern(x,"*."#y); filter_avi=gtk_file_filter_new(); gtk_file_filter_set_name(filter_avi,"Avi (*.avi)"); ADD_PAT(filter_avi,avi); ADD_PAT(filter_avi,AVI); filter_mpeg=gtk_file_filter_new(); gtk_file_filter_set_name(filter_mpeg,"Mpeg (*.m*,*.vob)"); ADD_PAT(filter_mpeg,[mM][12][Vv]); ADD_PAT(filter_mpeg,[Mm][pP][gG]); ADD_PAT(filter_mpeg,[Vv][Oo][Bb]); ADD_PAT(filter_mpeg,ts); ADD_PAT(filter_mpeg,TS); filter_image=gtk_file_filter_new(); gtk_file_filter_set_name(filter_image,"Images"); ADD_PAT(filter_image,png); ADD_PAT(filter_image,bmp); ADD_PAT(filter_image,jpg); ADD_PAT(filter_image,PNG); ADD_PAT(filter_image,BMP); ADD_PAT(filter_image,JPG); filter_all=gtk_file_filter_new(); gtk_file_filter_set_name(filter_all,"All"); gtk_file_filter_add_pattern (filter_all, "*"); return 1; }
void GUI_FileSel(const char *label, SELFILE_CB cb, int rw,char **rname) { /* Create the selector */ GtkWidget *dialog; char *name = NULL; char *tmpname; gchar *selected_filename; uint8_t res; if (rname) *rname = NULL; if (rw) dialog = gtk_file_chooser_dialog_new ("Save", NULL, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); else dialog = gtk_file_chooser_dialog_new ("Open File", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk_dialog_set_default_response (GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); gtk_dialog_set_alternative_button_order(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT, GTK_RESPONSE_CANCEL, -1); initFileSelector(); setFilter(dialog); gtk_window_set_title (GTK_WINDOW(dialog), label); gtk_register_dialog(dialog); if (rw) res = prefs->get(LASTFILES_LASTDIR_WRITE,(char **)&tmpname); else res = prefs->get(LASTFILES_LASTDIR_READ,(char **)&tmpname); if (res) { DIR *dir; char *str = ADM_PathCanonize(tmpname); ADM_PathStripName(str); /* LASTDIR may have gone; then do nothing and use current dir instead (implied) */ if (dir = opendir(str)) { closedir(dir); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),(gchar *)str); } delete [] str; } ADM_dealloc(tmpname); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { selected_filename = (gchar *)gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); #ifdef _WIN32 if (*(selected_filename + strlen(selected_filename) - 1) == '\\'){ #else if (*(selected_filename + strlen(selected_filename) - 1) == '/'){ #endif GUI_Error_HIG(QT_TR_NOOP("Cannot open directory as a file"), NULL); } else { name = ADM_strdup(selected_filename); char *str = ADM_PathCanonize(name); ADM_PathStripName(str); if (rw) prefs->set(LASTFILES_LASTDIR_WRITE, (char*)str); else prefs->set(LASTFILES_LASTDIR_READ, (char*)str); delete [] str; } } gtk_unregister_dialog(dialog); gtk_widget_destroy(dialog); // CYB 2005.02.23 if (cb) { #warning fixme const char *leak=NULL; FileSel_ReadWrite(cb, rw, name, leak); ADM_dealloc(name); } else *rname = name; } /* Mean:It seems it is attached to the dialog & destroyed with it As it leads to crash if we don't recreate them each time....*/ void initFileSelector(void) { #define ADD_PAT(x,y) gtk_file_filter_add_pattern(x,"*."#y); filter_avi=gtk_file_filter_new(); gtk_file_filter_set_name(filter_avi, "AVI (*.avi)"); ADD_PAT(filter_avi, avi); ADD_PAT(filter_avi, AVI); filter_mpeg=gtk_file_filter_new(); gtk_file_filter_set_name(filter_mpeg, "MPEG (*.m*,*.vob)"); ADD_PAT(filter_mpeg, [mM][12][Vv]); ADD_PAT(filter_mpeg, [Mm][pP][gG]); ADD_PAT(filter_mpeg, [Vv][Oo][Bb]); ADD_PAT(filter_mpeg, ts); ADD_PAT(filter_mpeg, TS); filter_image = gtk_file_filter_new(); gtk_file_filter_set_name(filter_image, QT_TR_NOOP("Images")); ADD_PAT(filter_image, png); ADD_PAT(filter_image, bmp); ADD_PAT(filter_image, jpg); ADD_PAT(filter_image, PNG); ADD_PAT(filter_image, BMP); ADD_PAT(filter_image, JPG); filter_all = gtk_file_filter_new(); gtk_file_filter_set_name(filter_all, QT_TR_NOOP("All")); gtk_file_filter_add_pattern(filter_all, "*"); }