X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window.c;h=e9dea310cc8f2e9c632a842b5a965a92d5431bb7;hb=c087ebf90ee6c32656ae925d0c1682b427a21e7e;hp=7e9200c5a912334e6beb373e0f2c647b5e64db41;hpb=ea5c5eeb660d4175f6f44169f697511e925c12f9;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index 7e9200c5..e9dea310 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -700,6 +700,9 @@ ev_window_add_history (EvWindow *window, gint page, EvLink *link) EvLink *real_link; EvLinkAction *action; EvLinkDest *dest; + + if (window->priv->history == NULL) + return; if (link) { action = g_object_ref (ev_link_get_action (link)); @@ -844,7 +847,7 @@ setup_sidebar_from_metadata (EvWindow *window, EvDocument *document) } else if (strcmp (page_id, THUMBNAILS_SIDEBAR_ID) && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (thumbs), document)) { ev_sidebar_set_page (EV_SIDEBAR (sidebar), thumbs); } else if (strcmp (page_id, ATTACHMENTS_SIDEBAR_ID) && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (attachments), document)) { - ev_sidebar_set_page (EV_SIDEBAR (sidebar), thumbs); + ev_sidebar_set_page (EV_SIDEBAR (sidebar), attachments); } g_value_unset (&sidebar_page); } else if (document && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (links), document)) { @@ -1053,22 +1056,14 @@ ev_window_set_icon_from_thumbnail (EvJobThumbnail *job, ev_window_clear_thumbnail_job (ev_window); } -static void +static gboolean ev_window_setup_document (EvWindow *ev_window) { const EvDocumentInfo *info; - EvDocument *document; - EvView *view = EV_VIEW (ev_window->priv->view); + EvDocument *document = ev_window->priv->document; EvSidebar *sidebar = EV_SIDEBAR (ev_window->priv->sidebar); GtkAction *action; - - document = ev_window->priv->document; - 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 (ev_window->priv->page_cache, "history-changed", - G_CALLBACK (history_changed_cb), ev_window); - + if (EV_IS_DOCUMENT_FIND (document)) { g_signal_connect_object (G_OBJECT (document), "find_changed", @@ -1097,16 +1092,12 @@ ev_window_setup_document (EvWindow *ev_window) g_object_unref (rc); } - ev_sidebar_set_document (sidebar, document); - - if (ev_page_cache_get_n_pages (ev_window->priv->page_cache) > 0) { - ev_view_set_document (view, document); - } ev_window_set_page_mode (ev_window, PAGE_MODE_DOCUMENT); - ev_window_title_set_document (ev_window->priv->title, document); ev_window_title_set_uri (ev_window->priv->title, ev_window->priv->uri); + ev_sidebar_set_document (sidebar, document); + action = gtk_action_group_get_action (ev_window->priv->action_group, PAGE_SELECTOR_ACTION); ev_page_action_set_document (EV_PAGE_ACTION (action), document); ev_window_setup_action_sensitivity (ev_window); @@ -1122,12 +1113,36 @@ ev_window_setup_document (EvWindow *ev_window) ev_window->priv->document); } + info = ev_page_cache_get_info (ev_window->priv->page_cache); + update_document_mode (ev_window, info->mode); + + return FALSE; +} + +static void +ev_window_set_document (EvWindow *ev_window, EvDocument *document) +{ + EvView *view = EV_VIEW (ev_window->priv->view); + + if (ev_window->priv->document) + g_object_unref (ev_window->priv->document); + ev_window->priv->document = g_object_ref (document); + + 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 (ev_window->priv->page_cache, "history-changed", + G_CALLBACK (history_changed_cb), ev_window); + setup_size_from_metadata (ev_window); - setup_document_from_metadata (ev_window); setup_sidebar_from_metadata (ev_window, document); + setup_document_from_metadata (ev_window); - info = ev_page_cache_get_info (ev_window->priv->page_cache); - update_document_mode (ev_window, info->mode); + if (ev_page_cache_get_n_pages (ev_window->priv->page_cache) > 0) { + ev_view_set_document (view, document); + } + + g_idle_add ((GSourceFunc)ev_window_setup_document, ev_window); } static void @@ -1273,10 +1288,8 @@ ev_window_load_job_cb (EvJobLoad *job, /* Success! */ if (job->error == NULL) { - if (ev_window->priv->document) - g_object_unref (ev_window->priv->document); - ev_window->priv->document = g_object_ref (document); - + ev_window_set_document (ev_window, document); + if (job->mode != EV_WINDOW_MODE_PREVIEW) { setup_view_from_metadata (ev_window); } @@ -1285,8 +1298,6 @@ ev_window_load_job_cb (EvJobLoad *job, ev_window_add_recent (ev_window, ev_window->priv->uri); } - ev_window_setup_document (ev_window); - if (job->dest) { EvLink *link; EvLinkAction *link_action; @@ -2019,6 +2030,11 @@ ev_window_clear_print_job (EvWindow *window) g_object_unref (window->priv->print_job); window->priv->print_job = NULL; } + + if (window->priv->gtk_print_job) { + g_object_unref (window->priv->gtk_print_job); + window->priv->gtk_print_job = NULL; + } } static void @@ -3600,6 +3616,9 @@ ev_window_view_toolbar_cb (GtkAction *action, EvWindow *ev_window) static void ev_window_view_sidebar_cb (GtkAction *action, EvWindow *ev_window) { + if (ev_view_get_presentation (EV_VIEW (ev_window->priv->view))) + return; + update_chrome_flag (ev_window, EV_CHROME_SIDEBAR, gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))); }