Index: gtk/gtkprintoperation-win32.c
===================================================================
--- gtk/gtkprintoperation-win32.c	(revision 19951)
+++ gtk/gtkprintoperation-win32.c	(working copy)
@@ -455,6 +455,9 @@
 		GtkPrintContext *print_context)
 {
   GtkPrintOperationWin32 *op_win32 = op->priv->platform_data;
+
+  cairo_surface_show_page (op_win32->surface);
+
   EndPage (op_win32->hdc);
 }
 
@@ -486,6 +489,8 @@
   GtkPrintOperationWin32 *op_win32 = op->priv->platform_data;
   LPDEVNAMES devnames;
   HANDLE printerHandle = 0;
+
+  cairo_surface_finish (op_win32->surface);
   
   EndDoc (op_win32->hdc);
 
@@ -501,7 +506,6 @@
   GlobalFree(op_win32->devmode);
   GlobalFree(op_win32->devnames);
 
-  cairo_surface_finish (op_win32->surface);
   cairo_surface_destroy (op_win32->surface);
   op_win32->surface = NULL;
 
@@ -1601,7 +1605,8 @@
       
       *do_print = TRUE;
 
-      op_win32->surface = cairo_win32_surface_create (printdlgex->hDC);
+      op_win32->surface = cairo_win32_printing_surface_create (printdlgex->hDC);
+
       dpi_x = (double)GetDeviceCaps (printdlgex->hDC, LOGPIXELSX);
       dpi_y = (double)GetDeviceCaps (printdlgex->hDC, LOGPIXELSY);
 
@@ -1619,7 +1624,7 @@
       job_id = StartDocW(printdlgex->hDC, &docinfo); 
       g_free ((void *)docinfo.lpszDocName);
       if (job_id <= 0) 
-	{ 
+	{
 	  result = GTK_PRINT_OPERATION_RESULT_ERROR;
 	  g_set_error (&priv->error,
 		       GTK_PRINT_ERROR,
@@ -1703,8 +1708,9 @@
 							cairo_surface_t *surface,
 							cairo_t *cr)
 {
-  /* TODO: This doesn't actually seem to work.
-   * Do enhanced metafiles really support multiple pages?
+  cairo_surface_show_page (cr);
+
+  /* TODO: Enhanced metafiles don't support multiple pages.
    */
   HDC dc = cairo_win32_surface_get_dc (surface);
   EndPage (dc);
@@ -1758,7 +1764,7 @@
   *dpi_x = (double)GetDeviceCaps (metafile_dc, LOGPIXELSX);
   *dpi_y = (double)GetDeviceCaps (metafile_dc, LOGPIXELSY);
 
-  return cairo_win32_surface_create (metafile_dc);
+  return cairo_win32_printing_surface_create (metafile_dc);
 }
 
 void
Index: demos/gtk-demo/printing.c
===================================================================
--- demos/gtk-demo/printing.c	(revision 19951)
+++ demos/gtk-demo/printing.c	(working copy)
@@ -49,6 +49,9 @@
   
   data->num_lines = i;
   data->num_pages = (data->num_lines - 1) / data->lines_per_page + 1;
+
+  g_print ("num_lines = %d, num_pages = %d\n", data->num_lines, data->num_lines);
+
   gtk_print_operation_set_n_pages (operation, data->num_pages);
 }
 
@@ -120,6 +123,7 @@
   line = page_nr * data->lines_per_page;
   for (i = 0; i < data->lines_per_page && line < data->num_lines; i++) 
     {
+      g_print ("%s\n", data->lines[line]);
       pango_layout_set_text (layout, data->lines[line], -1);
       pango_cairo_show_layout (cr, layout);
       cairo_rel_move_to (cr, 0, data->font_size);
Index: configure.in
===================================================================
--- configure.in	(revision 19951)
+++ configure.in	(working copy)
@@ -34,7 +34,7 @@
 m4_define([glib_required_version], [2.15.0])
 m4_define([pango_required_version], [1.19.3])
 m4_define([atk_required_version], [1.13.0])
-m4_define([cairo_required_version], [1.2.0])
+m4_define([cairo_required_version], [1.5.2])
 
 
 AC_INIT([gtk+], [gtk_version],
