X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=shell%2Fev-window.c;h=ad80f752a9a20072d58ba8c47ec7a1ee5fb50751;hb=ddeae94041ec4a587e0b353d97816daad182ea66;hp=02422e231538ba3474865e42fc64063b4f46dbc8;hpb=1bc11bf9ca800edd4469d5e8c8aeb605d3037bc7;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index 02422e23..ad80f752 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -605,6 +605,7 @@ setup_document_from_metadata (EvWindow *window) new_page = CLAMP (g_value_get_int (&page), 0, ev_page_cache_get_n_pages (window->priv->page_cache) - 1); ev_page_cache_set_current_page (window->priv->page_cache, new_page); + g_value_unset (&page); } } @@ -617,6 +618,7 @@ setup_chrome_from_metadata (EvWindow *window) if (ev_metadata_manager_get (NULL, "show_toolbar", &show_toolbar, FALSE)) { if (!g_value_get_boolean (&show_toolbar)) chrome &= ~EV_CHROME_TOOLBAR; + g_value_unset (&show_toolbar); } window->priv->chrome = chrome; } @@ -636,11 +638,12 @@ setup_sidebar_from_metadata (EvWindow *window, EvDocument *document) if (ev_metadata_manager_get (uri, "sidebar_size", &sidebar_size, FALSE)) { gtk_paned_set_position (GTK_PANED (window->priv->hpaned), g_value_get_int (&sidebar_size)); + g_value_unset(&sidebar_size); } if (document && ev_metadata_manager_get (uri, "sidebar_page", &sidebar_page, FALSE)) { const char *page_id = g_value_get_string (&sidebar_page); - + if (strcmp (page_id, LINKS_SIDEBAR_ID) == 0 && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (links), document)) { ev_sidebar_set_page (EV_SIDEBAR (sidebar), links); } else if (strcmp (page_id, THUMBNAILS_SIDEBAR_ID) && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (thumbs), document)) { @@ -648,12 +651,14 @@ setup_sidebar_from_metadata (EvWindow *window, EvDocument *document) } 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); } + g_value_unset (&sidebar_page); } else if (document && ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (links), document)) { ev_sidebar_set_page (EV_SIDEBAR (sidebar), links); } if (ev_metadata_manager_get (uri, "sidebar_visibility", &sidebar_visibility, FALSE)) { update_chrome_flag (window, EV_CHROME_SIDEBAR, g_value_get_boolean (&sidebar_visibility)); + g_value_unset (&sidebar_visibility); } } @@ -686,6 +691,7 @@ setup_view_from_metadata (EvWindow *window) } else { gtk_window_unmaximize (GTK_WINDOW (window)); } + g_value_unset (&maximized); } if (restore_size && @@ -694,12 +700,16 @@ setup_view_from_metadata (EvWindow *window) gtk_window_resize (GTK_WINDOW (window), g_value_get_int (&width), g_value_get_int (&height)); + g_value_unset (&width); + g_value_unset (&height); } if (restore_size && ev_metadata_manager_get (uri, "window_x", &x, TRUE) && ev_metadata_manager_get (uri, "window_y", &y, TRUE)) { gtk_window_move (GTK_WINDOW (window), g_value_get_int (&x), g_value_get_int (&y)); + g_value_unset (&x); + g_value_unset (&y); } /* Sizing mode */ @@ -714,16 +724,19 @@ setup_view_from_metadata (EvWindow *window) if (ev_metadata_manager_get (uri, "zoom", &zoom, FALSE) && ev_view_get_sizing_mode (view) == EV_SIZING_FREE) { ev_view_set_zoom (view, g_value_get_double (&zoom), FALSE); + g_value_unset (&zoom); } /* Continuous */ if (ev_metadata_manager_get (uri, "continuous", &continuous, FALSE)) { ev_view_set_continuous (view, g_value_get_boolean (&continuous)); + g_value_unset (&continuous); } /* Dual page */ if (ev_metadata_manager_get (uri, "dual-page", &dual_page, FALSE)) { ev_view_set_dual_page (view, g_value_get_boolean (&dual_page)); + g_value_unset (&dual_page); } /* Presentation */ @@ -731,6 +744,7 @@ setup_view_from_metadata (EvWindow *window) if (g_value_get_boolean (&presentation) && uri) { ev_window_run_presentation (window); } + g_value_unset (&presentation); } /* Fullscreen */ @@ -738,6 +752,7 @@ setup_view_from_metadata (EvWindow *window) if (g_value_get_boolean (&fullscreen) && uri) { ev_window_run_fullscreen (window); } + g_value_unset (&fullscreen); } /* Rotation */ @@ -757,6 +772,7 @@ setup_view_from_metadata (EvWindow *window) break; } } + g_value_unset (&rotation); } } @@ -1285,8 +1301,9 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog, gint response, EvWindow *window) { - EvBackend document_type; - gboolean export_to_ps = TRUE; + EvBackend document_type; + gboolean export_to_ps = TRUE; + GtkPrintPages print_pages; if (response != GTK_RESPONSE_OK) { gtk_widget_destroy (GTK_WIDGET (dialog)); @@ -1310,16 +1327,27 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog, gtk_print_unix_dialog_get_page_setup (GTK_PRINT_UNIX_DIALOG (dialog))); document_type = ev_document_factory_get_backend (window->priv->document); - switch (document_type) { - case EV_BACKEND_PDF: - export_to_ps = !gtk_printer_accepts_pdf (window->priv->printer); - break; - case EV_BACKEND_PS: - export_to_ps = FALSE; - break; - default: - export_to_ps = TRUE; - break; + print_pages = gtk_print_settings_get_print_pages (window->priv->print_settings); + + if (print_pages == GTK_PRINT_PAGES_ALL) { + switch (document_type) { + case EV_BACKEND_PDF: + /* Export to ps when printing to file */ + if (gtk_print_settings_has_key (window->priv->print_settings, + GTK_PRINT_SETTINGS_OUTPUT_URI)) { + export_to_ps = TRUE; + } else { + export_to_ps = !gtk_printer_accepts_pdf (window->priv->printer); + } + + break; + case EV_BACKEND_PS: + export_to_ps = FALSE; + break; + default: + export_to_ps = TRUE; + break; + } } if ((export_to_ps || document_type == EV_BACKEND_PS) && @@ -1339,21 +1367,52 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog, } if (export_to_ps) { - EvPageCache *page_cache; - gint width; - gint height; + EvPrintRange *ranges = NULL; + EvPageCache *page_cache; + gint n_ranges = 0; + gint current_page; + gint width; + gint height; ev_window_clear_print_job (window); + current_page = + gtk_print_unix_dialog_get_current_page (GTK_PRINT_UNIX_DIALOG (dialog)); + + switch (print_pages) { + case GTK_PRINT_PAGES_CURRENT: + ranges = g_new0 (EvPrintRange, 1); + + ranges->start = current_page; + ranges->end = current_page; + n_ranges = 1; + + break; + case GTK_PRINT_PAGES_RANGES: { + GtkPageRange *page_range; + + page_range = gtk_print_settings_get_page_ranges (window->priv->print_settings, + &n_ranges); + if (n_ranges > 0) + ranges = g_memdup (page_range, n_ranges * sizeof (GtkPageRange)); + } + break; + default: + break; + } + page_cache = ev_page_cache_get (window->priv->document); ev_page_cache_get_size (page_cache, - ev_page_cache_get_current_page (page_cache), - 0, 1.0, &width, &height); + current_page, + 0, 1.0, + &width, &height); window->priv->print_job = ev_job_print_new (window->priv->document, + ranges, n_ranges, (gdouble)width, (gdouble)height); + g_signal_connect (window->priv->print_job, "finished", G_CALLBACK (ev_window_print_job_cb), window); @@ -1393,15 +1452,15 @@ ev_window_print_range (EvWindow *ev_window, int first_page, int last_page) current_page = ev_page_cache_get_current_page (page_cache); document_last_page = ev_page_cache_get_n_pages (page_cache); - if (!ev_window->priv->print_settings) ev_window->priv->print_settings = gtk_print_settings_new (); - if (first_page != 1 && last_page != document_last_page) { + if (first_page != 1 || last_page != document_last_page) { GtkPageRange range; - range.start = first_page; - range.end = last_page; + /* Ranges in GtkPrint are 0 - N */ + range.start = first_page - 1; + range.end = last_page - 1; gtk_print_settings_set_print_pages (ev_window->priv->print_settings, GTK_PRINT_PAGES_RANGES); @@ -1411,6 +1470,13 @@ ev_window_print_range (EvWindow *ev_window, int first_page, int last_page) dialog = gtk_print_unix_dialog_new (_("Print"), GTK_WINDOW (ev_window)); ev_window->priv->print_dialog = dialog; + gtk_print_unix_dialog_set_manual_capabilities (GTK_PRINT_UNIX_DIALOG (dialog), + GTK_PRINT_CAPABILITY_PAGE_SET | + GTK_PRINT_CAPABILITY_COPIES | + GTK_PRINT_CAPABILITY_COLLATE | + GTK_PRINT_CAPABILITY_REVERSE | + GTK_PRINT_CAPABILITY_SCALE | + GTK_PRINT_CAPABILITY_GENERATE_PS); gtk_print_unix_dialog_set_current_page (GTK_PRINT_UNIX_DIALOG (dialog), current_page); @@ -3591,7 +3657,9 @@ do_action_named (EvWindow *window, EvLinkAction *action) } else if (g_ascii_strcasecmp (name, "Find") == 0) { ev_window_cmd_edit_find (NULL, window); } else { - g_warning ("Unimplemented named action: %s, please post a bug report with a testcase.", + g_warning ("Unimplemented named action: %s, please post a " + "bug report in Evince bugzilla " + "(http://bugzilla.gnome.org) with a testcase.", name); } }