X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkprintoperation-unix.c;h=6b24217987798535f9636196d08673ac633f97e6;hb=b2340254109d8599244c875fe7bc5e234f64da08;hp=c10a1d6cf07b97c33e4c6a6e2d85b1f3d44d6e6d;hpb=5e7801a304b4dd6c5955762e3f6ddc0678e93edd;p=~andy%2Fgtk diff --git a/gtk/gtkprintoperation-unix.c b/gtk/gtkprintoperation-unix.c index c10a1d6cf..6b2421798 100644 --- a/gtk/gtkprintoperation-unix.c +++ b/gtk/gtkprintoperation-unix.c @@ -14,9 +14,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ #include "config.h" @@ -44,7 +42,7 @@ #include "gtkprintjob.h" #include "gtklabel.h" #include "gtkintl.h" -#include "gtkalias.h" + typedef struct { @@ -108,6 +106,11 @@ unix_start_page (GtkPrintOperation *op, } else if (type == CAIRO_SURFACE_TYPE_PDF) { + if (!op->priv->manual_orientation) + { + w = gtk_page_setup_get_paper_width (page_setup, GTK_UNIT_POINTS); + h = gtk_page_setup_get_paper_height (page_setup, GTK_UNIT_POINTS); + } cairo_pdf_surface_set_size (op_unix->surface, w, h); } } @@ -201,8 +204,8 @@ _gtk_print_operation_platform_backend_launch_preview (GtkPrintOperation *op, GtkWindow *parent, const gchar *filename) { - gint argc; - gchar **argv; + GAppInfo *appinfo; + GdkAppLaunchContext *context; gchar *cmd; gchar *preview_cmd; GtkSettings *settings; @@ -276,7 +279,11 @@ _gtk_print_operation_platform_backend_launch_preview (GtkPrintOperation *op, quoted_filename = g_shell_quote (filename); quoted_settings_filename = g_shell_quote (settings_filename); cmd = shell_command_substitute_file (preview_cmd, quoted_filename, quoted_settings_filename, &filename_used, &settings_used); - g_shell_parse_argv (cmd, &argc, &argv, &error); + + appinfo = g_app_info_create_from_commandline (cmd, + "Print Preview", + G_APP_INFO_CREATE_NONE, + &error); g_free (preview_cmd); g_free (quoted_filename); @@ -286,9 +293,12 @@ _gtk_print_operation_platform_backend_launch_preview (GtkPrintOperation *op, if (error != NULL) goto out; - gdk_spawn_on_screen (screen, NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error); + context = gdk_display_get_app_launch_context (gdk_screen_get_display (screen)); + gdk_app_launch_context_set_screen (context, screen); + g_app_info_launch (appinfo, NULL, G_APP_LAUNCH_CONTEXT (context), &error); - g_strfreev (argv); + g_object_unref (context); + g_object_unref (appinfo); if (error != NULL) { @@ -306,24 +316,14 @@ _gtk_print_operation_platform_backend_launch_preview (GtkPrintOperation *op, out: if (error != NULL) { - GtkWidget *edialog; - edialog = gtk_message_dialog_new (parent, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - _("Error launching preview") /* FIXME better text */); - gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (edialog), - "%s", error->message); - g_signal_connect (edialog, "response", - G_CALLBACK (gtk_widget_destroy), NULL); - - gtk_window_present (GTK_WINDOW (edialog)); - - g_error_free (error); + if (op->priv->error == NULL) + op->priv->error = error; + else + g_error_free (error); - filename_used = FALSE; + filename_used = FALSE; settings_used = FALSE; - } + } if (!filename_used) g_unlink (filename); @@ -333,7 +333,7 @@ _gtk_print_operation_platform_backend_launch_preview (GtkPrintOperation *op, if (fd > 0) close (fd); - + if (key_file) g_key_file_free (key_file); g_free (data); @@ -341,29 +341,15 @@ _gtk_print_operation_platform_backend_launch_preview (GtkPrintOperation *op, } static void -unix_finish_send (GtkPrintJob *job, - gpointer user_data, - GError *error) +unix_finish_send (GtkPrintJob *job, + gpointer user_data, + const GError *error) { GtkPrintOperation *op = (GtkPrintOperation *) user_data; GtkPrintOperationUnix *op_unix = op->priv->platform_data; - if (error != NULL) - { - GtkWidget *edialog; - edialog = gtk_message_dialog_new (op_unix->parent, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - _("Error printing") /* FIXME better text */); - gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (edialog), - "%s", error->message); - gtk_window_set_modal (GTK_WINDOW (edialog), TRUE); - g_signal_connect (edialog, "response", - G_CALLBACK (gtk_widget_destroy), NULL); - - gtk_window_present (GTK_WINDOW (edialog)); - } + if (error != NULL && op->priv->error == NULL) + op->priv->error = g_error_copy (error); op_unix->data_sent = TRUE; @@ -402,9 +388,9 @@ unix_end_run (GtkPrintOperation *op, g_object_ref (op); if (!op_unix->data_sent) { - GDK_THREADS_LEAVE (); + gdk_threads_leave (); g_main_loop_run (op_unix->loop); - GDK_THREADS_ENTER (); + gdk_threads_enter (); } g_main_loop_unref (op_unix->loop); op_unix->loop = NULL; @@ -601,18 +587,16 @@ finish_print (PrintResponseData *rdata, g_signal_connect (job, "status-changed", G_CALLBACK (job_status_changed_cb), op); - priv->print_pages = job->print_pages; - priv->page_ranges = job->page_ranges; - priv->num_page_ranges = job->num_page_ranges; - - priv->manual_num_copies = job->num_copies; - priv->manual_collation = job->collate; - priv->manual_reverse = job->reverse; - priv->manual_page_set = job->page_set; - priv->manual_scale = job->scale; - priv->manual_orientation = job->rotate_to_orientation; - priv->manual_number_up = job->number_up; - priv->manual_number_up_layout = job->number_up_layout; + priv->print_pages = gtk_print_job_get_pages (job); + priv->page_ranges = gtk_print_job_get_page_ranges (job, &priv->num_page_ranges); + priv->manual_num_copies = gtk_print_job_get_num_copies (job); + priv->manual_collation = gtk_print_job_get_collate (job); + priv->manual_reverse = gtk_print_job_get_reverse (job); + priv->manual_page_set = gtk_print_job_get_page_set (job); + priv->manual_scale = gtk_print_job_get_scale (job); + priv->manual_orientation = gtk_print_job_get_rotate (job); + priv->manual_number_up = gtk_print_job_get_n_up (job); + priv->manual_number_up_layout = gtk_print_job_get_n_up_layout (job); } } out: @@ -659,7 +643,11 @@ handle_print_response (GtkWidget *dialog, settings = gtk_print_unix_dialog_get_settings (GTK_PRINT_UNIX_DIALOG (pd)); page_setup = gtk_print_unix_dialog_get_page_setup (GTK_PRINT_UNIX_DIALOG (pd)); page_setup_set = gtk_print_unix_dialog_get_page_setup_set (GTK_PRINT_UNIX_DIALOG (pd)); - + + /* Set new print settings now so that custom-widget options + * can be added to the settings in the callback + */ + gtk_print_operation_set_print_settings (rdata->op, settings); g_signal_emit_by_name (rdata->op, "custom-widget-apply", rdata->op->priv->custom_widget); } @@ -846,12 +834,10 @@ _gtk_print_operation_platform_backend_resize_preview_surface (GtkPrintOperation GtkPageSetup *page_setup, cairo_surface_t *surface) { - GtkPaperSize *paper_size; gdouble w, h; - paper_size = gtk_page_setup_get_paper_size (page_setup); - w = gtk_paper_size_get_width (paper_size, GTK_UNIT_POINTS); - h = gtk_paper_size_get_height (paper_size, GTK_UNIT_POINTS); + w = gtk_page_setup_get_paper_width (page_setup, GTK_UNIT_POINTS); + h = gtk_page_setup_get_paper_height (page_setup, GTK_UNIT_POINTS); cairo_pdf_surface_set_size (surface, w, h); } @@ -893,9 +879,9 @@ _gtk_print_operation_platform_backend_run_dialog (GtkPrintOperation *op, find_printer (printer_name, (GFunc) found_printer, &rdata); - GDK_THREADS_LEAVE (); + gdk_threads_leave (); g_main_loop_run (rdata.loop); - GDK_THREADS_ENTER (); + gdk_threads_enter (); g_main_loop_unref (rdata.loop); rdata.loop = NULL; @@ -979,7 +965,7 @@ get_page_setup_dialog (GtkWindow *parent, * setup dialog. See gtk_print_run_page_setup_dialog_async() if this is * a problem. * - * Return value: a new #GtkPageSetup + * Return value: (transfer full): a new #GtkPageSetup * * Since: 2.10 */ @@ -1011,10 +997,11 @@ gtk_print_run_page_setup_dialog (GtkWindow *parent, /** * gtk_print_run_page_setup_dialog_async: - * @parent: transient parent, or %NULL - * @page_setup: an existing #GtkPageSetup, or %NULL + * @parent: (allow-none): transient parent, or %NULL + * @page_setup: (allow-none): an existing #GtkPageSetup, or %NULL * @settings: a #GtkPrintSettings - * @done_cb: a function to call when the user saves the modified page setup + * @done_cb: (scope async): a function to call when the user saves + * the modified page setup * @data: user data to pass to @done_cb * * Runs a page setup dialog, letting the user modify the values from @page_setup. @@ -1082,7 +1069,7 @@ find_printer_idle (gpointer data) printer_finder_free (finder); - return FALSE; + return G_SOURCE_REMOVE; } static void @@ -1230,6 +1217,3 @@ find_printer (const gchar *printer, if (finder->backends == NULL && !finder->found_printer) g_idle_add (find_printer_idle, finder); } - -#define __GTK_PRINT_OPERATION_UNIX_C__ -#include "gtkaliasdef.c"