From dc2ae28ea753bb03c69a4ca8e13af8be65d9500a Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Mon, 26 Oct 2009 12:17:09 +0000 Subject: [printing] Embed page setup settings in the print dialog Based on patch by Marek Kašík. Fixes bgo#591551. --- (limited to 'shell') diff --git a/shell/ev-print-operation.c b/shell/ev-print-operation.c index 08c655d..8d4df9f 100644 --- a/shell/ev-print-operation.c +++ b/shell/ev-print-operation.c @@ -78,6 +78,9 @@ struct _EvPrintOperationClass { void (* cancel) (EvPrintOperation *op); void (* get_error) (EvPrintOperation *op, GError **error); + void (* set_embed_page_setup) (EvPrintOperation *op, + gboolean embed); + gboolean (* get_embed_page_setup) (EvPrintOperation *op); /* signals */ void (* done) (EvPrintOperation *op, @@ -282,6 +285,33 @@ ev_print_operation_get_error (EvPrintOperation *op, class->get_error (op, error); } +void +ev_print_operation_set_embed_page_setup (EvPrintOperation *op, + gboolean embed) +{ +#if GTK_CHECK_VERSION (2, 17, 4) + EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op); + + g_return_if_fail (EV_IS_PRINT_OPERATION (op)); + + class->set_embed_page_setup (op, embed); +#endif +} + +gboolean +ev_print_operation_get_embed_page_setup (EvPrintOperation *op) +{ +#if GTK_CHECK_VERSION (2, 17, 4) + EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op); + + g_return_val_if_fail (EV_IS_PRINT_OPERATION (op), FALSE); + + return class->get_embed_page_setup (op); +#else + return FALSE; +#endif +} + const gchar * ev_print_operation_get_status (EvPrintOperation *op) { @@ -364,7 +394,8 @@ struct _EvPrintOperationExport { gint fd; gchar *temp_file; gchar *job_name; - + gboolean embed_page_setup; + guint idle_id; /* Context */ @@ -1292,6 +1323,10 @@ ev_print_operation_export_run (EvPrintOperation *op, ev_file_exporter_get_capabilities (EV_FILE_EXPORTER (op->document)); gtk_print_unix_dialog_set_manual_capabilities (GTK_PRINT_UNIX_DIALOG (dialog), capabilities); +#if GTK_CHECK_VERSION (2, 17, 4) + gtk_print_unix_dialog_set_embed_page_setup (GTK_PRINT_UNIX_DIALOG (dialog), + export->embed_page_setup); +#endif gtk_print_unix_dialog_set_current_page (GTK_PRINT_UNIX_DIALOG (dialog), export->current_page); @@ -1302,7 +1337,7 @@ ev_print_operation_export_run (EvPrintOperation *op, if (export->page_setup) gtk_print_unix_dialog_set_page_setup (GTK_PRINT_UNIX_DIALOG (dialog), export->page_setup); - + g_signal_connect (dialog, "response", G_CALLBACK (ev_print_operation_export_print_dialog_response_cb), export); @@ -1334,6 +1369,25 @@ ev_print_operation_export_get_error (EvPrintOperation *op, } static void +ev_print_operation_export_set_embed_page_setup (EvPrintOperation *op, + gboolean embed) +{ +#if GTK_CHECK_VERSION (2, 17, 4) + EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op); + + export->embed_page_setup = embed; +#endif +} + +static gboolean +ev_print_operation_export_get_embed_page_setup (EvPrintOperation *op) +{ + EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op); + + return export->embed_page_setup; +} + +static void ev_print_operation_export_finalize (GObject *object) { EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (object); @@ -1443,6 +1497,8 @@ ev_print_operation_export_class_init (EvPrintOperationExportClass *klass) ev_print_op_class->run = ev_print_operation_export_run; ev_print_op_class->cancel = ev_print_operation_export_cancel; ev_print_op_class->get_error = ev_print_operation_export_get_error; + ev_print_op_class->set_embed_page_setup = ev_print_operation_export_set_embed_page_setup; + ev_print_op_class->get_embed_page_setup = ev_print_operation_export_get_embed_page_setup; g_object_class->constructor = ev_print_operation_export_constructor; g_object_class->finalize = ev_print_operation_export_finalize; @@ -1577,6 +1633,29 @@ ev_print_operation_print_get_error (EvPrintOperation *op, } static void +ev_print_operation_print_set_embed_page_setup (EvPrintOperation *op, + gboolean embed) +{ +#if GTK_CHECK_VERSION (2, 17, 4) + EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op); + + gtk_print_operation_set_embed_page_setup (print->op, embed); +#endif +} + +static gboolean +ev_print_operation_print_get_embed_page_setup (EvPrintOperation *op) +{ +#if GTK_CHECK_VERSION (2, 17, 4) + EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op); + + return gtk_print_operation_get_embed_page_setup (print->op); +#else + return FALSE; +#endif +} + +static void ev_print_operation_print_begin_print (EvPrintOperationPrint *print, GtkPrintContext *context) { @@ -1761,6 +1840,8 @@ ev_print_operation_print_class_init (EvPrintOperationPrintClass *klass) ev_print_op_class->run = ev_print_operation_print_run; ev_print_op_class->cancel = ev_print_operation_print_cancel; ev_print_op_class->get_error = ev_print_operation_print_get_error; + ev_print_op_class->set_embed_page_setup = ev_print_operation_print_set_embed_page_setup; + ev_print_op_class->get_embed_page_setup = ev_print_operation_print_get_embed_page_setup; g_object_class->finalize = ev_print_operation_print_finalize; } diff --git a/shell/ev-print-operation.h b/shell/ev-print-operation.h index 20120d6..06a2845 100644 --- a/shell/ev-print-operation.h +++ b/shell/ev-print-operation.h @@ -56,6 +56,9 @@ void ev_print_operation_run (EvPrintOperation *o void ev_print_operation_cancel (EvPrintOperation *op); void ev_print_operation_get_error (EvPrintOperation *op, GError **error); +void ev_print_operation_set_embed_page_setup (EvPrintOperation *op, + gboolean embed); +gboolean ev_print_operation_get_embed_page_setup (EvPrintOperation *op); const gchar *ev_print_operation_get_status (EvPrintOperation *op); gdouble ev_print_operation_get_progress (EvPrintOperation *op); diff --git a/shell/ev-window.c b/shell/ev-window.c index 528226b..6f98711 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -395,7 +395,9 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window) /* File menu */ ev_window_set_action_sensitive (ev_window, "FileOpenCopy", has_document); ev_window_set_action_sensitive (ev_window, "FileSaveAs", has_document && ok_to_copy); +#if !GTK_CHECK_VERSION (2, 17, 4) ev_window_set_action_sensitive (ev_window, "FilePageSetup", has_pages && ok_to_print); +#endif ev_window_set_action_sensitive (ev_window, "FilePrint", has_pages && ok_to_print); ev_window_set_action_sensitive (ev_window, "FileProperties", has_document && has_properties); @@ -2908,6 +2910,13 @@ ev_window_print_operation_done (EvPrintOperation *op, print_settings = ev_print_operation_get_print_settings (op); ev_window_save_print_settings (ev_window, print_settings); + + if (ev_print_operation_get_embed_page_setup (op)) { + GtkPageSetup *page_setup; + + page_setup = ev_print_operation_get_default_page_setup (op); + ev_window_save_print_page_setup (ev_window, page_setup); + } } break; @@ -3081,6 +3090,7 @@ ev_window_print_range (EvWindow *ev_window, ev_print_operation_set_current_page (op, current_page); ev_print_operation_set_print_settings (op, print_settings); ev_print_operation_set_default_page_setup (op, print_page_setup); + ev_print_operation_set_embed_page_setup (op, TRUE); g_object_unref (print_settings); g_object_unref (print_page_setup); @@ -6039,7 +6049,17 @@ ev_window_init (EvWindow *ev_window) g_error_free (error); } g_free (ui_path); - + +#if GTK_CHECK_VERSION (2, 17, 4) + { + GtkAction *action; + + action = gtk_action_group_get_action (ev_window->priv->action_group, + "FilePageSetup"); + g_object_set (action, "visible", FALSE, "sensitive", FALSE, NULL); + } +#endif + ev_window->priv->recent_manager = gtk_recent_manager_get_default (); ev_window->priv->recent_action_group = NULL; ev_window->priv->recent_ui_id = 0; -- cgit v0.9.1