*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+#include <config.h>
#include "ev-window-title.h"
-#include "ev-document-factory.h"
+#include "ev-backends-manager.h"
+#include "ev-utils.h"
+#include <string.h>
+#include <gio/gio.h>
#include <glib/gi18n.h>
-#include <libgnomevfs/gnome-vfs-utils.h>
+
+/* 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
{
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)
{
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 = g_uri_unescape_string (uri, NULL);
+ 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);
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
{
GtkWindow *window = GTK_WINDOW (window_title->window);
char *title = NULL, *password_title, *p;
- EvPageCache *page_cache;
if (window_title->document != NULL) {
- const char *doc_title;
+ gchar *doc_title;
- page_cache = ev_page_cache_get (window_title->document);
- g_return_if_fail (page_cache != NULL);
- doc_title = ev_page_cache_get_title (page_cache);
+ doc_title = g_strdup (ev_document_get_title (window_title->document));
/* 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);
+ }
+
+ g_free (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) {
gtk_window_set_title (window, title);
break;
case EV_WINDOW_TITLE_PASSWORD:
- password_title = g_strdup_printf (_("%s - Password Required"), title);
+ password_title = g_strdup_printf (_("%s — Password Required"), title);
gtk_window_set_title (window, password_title);
g_free (password_title);
break;
}
+
+ g_free (title);
}
void