diff options
-rw-r--r-- | gtk/gtkprintoperation.c | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/gtk/gtkprintoperation.c b/gtk/gtkprintoperation.c index 929cdafea6..6dc7fb2403 100644 --- a/gtk/gtkprintoperation.c +++ b/gtk/gtkprintoperation.c @@ -696,6 +696,14 @@ gtk_print_operation_create_custom_widget (GtkPrintOperation *operation) return NULL; } +static gboolean +gtk_print_operation_paginate (GtkPrintOperation *operation, + GtkPrintContext *context) +{ + /* assume the number of pages is already set and pagination is not needed */ + return TRUE; +} + static void gtk_print_operation_done (GtkPrintOperation *operation, GtkPrintOperationResult result) @@ -726,6 +734,19 @@ custom_widget_accumulator (GSignalInvocationHint *ihint, return continue_emission; } +static gboolean +paginate_accumulator (GSignalInvocationHint *ihint, + GValue *return_accu, + const GValue *handler_return, + gpointer dummy) +{ + *return_accu = *handler_return; + + /* Stop signal emission on first invocation, so if it's a callback then + * the default handler won't run. */ + return FALSE; +} + static void gtk_print_operation_class_init (GtkPrintOperationClass *class) { @@ -737,6 +758,7 @@ gtk_print_operation_class_init (GtkPrintOperationClass *class) class->preview = gtk_print_operation_preview_handler; class->create_custom_widget = gtk_print_operation_create_custom_widget; + class->paginate = gtk_print_operation_paginate; class->done = gtk_print_operation_done; /** @@ -817,7 +839,7 @@ gtk_print_operation_class_init (GtkPrintOperationClass *class) G_TYPE_FROM_CLASS (gobject_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GtkPrintOperationClass, paginate), - _gtk_boolean_handled_accumulator, NULL, + paginate_accumulator, NULL, _gtk_marshal_BOOLEAN__OBJECT, G_TYPE_BOOLEAN, 1, GTK_TYPE_PRINT_CONTEXT); @@ -2697,6 +2719,7 @@ prepare_data (PrintPagesData *data) { GtkPrintOperationPrivate *priv; GtkPageSetup *page_setup; + gboolean paginated = FALSE; gint i, j, counter; priv = data->op->priv; @@ -2725,14 +2748,9 @@ prepare_data (PrintPagesData *data) return; } - if (g_signal_has_handler_pending (data->op, signals[PAGINATE], 0, FALSE)) - { - gboolean paginated = FALSE; - - g_signal_emit (data->op, signals[PAGINATE], 0, priv->print_context, &paginated); - if (!paginated) - return; - } + g_signal_emit (data->op, signals[PAGINATE], 0, priv->print_context, &paginated); + if (!paginated) + return; /* Initialize parts of PrintPagesData that depend on nr_of_pages */ |