X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window-title.c;h=baafa74f399278d607418375085c43efb0c1d0d0;hb=cc3f21efc8104182171c9300facc16d9a79177ef;hp=a7229e9d259f9dda40398733bd208a7a7aa6038f;hpb=3df5c48510b62c962b38b0ae663ae437b018d67e;p=evince.git diff --git a/shell/ev-window-title.c b/shell/ev-window-title.c index a7229e9d..baafa74f 100644 --- a/shell/ev-window-title.c +++ b/shell/ev-window-title.c @@ -17,17 +17,24 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ +#include #include "ev-window-title.h" -#include "ev-document-factory.h" +#include "ev-backends-manager.h" +#include "ev-utils.h" +#include +#include #include -#include + +/* Known backends (for bad extensions fix) */ +#define EV_BACKEND_PS "psdocument" +#define EV_BACKEND_PDF "pdfdocument" typedef struct { - EvBackend backend; - const char *ext; -} BadExtensionEntry; + const gchar *backend; + const gchar *text; +} BadTitleEntry; struct _EvWindowTitle { @@ -37,12 +44,19 @@ struct _EvWindowTitle char *uri; }; -static const BadExtensionEntry bad_extensions[] = { +static const BadTitleEntry bad_extensions[] = { { EV_BACKEND_PS, ".dvi" }, { EV_BACKEND_PDF, ".doc" }, + { EV_BACKEND_PDF, ".dvi" }, + { EV_BACKEND_PDF, ".indd" }, { EV_BACKEND_PDF, ".rtf" } }; +static const BadTitleEntry bad_prefixes[] = { + { EV_BACKEND_PDF, "Microsoft Word - " }, + { EV_BACKEND_PDF, "Microsoft PowerPoint - " } +}; + EvWindowTitle * ev_window_title_new (EvWindow *window) { @@ -59,26 +73,27 @@ static char * get_filename_from_uri (const char *uri) { char *filename; - char *display_name; - - display_name = gnome_vfs_format_uri_for_display (uri); - filename = g_path_get_basename (display_name); - g_free (display_name); + char *basename; + + filename = escape_uri_for_display (uri); + basename = g_path_get_basename (filename); + g_free(filename); - return filename; + return basename; } /* Some docs report titles with confusing extensions (ex. .doc for pdf). Let's show the filename in this case */ static void -ev_window_title_sanitize_extension (EvWindowTitle *window_title, char **title) { - EvBackend backend; +ev_window_title_sanitize_title (EvWindowTitle *window_title, char **title) { + const gchar *backend; int i; - backend = ev_document_factory_get_backend (window_title->document); + backend = ev_backends_manager_get_document_module_name (window_title->document); + for (i = 0; i < G_N_ELEMENTS (bad_extensions); i++) { - if (bad_extensions[i].backend == backend && - g_str_has_suffix (*title, bad_extensions[i].ext)) { + if (g_ascii_strcasecmp (bad_extensions[i].backend, backend) == 0 && + g_str_has_suffix (*title, bad_extensions[i].text)) { char *new_title; char *filename = get_filename_from_uri (window_title->uri); @@ -89,6 +104,17 @@ ev_window_title_sanitize_extension (EvWindowTitle *window_title, char **title) { g_free (filename); } } + for (i = 0; i < G_N_ELEMENTS (bad_prefixes); i++) { + if (g_ascii_strcasecmp (bad_prefixes[i].backend, backend) == 0 && + g_str_has_prefix (*title, bad_prefixes[i].text)) { + char *new_title; + int len = strlen(bad_prefixes[i].text); + + new_title = g_strdup_printf ("%s", (*title) + len); + g_free (*title); + *title = new_title; + } + } } static void @@ -105,23 +131,23 @@ ev_window_title_update (EvWindowTitle *window_title) g_return_if_fail (page_cache != NULL); doc_title = (char *)ev_page_cache_get_title (page_cache); - doc_title = g_strstrip (doc_title); - /* Make sure we get a valid title back */ - if (doc_title && doc_title[0] != '\000' && - g_utf8_validate (doc_title, -1, NULL)) { - title = g_strdup (doc_title); + if (doc_title != NULL) { + doc_title = g_strstrip (doc_title); + + if (doc_title[0] != '\0' && + g_utf8_validate (doc_title, -1, NULL)) { + title = g_strdup (doc_title); + } } } - if (title) { - ev_window_title_sanitize_extension (window_title, &title); - } else { - if (window_title->uri) { - title = get_filename_from_uri (window_title->uri); - } else { - title = g_strdup (_("Document Viewer")); - } + if (title && window_title->uri) { + ev_window_title_sanitize_title (window_title, &title); + } else if (window_title->uri) { + title = get_filename_from_uri (window_title->uri); + } else if (!title) { + title = g_strdup (_("Document Viewer")); } for (p = title; *p; ++p) { @@ -139,6 +165,8 @@ ev_window_title_update (EvWindowTitle *window_title) g_free (password_title); break; } + + g_free (title); } void