Index: app/app_procs.c =================================================================== RCS file: /cvs/gnome/dia/app/app_procs.c,v retrieving revision 1.166 diff -u -r1.166 app_procs.c --- app/app_procs.c 3 Jul 2005 17:55:49 -0000 1.166 +++ app/app_procs.c 30 Jul 2005 08:32:43 -0000 @@ -151,9 +151,8 @@ vsprintf (buf, fmt, *args2); - fprintf(stderr, - "%s: %s\n", - title,buf); + g_error ("%s: %s\n", title,buf); + } #ifdef GNOME @@ -194,19 +193,23 @@ } #endif -char * -build_output_file_name(const char *infname, const char *format) +/** Return an filename with new extension. + * The value returned is newly allocated. + */ +gchar * +build_filename_extension(const gchar *infname, const gchar *extension) { - /* FIXME: probably overly confident... */ - char *p = strrchr(infname,'.'); - char *tmp; - if (!p) { - return g_strconcat(infname,".",format,NULL); - } - tmp = g_malloc0(strlen(infname)+1+strlen(format)+1); - memcpy(tmp,infname,p-infname); - strcat(tmp,"."); - strcat(tmp,format); + gchar *tmp, *last_dot; + gchar *filename; + if (infname == NULL || infname[0] == '\0' || + infname[0] == '.' || extension == NULL) + return NULL; + filename = g_strdup(infname); + last_dot = g_strrstr(filename, "."); + if (last_dot) + *last_dot='\0'; + tmp = g_strconcat(filename,".",extension,NULL); + g_free(filename); return tmp; } @@ -372,9 +375,9 @@ */ static gboolean do_convert(const char *infname, - const char *outfname, DiaExportFilter *ef, - const char *size, - char *show_layers) + const gchar *outfname, DiaExportFilter *ef, + const gchar *size, + gchar *show_layers) { DiaImportFilter *inf; DiagramData *diagdata = NULL; @@ -387,7 +390,7 @@ ef = filter_guess_export_filter(outfname); if (!ef) { g_error(_("%s error: don't know how to export into %s\n"), - argv0,outfname); + dia_message_filename(argv0), dia_message_filename(outfname)); exit(1); } } @@ -396,7 +399,7 @@ if (0==strcmp(infname,outfname)) { g_error(_("%s error: input and output file name is identical: %s"), - argv0, infname); + dia_message_filename(argv0), dia_message_filename(infname)); exit(1); } @@ -404,7 +407,7 @@ if (!inf->import_func(infname,diagdata,inf->user_data)) { g_error(_("%s error: need valid input file %s\n"), - argv0, infname); + dia_message_filename(argv0), dia_message_filename(infname)); exit(1); } @@ -427,9 +430,8 @@ } else ef->export_func(diagdata, outfname, infname, ef->user_data); - /* if (!quiet) */ fprintf(stdout, - _("%s --> %s\n"), - infname,outfname); + g_print(_("%s --> %s\n"), + dia_message_filename(infname),dia_message_filename(outfname)); g_object_unref(diagdata); return TRUE; } @@ -563,7 +565,7 @@ DiaExportFilter *ef = NULL; /* First try guessing based on extension */ - export_file_name = build_output_file_name(in_file_name, + export_file_name = build_filename_extension(in_file_name, export_file_format); /* to make the --size hack even uglier but work again for the only filter supporting it */ @@ -578,7 +580,7 @@ return FALSE; } g_free (export_file_name); - export_file_name = build_output_file_name(in_file_name, + export_file_name = build_filename_extension(in_file_name, ef->extensions[0]); } made_conversions |= do_convert(in_file_name, @@ -748,9 +750,13 @@ argv0 = (argc > 0) ? argv[0] : "(none)"; gtk_set_locale(); + /* Hack for correct export formats with float numbers in text */ setlocale(LC_NUMERIC, "C"); bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR); +#if defined ENABLE_NLS && defined HAVE_BIND_TEXTDOMAIN_CODESET + bind_textdomain_codeset(GETTEXT_PACKAGE,"UTF-8"); +#endif textdomain(GETTEXT_PACKAGE); process_opts(argc, argv, @@ -760,12 +766,8 @@ &files, &export_file_name, &export_file_format, &size, &show_layers, &nosplash); -#if defined ENABLE_NLS && defined HAVE_BIND_TEXTDOMAIN_CODESET - bind_textdomain_codeset(GETTEXT_PACKAGE,"UTF-8"); -#endif - textdomain(GETTEXT_PACKAGE); - if (argv && dia_is_interactive && !version) { + if (argv && app_is_interactive() && !version) { #ifdef GNOME GnomeProgram *program = gnome_program_init (PACKAGE, VERSION, LIBGNOMEUI_MODULE, @@ -809,16 +811,16 @@ if (version) { #if (defined __TIME__) && (defined __DATE__) /* TRANSLATOR: 2nd and 3rd %s are time and date respectively. */ - printf(g_locale_from_utf8(_("Dia version %s, compiled %s %s\n"), -1, NULL, NULL, NULL), VERSION, __TIME__, __DATE__); + g_print(_("Dia version %s, compiled %s %s\n"), VERSION, __TIME__, __DATE__); #else - printf(g_locale_from_utf8(_("Dia version %s\n"), -1, NULL, NULL, NULL), VERSION); + g_print(_("Dia version %s\n"), VERSION); #endif if (verbose) dump_dependencies(); exit(0); } - if (!dia_is_interactive) + if (!app_is_interactive()) log_to_stderr = TRUE; else { #ifdef G_OS_WIN32 @@ -839,7 +841,7 @@ stdprops_init(); - if (dia_is_interactive) { + if (app_is_interactive()) { dia_image_init(); gdk_rgb_init(); @@ -849,13 +851,9 @@ if (!nosplash) { app_splash_init(""); } - } - if (dia_is_interactive) create_user_dirs(); - - /* Init cursors: */ - if (dia_is_interactive) { + /* Init cursors: */ color_init(); default_cursor = gdk_cursor_new(GDK_LEFT_PTR); ddisplay_set_all_cursor(default_cursor); @@ -885,7 +883,7 @@ /** Must load prefs after persistence */ prefs_init(); - if (dia_is_interactive) { + if (app_is_interactive()) { /* further initialization *before* reading files */ active_tool = create_modify_tool(); @@ -915,7 +913,7 @@ made_conversions = handle_all_diagrams(files, export_file_name, export_file_format, size, show_layers); - if (dia_is_interactive && files == NULL) { + if (app_is_interactive() && files == NULL) { gchar *filename = g_filename_from_utf8(_("Diagram1.dia"), -1, NULL, NULL, NULL); Diagram *diagram = new_diagram (filename); g_free(filename); @@ -1020,7 +1018,7 @@ } /* save pluginrc */ - if (dia_is_interactive) + if (app_is_interactive()) dia_pluginrc_write(); gtk_main_quit(); @@ -1102,7 +1100,6 @@ return DIA_PLUGIN_INIT_OK; } -/* Note: running in locale encoding */ static void process_opts(int argc, char **argv, #if USE_GOPTION @@ -1120,7 +1117,7 @@ poptSetOtherOptionHelp(poptCtx, _("[OPTION...] [FILE...]")); while (rc >= 0) { if((rc = poptGetNextOpt(poptCtx)) < -1) { - fprintf(stderr,_("Error on option %s: %s.\nRun '%s --help' to see a full list of available command line options.\n"), + g_error(_("Error on option %s: %s.\nRun '%s --help' to see a full list of available command line options.\n"), poptBadOption(poptCtx, 0), poptStrerror(rc), argv[0]); @@ -1151,10 +1148,10 @@ g_option_context_add_group (context, gtk_get_option_group (FALSE)); # endif if (!g_option_context_parse (context, &argc, &argv, &error)) { - g_print (error->message); - g_error_free (error); + g_print (error->message); + g_error_free (error); g_option_context_free(context); - exit(0); + exit(0); } if (argc < 2) { g_option_context_free(context); @@ -1218,11 +1215,17 @@ GSList *node = NULL; gboolean made_conversions = FALSE; +#if GLIB_CHECK_VERSION(2,5,5) + export_file_name = g_filename_from_utf8(export_file_name, -1, NULL, NULL, NULL); +#endif for (node = files; node; node = node->next) { made_conversions |= handle_initial_diagram(node->data, export_file_name, export_file_format, size, show_layers); } +#if GLIB_CHECK_VERSION(2,5,5) + free(export_file_name); +#endif return made_conversions; } Index: app/app_procs.h =================================================================== RCS file: /cvs/gnome/dia/app/app_procs.h,v retrieving revision 1.12 diff -u -r1.12 app_procs.h --- app/app_procs.h 5 Mar 2005 18:57:39 -0000 1.12 +++ app/app_procs.h 30 Jul 2005 08:32:43 -0000 @@ -28,7 +28,7 @@ gboolean app_exit(void); int app_is_embedded(void); -char *build_output_file_name(const char *infname, const char *format); +gchar *build_filename_extension(const gchar *infname, const gchar *extension); void app_splash_init(const gchar* name); void app_splash_done(void); Index: app/commands.c =================================================================== RCS file: /cvs/gnome/dia/app/commands.c,v retrieving revision 1.134 diff -u -r1.134 commands.c --- app/commands.c 10 Jun 2005 15:58:24 -0000 1.134 +++ app/commands.c 30 Jul 2005 08:32:43 -0000 @@ -131,11 +131,32 @@ Diagram *dia; DDisplay *ddisp; static int untitled_nr = 1; - char buffer[24]; - - g_snprintf(buffer, 24, _("Diagram%d.dia"), untitled_nr++); - - dia = new_diagram(buffer); + char *buffer; + char *filename; + GList *list; + gboolean flag; + for(flag = TRUE; flag ; ) { + flag = FALSE; + buffer = g_strdup_printf(_("Diagram%d.dia"), untitled_nr++); + list = dia_open_diagrams(); + while (list != NULL) { + Diagram *dia = (Diagram *)list->data; + gchar *name = diagram_get_name(dia); + if (0 == strcmp(name,buffer)) + { + flag = TRUE; + g_free(name); + g_free(buffer); + break; + } + g_free(name); + list = g_list_next(list); + } + } + filename = g_filename_from_utf8(buffer, -1, NULL, NULL, NULL); + g_free(buffer); + dia = new_diagram(filename); + g_free(filename); ddisp = new_display(dia); diagram_tree_add(diagram_tree(), dia); } Index: app/diaconv.c =================================================================== RCS file: /cvs/gnome/dia/app/diaconv.c,v retrieving revision 1.8 diff -u -r1.8 diaconv.c --- app/diaconv.c 19 Jan 2004 19:51:30 -0000 1.8 +++ app/diaconv.c 30 Jul 2005 08:32:43 -0000 @@ -212,7 +212,7 @@ while (in_file_name) { g_message("in_file_name = %s",in_file_name); - export_file_name = build_output_file_name(in_file_name, + export_file_name = build_file_name_extension(in_file_name, export_file_format); g_message("export_file_name = %s",export_file_name); do_convert(in_file_name, export_file_name, NULL); Index: app/diagram.c =================================================================== RCS file: /cvs/gnome/dia/app/diagram.c,v retrieving revision 1.101 diff -u -r1.101 diagram.c --- app/diagram.c 19 Jul 2005 21:04:14 -0000 1.101 +++ app/diagram.c 30 Jul 2005 08:32:44 -0000 @@ -58,7 +58,7 @@ static void diagram_class_init (DiagramClass *klass); -static gboolean diagram_init(Diagram *obj, const char *filename); +static gboolean diagram_init(Diagram *obj, const gchar *filename); enum { SELECTION_CHANGED, @@ -115,8 +115,7 @@ diagram_cleanup_autosave(dia); - if (dia->filename) - g_free(dia->filename); + g_free(dia->filename); dia->filename = NULL; G_OBJECT_CLASS (parent_class)->finalize (object); @@ -177,7 +176,7 @@ * encoding. */ static gboolean -diagram_init(Diagram *dia, const char *filename) +diagram_init(Diagram *dia, const gchar *filename) { gchar *newfilename = NULL; GError *error = NULL; @@ -243,7 +242,7 @@ int diagram_load_into(Diagram *diagram, - const char *filename, + const gchar *filename, DiaImportFilter *ifilter) { if (!ifilter) @@ -259,7 +258,7 @@ diagram->unsaved = FALSE; diagram_set_modified(diagram, FALSE); if (app_is_interactive()) - recent_file_history_add(filename); + recent_file_history_add(diagram->filename); diagram_tree_add(diagram_tree(), diagram); return TRUE; } else @@ -267,7 +266,7 @@ } Diagram * -diagram_load(const char *filename, DiaImportFilter *ifilter) +diagram_load(const gchar *filename, DiaImportFilter *ifilter) { Diagram *diagram; @@ -288,7 +287,7 @@ * a legal string in the current encoding, return NULL. */ Diagram * -new_diagram(const char *filename) /* Note: filename is copied */ +new_diagram(const gchar *filename) /* Note: filename is copied */ { Diagram *dia = g_object_new(DIA_TYPE_DIAGRAM, NULL); @@ -1346,14 +1345,18 @@ } void -diagram_set_filename(Diagram *dia, const char *filename) +diagram_set_filename(Diagram *dia, const gchar *filename) { GSList *l; DDisplay *ddisp; - char *title; - + gchar *title; + gchar *newfilename; + /* Make the filename is absolute */ + newfilename = dia_get_absolute_filename (filename); g_free(dia->filename); - dia->filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL); + /* Diagram has filename in UTF-8 encoding */ + dia->filename = g_filename_to_utf8(newfilename, -1, NULL, NULL, NULL); + g_free(newfilename); title = diagram_get_name(dia); @@ -1369,11 +1372,25 @@ g_free(title); layer_dialog_update_diagram_list(); - recent_file_history_add(filename); + recent_file_history_add(dia->filename); diagram_tree_update_name(diagram_tree(), dia); } +/** Returns a string with filename of diagram + * in filesystem encoding or NULL if has not filename. + * The string should be freed after use. + */ +char * +diagram_get_filename(Diagram *dia) +{ + char *tmp; + if (dia == NULL || dia->filename == NULL) + return NULL; + tmp = g_filename_from_utf8(dia->filename, -1, NULL, NULL, NULL); + return tmp; +} + /** Returns a string with a 'sensible' (human-readable) name for the * diagram. The string should be freed after use. * This name may or may not be the same as the filename. @@ -1381,14 +1398,13 @@ gchar * diagram_get_name(Diagram *dia) { - gchar *title = strrchr(dia->filename, G_DIR_SEPARATOR); - if (title==NULL) { - title = dia->filename; - } else { - title++; - } - - return g_strdup(title); + gchar *title; + if (dia->filename == NULL) + title = g_strdup(_("")); + else + title = g_path_get_basename(dia->filename); + + return title; } int diagram_modified_exists(void) Index: app/diagram.h =================================================================== RCS file: /cvs/gnome/dia/app/diagram.h,v retrieving revision 1.40 diff -u -r1.40 diagram.h --- app/diagram.h 3 Jul 2005 17:55:49 -0000 1.40 +++ app/diagram.h 30 Jul 2005 08:32:44 -0000 @@ -43,12 +43,12 @@ struct _Diagram { DiagramData parent_instance; - char *filename; + gchar *filename; /* Filename of the diagram in UTF8 encoding */ int unsaved; /* True if diagram is created but not saved.*/ int mollified; gboolean autosaved; /* True if the diagram is autosaved since last mod */ - char *autosavefilename; /* Holds the name of the current autosave file - * for this diagram, or NULL. */ + gchar *autosavefilename; /* Holds the name of the current autosave file + * for this diagram in filesystem enc, or NULL. */ Color pagebreak_color; /*!< just to show page breaks */ DiaGrid grid; /*!< the display grid */ @@ -79,9 +79,9 @@ GList *dia_open_diagrams(void); /* Read only! */ -Diagram *diagram_load(const char *filename, DiaImportFilter *ifilter); -int diagram_load_into (Diagram *dest, const char *filename, DiaImportFilter *ifilter); -Diagram *new_diagram(const char *filename); /*Note: filename is copied*/ +Diagram *diagram_load(const gchar *filename, DiaImportFilter *ifilter); +int diagram_load_into (Diagram *dest, const gchar *filename, DiaImportFilter *ifilter); +Diagram *new_diagram(const gchar *filename); /*Note: filename is copied*/ /** Perform updates related to getting a new current diagram */ void diagram_set_current(Diagram *diagram); void diagram_destroy(Diagram *dia); @@ -139,8 +139,9 @@ void diagram_unparent_selected(Diagram *dia); void diagram_unparent_children_selected(Diagram *dia); -void diagram_set_filename(Diagram *dia, const char *filename); +void diagram_set_filename(Diagram *dia, const gchar *filename); gchar *diagram_get_name(Diagram *dia); +gchar *diagram_get_filename(Diagram *dia); int diagram_modified_exists(void); Index: app/diapsft2renderer.c =================================================================== RCS file: /cvs/gnome/dia/app/diapsft2renderer.c,v retrieving revision 1.10 diff -u -r1.10 diapsft2renderer.c --- app/diapsft2renderer.c 26 Jun 2005 18:51:15 -0000 1.10 +++ app/diapsft2renderer.c 30 Jul 2005 08:32:44 -0000 @@ -210,12 +210,12 @@ int glyph_idx; if (font == NULL) { - fprintf(stderr, "No font found\n"); + g_error("No font found\n"); continue; } ft_face = pango_ft2_font_get_face(font); if (ft_face == NULL) { - fprintf(stderr, "Failed to get face for font %s\n", + g_error("Failed to get face for font %s\n", pango_font_description_to_string(pango_font_describe(font))); continue; } @@ -303,7 +303,7 @@ fprintf(renderer->file, "start_ol\n"); if ((error=FT_Load_Glyph(face, glyph_index, load_flags))) { - fprintf(stderr, "Can't load glyph: %d\n", error); + g_error("Can't load glyph: %d\n", error); return; } FT_Get_Glyph (face->glyph, &glyph); Index: app/display.c =================================================================== RCS file: /cvs/gnome/dia/app/display.c,v retrieving revision 1.97 diff -u -r1.97 display.c --- app/display.c 3 Jul 2005 17:55:49 -0000 1.97 +++ app/display.c 30 Jul 2005 08:32:45 -0000 @@ -182,12 +182,6 @@ ddisp->display_areas = NULL; ddisp->update_id = 0; - filename = strrchr(dia->filename, G_DIR_SEPARATOR); - if (filename==NULL) { - filename = dia->filename; - } else { - filename++; - } diagram_add_ddisplay(dia, ddisp); g_signal_connect (dia, "selection_changed", G_CALLBACK(selection_changed), ddisp); @@ -217,8 +211,10 @@ ddisp); ddisp->preedit_attrs = NULL; + filename = diagram_get_name(dia); create_display_shell(ddisp, prefs.new_view.width, prefs.new_view.height, filename, prefs.new_view.use_menu_bar, !embedded); + g_free(filename); ddisplay_update_statusbar (ddisp); @@ -251,7 +247,6 @@ input_methods_done = TRUE; } } - return ddisp; /* set the user data */ } @@ -1004,7 +999,6 @@ GtkWidget *dialog, *button; gchar *fname; gchar *msg; - g_return_if_fail(ddisp != NULL); dia = ddisp->diagram; @@ -1015,14 +1009,12 @@ return; } - fname = dia->filename; - if (!fname) - fname = _(""); + fname = diagram_get_name(dia); msg = g_strdup_printf ( _("The diagram '%s'\n" "has not been saved. Save changes now?"), fname); - + g_free(fname); dialog = gtk_message_dialog_new(GTK_WINDOW (ddisp->shell), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, Index: app/export_png.c =================================================================== RCS file: /cvs/gnome/dia/app/export_png.c,v retrieving revision 1.19 diff -u -r1.19 export_png.c --- app/export_png.c 11 Jan 2004 21:06:49 -0000 1.19 +++ app/export_png.c 30 Jul 2005 08:32:45 -0000 @@ -131,7 +131,8 @@ fp = fopen(cbdata->filename, "wb"); if (fp == NULL) { - message_error(_("Can't open output file %s: %s\n"), cbdata->filename, strerror(errno)); + message_error(_("Can't open output file %s: %s\n"), + dia_message_filename(cbdata->filename), g_strerror(errno)); goto error; } Index: app/filedlg.c =================================================================== RCS file: /cvs/gnome/dia/app/filedlg.c,v retrieving revision 1.56 diff -u -r1.56 filedlg.c --- app/filedlg.c 18 Jul 2005 16:35:13 -0000 1.56 +++ app/filedlg.c 30 Jul 2005 08:32:45 -0000 @@ -32,6 +32,7 @@ #include "intl.h" #include "filter.h" #include "dia_dirs.h" +#include "app_procs.h" #include "persistence.h" #include "display.h" #include "message.h" @@ -149,7 +150,7 @@ gint response, gpointer user_data) { - const char *filename; + char *filename; Diagram *diagram = NULL; DDisplay *ddisp; @@ -158,10 +159,11 @@ if (index >= 0) /* remember it */ persistence_set_integer ("import-filter", index); + filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fs)); - diagram = diagram_load(filename, ifilter_by_index (index - 1, filename)); - + g_free(filename); + if (diagram != NULL) { diagram_update_extents(diagram); layer_dialog_set_diagram(diagram); @@ -184,7 +186,7 @@ DDisplay *ddisp; Diagram *dia = NULL; GtkWindow *parent_window; - gchar *filename = NULL; + gchar *filename; /* FIXME: we should not use ddisp_active but instead get the current diagram * from caller. Thus we could offer the option to "load into" if invoked by @@ -207,15 +209,11 @@ NULL); gtk_window_set_role(GTK_WINDOW(opendlg), "open_diagram"); gtk_window_set_position(GTK_WINDOW(opendlg), GTK_WIN_POS_MOUSE); - if (dia && dia->filename) - filename = g_filename_from_utf8(dia->filename, -1, NULL, NULL, NULL); - if (filename != NULL) { - char* fnabs = dia_get_absolute_filename (filename); - if (fnabs) - gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(opendlg), fnabs); - g_free(fnabs); - g_free(filename); - } + + filename = diagram_get_filename(dia); + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(opendlg), filename); + g_free(filename); + g_signal_connect(GTK_OBJECT(opendlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &opendlg); } else { @@ -287,26 +285,17 @@ if (stat(filename, &stat_struct) == 0) { GtkWidget *dialog = NULL; - char buffer[300]; - char *utf8filename = NULL; - if (!g_utf8_validate(filename, -1, NULL)) { - utf8filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL); - if (utf8filename == NULL) { - message_warning(_("Some characters in the filename are neither UTF-8\n" - "nor your local encoding.\nSome things will break.")); - } - } - if (utf8filename == NULL) utf8filename = g_strdup(filename); - - g_snprintf(buffer, 300, + char *buffer; + buffer = g_strdup_printf( _("The file '%s' already exists.\n" - "Do you want to overwrite it?"), utf8filename); - g_free(utf8filename); + "Do you want to overwrite it?"), + dia_message_filename(filename)); dialog = gtk_message_dialog_new (GTK_WINDOW(fs), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, buffer); + g_free(buffer); gtk_window_set_title (GTK_WINDOW (dialog), _("File already exists")); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES); @@ -341,7 +330,7 @@ { DDisplay *ddisp; Diagram *dia; - gchar *filename = NULL; + gchar *filename; ddisp = ddisplay_active(); if (!ddisp) return; @@ -394,20 +383,17 @@ return; } } - if (dia && dia->filename) - filename = g_filename_from_utf8(dia->filename, -1, NULL, NULL, NULL); - if (filename != NULL) { - char* fnabs = dia_get_absolute_filename (filename); - if (fnabs) { - gchar *base = g_path_get_basename(fnabs); - gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(savedlg), fnabs); + + filename = diagram_get_name(dia); + if (filename) { + gchar *base = diagram_get_name(dia); + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(savedlg), filename); /* FileChooser api insist on exiting files for set_filename */ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(savedlg), base); - g_free(base); - } - g_free(fnabs); - g_free(filename); + g_free(base); + g_free(filename); } + g_object_ref(dia); gtk_object_set_user_data(GTK_OBJECT(savedlg), dia); @@ -430,7 +416,7 @@ if (diagram->unsaved) { file_save_as_callback(data, action, widget); } else { - gchar *filename = g_filename_from_utf8(diagram->filename, -1, NULL, NULL, NULL); + gchar *filename = diagram_get_filename(diagram); diagram_update_extents(diagram); diagram_save(diagram, filename); g_free (filename); @@ -462,24 +448,16 @@ { int index = gtk_combo_box_get_active (GTK_COMBO_BOX(widget)) - 1; /* Ignore "By Extension" */ DiaExportFilter *efilter = efilter_by_index (index, NULL); - GString *s; - const gchar *text = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(exportdlg)); - const gchar *last_dot = text ? strrchr(text, '.') : NULL; - gchar *basename = NULL; - - if (!efilter || last_dot == text || text[0] == '\0' || - efilter->extensions[0] == NULL) + gchar *s; + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(exportdlg)); + if (filename == NULL || efilter == NULL) return; - basename = g_path_get_basename (text); - last_dot = strrchr(basename, '.'); - s = g_string_new(basename); - if (last_dot) - g_string_truncate(s, last_dot-basename); - g_string_append(s, "."); - g_string_append(s, efilter->extensions[0]); - gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(exportdlg), s->str); - g_string_free (s, TRUE); - g_free (basename); + s = build_filename_extension(filename, efilter->extensions[0]); + g_free (filename); + filename = g_path_get_basename(s); + g_free (s); + gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(exportdlg), dia_message_filename(filename)); + g_free (filename); } /** @@ -534,9 +512,8 @@ if (stat(filename, &statbuf) == 0) { GtkWidget *dialog = NULL; - char buffer[300]; - - g_snprintf(buffer, 300, + char *buffer; + buffer=g_strdup_printf( _("The file '%s' already exists.\n" "Do you want to overwrite it?"), dia_message_filename(filename)); dialog = gtk_message_dialog_new (GTK_WINDOW(fs), @@ -544,6 +521,7 @@ GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, buffer); + g_free(buffer); gtk_window_set_title (GTK_WINDOW (dialog), _("File already exists")); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES); @@ -562,8 +540,10 @@ if (!ef) ef = filter_guess_export_filter(filename); if (ef) { + gchar *diafilename = diagram_get_filename(dia); g_object_ref(dia->data); - ef->export_func(dia->data, filename, dia->filename, ef->user_data); + ef->export_func(dia->data, filename, diafilename, ef->user_data); + g_free(diafilename); g_object_unref(dia->data); } else message_error(_("Could not determine which export filter\n" @@ -571,6 +551,7 @@ } g_object_unref (dia); /* drop our diagram reference */ gtk_widget_destroy(exportdlg); + } /** @@ -581,7 +562,7 @@ { DDisplay *ddisp; Diagram *dia; - gchar *filename = NULL; + gchar *filename; ddisp = ddisplay_active(); if (!ddisp) return; @@ -647,8 +628,7 @@ gtk_object_set_user_data(GTK_OBJECT(exportdlg), dia); gtk_widget_set_sensitive(exportdlg, TRUE); - if (dia && dia->filename) - filename = g_filename_from_utf8(dia->filename, -1, NULL, NULL, NULL); + filename = diagram_get_filename(dia); if (filename != NULL) { char* fnabs = dia_get_absolute_filename (filename); if (fnabs) { @@ -663,6 +643,7 @@ g_free(fnabs); g_free(filename); } + export_set_extension(GTK_WIDGET(g_object_get_data(G_OBJECT(exportdlg), "export-menu"))); Index: app/layer_dialog.c =================================================================== RCS file: /cvs/gnome/dia/app/layer_dialog.c,v retrieving revision 1.40 diff -u -r1.40 layer_dialog.c --- app/layer_dialog.c 20 May 2005 18:00:03 -0000 1.40 +++ app/layer_dialog.c 30 Jul 2005 08:32:46 -0000 @@ -477,7 +477,7 @@ GtkWidget *menu_item; GList *dia_list; Diagram *dia; - char *filename; + gchar *filename; int i; int current_nr; @@ -500,15 +500,10 @@ if (dia == layer_dialog->diagram) { current_nr = i; } - - filename = strrchr(dia->filename, G_DIR_SEPARATOR); - if (filename==NULL) { - filename = dia->filename; - } else { - filename++; - } + filename = diagram_get_name(dia); menu_item = gtk_menu_item_new_with_label(filename); + g_free(filename); g_signal_connect (GTK_OBJECT (menu_item), "activate", (GtkSignalFunc) layer_dialog_select_diagram_callback, Index: app/load_save.c =================================================================== RCS file: /cvs/gnome/dia/app/load_save.c,v retrieving revision 1.72 diff -u -r1.72 load_save.c --- app/load_save.c 18 Jul 2005 16:35:13 -0000 1.72 +++ app/load_save.c 30 Jul 2005 08:32:46 -0000 @@ -40,6 +40,7 @@ #include "load_save.h" #include "group.h" #include "diagramdata.h" +#include "dia_dirs.h" #include "message.h" #include "preferences.h" #include "diapagelayout.h" @@ -67,16 +68,16 @@ gpointer value, gpointer user_data); static xmlNodePtr find_node_named (xmlNodePtr p, const char *name); -static gboolean diagram_data_load(const char *filename, DiagramData *data, +static gboolean diagram_data_load(const gchar *filename, DiagramData *data, void* user_data); static gboolean write_objects(GList *objects, xmlNodePtr objects_node, GHashTable *objects_hash, int *obj_nr, const char *filename); static gboolean write_connections(GList *objects, xmlNodePtr layer_node, GHashTable *objects_hash); -static xmlDocPtr diagram_data_write_doc(DiagramData *data, const char *filename); -static int diagram_data_raw_save(DiagramData *data, const char *filename); -static int diagram_data_save(DiagramData *data, const char *filename); +static xmlDocPtr diagram_data_write_doc(DiagramData *data, const gchar *filename); +static int diagram_data_raw_save(DiagramData *data, const gchar *filename); +static int diagram_data_save(DiagramData *data, const gchar *filename); static void @@ -332,7 +333,7 @@ } static gboolean -diagram_data_load(const char *filename, DiagramData *data, void* user_data) +diagram_data_load(const gchar *filename, DiagramData *data, void* user_data) { GHashTable *objects_hash; int fd; @@ -749,7 +750,7 @@ /* Filename seems to be junk, but is passed on to objects */ static xmlDocPtr -diagram_data_write_doc(DiagramData *data, const char *filename) +diagram_data_write_doc(DiagramData *data, const gchar *filename) { xmlDocPtr doc; xmlNodePtr tree; @@ -868,7 +869,7 @@ * Returns >= 0 on success. * Only for internal use. */ static int -diagram_data_raw_save(DiagramData *data, const char *filename) +diagram_data_raw_save(DiagramData *data, const gchar *filename) { xmlDocPtr doc; int ret; @@ -883,10 +884,10 @@ /** This saves the diagram, using a backup in case of failure */ static int -diagram_data_save(DiagramData *data, const char *filename) +diagram_data_save(DiagramData *data, const gchar *filename) { FILE *file; - char *bakname,*tmpname,*dirname,*p; + gchar *bakname,*tmpname,*dirname,*p; int mode,_umask; int fildes; int ret; @@ -915,7 +916,7 @@ if (file==NULL) { message_error(_("Can't open output file %s: %s\n"), - dia_message_filename(tmpname), strerror(errno)); + dia_message_filename(tmpname), g_strerror(errno)); return FALSE; } fclose(file); @@ -943,7 +944,7 @@ } int -diagram_save(Diagram *dia, const char *filename) +diagram_save(Diagram *dia, const gchar *filename) { gboolean res = diagram_data_save(dia->data, filename); @@ -966,18 +967,18 @@ void diagram_cleanup_autosave(Diagram *dia) { - gchar *savefile; + gchar *tmp; + gchar *savefile = dia->autosavefilename; struct stat statbuf; - savefile = dia->autosavefilename; if (savefile == NULL) return; - g_print("Cleaning up autosave %s for %s\n", - savefile, dia->filename ? dia->filename : ""); - + g_print(_("Cleaning up autosave %s for %s\n"), + dia_message_filename(savefile), + dia_message_filename(diagram_get_filename(dia))); if (stat(savefile, &statbuf) == 0) { /* Success */ unlink(savefile); } - g_free(savefile); + g_free(dia->autosavefilename); dia->autosavefilename = NULL; dia->autosaved = FALSE; } @@ -988,7 +989,7 @@ void diagram_autosave(Diagram *dia) { - gchar *save_filename; + gchar *savefile; /* Must check if the diagram is still valid, or Death Ensues! */ GList *diagrams = dia_open_diagrams(); @@ -998,12 +999,12 @@ if (diagram == dia && diagram_is_modified(diagram) && !diagram->autosaved) { - save_filename = g_strdup_printf("%s.autosave", dia->filename); - - if (dia->autosavefilename != NULL) - g_free(dia->autosavefilename); - dia->autosavefilename = save_filename; - diagram_data_raw_save(dia->data, save_filename); + gchar *tmp = diagram_get_filename(dia); + savefile = g_strdup_printf("%s.autosave", tmp); + g_free(tmp); + g_free(dia->autosavefilename); + dia->autosavefilename = savefile; + diagram_data_raw_save(dia->data, savefile); dia->autosaved = TRUE; return; } Index: app/paginate_psprint.c =================================================================== RCS file: /cvs/gnome/dia/app/paginate_psprint.c,v retrieving revision 1.45 diff -u -r1.45 paginate_psprint.c --- app/paginate_psprint.c 3 Jul 2005 17:55:49 -0000 1.45 +++ app/paginate_psprint.c 30 Jul 2005 08:32:46 -0000 @@ -29,6 +29,7 @@ #include #include "intl.h" +#include "dia_dirs.h" #include "message.h" #include "diagram.h" #include "diagramdata.h" @@ -391,11 +392,12 @@ if (!file) { if (is_pipe) { - message_warning(_("Could not run command '%s': %s"), printcmd, strerror(errno)); + message_warning(_("Could not run command '%s': %s"), + dia_message_filename(printcmd), g_strerror(errno)); g_free(printcmd); } else message_warning(_("Could not open '%s' for writing: %s"), - gtk_entry_get_text(GTK_ENTRY(ofile)), strerror(errno)); + gtk_entry_get_text(GTK_ENTRY(ofile)), g_strerror(errno)); gtk_widget_destroy(dialog); return; } @@ -411,8 +413,8 @@ if (is_pipe) { int exitval = pclose(file); if (exitval != 0) { - message_error(_("Printing error: command '%s' returned %d\n"), - printcmd, exitval); + message_error("Printing error: command '%s' returned %d\n", + dia_message_filename(printcmd), exitval); } } else fclose(file); @@ -422,8 +424,8 @@ signal(SIGPIPE, old_action); #endif if (sigpipe_received) - message_error(_("Printing error: command '%s' caused sigpipe."), - printcmd); + message_error("Printing error: command '%s' caused sigpipe.", + dia_message_filename(printcmd)); if (is_pipe) g_free(printcmd); } Index: app/recent_files.c =================================================================== RCS file: /cvs/gnome/dia/app/recent_files.c,v retrieving revision 1.19 diff -u -r1.19 recent_files.c --- app/recent_files.c 26 Jun 2005 18:51:15 -0000 1.19 +++ app/recent_files.c 30 Jul 2005 08:32:46 -0000 @@ -156,15 +156,11 @@ * moving them. */ void -recent_file_history_add(const char *fname) +recent_file_history_add(const gchar *filename) { - gchar *absname = dia_get_absolute_filename(fname); - gchar *filename = g_filename_to_utf8(absname, -1, NULL, NULL, NULL); + /* filename is already in UTF-8 and has absolute path */ recent_file_history_clear_menu(); persistent_list_add("recent-files", filename); - g_free(absname); - g_free(filename); - recent_file_history_make_menu(); } @@ -185,15 +181,12 @@ /* remove a broken file from the history and update menu accordingly * Xing Wang, 2002.06 */ void -recent_file_history_remove (const char *fname) +recent_file_history_remove (const gchar *filename) { - gchar *absname = dia_get_absolute_filename(fname); - gchar *filename = g_filename_to_utf8(absname, -1, NULL, NULL, NULL); + /* filename is already in UTF-8 and has absolute path */ recent_file_history_clear_menu(); persistent_list_remove("recent-files", filename); - g_free(absname); - g_free(filename); recent_file_history_make_menu(); } @@ -203,7 +196,8 @@ { DiaImportFilter *ifilter = NULL; Diagram *diagram = NULL; - gchar *filename = g_filename_from_utf8((gchar *)data, -1, NULL, NULL, NULL); + gchar *utf8filename = (gchar *)data; + gchar *filename = g_filename_from_utf8(utf8filename, -1, NULL, NULL, NULL); ifilter = filter_guess_import_filter(filename); @@ -213,6 +207,6 @@ layer_dialog_set_diagram(diagram); new_display(diagram); } else - recent_file_history_remove (filename); + recent_file_history_remove (utf8filename); g_free(filename); } Index: app/render_eps.c =================================================================== RCS file: /cvs/gnome/dia/app/render_eps.c,v retrieving revision 1.74 diff -u -r1.74 render_eps.c --- app/render_eps.c 18 Jul 2005 16:35:13 -0000 1.74 +++ app/render_eps.c 30 Jul 2005 08:32:46 -0000 @@ -57,6 +57,7 @@ #include "intl.h" #include "render_eps.h" +#include "dia_dirs.h" #include "message.h" #include "diagramdata.h" #include "font.h" @@ -101,7 +102,7 @@ outfile = fopen(filename, "w"); if (outfile == NULL) { message_error(_("Can't open output file %s: %s\n"), - dia_message_filename(filename), strerror(errno)); + dia_message_filename(filename), g_strerror(errno)); g_object_unref(renderer); return; } Index: app/sheets_dialog_callbacks.c =================================================================== RCS file: /cvs/gnome/dia/app/sheets_dialog_callbacks.c,v retrieving revision 1.23 diff -u -r1.23 sheets_dialog_callbacks.c --- app/sheets_dialog_callbacks.c 18 Jul 2005 16:35:13 -0000 1.23 +++ app/sheets_dialog_callbacks.c 30 Jul 2005 08:32:47 -0000 @@ -806,7 +806,7 @@ if (stat(file_name, &stat_buf) == -1) { message_error(_("Error examining %s: %s"), - dia_message_filename(file_name), strerror(errno)); + dia_message_filename(file_name), g_strerror(errno)); g_free(file_name); return; } @@ -1594,14 +1594,14 @@ if ((fp_src = fopen(src, "rb")) == NULL) { message_error(_("Couldn't open '%s': %s"), - dia_message_filename(src), strerror(errno)); + dia_message_filename(src), g_strerror(errno)); return FALSE; } if ((fp_dst = fopen(dst, "wb")) == NULL) { message_error(_("Couldn't open '%s': %s"), - dia_message_filename(dst), strerror(errno)); + dia_message_filename(dst), g_strerror(errno)); return FALSE; } Index: lib/widgets.c =================================================================== RCS file: /cvs/gnome/dia/lib/widgets.c,v retrieving revision 1.119 diff -u -r1.119 widgets.c --- lib/widgets.c 1 Jul 2005 16:33:58 -0000 1.119 +++ lib/widgets.c 30 Jul 2005 08:32:48 -0000 @@ -1262,10 +1262,8 @@ gtk_widget_destroy(GTK_WIDGET(fs->dialog)); fs->dialog = NULL; } - if (fs->sys_filename) { - g_free(fs->sys_filename); - fs->sys_filename = NULL; - } + g_free(fs->sys_filename); + fs->sys_filename = NULL; (* GTK_WIDGET_CLASS (gtk_type_class(gtk_hbox_get_type ()))->unrealize) (widget); } @@ -1338,7 +1336,7 @@ fs->dialog = NULL; fs->sys_filename = NULL; fs->entry = GTK_ENTRY(gtk_entry_new()); - gtk_box_pack_start(GTK_BOX(fs), GTK_WIDGET(fs->entry), FALSE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(fs), GTK_WIDGET(fs->entry), TRUE, TRUE, 0); gtk_widget_show(GTK_WIDGET(fs->entry)); fs->browse = GTK_BUTTON(gtk_button_new_with_label(_("Browse"))); gtk_box_pack_start(GTK_BOX(fs), GTK_WIDGET(fs->browse), FALSE, TRUE, 0); Index: objects/standard/image.c =================================================================== RCS file: /cvs/gnome/dia/objects/standard/image.c,v retrieving revision 1.50 diff -u -r1.50 image.c --- objects/standard/image.c 10 Jul 2005 15:09:34 -0000 1.50 +++ objects/standard/image.c 30 Jul 2005 08:32:49 -0000 @@ -26,6 +26,7 @@ #include "intl.h" #include "message.h" +#include "dia_dirs.h" #include "object.h" #include "element.h" #include "connectionpoint.h" @@ -681,13 +682,15 @@ char *tmp; /* Found file in current dir. */ message_warning(_("The image file '%s' was not found in that directory.\n" - "Using the file '%s' instead\n"), image->file, image_file_name); + "Using the file '%s' instead\n"), + dia_message_filename(image->file), + dia_message_filename(image_file_name)); tmp = image->file; image->file = g_strdup(image_file_name); g_free(tmp); } else { message_warning(_("The image file '%s' was not found.\n"), - image_file_name); + dia_message_filename(image_file_name)); } } } @@ -709,7 +712,7 @@ if (image->image == NULL) { /* Didn't find file in current dir. */ message_warning(_("The image file '%s' was not found.\n"), - image->file); + dia_message_filename(image->file)); } } } Index: plug-ins/Makefile.am =================================================================== RCS file: /cvs/gnome/dia/plug-ins/Makefile.am,v retrieving revision 1.21 diff -u -r1.21 Makefile.am --- plug-ins/Makefile.am 27 Nov 2004 21:04:30 -0000 1.21 +++ plug-ins/Makefile.am 30 Jul 2005 08:32:49 -0000 @@ -1,6 +1,10 @@ -# Remember to also add subdirs in configure.in +if WITH_GNOMEPRINT +gprint_subdir = gprint +endif + +# Remember to also add subdirs in configure.am SUBDIRS = cgm cairo pstricks hpgl wpg svg shape dxf python xfig \ - wmf metapost xslt pixbuf gprint + wmf metapost xslt pixbuf $(gprint_subdir) EXTRA_DIST = \ makefile.msc objects.def Index: plug-ins/cgm/cgm.c =================================================================== RCS file: /cvs/gnome/dia/plug-ins/cgm/cgm.c,v retrieving revision 1.27 diff -u -r1.27 cgm.c --- plug-ins/cgm/cgm.c 18 Jul 2005 18:53:26 -0000 1.27 +++ plug-ins/cgm/cgm.c 30 Jul 2005 08:32:50 -0000 @@ -705,7 +705,7 @@ write_int16(renderer->file, 1); break; default: - message_error("svg_renderer: Unsupported fill mode specified!\n"); + message_error("cgm_renderer: Unsupported fill mode specified!\n"); } #endif } Index: plug-ins/svg/render_svg.c =================================================================== RCS file: /cvs/gnome/dia/plug-ins/svg/render_svg.c,v retrieving revision 1.31 diff -u -r1.31 render_svg.c --- plug-ins/svg/render_svg.c 18 Jul 2005 18:53:29 -0000 1.31 +++ plug-ins/svg/render_svg.c 30 Jul 2005 08:32:50 -0000 @@ -147,7 +147,7 @@ if (file==NULL) { message_error(_("Can't open output file %s: %s\n"), - dia_message_filename(filename), strerror(errno)); + dia_message_filename(filename), g_strerror(errno)); return NULL; } fclose(file);