]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
Mark close button as default. Fix for 316381.
[evince.git] / shell / ev-window.c
index 67bbfc893abba7c7f14da58e2712db328d3518c0..870818ad4841816ac0633285ae66d1db89d07ebf 100644 (file)
@@ -29,6 +29,7 @@
 #endif
 
 #include "ev-window.h"
+#include "ev-window-title.h"
 #include "ev-page-action.h"
 #include "ev-sidebar.h"
 #include "ev-sidebar-links.h"
@@ -62,6 +63,7 @@
 #include "ev-metadata-manager.h"
 #include "ev-file-helpers.h"
 #include "ev-utils.h"
+#include "ev-debug.h"
 
 #include <poppler.h>
 
@@ -105,6 +107,8 @@ struct _EvWindowPrivate {
        GtkWidget *sidebar_thumbs;
        GtkWidget *sidebar_links;
 
+       EvWindowTitle *title;
+
        /* Dialogs */
        GtkWidget *properties;
 
@@ -569,64 +573,6 @@ unable_to_load (EvWindow   *ev_window,
        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)
 {
@@ -682,10 +628,6 @@ ev_window_setup_document (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",
@@ -701,7 +643,7 @@ ev_window_setup_document (EvWindow *ev_window)
                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);
@@ -744,7 +686,9 @@ password_dialog_response (GtkWidget *password_dialog,
 
                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);
@@ -771,7 +715,8 @@ ev_window_popup_password_dialog (EvWindow *ev_window)
 
        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);
@@ -2757,6 +2702,11 @@ ev_window_dispose (GObject *object)
        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;
@@ -2865,40 +2815,31 @@ static const GtkActionEntry entries[] = {
        { "FileOpen", GTK_STOCK_OPEN, N_("_Open..."), "<control>O",
          N_("Open an existing document"),
          G_CALLBACK (ev_window_cmd_file_open) },
-               { "FileSaveAs", GTK_STOCK_SAVE_AS, N_("_Save a Copy..."), NULL,
-         N_("Save the current document with a new filename"),
+               { "FileSaveAs", GTK_STOCK_SAVE_AS, N_("_Save a Copy..."), NULL, NULL,
          G_CALLBACK (ev_window_cmd_save_as) },
        { "FilePrint", GTK_STOCK_PRINT, N_("_Print..."), "<control>P",
          N_("Print this document"),
          G_CALLBACK (ev_window_cmd_file_print) },
-       { "FileProperties", GTK_STOCK_PROPERTIES, N_("P_roperties"), "<alt>Return",
-         N_("View the properties of this document"),
+       { "FileProperties", GTK_STOCK_PROPERTIES, N_("P_roperties"), "<alt>Return", NULL,
          G_CALLBACK (ev_window_cmd_file_properties) },                       
-       { "FileCloseWindow", GTK_STOCK_CLOSE, NULL, "<control>W",
-         N_("Close this window"),
+       { "FileCloseWindow", GTK_STOCK_CLOSE, NULL, "<control>W", NULL,
          G_CALLBACK (ev_window_cmd_file_close_window) },
 
         /* Edit menu */
-        { "EditCopy", GTK_STOCK_COPY, NULL, "<control>C",
-          N_("Copy text from the document"),
+        { "EditCopy", GTK_STOCK_COPY, NULL, "<control>C", NULL,
           G_CALLBACK (ev_window_cmd_edit_copy) },
-       { "EditSelectAll", NULL, N_("Select _All"), "<control>A",
-         N_("Select the entire page"),
+       { "EditSelectAll", NULL, N_("Select _All"), "<control>A", NULL,
          G_CALLBACK (ev_window_cmd_edit_select_all) },
         { "EditFind", GTK_STOCK_FIND, NULL, "<control>F",
           N_("Find a word or phrase in the document"),
           G_CALLBACK (ev_window_cmd_edit_find) },
-       { "EditFindNext", NULL, N_("Find Ne_xt"), "<control>G",
-         N_("Find next occurrence of the word or phrase"),
+       { "EditFindNext", NULL, N_("Find Ne_xt"), "<control>G", NULL,
          G_CALLBACK (ev_window_cmd_edit_find_next) },
-        { "EditToolbar", NULL, N_("T_oolbar"), NULL,
-          N_("Customize the toolbar"),
+        { "EditToolbar", NULL, N_("T_oolbar"), NULL, NULL,
           G_CALLBACK (ev_window_cmd_edit_toolbar) },
-       { "EditRotateLeft", NULL, N_("Rotate _Left"), NULL,
-         N_("Rotate the document to the left"),
+       { "EditRotateLeft", NULL, N_("Rotate _Left"), NULL, NULL,
          G_CALLBACK (ev_window_cmd_edit_rotate_left) },
-       { "EditRotateRight", NULL, N_("Rotate _Right"), NULL,
-         N_("Rotate the document to the right"),
+       { "EditRotateRight", NULL, N_("Rotate _Right"), NULL, NULL,
          G_CALLBACK (ev_window_cmd_edit_rotate_right) },
 
         /* View menu */
@@ -2927,12 +2868,10 @@ static const GtkActionEntry entries[] = {
           G_CALLBACK (ev_window_cmd_go_last_page) },
 
        /* Help menu */
-       { "HelpContents", GTK_STOCK_HELP, N_("_Contents"), "F1",
-         N_("Display help for the viewer application"),
+       { "HelpContents", GTK_STOCK_HELP, N_("_Contents"), "F1", NULL,
          G_CALLBACK (ev_window_cmd_help_contents) },
 
-       { "HelpAbout", GTK_STOCK_ABOUT, N_("_About"), NULL,
-         N_("Display credits for the document viewer creators"),
+       { "HelpAbout", GTK_STOCK_ABOUT, N_("_About"), NULL, NULL,
          G_CALLBACK (ev_window_cmd_help_about) },
 
        /* Toolbar-only */
@@ -2943,50 +2882,35 @@ static const GtkActionEntry entries[] = {
        /* Accellerators */
        { "Escape", NULL, "", "Escape", "",
          G_CALLBACK (ev_window_cmd_escape) },
-        { "Slash", GTK_STOCK_FIND, NULL, "slash",
-          N_("Find a word or phrase in the document"),
+        { "Slash", GTK_STOCK_FIND, NULL, "slash", NULL,
           G_CALLBACK (ev_window_cmd_edit_find) },
-        { "PageDown", NULL, "", "Page_Down",
-          N_("Scroll one page forward"),
+        { "PageDown", NULL, "", "Page_Down", NULL,
           G_CALLBACK (ev_window_cmd_scroll_forward) },
-        { "PageUp", NULL, "", "Page_Up",
-          N_("Scroll one page backward"),
+        { "PageUp", NULL, "", "Page_Up", NULL,
           G_CALLBACK (ev_window_cmd_scroll_backward) },
-        { "Space", NULL, "", "space",
-          N_("Scroll one page forward"),
+        { "Space", NULL, "", "space", NULL,
           G_CALLBACK (ev_window_cmd_scroll_forward) },
-        { "ShiftSpace", NULL, "", "<shift>space",
-          N_("Scroll one page backward"),
+        { "ShiftSpace", NULL, "", "<shift>space", NULL,
           G_CALLBACK (ev_window_cmd_scroll_backward) },
-        { "BackSpace", NULL, "", "BackSpace",
-          N_("Scroll one page backward"),
+        { "BackSpace", NULL, "", "BackSpace", NULL,
           G_CALLBACK (ev_window_cmd_scroll_backward) },
-        { "ShiftBackSpace", NULL, "", "<shift>BackSpace",
-          N_("Scroll one page forward"),
+        { "ShiftBackSpace", NULL, "", "<shift>BackSpace", NULL,
           G_CALLBACK (ev_window_cmd_scroll_forward) },
-        { "Plus", GTK_STOCK_ZOOM_IN, NULL, "plus",
-          N_("Enlarge the document"),
+        { "Plus", GTK_STOCK_ZOOM_IN, NULL, "plus", NULL,
           G_CALLBACK (ev_window_cmd_view_zoom_in) },
-        { "CtrlEqual", GTK_STOCK_ZOOM_IN, NULL, "<control>equal",
-          N_("Enlarge the document"),
+        { "CtrlEqual", GTK_STOCK_ZOOM_IN, NULL, "<control>equal", NULL,
           G_CALLBACK (ev_window_cmd_view_zoom_in) },
-        { "Minus", GTK_STOCK_ZOOM_OUT, NULL, "minus",
-          N_("Shrink the document"),
+        { "Minus", GTK_STOCK_ZOOM_OUT, NULL, "minus", NULL,
           G_CALLBACK (ev_window_cmd_view_zoom_out) },
-        { "FocusPageSelector", NULL, "", "<control>l",
-          N_("Focus the page selector"),
+        { "FocusPageSelector", NULL, "", "<control>l", NULL,
           G_CALLBACK (ev_window_cmd_focus_page_selector) },
-        { "GoBackwardFast", NULL, "", "<shift>Page_Up",
-          N_("Go ten pages backward"),
+        { "GoBackwardFast", NULL, "", "<shift>Page_Up", NULL,
           G_CALLBACK (ev_window_cmd_go_backward) },
-        { "GoForwardFast", NULL, "", "<shift>Page_Down",
-          N_("Go ten pages forward"),
+        { "GoForwardFast", NULL, "", "<shift>Page_Down", NULL,
           G_CALLBACK (ev_window_cmd_go_forward) },
-        { "KpPlus", GTK_STOCK_ZOOM_IN, NULL, "KP_Add",
-          N_("Enlarge the document"),
+        { "KpPlus", GTK_STOCK_ZOOM_IN, NULL, "KP_Add", NULL,
           G_CALLBACK (ev_window_cmd_view_zoom_in) },
-        { "KpMinus", GTK_STOCK_ZOOM_OUT, NULL, "KP_Subtract",
-          N_("Shrink the document"),
+        { "KpMinus", GTK_STOCK_ZOOM_OUT, NULL, "KP_Subtract", NULL,
           G_CALLBACK (ev_window_cmd_view_zoom_out) },
 };
 
@@ -3309,7 +3233,7 @@ ev_window_init (EvWindow *ev_window)
        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);