X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window.c;h=b3906443af3dccac0b2e08bf4ef3317d62088130;hb=aa5d60b07e188daa855d269e7e9b2da4388ed070;hp=7e686c35d82f4ad59a8d3bb4ecee9c2f66745e49;hpb=06e8fe2d26f02fd17a4dc19ea10d7ee00dc33243;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index 7e686c35..b3906443 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -97,7 +97,9 @@ #include #include +#if !GLIB_CHECK_VERSION (2, 13, 3) char *xdg_user_dir_lookup (char *type); +#endif typedef enum { PAGE_MODE_DOCUMENT, @@ -211,7 +213,7 @@ struct _EvWindowPrivate { #define GCONF_LOCKDOWN_SAVE "/desktop/gnome/lockdown/disable_save_to_disk" #define GCONF_LOCKDOWN_PRINT "/desktop/gnome/lockdown/disable_printing" -#define PRESENTATION_TIMEOUT 5 * 1000 +#define PRESENTATION_TIMEOUT 5 #define SIDEBAR_DEFAULT_SIZE 132 #define LINKS_SIDEBAR_ID "links" @@ -506,7 +508,7 @@ update_chrome_visibility (EvWindow *window) fullscreen_toolbar = ((priv->chrome & EV_CHROME_FULLSCREEN_TOOLBAR) != 0 || (priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0) && fullscreen; findbar = (priv->chrome & EV_CHROME_FINDBAR) != 0; - sidebar = (priv->chrome & EV_CHROME_SIDEBAR) != 0 && !fullscreen_mode; + sidebar = (priv->chrome & EV_CHROME_SIDEBAR) != 0 && !presentation; preview_toolbar = (priv->chrome& EV_CHROME_PREVIEW_TOOLBAR); set_widget_visibility (priv->menubar, menubar); @@ -1506,6 +1508,8 @@ file_open_dialog_response_cb (GtkWidget *chooser, gint response_id, EvWindow *ev_window) { + gchar *uri; + if (response_id == GTK_RESPONSE_OK) { GSList *uris; @@ -1518,8 +1522,10 @@ file_open_dialog_response_cb (GtkWidget *chooser, g_slist_foreach (uris, (GFunc)g_free, NULL); g_slist_free (uris); } - ev_application_set_chooser_uri (EV_APP, - gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (chooser))); + + uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (chooser)); + ev_application_set_chooser_uri (EV_APP, uri); + g_free (uri); gtk_widget_destroy (chooser); } @@ -1547,12 +1553,20 @@ ev_window_cmd_file_open (GtkAction *action, EvWindow *window) gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (chooser), window->priv->uri); } else { +#if GLIB_CHECK_VERSION (2, 13, 3) + const gchar *folder; + + folder = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), + folder ? folder : g_get_home_dir ()); +#else char *folder; folder = xdg_user_dir_lookup ("DOCUMENTS"); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), folder); free (folder); +#endif } g_signal_connect (chooser, "response", @@ -2086,7 +2100,11 @@ ev_window_cmd_save_as (GtkAction *action, EvWindow *ev_window) GtkWidget *fc; gchar *base_name; gchar *file_name; +#if GLIB_CHECK_VERSION (2, 13, 3) + const gchar *folder; +#else gchar *folder; +#endif fc = gtk_file_chooser_dialog_new ( _("Save a Copy"), @@ -2102,12 +2120,20 @@ ev_window_cmd_save_as (GtkAction *action, EvWindow *ev_window) gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (fc), TRUE); file_name = gnome_vfs_format_uri_for_display (ev_window->priv->uri); base_name = g_path_get_basename (file_name); - folder = xdg_user_dir_lookup ("DOCUMENTS"); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (fc), base_name); + +#if GLIB_CHECK_VERSION (2, 13, 3) + folder = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fc), + folder ? folder : g_get_home_dir ()); +#else + folder = xdg_user_dir_lookup ("DOCUMENTS"); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fc), folder); + free (folder); +#endif + g_free (file_name); g_free (base_name); - free (folder); g_signal_connect (fc, "response", G_CALLBACK (file_save_dialog_response_cb), @@ -2220,6 +2246,10 @@ ev_window_print_send (EvWindow *window, gtk_print_settings_set_collate (settings, FALSE); if (capabilities & EV_FILE_EXPORTER_CAN_REVERSE) gtk_print_settings_set_reverse (settings, FALSE); + if (capabilities & EV_FILE_EXPORTER_CAN_NUMBER_UP) { + gtk_print_settings_set_number_up (settings, 1); + gtk_print_settings_set_int (settings, "cups-"GTK_PRINT_SETTINGS_NUMBER_UP, 1); + } if (window->priv->print_preview) { gchar *uri; @@ -2294,6 +2324,7 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog, EvPrintPageSet page_set; gint n_ranges = 0; gint copies; + gint pages_per_sheet; gboolean collate; gboolean reverse; gdouble scale; @@ -2385,6 +2416,8 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog, height *= scale; } + pages_per_sheet = gtk_print_settings_get_number_up (window->priv->print_settings); + copies = gtk_print_settings_get_n_copies (window->priv->print_settings); collate = gtk_print_settings_get_collate (window->priv->print_settings); reverse = gtk_print_settings_get_reverse (window->priv->print_settings); @@ -2394,6 +2427,7 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog, width, height, ranges, n_ranges, page_set, + pages_per_sheet, copies, collate, reverse); @@ -2896,9 +2930,16 @@ presentation_set_timeout (EvWindow *window) if (window->priv->presentation_timeout_id > 0) { g_source_remove (window->priv->presentation_timeout_id); } - + +#if GLIB_CHECK_VERSION (2, 13, 0) + window->priv->presentation_timeout_id = + g_timeout_add_seconds (PRESENTATION_TIMEOUT, + (GSourceFunc)presentation_timeout_cb, window); +#else window->priv->presentation_timeout_id = - g_timeout_add (PRESENTATION_TIMEOUT, (GSourceFunc)presentation_timeout_cb, window); + g_timeout_add (PRESENTATION_TIMEOUT * 1000, + (GSourceFunc)presentation_timeout_cb, window); +#endif ev_view_show_cursor (EV_VIEW (window->priv->view)); } @@ -3077,21 +3118,7 @@ ev_window_screen_changed (GtkWidget *widget, if (screen == old_screen) return; -#ifdef HAVE_GTK_RECENT - if (old_screen) { - g_signal_handlers_disconnect_by_func ( - gtk_recent_manager_get_for_screen (old_screen), - G_CALLBACK (ev_window_setup_recent), window); - } - - priv->recent_manager = gtk_recent_manager_get_for_screen (screen); - g_signal_connect_swapped (priv->recent_manager, - "changed", - G_CALLBACK (ev_window_setup_recent), - window); -#endif - - ev_view_set_screen_dpi (EV_VIEW (window->priv->view), + ev_view_set_screen_dpi (EV_VIEW (priv->view), get_screen_dpi (GTK_WINDOW (window))); if (GTK_WIDGET_CLASS (ev_window_parent_class)->screen_changed) { @@ -3340,25 +3367,30 @@ ev_window_cmd_start_presentation (GtkAction *action, EvWindow *window) } #ifdef WITH_GTK_PRINT +static void ev_window_do_preview_print (EvWindow *window); + static gboolean -lookup_printer_from_name (GtkPrinter *printer, - EvWindow *window) +ev_window_enumerate_printer_cb (GtkPrinter *printer, + EvWindow *window) { + EvWindowPrivate *priv = window->priv; const gchar *printer_name; - printer_name = gtk_print_settings_get_printer (window->priv->print_settings); - + printer_name = gtk_print_settings_get_printer (priv->print_settings); if ((printer_name - && g_ascii_strcasecmp (printer_name, gtk_printer_get_name (printer)) == 0) || + && strcmp (printer_name, gtk_printer_get_name (printer)) == 0) || (!printer_name && gtk_printer_is_default (printer))) { - if (window->priv->printer) - g_object_unref (window->priv->printer); - window->priv->printer = g_object_ref (printer); + if (priv->printer) + g_object_unref (priv->printer); + priv->printer = g_object_ref (printer); - return TRUE; + /* Now that we have the printer, we'll start the print */ + ev_window_do_preview_print (window); + + return TRUE; /* we're done */ } - return FALSE; + return FALSE; /* continue the enumeration */ } static void @@ -3384,62 +3416,34 @@ ev_window_preview_print_finished (GtkPrintJob *print_job, g_object_unref (print_job); gtk_widget_destroy (GTK_WIDGET (window)); } -#endif /* WITH_GTK_PRINT */ static void -ev_window_cmd_preview_print (GtkAction *action, EvWindow *window) +ev_window_do_preview_print (EvWindow *window) { -#ifdef WITH_GTK_PRINT - GtkPrintSettings *print_settings = NULL; + EvWindowPrivate *priv = window->priv; GtkPageSetup *page_setup; GtkPrintJob *job; gchar *filename; GError *error = NULL; -#if GTK_CHECK_VERSION (2, 11, 0) - const gchar *print_settings_file = window->priv->print_settings_file; - if (print_settings_file) { - if (g_file_test (print_settings_file, G_FILE_TEST_IS_REGULAR)) { - GError *error = NULL; + g_assert (priv->print_settings != NULL); + g_assert (priv->printer != NULL); - print_settings = gtk_print_settings_new_from_file (print_settings_file, - &error); - - if (error) { - g_warning (error->message); - g_error_free (error); - print_settings = NULL; - } - } - } -#endif /* GTK 2.11.0 */ - - if (!print_settings) - print_settings = gtk_print_settings_new (); - - if (window->priv->print_settings) - g_object_unref (window->priv->print_settings); - window->priv->print_settings = print_settings; - - gtk_enumerate_printers ((GtkPrinterFunc) lookup_printer_from_name, - window, NULL, TRUE); - g_assert (GTK_IS_PRINTER (window->priv->printer)); - page_setup = gtk_page_setup_new (); job = gtk_print_job_new ("evince-print", - window->priv->printer, - window->priv->print_settings, + priv->printer, + priv->print_settings, page_setup); - g_object_unref (window->priv->print_settings); - window->priv->print_settings = NULL; - g_object_unref (window->priv->printer); - window->priv->printer = NULL; + g_object_unref (priv->print_settings); + priv->print_settings = NULL; + g_object_unref (priv->printer); + priv->printer = NULL; g_object_unref (page_setup); - filename = g_filename_from_uri (window->priv->local_uri ? - window->priv->local_uri : window->priv->uri, + filename = g_filename_from_uri (priv->local_uri ? + priv->local_uri : priv->uri, NULL, NULL); if (gtk_print_job_set_source_file (job, filename, &error)) { @@ -3454,6 +3458,44 @@ ev_window_cmd_preview_print (GtkAction *action, EvWindow *window) g_free (filename); gtk_widget_hide (GTK_WIDGET (window)); +} + +#endif /* WITH_GTK_PRINT */ + +static void +ev_window_cmd_preview_print (GtkAction *action, EvWindow *window) +{ +#ifdef WITH_GTK_PRINT + EvWindowPrivate *priv = window->priv; + GtkPrintSettings *print_settings = NULL; +#if GTK_CHECK_VERSION (2, 11, 0) + const gchar *print_settings_file = priv->print_settings_file; + + if (print_settings_file) { + if (g_file_test (print_settings_file, G_FILE_TEST_IS_REGULAR)) { + GError *error = NULL; + + print_settings = gtk_print_settings_new_from_file (print_settings_file, + &error); + + if (error) { + g_warning (error->message); + g_error_free (error); + print_settings = NULL; + } + } + } +#endif /* GTK 2.11.0 */ + + if (!print_settings) + print_settings = gtk_print_settings_new (); + + if (priv->print_settings) + g_object_unref (priv->print_settings); + priv->print_settings = print_settings; + + gtk_enumerate_printers ((GtkPrinterFunc) ev_window_enumerate_printer_cb, + window, NULL, FALSE); #endif /* WITH_GTK_PRINT */ } @@ -3519,7 +3561,8 @@ ev_window_sizing_mode_changed_cb (EvView *view, GParamSpec *pspec, g_signal_handlers_disconnect_by_func (ev_window->priv->view, ev_view_update_view_size, scrolled_window); if (sizing_mode != EV_SIZING_FREE) - ev_view_update_view_size (ev_window->priv->view, GTK_SCROLLED_WINDOW (scrolled_window)); + ev_view_update_view_size (EV_VIEW (ev_window->priv->view), + GTK_SCROLLED_WINDOW (scrolled_window)); switch (sizing_mode) { case EV_SIZING_BEST_FIT: @@ -3791,9 +3834,7 @@ ev_window_sidebar_visibility_changed_cb (EvSidebar *ev_sidebar, action = gtk_action_group_get_action (ev_window->priv->action_group, "ViewSidebar"); - if (!ev_view_get_presentation (view) && - !ev_view_get_fullscreen (view)) { - + if (!ev_view_get_presentation (view)) { gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), GTK_WIDGET_VISIBLE (ev_sidebar)); @@ -5161,8 +5202,13 @@ ev_window_init (EvWindow *ev_window) } #ifdef HAVE_GTK_RECENT +#if GTK_CHECK_VERSION(2,11,4) + ev_window->priv->recent_manager = gtk_recent_manager_get_default (); +#else + /* It's fine to just use the one of the default screen here */ ev_window->priv->recent_manager = gtk_recent_manager_get_for_screen ( - gtk_widget_get_screen (GTK_WIDGET (ev_window))); + gdk_screen_get_default ()); +#endif ev_window->priv->recent_action_group = NULL; ev_window->priv->recent_ui_id = 0; g_signal_connect_swapped (ev_window->priv->recent_manager,