From e5c6189ac2baf74dd18c49ab64d7fe01e7763dee Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Wed, 08 Apr 2009 13:10:27 +0000 Subject: Remove the preview mode from EvWindow. EvPrintOperation now launches 2009-04-08 Carlos Garcia Campos * data/evince-ui.xml: * shell/ev-application.[ch]: (ev_application_open_uri_at_dest), (ev_application_open_uri), (ev_application_open_uri_list): * shell/ev-print-operation.c: (export_print_done): * shell/ev-window.[ch]: (ev_window_setup_action_sensitivity), (update_chrome_visibility), (ev_window_clear_local_uri), (ev_window_load_job_cb), (window_open_file_copy_ready_cb), (ev_window_open_uri), (ev_window_cmd_file_open_copy_at_dest), (ev_window_cmd_recent_file_activate), (ev_window_open_recent_action_item_activated), (ev_window_dispose), (open_remote_link): * shell/main.c: (launch_previewer), (arguments_parse), (main): Remove the preview mode from EvWindow. EvPrintOperation now launches evince-previewer. The preview mode command line options have not been removed to keep backwards compatibility, launching evince-previewer when evince is run in preview mode. svn path=/trunk/; revision=3579 --- diff --git a/ChangeLog b/ChangeLog index ee122f3..8f2bffe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,25 @@ 2009-04-08 Carlos Garcia Campos + * data/evince-ui.xml: + * shell/ev-application.[ch]: (ev_application_open_uri_at_dest), + (ev_application_open_uri), (ev_application_open_uri_list): + * shell/ev-print-operation.c: (export_print_done): + * shell/ev-window.[ch]: (ev_window_setup_action_sensitivity), + (update_chrome_visibility), (ev_window_clear_local_uri), + (ev_window_load_job_cb), (window_open_file_copy_ready_cb), + (ev_window_open_uri), (ev_window_cmd_file_open_copy_at_dest), + (ev_window_cmd_recent_file_activate), + (ev_window_open_recent_action_item_activated), + (ev_window_dispose), (open_remote_link): + * shell/main.c: (launch_previewer), (arguments_parse), (main): + + Remove the preview mode from EvWindow. EvPrintOperation now + launches evince-previewer. The preview mode command line options + have not been removed to keep backwards compatibility, launching + evince-previewer when evince is run in preview mode. + +2009-04-08 Carlos Garcia Campos + * configure.ac: * Makefile.am: * data/Makefile.am: diff --git a/data/evince-ui.xml b/data/evince-ui.xml index eb7ed40..659222d 100644 --- a/data/evince-ui.xml +++ b/data/evince-ui.xml @@ -123,18 +123,4 @@ - - - - - - - - - - - - - - diff --git a/shell/ev-application.c b/shell/ev-application.c index 8ce0899..56824e8 100644 --- a/shell/ev-application.c +++ b/shell/ev-application.c @@ -386,48 +386,6 @@ get_find_string_from_args (GHashTable *args) } /** - * get_unlink_temp_file_from_args: - * @args: a #GHashTable with data passed to the application. - * - * It does look if the unlink-temp-file option has been passed from the command - * line returning it's boolean representation, otherwise it does return %FALSE. - * - * Returns: the boolean representation of the unlink-temp-file value or %FALSE - * in other case. - */ -static gboolean -get_unlink_temp_file_from_args (GHashTable *args) -{ - gboolean unlink_temp_file = FALSE; - GValue *value = NULL; - - g_assert (args != NULL); - - value = g_hash_table_lookup (args, "unlink-temp-file"); - if (value) { - unlink_temp_file = g_value_get_boolean (value); - } - - return unlink_temp_file; -} - -static const gchar * -get_print_settings_from_args (GHashTable *args) -{ - const gchar *print_settings = NULL; - GValue *value = NULL; - - g_assert (args != NULL); - - value = g_hash_table_lookup (args, "print-settings"); - if (value) { - print_settings = g_value_get_string (value); - } - - return print_settings; -} - -/** * ev_application_open_window: * @application: The instance of the application. * @args: A #GHashTable with the arguments data. @@ -552,7 +510,6 @@ ev_application_get_uri_window (EvApplication *application, const char *uri) * @screen: Thee screen where the link will be shown. * @dest: The #EvLinkDest of the document. * @mode: The run mode of the window. - * @unlink_temp_file: The unlink_temp_file option value. * @timestamp: Current time value. */ void @@ -562,8 +519,6 @@ ev_application_open_uri_at_dest (EvApplication *application, EvLinkDest *dest, EvWindowRunMode mode, const gchar *search_string, - gboolean unlink_temp_file, - const gchar *print_settings, guint timestamp) { EvWindow *new_window; @@ -587,8 +542,7 @@ ev_application_open_uri_at_dest (EvApplication *application, /* We need to load uri before showing the window, so we can restore window size without flickering */ - ev_window_open_uri (new_window, uri, dest, mode, search_string, - unlink_temp_file, print_settings); + ev_window_open_uri (new_window, uri, dest, mode, search_string); if (!GTK_WIDGET_REALIZED (GTK_WIDGET (new_window))) gtk_widget_realize (GTK_WIDGET (new_window)); @@ -626,8 +580,6 @@ ev_application_open_uri (EvApplication *application, EvLinkDest *dest = NULL; EvWindowRunMode mode = EV_WINDOW_MODE_NORMAL; const gchar *search_string = NULL; - gboolean unlink_temp_file = FALSE; - const gchar *print_settings = NULL; GdkScreen *screen = NULL; if (args) { @@ -635,15 +587,11 @@ ev_application_open_uri (EvApplication *application, dest = get_destination_from_args (args); mode = get_window_run_mode_from_args (args); search_string = get_find_string_from_args (args); - unlink_temp_file = (mode == EV_WINDOW_MODE_PREVIEW && - get_unlink_temp_file_from_args (args)); - print_settings = get_print_settings_from_args (args); } ev_application_open_uri_at_dest (application, uri, screen, dest, mode, search_string, - unlink_temp_file, - print_settings, timestamp); + timestamp); if (dest) g_object_unref (dest); @@ -662,7 +610,7 @@ ev_application_open_uri_list (EvApplication *application, for (l = uri_list; l != NULL; l = l->next) { ev_application_open_uri_at_dest (application, (char *)l->data, screen, NULL, 0, NULL, - FALSE, NULL, timestamp); + timestamp); } } diff --git a/shell/ev-application.h b/shell/ev-application.h index 1b96ca5..ee38aea 100644 --- a/shell/ev-application.h +++ b/shell/ev-application.h @@ -69,8 +69,6 @@ void ev_application_open_uri_at_dest (EvApplication *applicati EvLinkDest *dest, EvWindowRunMode mode, const gchar *search_string, - gboolean unlink_temp_file, - const gchar *print_settings, guint32 timestamp); void ev_application_open_uri_list (EvApplication *application, GSList *uri_list, diff --git a/shell/ev-print-operation.c b/shell/ev-print-operation.c index c45f90c..74962bf 100644 --- a/shell/ev-print-operation.c +++ b/shell/ev-print-operation.c @@ -743,6 +743,7 @@ export_print_done (EvPrintOperationExport *export) EvPrintOperation *op = EV_PRINT_OPERATION (export); GtkPrintSettings *settings; EvFileExporterCapabilities capabilities; + GError *error = NULL; g_assert (export->temp_file != NULL); @@ -773,49 +774,79 @@ export_print_done (EvPrintOperationExport *export) } if (export->print_preview) { - gchar *uri; - gchar *print_settings_file = NULL; - - print_settings_file = ev_tmp_filename ("print-settings"); - gtk_print_settings_to_file (settings, print_settings_file, NULL); - - uri = g_filename_to_uri (export->temp_file, NULL, NULL); - ev_application_open_uri_at_dest (EV_APP, - uri, - gtk_window_get_screen (export->parent_window), - NULL, - EV_WINDOW_MODE_PREVIEW, - NULL, - TRUE, - print_settings_file, - GDK_CURRENT_TIME); - g_free (print_settings_file); - g_free (uri); + GKeyFile *key_file; + gchar *data = NULL; + gsize data_len; + gchar *print_settings_file = NULL; - g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_APPLY); - /* temp_file will be deleted by the previewer */ + key_file = g_key_file_new (); - ev_print_operation_export_run_next (export); + gtk_print_settings_to_key_file (settings, key_file, NULL); + gtk_page_setup_to_key_file (export->page_setup, key_file, NULL); + g_key_file_set_string (key_file, "Print Job", "title", export->job_name); + + data = g_key_file_to_data (key_file, &data_len, &error); + if (data) { + gint fd; + + fd = g_file_open_tmp ("print-settingsXXXXXX", &print_settings_file, &error); + if (!error) + g_file_set_contents (print_settings_file, data, data_len, &error); + close (fd); + + g_free (data); + } + + g_key_file_free (key_file); + + if (!error) { + gint argc; + gchar **argv; + gchar *cmd; + gchar *quoted_filename; + gchar *quoted_settings_filename; + + quoted_filename = g_shell_quote (export->temp_file); + quoted_settings_filename = g_shell_quote (print_settings_file); + cmd = g_strdup_printf ("evince-previewer --unlink-tempfile --print-settings %s %s", + quoted_settings_filename, quoted_filename); + + g_shell_parse_argv (cmd, &argc, &argv, &error); + + g_free (quoted_filename); + g_free (quoted_settings_filename); + g_free (cmd); + + if (!error) { + gdk_spawn_on_screen (gtk_window_get_screen (export->parent_window), + NULL, argv, NULL, + G_SPAWN_SEARCH_PATH, + NULL, NULL, NULL, + &error); + } + + g_strfreev (argv); + } + + if (error) { + if (print_settings_file) + g_unlink (print_settings_file); + g_free (print_settings_file); + } else { + g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_APPLY); + /* temp_file will be deleted by the previewer */ + + ev_print_operation_export_run_next (export); + } } else { GtkPrintJob *job; - GError *error = NULL; job = gtk_print_job_new (export->job_name, export->printer, settings, export->page_setup); gtk_print_job_set_source_file (job, export->temp_file, &error); - if (error) { - g_set_error_literal (&export->error, - GTK_PRINT_ERROR, - GTK_PRINT_ERROR_GENERAL, - error->message); - g_error_free (error); - ev_print_operation_export_clear_temp_file (export); - g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_ERROR); - - ev_print_operation_export_run_next (export); - } else { + if (!error){ gtk_print_job_send (job, (GtkPrintJobCompleteFunc)print_job_finished, g_object_ref (export), @@ -823,6 +854,18 @@ export_print_done (EvPrintOperationExport *export) } } g_object_unref (settings); + + if (error) { + g_set_error_literal (&export->error, + GTK_PRINT_ERROR, + GTK_PRINT_ERROR_GENERAL, + error->message); + g_error_free (error); + ev_print_operation_export_clear_temp_file (export); + g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_ERROR); + + ev_print_operation_export_run_next (export); + } } static void diff --git a/shell/ev-window.c b/shell/ev-window.c index 71741e0..22409aa 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -115,7 +115,6 @@ typedef enum { EV_CHROME_RAISE_TOOLBAR = 1 << 3, EV_CHROME_FULLSCREEN_TOOLBAR = 1 << 4, EV_CHROME_SIDEBAR = 1 << 5, - EV_CHROME_PREVIEW_TOOLBAR = 1 << 6, EV_CHROME_NORMAL = EV_CHROME_MENUBAR | EV_CHROME_TOOLBAR | EV_CHROME_SIDEBAR } EvChrome; @@ -168,10 +167,6 @@ struct _EvWindowPrivate { /* Presentation mode */ guint presentation_timeout_id; - /* Preview mode */ - GtkWidget *preview_toolbar; - gchar *print_settings_file; - /* Popup view */ GtkWidget *view_popup; EvLink *link; @@ -185,7 +180,6 @@ struct _EvWindowPrivate { char *uri; glong uri_mtime; char *local_uri; - gboolean unlink_temp_file; gboolean in_reload; EvFileMonitor *monitor; guint setup_document_idle; @@ -279,7 +273,6 @@ static void ev_window_stop_presentation (EvWindow *windo gboolean unfullscreen_window); static void ev_window_cmd_view_presentation (GtkAction *action, EvWindow *window); -static void ev_window_run_preview (EvWindow *window); static void ev_view_popup_cmd_open_link (GtkAction *action, EvWindow *window); static void ev_view_popup_cmd_open_link_new_window (GtkAction *action, @@ -307,7 +300,6 @@ static void ev_window_cmd_edit_find (GtkAction *actio static void find_bar_search_changed_cb (EggFindBar *find_bar, GParamSpec *param, EvWindow *ev_window); -static void ev_window_do_preview_print (EvWindow *window); static void ev_window_load_file_remote (EvWindow *ev_window, GFile *source_file); static void ev_window_media_player_key_pressed (EvWindow *window, @@ -419,7 +411,6 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window) ev_window_set_action_sensitive (ev_window, PAGE_SELECTOR_ACTION, has_pages); ev_window_set_action_sensitive (ev_window, ZOOM_CONTROL_ACTION, has_pages); ev_window_set_action_sensitive (ev_window, NAVIGATION_ACTION, FALSE); - ev_window_set_action_sensitive (ev_window, "PreviewPrint", has_pages && ok_to_print); ev_window_update_actions (ev_window); } @@ -536,7 +527,6 @@ update_chrome_visibility (EvWindow *window) EvWindowPrivate *priv = window->priv; gboolean menubar, toolbar, findbar, fullscreen_toolbar, sidebar; gboolean fullscreen_mode, presentation, fullscreen; - gboolean preview_toolbar; presentation = ev_view_get_presentation (EV_VIEW (priv->view)); fullscreen = ev_view_get_fullscreen (EV_VIEW (priv->view)); @@ -549,16 +539,12 @@ update_chrome_visibility (EvWindow *window) (priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0) && fullscreen; findbar = (priv->chrome & EV_CHROME_FINDBAR) != 0; sidebar = (priv->chrome & EV_CHROME_SIDEBAR) != 0 && !presentation; - preview_toolbar = (priv->chrome& EV_CHROME_PREVIEW_TOOLBAR); set_widget_visibility (priv->menubar, menubar); set_widget_visibility (priv->toolbar, toolbar); set_widget_visibility (priv->find_bar, findbar); set_widget_visibility (priv->sidebar, sidebar); - if (priv->preview_toolbar) - set_widget_visibility (priv->preview_toolbar, preview_toolbar); - ev_window_set_action_sensitive (window, "EditToolbar", toolbar); gtk_widget_set_sensitive (priv->menubar, menubar); @@ -1328,16 +1314,6 @@ ev_window_clear_local_uri (EvWindow *ev_window) } static void -ev_window_clear_print_settings_file (EvWindow *ev_window) -{ - if (ev_window->priv->print_settings_file) { - g_unlink (ev_window->priv->print_settings_file); - g_free (ev_window->priv->print_settings_file); - ev_window->priv->print_settings_file = NULL; - } -} - -static void ev_window_clear_temp_file (EvWindow *ev_window) { GFile *file, *tempdir; @@ -1381,14 +1357,9 @@ ev_window_load_job_cb (EvJob *job, ev_window_set_document (ev_window, document); setup_document_from_metadata (ev_window); - - if (ev_window->priv->window_mode != EV_WINDOW_MODE_PREVIEW) { - setup_view_from_metadata (ev_window); - } + setup_view_from_metadata (ev_window); - if (!ev_window->priv->unlink_temp_file) { - ev_window_add_recent (ev_window, ev_window->priv->uri); - } + ev_window_add_recent (ev_window, ev_window->priv->uri); ev_window_title_set_type (ev_window->priv->title, EV_WINDOW_TITLE_DOCUMENT); @@ -1425,9 +1396,6 @@ ev_window_load_job_cb (EvJob *job, case EV_WINDOW_MODE_PRESENTATION: ev_window_run_presentation (ev_window); break; - case EV_WINDOW_MODE_PREVIEW: - ev_window_run_preview (ev_window); - break; default: break; } @@ -1722,7 +1690,6 @@ window_open_file_copy_ready_cb (GFile *source, error->code == G_IO_ERROR_CANCELLED) { ev_window_clear_load_job (ev_window); ev_window_clear_local_uri (ev_window); - ev_window_clear_print_settings_file (ev_window); g_free (ev_window->priv->uri); ev_window->priv->uri = NULL; g_object_unref (source); @@ -1802,9 +1769,7 @@ ev_window_open_uri (EvWindow *ev_window, const char *uri, EvLinkDest *dest, EvWindowRunMode mode, - const gchar *search_string, - gboolean unlink_temp_file, - const gchar *print_settings) + const gchar *search_string) { GFile *source_file; @@ -1824,17 +1789,10 @@ ev_window_open_uri (EvWindow *ev_window, ev_window_close_dialogs (ev_window); ev_window_clear_load_job (ev_window); ev_window_clear_local_uri (ev_window); - ev_window_clear_print_settings_file (ev_window); ev_view_set_loading (EV_VIEW (ev_window->priv->view), TRUE); - ev_window->priv->unlink_temp_file = unlink_temp_file; ev_window->priv->window_mode = mode; - if (mode == EV_WINDOW_MODE_PREVIEW) { - ev_window->priv->print_settings_file = print_settings ? - g_strdup (print_settings) : NULL; - } - if (ev_window->priv->uri) g_free (ev_window->priv->uri); ev_window->priv->uri = g_strdup (uri); @@ -2178,8 +2136,6 @@ ev_window_cmd_file_open_copy_at_dest (EvWindow *window, EvLinkDest *dest) dest, 0, NULL, - TRUE, - NULL, GDK_CURRENT_TIME); g_free (symlink_uri); } @@ -2213,8 +2169,7 @@ ev_window_cmd_recent_file_activate (GtkAction *action, ev_application_open_uri_at_dest (EV_APP, uri, gtk_window_get_screen (GTK_WINDOW (window)), - NULL, 0, NULL, FALSE, NULL, - GDK_CURRENT_TIME); + NULL, 0, NULL, GDK_CURRENT_TIME); } static void @@ -2224,8 +2179,7 @@ ev_window_open_recent_action_item_activated (EvOpenRecentAction *action, { ev_application_open_uri_at_dest (EV_APP, uri, gtk_window_get_screen (GTK_WINDOW (window)), - NULL, 0, NULL, FALSE, NULL, - GDK_CURRENT_TIME); + NULL, 0, NULL, GDK_CURRENT_TIME); } static void @@ -3599,38 +3553,6 @@ ev_window_cmd_view_presentation (GtkAction *action, EvWindow *window) } static void -ev_window_run_preview (EvWindow *window) -{ - GtkAction *action; - - if (!window->priv->preview_toolbar) { - window->priv->preview_toolbar = - gtk_ui_manager_get_widget (window->priv->ui_manager, - "/PreviewToolbar"); - - gtk_box_pack_start (GTK_BOX (window->priv->main_box), - window->priv->preview_toolbar, - FALSE, FALSE, 0); - gtk_box_reorder_child (GTK_BOX (window->priv->main_box), - window->priv->preview_toolbar, 1); - } - - ev_view_set_continuous (EV_VIEW (window->priv->view), FALSE); - - update_chrome_flag (window, EV_CHROME_TOOLBAR, FALSE); - update_chrome_flag (window, EV_CHROME_MENUBAR, FALSE); - update_chrome_flag (window, EV_CHROME_SIDEBAR, FALSE); - - update_chrome_flag (window, EV_CHROME_PREVIEW_TOOLBAR, TRUE); - - action = gtk_action_group_get_action (window->priv->action_group, - "PreviewPrint"); - gtk_action_set_visible (action, TRUE); - - update_chrome_visibility (window); -} - -static void ev_window_screen_changed (GtkWidget *widget, GdkScreen *old_screen) { @@ -3940,137 +3862,6 @@ ev_window_cmd_start_presentation (GtkAction *action, EvWindow *window) ev_window_run_presentation (window); } -static gboolean -ev_window_enumerate_printer_cb (GtkPrinter *printer, - EvWindow *window) -{ - EvWindowPrivate *priv = window->priv; - const gchar *printer_name; - - printer_name = gtk_print_settings_get_printer (priv->print_settings); - if ((printer_name - && strcmp (printer_name, gtk_printer_get_name (printer)) == 0) || - (!printer_name && gtk_printer_is_default (printer))) { - if (priv->printer) - g_object_unref (priv->printer); - priv->printer = g_object_ref (printer); - - /* Now that we have the printer, we'll start the print */ - ev_window_do_preview_print (window); - - return TRUE; /* we're done */ - } - - return FALSE; /* continue the enumeration */ -} - -static void -ev_window_preview_print_finished (GtkPrintJob *print_job, - EvWindow *window, - GError *error) -{ - if (error) { - ev_window_error_message (window, error, - "%s", _("Failed to print document")); - } - - g_object_unref (print_job); - gtk_widget_destroy (GTK_WIDGET (window)); -} - -static void -ev_window_do_preview_print (EvWindow *window) -{ - EvWindowPrivate *priv = window->priv; - GtkPrintJob *job; - gchar *filename; - GError *error = NULL; - - g_assert (priv->print_settings != NULL); - g_assert (priv->printer != NULL); - - job = gtk_print_job_new (gtk_window_get_title (GTK_WINDOW (window)), - priv->printer, - priv->print_settings, - priv->print_page_setup); - - g_object_unref (priv->print_settings); - priv->print_settings = NULL; - g_object_unref (priv->print_page_setup); - priv->print_page_setup = NULL; - g_object_unref (priv->printer); - priv->printer = NULL; - - 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)) { - gtk_print_job_send (job, - (GtkPrintJobCompleteFunc)ev_window_preview_print_finished, - window, NULL); - } else { - g_warning ("%s", error->message); - g_error_free (error); - } - - g_free (filename); - - gtk_widget_hide (GTK_WIDGET (window)); -} - -static void -ev_window_cmd_preview_print (GtkAction *action, EvWindow *window) -{ - EvWindowPrivate *priv = window->priv; - GtkPrintSettings *print_settings; - GtkPageSetup *page_setup; - const gchar *print_settings_file = priv->print_settings_file; - - if (print_settings_file && g_file_test (print_settings_file, G_FILE_TEST_IS_REGULAR)) { - GKeyFile *key_file; - GError *error = NULL; - - key_file = g_key_file_new (); - g_key_file_load_from_file (key_file, - print_settings_file, - G_KEY_FILE_KEEP_COMMENTS | - G_KEY_FILE_KEEP_TRANSLATIONS, - &error); - if (!error) { - print_settings = - gtk_print_settings_new_from_key_file (key_file, - "Print Settings", - NULL); - print_settings = print_settings ? print_settings : gtk_print_settings_new (); - - page_setup = gtk_page_setup_new_from_key_file (key_file, - "Page Setup", - NULL); - page_setup = page_setup ? page_setup : gtk_page_setup_new (); - } else { - print_settings = gtk_print_settings_new (); - page_setup = gtk_page_setup_new (); - g_error_free (error); - } - - g_key_file_free (key_file); - } else { - print_settings = gtk_print_settings_new (); - page_setup = gtk_page_setup_new (); - } - - if (priv->print_settings) - g_object_unref (priv->print_settings); - priv->print_settings = print_settings; - if (priv->print_page_setup) - g_object_unref (priv->print_page_setup); - priv->print_page_setup = page_setup; - - gtk_enumerate_printers ((GtkPrinterFunc) ev_window_enumerate_printer_cb, - window, NULL, FALSE); -} - static void ev_window_cmd_escape (GtkAction *action, EvWindow *window) { @@ -4950,8 +4741,6 @@ ev_window_dispose (GObject *object) } if (priv->uri) { - if (priv->unlink_temp_file) - ev_window_clear_temp_file (window); g_free (priv->uri); priv->uri = NULL; } @@ -4971,11 +4760,6 @@ ev_window_dispose (GObject *object) priv->history = NULL; } - if (priv->print_settings_file) { - ev_window_clear_print_settings_file (window); - priv->print_settings_file = NULL; - } - if (priv->presentation_timeout_id > 0) { g_source_remove (priv->presentation_timeout_id); priv->presentation_timeout_id = 0; @@ -5095,9 +4879,6 @@ static const GtkActionEntry entries[] = { { "StartPresentation", EV_STOCK_RUN_PRESENTATION, N_("Start Presentation"), NULL, N_("Start a presentation"), G_CALLBACK (ev_window_cmd_start_presentation) }, - { "PreviewPrint", GTK_STOCK_PRINT, N_("Print"), NULL, - N_("Print this document"), - G_CALLBACK (ev_window_cmd_preview_print) }, /* Accellerators */ { "Escape", NULL, "", "Escape", "", @@ -5564,8 +5345,6 @@ open_remote_link (EvWindow *window, EvLinkAction *action) ev_link_action_get_dest (action), 0, NULL, - FALSE, - NULL, GDK_CURRENT_TIME); g_free (uri); diff --git a/shell/ev-window.h b/shell/ev-window.h index 5ed7dd7..1df15ec 100644 --- a/shell/ev-window.h +++ b/shell/ev-window.h @@ -34,8 +34,7 @@ G_BEGIN_DECLS typedef enum { EV_WINDOW_MODE_NORMAL, EV_WINDOW_MODE_FULLSCREEN, - EV_WINDOW_MODE_PRESENTATION, - EV_WINDOW_MODE_PREVIEW + EV_WINDOW_MODE_PRESENTATION } EvWindowRunMode; typedef struct { @@ -77,9 +76,7 @@ void ev_window_open_uri (EvWindow *ev_window, const char *uri, EvLinkDest *dest, EvWindowRunMode mode, - const gchar *search_string, - gboolean unlink_temp_file, - const gchar *print_settings); + const gchar *search_string); gboolean ev_window_is_empty (const EvWindow *ev_window); void ev_window_print_range (EvWindow *ev_window, int first_page, diff --git a/shell/main.c b/shell/main.c index 771dbc2..4d48fb2 100644 --- a/shell/main.c +++ b/shell/main.c @@ -76,6 +76,62 @@ static const GOptionEntry goption_options[] = { NULL } }; +static gboolean +launch_previewer (void) +{ + GString *cmd_str; + gchar *cmd; + gint argc; + gchar **argv; + gboolean retval = FALSE; + GError *error = NULL; + + /* Rebuild the command line, ignoring options + * not supported by the previewer and taking only + * the first path given + */ + cmd_str = g_string_new ("evince-previewer"); + + if (print_settings) { + gchar *quoted; + + quoted = g_shell_quote (print_settings); + g_string_append_printf (cmd_str, " --print-settings %s", quoted); + g_free (quoted); + } + + if (unlink_temp_file) + g_string_append (cmd_str, " --unlink-tempfile"); + + if (file_arguments) { + gchar *quoted; + + quoted = g_shell_quote (file_arguments[0]); + g_string_append_printf (cmd_str, " %s", quoted); + g_free (quoted); + } + + cmd = g_string_free (cmd_str, FALSE); + g_shell_parse_argv (cmd, &argc, &argv, &error); + g_free (cmd); + + if (!error) { + retval = gdk_spawn_on_screen (gdk_screen_get_default (), + NULL, argv, NULL, + G_SPAWN_SEARCH_PATH, + NULL, NULL, NULL, + &error); + g_strfreev (argv); + } + + if (error) { + g_warning ("Error launching previewer: %s\n", error->message); + g_error_free (error); + } + + return retval; +} + static void value_free (GValue *value) { @@ -96,8 +152,6 @@ value_free (GValue *value) * the page of the document to display. * mode -> only if the view mode is one of the availables, * the view mode. - * unlink-temp-file -> only if the view mode is preview mode and - * unlink-temp-file has been passed, unlink-temp-file. * * Returns: a pointer into #GHashTable with data from the arguments. */ @@ -159,8 +213,6 @@ arguments_parse (void) mode = EV_WINDOW_MODE_FULLSCREEN; else if (presentation_mode) mode = EV_WINDOW_MODE_PRESENTATION; - else if (preview_mode) - mode = EV_WINDOW_MODE_PREVIEW; else return args; @@ -170,28 +222,6 @@ arguments_parse (void) g_hash_table_insert (args, g_strdup ("mode"), value); - if (mode == EV_WINDOW_MODE_PREVIEW && unlink_temp_file) { - value = g_new0 (GValue, 1); - g_value_init (value, G_TYPE_BOOLEAN); - g_value_set_boolean (value, unlink_temp_file); - - g_hash_table_insert (args, - g_strdup ("unlink-temp-file"), - value); - } - - if (mode == EV_WINDOW_MODE_PREVIEW && print_settings) { - value = g_new0 (GValue, 1); - g_value_init (value, G_TYPE_STRING); - g_value_set_string (value, print_settings); - - g_hash_table_insert (args, - g_strdup ("print-settings"), - value); - g_free (print_settings); - print_settings = NULL; - } - return args; } @@ -360,6 +390,14 @@ main (int argc, char *argv[]) } g_option_context_free (context); + if (preview_mode) { + gboolean retval; + + retval = launch_previewer (); + + return retval ? 0 : 1; + } + args = arguments_parse (); #ifdef ENABLE_DBUS -- cgit v0.9.1