[gtk+] Return error instead of showing an error dialog when printing
- From: Marek Kašík <mkasik src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Return error instead of showing an error dialog when printing
- Date: Mon, 7 Jun 2010 12:54:56 +0000 (UTC)
commit ca6aacc32d8141c0d6ebbf8c1ed6152764232bae
Author: Marek Kasik <mkasik redhat com>
Date: Mon Jun 7 14:52:38 2010 +0200
Return error instead of showing an error dialog when printing
Remove message dialogs showing an error when printing. Return
GTK_PRINT_OPERATION_RESULT_ERROR and set error in such a case.
Also return GTK_PRINT_OPERATION_RESULT_CANCEL when cancelled.
Do it for synchronous and asynchronous cases (#549127).
gtk/gtkprintjob.h | 6 ++--
gtk/gtkprintoperation-unix.c | 42 +++++++----------------------------
gtk/gtkprintoperation.c | 48 +++++++++++++++++++++++++++++++++++-------
3 files changed, 52 insertions(+), 44 deletions(-)
---
diff --git a/gtk/gtkprintjob.h b/gtk/gtkprintjob.h
index 9d2c25b..e1c5845 100644
--- a/gtk/gtkprintjob.h
+++ b/gtk/gtkprintjob.h
@@ -42,9 +42,9 @@ typedef struct _GtkPrintJob GtkPrintJob;
typedef struct _GtkPrintJobClass GtkPrintJobClass;
typedef struct _GtkPrintJobPrivate GtkPrintJobPrivate;
-typedef void (*GtkPrintJobCompleteFunc) (GtkPrintJob *print_job,
- gpointer user_data,
- GError *error);
+typedef void (*GtkPrintJobCompleteFunc) (GtkPrintJob *print_job,
+ gpointer user_data,
+ const GError *error);
struct _GtkPrinter;
diff --git a/gtk/gtkprintoperation-unix.c b/gtk/gtkprintoperation-unix.c
index dbf6228..896871a 100644
--- a/gtk/gtkprintoperation-unix.c
+++ b/gtk/gtkprintoperation-unix.c
@@ -306,20 +306,10 @@ _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;
settings_used = FALSE;
@@ -341,29 +331,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;
diff --git a/gtk/gtkprintoperation.c b/gtk/gtkprintoperation.c
index b6a77b4..a633bcd 100644
--- a/gtk/gtkprintoperation.c
+++ b/gtk/gtkprintoperation.c
@@ -205,6 +205,7 @@ static void
preview_iface_end_preview (GtkPrintOperationPreview *preview)
{
GtkPrintOperation *op;
+ GtkPrintOperationResult result;
op = GTK_PRINT_OPERATION (preview);
@@ -218,7 +219,14 @@ preview_iface_end_preview (GtkPrintOperationPreview *preview)
_gtk_print_operation_set_status (op, GTK_PRINT_STATUS_FINISHED, NULL);
- g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_APPLY);
+ if (op->priv->error)
+ result = GTK_PRINT_OPERATION_RESULT_ERROR;
+ else if (op->priv->cancelled)
+ result = GTK_PRINT_OPERATION_RESULT_CANCEL;
+ else
+ result = GTK_PRINT_OPERATION_RESULT_APPLY;
+
+ g_signal_emit (op, signals[DONE], 0, result);
}
static gboolean
@@ -2228,10 +2236,18 @@ print_pages_idle_done (gpointer user_data)
g_main_loop_quit (priv->rloop);
if (!data->is_preview)
- g_signal_emit (data->op, signals[DONE], 0,
- priv->cancelled ?
- GTK_PRINT_OPERATION_RESULT_CANCEL :
- GTK_PRINT_OPERATION_RESULT_APPLY);
+ {
+ GtkPrintOperationResult result;
+
+ if (priv->error)
+ result = GTK_PRINT_OPERATION_RESULT_ERROR;
+ else if (priv->cancelled)
+ result = GTK_PRINT_OPERATION_RESULT_CANCEL;
+ else
+ result = GTK_PRINT_OPERATION_RESULT_APPLY;
+
+ g_signal_emit (data->op, signals[DONE], 0, result);
+ }
g_object_unref (data->op);
g_free (data->pages);
@@ -2854,8 +2870,19 @@ print_pages (GtkPrintOperation *op,
if (!do_print)
{
+ GtkPrintOperationResult tmp_result;
+
_gtk_print_operation_set_status (op, GTK_PRINT_STATUS_FINISHED_ABORTED, NULL);
- g_signal_emit (op, signals[DONE], 0, result);
+
+ if (priv->error)
+ tmp_result = GTK_PRINT_OPERATION_RESULT_ERROR;
+ else if (priv->cancelled)
+ tmp_result = GTK_PRINT_OPERATION_RESULT_CANCEL;
+ else
+ tmp_result = result;
+
+ g_signal_emit (op, signals[DONE], 0, tmp_result);
+
return;
}
@@ -3132,8 +3159,13 @@ gtk_print_operation_run (GtkPrintOperation *op,
print_pages (op, parent, do_print, result);
if (priv->error && error)
- *error = g_error_copy (priv->error);
-
+ {
+ *error = g_error_copy (priv->error);
+ result = GTK_PRINT_OPERATION_RESULT_ERROR;
+ }
+ else if (priv->cancelled)
+ result = GTK_PRINT_OPERATION_RESULT_CANCEL;
+
return result;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]