Index: src/window.c =================================================================== --- src/window.c (revision 25135) +++ src/window.c (working copy) @@ -159,35 +159,51 @@ return mainwin; } -gchar *get_current_file_basename(gchar *filename) +gchar *get_current_file_name(gchar *filename) { - gchar *basename; + gchar *tmppath, *tmppath2, *path, *cwd; + const gchar* homedir; + + if (filename) { + if (!g_path_is_absolute(filename)) { + cwd = g_get_current_dir(); + tmppath = g_build_filename(cwd, filename, NULL); + g_free(cwd); + } else + tmppath = g_strdup(filename); + + homedir = g_get_home_dir(); + if (!strncmp(tmppath, homedir, strlen(homedir))) { + tmppath[strlen(homedir)-1] = '~'; + tmppath2 = tmppath; + tmppath = g_strdup(&tmppath[strlen(homedir)-1]); + g_free(tmppath2); + } + path = g_filename_to_utf8(tmppath, -1, NULL, NULL, NULL); + g_free(tmppath); + } else + path = g_strdup(_("Untitled")); - if (filename) - basename = g_path_get_basename(g_filename_to_utf8(filename, -1, NULL, NULL, NULL)); - else - basename = g_strdup(_("Untitled")); - - return basename; + return path; } void set_main_window_title(StructData *sd) { - gchar *basename, *title; + gchar *path, *title; - basename = get_current_file_basename(sd->fi->filename); + path = get_current_file_name(sd->fi->filename); if (sd->fi->filename) { if (g_file_test(g_filename_to_utf8(sd->fi->filename, -1, NULL, NULL, NULL), G_FILE_TEST_EXISTS)) - title = g_strdup(basename); + title = g_strdup(path); else - title = g_strdup_printf("(%s)", basename); + title = g_strdup_printf("(%s)", path); } else - title = g_strdup_printf("(%s)", basename); -/* title = g_strdup(basename); + title = g_strdup_printf("(%s)", path); +/* title = g_strdup(path); * title = g_strdup_printf(PACKAGE_NAME); */ gtk_window_set_title(GTK_WINDOW(sd->mainwin->window), title); g_free(title); - g_free(basename); + g_free(path); } Index: src/window.h =================================================================== --- src/window.h (revision 25135) +++ src/window.h (working copy) @@ -23,7 +23,7 @@ #define _WINDOW_H MainWindow *create_main_window(StructData *sd); -gchar *get_current_file_basename(gchar *filename); +gchar *get_current_file_name(gchar *filename); void set_main_window_title(StructData *sd); #if 0 void set_main_window_title_with_asterisk(gboolean flag); Index: src/callback.c =================================================================== --- src/callback.c (revision 25135) +++ src/callback.c (working copy) @@ -27,17 +27,17 @@ static gint check_text_modification(StructData *sd) { - gchar *basename, *str; + gchar *path, *str; gint res; GtkTextBuffer *textbuffer = sd->mainwin->textbuffer; if (gtk_text_buffer_get_modified(textbuffer)) { - basename = get_current_file_basename(sd->fi->filename); - str = g_strdup_printf(_("Save changes to '%s'?"), basename); + path = get_current_file_name(sd->fi->filename); + str = g_strdup_printf(_("Save changes to '%s'?"), path); res = run_dialog_message_question(sd->mainwin->window, str); g_free(str); - g_free(basename); + g_free(path); switch (res) { case GTK_RESPONSE_NO: return 0;