+2005-09-16 Marco Pesenti Gritti <mpg@redhat.com>
+
+ * shell/Makefile.am:
+ * shell/ev-window-title.c: (ev_window_title_new),
+ (ev_window_title_update), (ev_window_title_set_type),
+ (ev_window_title_set_document), (ev_window_title_free):
+ * shell/ev-window-title.h:
+ * shell/ev-window.c: (ev_window_setup_document),
+ (password_dialog_response), (ev_window_popup_password_dialog),
+ (ev_window_dispose), (ev_window_init):
+
+ Factor out and cleanup window title code
+
2005-09-16 Marco Pesenti Gritti <mpg@redhat.com>
* shell/ev-window.c: (unable_to_load_dialog_response_cb),
ev-view.h \
ev-window.c \
ev-window.h \
+ ev-window-title.c \
+ ev-window-title.h \
ev-sidebar.c \
ev-sidebar.h \
ev-sidebar-links.c \
--- /dev/null
+/* this file is part of evince, a gnome document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Evince is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * 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.
+ */
+
+#include "ev-window-title.h"
+
+#include <glib/gi18n.h>
+#include <libgnomevfs/gnome-vfs-utils.h>
+
+struct _EvWindowTitle
+{
+ EvWindow *window;
+ EvDocument *document;
+ EvWindowTitleType type;
+ char *title;
+};
+
+EvWindowTitle *
+ev_window_title_new (EvWindow *window)
+{
+ EvWindowTitle *window_title;
+
+ window_title = g_new0 (EvWindowTitle, 1);
+ window_title->window = window;
+ window_title->type = EV_WINDOW_TITLE_DOCUMENT;
+
+ return window_title;
+}
+
+static void
+ev_window_title_update (EvWindowTitle *window_title)
+{
+ GtkWindow *window = GTK_WINDOW (window_title->window);
+ char *password_title;
+
+ switch (window_title->type) {
+ case EV_WINDOW_TITLE_DOCUMENT:
+ gtk_window_set_title (window, window_title->title);
+ break;
+ case EV_WINDOW_TITLE_PASSWORD:
+ password_title = g_strdup_printf (_("%s - Password Required"),
+ window_title->title);
+ gtk_window_set_title (window, password_title);
+ g_free (password_title);
+ break;
+ }
+}
+
+void
+ev_window_title_set_type (EvWindowTitle *window_title, EvWindowTitleType type)
+{
+ window_title->type = type;
+
+ ev_window_title_update (window_title);
+}
+
+void
+ev_window_title_set_document (EvWindowTitle *window_title,
+ EvDocument *document,
+ const char *uri)
+{
+ EvPageCache *page_cache;
+ const char *title;
+
+ window_title->document = document;
+
+ g_free (window_title->title);
+
+ if (document == NULL) {
+ window_title->title = NULL;
+ return;
+ }
+
+ page_cache = ev_page_cache_get (document);
+ g_return_if_fail (page_cache != NULL);
+
+ title = ev_page_cache_get_title (page_cache);
+
+ /* Make sure we get a valid title back */
+ if (title && title[0] != '\000' && g_utf8_validate (title, -1, NULL)) {
+ window_title->title = g_strdup (title);
+ }
+
+ if (window_title->title) {
+ char *p;
+
+ for (p = window_title->title; *p; ++p) {
+ /* an '\n' byte is always ASCII, no need for UTF-8 special casing */
+ if (*p == '\n')
+ *p = ' ';
+ }
+ }
+
+ if (window_title->title == NULL && uri) {
+ char *display_name;
+
+ display_name = gnome_vfs_format_uri_for_display (uri);
+ window_title->title = g_path_get_basename (display_name);
+ g_free (display_name);
+ }
+
+ if (window_title->title == NULL) {
+ window_title->title = g_strdup (_("Document Viewer"));
+ }
+
+ ev_window_title_update (window_title);
+}
+
+void
+ev_window_title_free (EvWindowTitle *window_title)
+{
+ g_free (window_title->title);
+ g_free (window_title);
+}
--- /dev/null
+/* this file is part of evince, a gnome document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Evince is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * 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.
+ */
+
+#ifndef __EV_WINDOW_TITLE_H__
+#define __EV_WINDOW_TITLE_H__
+
+#include "ev-window.h"
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EvWindowTitle EvWindowTitle;
+
+typedef enum
+{
+ EV_WINDOW_TITLE_DOCUMENT,
+ EV_WINDOW_TITLE_PASSWORD
+} EvWindowTitleType;
+
+EvWindowTitle *ev_window_title_new (EvWindow *window);
+void ev_window_title_set_type (EvWindowTitle *window_title,
+ EvWindowTitleType type);
+void ev_window_title_set_document (EvWindowTitle *window_title,
+ EvDocument *document,
+ const char *uri);
+void ev_window_title_free (EvWindowTitle *window_title);
+
+G_END_DECLS
+
+#endif /* __EV_WINDOW_TITLE_H__ */
#endif
#include "ev-window.h"
+#include "ev-window-title.h"
#include "ev-page-action.h"
#include "ev-sidebar.h"
#include "ev-sidebar-links.h"
#include "ev-metadata-manager.h"
#include "ev-file-helpers.h"
#include "ev-utils.h"
+#include "ev-debug.h"
#include <poppler.h>
GtkWidget *sidebar_thumbs;
GtkWidget *sidebar_links;
+ EvWindowTitle *title;
+
/* Dialogs */
GtkWidget *properties;
gtk_widget_show (dialog);
}
-static void
-update_window_title (EvDocument *document, GParamSpec *pspec, EvWindow *ev_window)
-{
- char *title = NULL;
- char *doc_title = NULL;
- gboolean password_needed;
-
- password_needed = (ev_window->priv->password_document != NULL);
- if (document && ev_window->priv->page_cache) {
- doc_title = g_strdup (ev_page_cache_get_title (ev_window->priv->page_cache));
-
- /* Make sure we get a valid title back */
- if (doc_title) {
- if (doc_title[0] == '\000' ||
- !g_utf8_validate (doc_title, -1, NULL)) {
- doc_title = NULL;
- }
- }
- }
-
- if (doc_title) {
- char *p;
-
- for (p = doc_title; *p; ++p) {
- /* an '\n' byte is always ASCII, no need for UTF-8 special casing */
- if (*p == '\n')
- *p = ' ';
- }
- }
-
- if (doc_title == NULL && ev_window->priv->uri) {
- char *display_name;
-
- display_name = gnome_vfs_format_uri_for_display (ev_window->priv->uri);
- doc_title = g_path_get_basename (display_name);
- g_free (display_name);
- }
-
- if (password_needed) {
- if (doc_title == NULL) {
- title = g_strdup (_("Document Viewer - Password Required"));
- } else {
- title = g_strdup_printf (_("%s - Password Required"), doc_title);
- }
- } else {
- if (doc_title == NULL) {
- title = g_strdup (_("Document Viewer"));
- } else {
- title = g_strdup (doc_title);
- }
- }
-
- gtk_window_set_title (GTK_WINDOW (ev_window), title);
-
- g_free (doc_title);
- g_free (title);
-}
-
static void
find_changed_cb (EvDocument *document, int page, EvWindow *ev_window)
{
ev_window->priv->page_cache = ev_page_cache_get (ev_window->priv->document);
g_signal_connect (ev_window->priv->page_cache, "page-changed", G_CALLBACK (page_changed_cb), ev_window);
- g_signal_connect_object (G_OBJECT (document),
- "notify::title",
- G_CALLBACK (update_window_title),
- ev_window, 0);
if (EV_IS_DOCUMENT_FIND (document)) {
g_signal_connect_object (G_OBJECT (document),
"find_changed",
ev_view_set_document (view, document);
}
- update_window_title (document, NULL, ev_window);
+ ev_window_title_set_document (ev_window->priv->title, document, ev_window->priv->uri);
action = gtk_action_group_get_action (ev_window->priv->action_group, PAGE_SELECTOR_ACTION);
ev_page_action_set_document (EV_PAGE_ACTION (action), document);
update_action_sensitivity (ev_window);
ev_window->priv->password_document = NULL;
ev_window->priv->password_uri = NULL;
-
+
+ ev_window_title_set_type (ev_window->priv->title, EV_WINDOW_TITLE_DOCUMENT);
+
ev_job_queue_add_job (ev_window->priv->load_job, EV_JOB_PRIORITY_HIGH);
gtk_widget_destroy (password_dialog);
gtk_widget_set_sensitive (ev_window->priv->password_view, FALSE);
- update_window_title (ev_window->priv->password_document, NULL, ev_window);
+ ev_window_title_set_type (ev_window->priv->title, EV_WINDOW_TITLE_PASSWORD);
+
if (ev_window->priv->password_dialog == NULL) {
ev_window->priv->password_dialog =
g_object_new (EV_TYPE_PASSWORD_DIALOG, "uri", ev_window->priv->password_uri, NULL);
EvWindow *window = EV_WINDOW (object);
EvWindowPrivate *priv = window->priv;
+ if (priv->title) {
+ ev_window_title_free (priv->title);
+ priv->title = NULL;
+ }
+
if (priv->recent_view) {
g_object_unref (priv->recent_view);
priv->recent_view = NULL;
ev_window->priv = EV_WINDOW_GET_PRIVATE (ev_window);
ev_window->priv->page_mode = PAGE_MODE_DOCUMENT;
- update_window_title (NULL, NULL, ev_window);
+ ev_window->priv->title = ev_window_title_new (ev_window);
ev_window->priv->main_box = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (ev_window), ev_window->priv->main_box);