Handle failure to create temp file by returning NULL.
* gtk/gtkprintoperation-unix.c (_gtk_print_operation_platform_backend_create_preview_surface): Handle failure to create temp file by returning NULL. * gtk/gtkprintoperation.c (gtk_print_operation_preview_handler): Return FALSE if surface creation fails. (print_pages): If the preiew signal is not handled, show an error dialog. svn path=/trunk/; revision=20715
This commit is contained in:
parent
cbd06646dd
commit
a7abdcf8fc
17
ChangeLog
17
ChangeLog
@ -1,3 +1,20 @@
|
|||||||
|
2008-07-01 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
Bug 434535 – printoperation's create_surface doesn't check temp file
|
||||||
|
creation for success
|
||||||
|
|
||||||
|
Patch by Marek Kasik:
|
||||||
|
|
||||||
|
* gtk/gtkprintoperation-unix.c
|
||||||
|
(_gtk_print_operation_platform_backend_create_preview_surface):
|
||||||
|
Handle failure to create temp file by returning NULL.
|
||||||
|
|
||||||
|
* gtk/gtkprintoperation.c (gtk_print_operation_preview_handler):
|
||||||
|
Return FALSE if surface creation fails.
|
||||||
|
|
||||||
|
(print_pages): If the preiew signal is not handled, show an
|
||||||
|
error dialog.
|
||||||
|
|
||||||
2008-07-01 Michael Natterer <mitch@imendio.com>
|
2008-07-01 Michael Natterer <mitch@imendio.com>
|
||||||
|
|
||||||
Bug 442042 – GtkScaleButton is too limited
|
Bug 442042 – GtkScaleButton is too limited
|
||||||
|
@ -667,6 +667,13 @@ _gtk_print_operation_platform_backend_create_preview_surface (GtkPrintOperation
|
|||||||
|
|
||||||
filename = g_build_filename (g_get_tmp_dir (), "previewXXXXXX.pdf", NULL);
|
filename = g_build_filename (g_get_tmp_dir (), "previewXXXXXX.pdf", NULL);
|
||||||
fd = g_mkstemp (filename);
|
fd = g_mkstemp (filename);
|
||||||
|
|
||||||
|
if (fd < 0)
|
||||||
|
{
|
||||||
|
g_free (filename);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
*target = filename;
|
*target = filename;
|
||||||
|
|
||||||
paper_size = gtk_page_setup_get_paper_size (page_setup);
|
paper_size = gtk_page_setup_get_paper_size (page_setup);
|
||||||
@ -674,7 +681,7 @@ _gtk_print_operation_platform_backend_create_preview_surface (GtkPrintOperation
|
|||||||
h = gtk_paper_size_get_height (paper_size, GTK_UNIT_POINTS);
|
h = gtk_paper_size_get_height (paper_size, GTK_UNIT_POINTS);
|
||||||
|
|
||||||
*dpi_x = *dpi_y = 72;
|
*dpi_x = *dpi_y = 72;
|
||||||
surface = cairo_pdf_surface_create_for_stream (write_preview, GINT_TO_POINTER(fd), w, h);
|
surface = cairo_pdf_surface_create_for_stream (write_preview, GINT_TO_POINTER (fd), w, h);
|
||||||
|
|
||||||
cairo_surface_set_user_data (surface, &key, GINT_TO_POINTER (fd), close_preview);
|
cairo_surface_set_user_data (surface, &key, GINT_TO_POINTER (fd), close_preview);
|
||||||
|
|
||||||
|
@ -491,6 +491,12 @@ gtk_print_operation_preview_handler (GtkPrintOperation *op,
|
|||||||
&dpi_x, &dpi_y,
|
&dpi_x, &dpi_y,
|
||||||
&pop->filename);
|
&pop->filename);
|
||||||
|
|
||||||
|
if (pop->surface == NULL)
|
||||||
|
{
|
||||||
|
g_free (pop);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
cr = cairo_create (pop->surface);
|
cr = cairo_create (pop->surface);
|
||||||
gtk_print_context_set_cairo_context (op->priv->print_context, cr,
|
gtk_print_context_set_cairo_context (op->priv->print_context, cr,
|
||||||
dpi_x, dpi_y);
|
dpi_x, dpi_y);
|
||||||
@ -2271,13 +2277,38 @@ print_pages (GtkPrintOperation *op,
|
|||||||
priv->print_context,
|
priv->print_context,
|
||||||
parent,
|
parent,
|
||||||
&handled);
|
&handled);
|
||||||
|
|
||||||
if (!handled ||
|
if (!handled)
|
||||||
gtk_print_context_get_cairo_context (priv->print_context) == NULL)
|
{
|
||||||
{
|
GtkMessageDialog *error_dialog;
|
||||||
/* Programmer error */
|
|
||||||
g_error ("You must set a cairo context on the print context");
|
error_dialog = gtk_message_dialog_new (parent,
|
||||||
}
|
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
|
GTK_MESSAGE_ERROR,
|
||||||
|
GTK_BUTTONS_OK,
|
||||||
|
_("Error creating print preview"));
|
||||||
|
|
||||||
|
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (error_dialog),
|
||||||
|
_("The most probable reason is that a temporary file could not be created."));
|
||||||
|
|
||||||
|
if (parent->group)
|
||||||
|
gtk_window_group_add_window (parent->group, GTK_WINDOW (error_dialog));
|
||||||
|
|
||||||
|
g_signal_connect (error_dialog, "response",
|
||||||
|
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||||
|
|
||||||
|
gtk_widget_show (error_dialog);
|
||||||
|
|
||||||
|
print_pages_idle_done (data);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gtk_print_context_get_cairo_context (priv->print_context) == NULL)
|
||||||
|
{
|
||||||
|
/* Programmer error */
|
||||||
|
g_error ("You must set a cairo context on the print context");
|
||||||
|
}
|
||||||
|
|
||||||
priv->start_page = preview_start_page;
|
priv->start_page = preview_start_page;
|
||||||
priv->end_page = preview_end_page;
|
priv->end_page = preview_end_page;
|
||||||
|
Loading…
Reference in New Issue
Block a user