]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
Escape link title before setting it in the model
[evince.git] / shell / ev-window.c
index 870818ad4841816ac0633285ae66d1db89d07ebf..19b78f33f203de36e7b6dd5a412b31a7c481f989 100644 (file)
@@ -602,6 +602,18 @@ update_document_mode (EvWindow *window, EvDocumentMode mode)
        }
 }
 
+static void
+update_sidebar_visibility (EvWindow *window)
+{
+       char *uri = window->priv->uri;
+       GValue sidebar_visibility = { 0, };
+
+       if (uri && ev_metadata_manager_get (uri, "sidebar_visibility", &sidebar_visibility)) {
+               set_widget_visibility (window->priv->sidebar,
+                                      g_value_get_boolean (&sidebar_visibility));
+       }
+}
+
 static void
 setup_document_from_metadata (EvWindow *window)
 {
@@ -615,6 +627,40 @@ setup_document_from_metadata (EvWindow *window)
        }
 }
 
+static void
+setup_sidebar_from_metadata (EvWindow *window, EvDocument *document)
+{
+       char *uri = window->priv->uri;
+       GtkWidget *sidebar = window->priv->sidebar;
+       GtkWidget *links = window->priv->sidebar_links;
+       GtkWidget *thumbs = window->priv->sidebar_thumbs;
+       GValue sidebar_size = { 0, };
+       GValue sidebar_page = { 0, };
+
+       if (ev_metadata_manager_get (uri, "sidebar_size", &sidebar_size)) {
+               gtk_paned_set_position (GTK_PANED (window->priv->hpaned),
+                                       g_value_get_int (&sidebar_size));
+       }
+
+       if (ev_metadata_manager_get (uri, "sidebar_page", &sidebar_page)) {
+               const char *page_id = g_value_get_string (&sidebar_page);
+
+               if (strcmp (page_id, "links") == 0) {
+                       ev_sidebar_set_page (EV_SIDEBAR (sidebar), links);
+               } else if (strcmp (page_id, "thumbnails")) {
+                       ev_sidebar_set_page (EV_SIDEBAR (sidebar), thumbs);
+               }
+       } else {
+               if (ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (links), document)) {
+                       ev_sidebar_set_page (EV_SIDEBAR (sidebar), links);
+               } else if (ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (thumbs), document)) {
+                       ev_sidebar_set_page (EV_SIDEBAR (sidebar), thumbs);
+               }
+       }
+
+       update_sidebar_visibility (window);
+}
+
 static void
 ev_window_setup_document (EvWindow *ev_window)
 {
@@ -657,6 +703,7 @@ ev_window_setup_document (EvWindow *ev_window)
        }
 
        setup_document_from_metadata (ev_window);
+       setup_sidebar_from_metadata (ev_window, document);
 }
 
 static void
@@ -875,18 +922,6 @@ ev_window_xfer_job_cb  (EvJobXfer *job,
        }               
 }
 
-static void
-update_sidebar_visibility (EvWindow *window)
-{
-       char *uri = window->priv->uri;
-       GValue sidebar_visibility = { 0, };
-
-       if (uri && ev_metadata_manager_get (uri, "sidebar_visibility", &sidebar_visibility)) {
-               set_widget_visibility (window->priv->sidebar,
-                                      g_value_get_boolean (&sidebar_visibility));
-       }
-}
-
 static void
 setup_view_from_metadata (EvWindow *window)
 {
@@ -905,8 +940,6 @@ setup_view_from_metadata (EvWindow *window)
        GValue presentation = { 0, };
        GValue fullscreen = { 0, };
        GValue rotation = { 0, };
-       GValue sidebar_size = { 0, };
-       GValue sidebar_page = { 0, };
 
        if (window->priv->uri == NULL) {
                return;
@@ -992,26 +1025,6 @@ setup_view_from_metadata (EvWindow *window)
                        }
                }
        }
-
-       /* Sidebar */
-       if (ev_metadata_manager_get (uri, "sidebar_size", &sidebar_size)) {
-               gtk_paned_set_position (GTK_PANED (window->priv->hpaned),
-                                       g_value_get_int (&sidebar_size));
-       }
-
-       if (ev_metadata_manager_get (uri, "sidebar_page", &sidebar_page)) {
-               const char *page_id = g_value_get_string (&sidebar_page);
-
-               if (strcmp (page_id, "links") == 0) {
-                       ev_sidebar_set_page (EV_SIDEBAR (window->priv->sidebar),
-                                            window->priv->sidebar_links);
-               } else if (strcmp (page_id, "thumbnails")) {
-                       ev_sidebar_set_page (EV_SIDEBAR (window->priv->sidebar),
-                                            window->priv->sidebar_thumbs);
-               }
-       }
-
-       update_sidebar_visibility (window);
 }
 
 void
@@ -2070,6 +2083,7 @@ ev_window_cmd_edit_toolbar (GtkAction *action, EvWindow *ev_window)
                                              GTK_STOCK_CLOSE,
                                              GTK_RESPONSE_CLOSE, 
                                              NULL);
+       gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE);
        gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)), 5);
        gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 2);
        gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
@@ -2116,7 +2130,7 @@ ev_window_cmd_go_previous_page (GtkAction *action, EvWindow *ev_window)
 {
         g_return_if_fail (EV_IS_WINDOW (ev_window));
 
-       ev_page_cache_prev_page (ev_window->priv->page_cache);
+       ev_view_previous_page (EV_VIEW (ev_window->priv->view));
 }
 
 static void
@@ -2124,7 +2138,7 @@ ev_window_cmd_go_next_page (GtkAction *action, EvWindow *ev_window)
 {
         g_return_if_fail (EV_IS_WINDOW (ev_window));
 
-       ev_page_cache_next_page (ev_window->priv->page_cache);
+       ev_view_next_page (EV_VIEW (ev_window->priv->view));
 }
 
 static void
@@ -2642,6 +2656,7 @@ find_bar_search_changed_cb (EggFindBar *find_bar,
                        ev_document_find_cancel (EV_DOCUMENT_FIND (ev_window->priv->document));
                        ev_document_doc_mutex_unlock ();
 
+                       update_action_sensitivity (ev_window);
                        egg_find_bar_set_status_text (EGG_FIND_BAR (ev_window->priv->find_bar),
                                                      NULL);
                        gtk_widget_queue_draw (GTK_WIDGET (ev_window->priv->view));
@@ -2676,21 +2691,13 @@ zoom_control_changed_cb (EphyZoomAction *action,
 static void
 ev_window_finalize (GObject *object)
 {
-       gboolean empty = TRUE;
-       GList *list, *windows;
-
-
-       windows = gtk_window_list_toplevels ();
+       GList *windows = ev_application_get_windows (EV_APP);
 
-       for (list = windows; list; list = list->next) {
-               if (EV_IS_WINDOW (list->data)) {
-                       empty = FALSE;
-                       break;
-               }
-       }
-       
-       if (empty)
+       if (windows == NULL) {
                ev_application_shutdown (EV_APP);
+       } else {
+               g_list_free (windows);
+       }
        
        g_list_free (windows);
        G_OBJECT_CLASS (ev_window_parent_class)->finalize (object);