Index: gtk/gtkmarshalers.list
===================================================================
--- gtk/gtkmarshalers.list	(revision 21912)
+++ gtk/gtkmarshalers.list	(working copy)
@@ -87,6 +87,7 @@
 VOID:OBJECT,UINT
 VOID:OBJECT,UINT,FLAGS
 VOID:OBJECT,STRING
+VOID:OBJECT,OBJECT,OBJECT
 VOID:POINTER
 VOID:POINTER,INT
 VOID:POINTER,BOOLEAN
Index: gtk/gtkprintunixdialog.c
===================================================================
--- gtk/gtkprintunixdialog.c	(revision 21912)
+++ gtk/gtkprintunixdialog.c	(working copy)
@@ -64,6 +64,14 @@
 #define GTK_PRINT_UNIX_DIALOG_GET_PRIVATE(o)  \
    (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_PRINT_UNIX_DIALOG, GtkPrintUnixDialogPrivate))
 
+enum 
+{
+  PRINTER_CHANGED,
+  LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
 static void     gtk_print_unix_dialog_destroy      (GtkPrintUnixDialog *dialog);
 static void     gtk_print_unix_dialog_finalize     (GObject            *object);
 static void     gtk_print_unix_dialog_set_property (GObject            *object,
@@ -252,6 +260,24 @@
 
   widget_class->style_set = gtk_print_unix_dialog_style_set;
 
+  /**
+   * GtkPrintUnixDialog::printer-changed:
+   * @dialog: the #GtkPrintUnixDialog on which the signal was emitted
+   *
+   * Emitted after change of selected printer. It is used in #GtkPrintOperationUnix
+   * to emit signal "update-custom-widget".
+   *
+   * Since: 2.16
+   */
+  signals[PRINTER_CHANGED] =
+    g_signal_new (I_("printer-changed"),
+		  G_TYPE_FROM_CLASS (class),
+		  G_SIGNAL_RUN_LAST,
+		  G_STRUCT_OFFSET (GtkPrintUnixDialogClass, printer_changed),
+		  NULL, NULL,
+		  g_cclosure_marshal_VOID__VOID,
+		  G_TYPE_NONE, 0);
+
   g_object_class_install_property (object_class,
 				   PROP_PAGE_SETUP,
 				   g_param_spec_object ("page-setup",
@@ -1560,6 +1586,8 @@
 
   update_dialog_from_settings (dialog);
   update_dialog_from_capabilities (dialog);
+
+  g_signal_emit_by_name (dialog, "printer-changed");
 }
 
 static void
Index: gtk/gtkprintunixdialog.h
===================================================================
--- gtk/gtkprintunixdialog.h	(revision 21912)
+++ gtk/gtkprintunixdialog.h	(working copy)
@@ -53,6 +53,7 @@
 {
   GtkDialogClass parent_class;
 
+  void       (*printer_changed) (GtkPrintUnixDialog *dialog);
 
   /* Padding for future expansion */
   void (*_gtk_reserved1) (void);
@@ -61,7 +62,6 @@
   void (*_gtk_reserved4) (void);
   void (*_gtk_reserved5) (void);
   void (*_gtk_reserved6) (void);
-  void (*_gtk_reserved7) (void);
 };
 
 GType		  gtk_print_unix_dialog_get_type	     (void) G_GNUC_CONST;
Index: gtk/gtkprintoperation-unix.c
===================================================================
--- gtk/gtkprintoperation-unix.c	(revision 21912)
+++ gtk/gtkprintoperation-unix.c	(working copy)
@@ -342,6 +342,25 @@
 }
 
 
+static void
+printer_changed_cb (GtkPrintUnixDialog *print_dialog, 
+		    gpointer            user_data)
+{
+  GtkPageSetup             *page_setup;
+  GtkPrintSettings         *print_settings;
+  GtkPrintOperation        *op = user_data;
+  GtkPrintOperationPrivate *priv = op->priv;
+
+  page_setup = gtk_print_unix_dialog_get_page_setup (print_dialog);
+  print_settings = gtk_print_unix_dialog_get_settings (print_dialog);
+
+  g_signal_emit_by_name (op,
+                         "update-custom-widget",
+                         priv->custom_widget,
+                         page_setup,
+                         print_settings);
+}
+
 static GtkWidget *
 get_print_dialog (GtkPrintOperation *op,
                   GtkWindow         *parent)
@@ -388,6 +407,8 @@
       
       gtk_print_unix_dialog_add_custom_tab (GTK_PRINT_UNIX_DIALOG (pd),
 					    priv->custom_widget, label);
+
+      g_signal_connect (pd, "printer-changed", (GCallback) printer_changed_cb, op);
     }
   
   return pd;
Index: gtk/gtkprintoperation.c
===================================================================
--- gtk/gtkprintoperation.c	(revision 21912)
+++ gtk/gtkprintoperation.c	(working copy)
@@ -48,6 +48,7 @@
   CREATE_CUSTOM_WIDGET,
   CUSTOM_WIDGET_APPLY,
   PREVIEW,
+  UPDATE_CUSTOM_WIDGET,
   LAST_SIGNAL
 };
 
@@ -806,6 +807,28 @@
 		  G_TYPE_OBJECT, 0);
 
   /**
+   * GtkPrintOperation::update-custom-widget:
+   * @operation: the #GtkPrintOperation on which the signal was emitted
+   * @widget: the Custom widget which is to be updated
+   * @setup: actual page setup
+   * @settings: actual print settings
+   *
+   * Emmited after change of selected printer. The actual page setup and
+   * print settings are passed to the Custom widget, which can actualize
+   * itself according to this change. 
+   *
+   * Since: 2.16
+   */
+  signals[UPDATE_CUSTOM_WIDGET] =
+    g_signal_new (I_("update-custom-widget"),
+		  G_TYPE_FROM_CLASS (class),
+		  G_SIGNAL_RUN_LAST,
+		  G_STRUCT_OFFSET (GtkPrintOperationClass, status_changed),
+		  NULL, NULL,
+		  _gtk_marshal_VOID__OBJECT_OBJECT_OBJECT,
+		  G_TYPE_NONE, 3, GTK_TYPE_WIDGET, GTK_TYPE_PAGE_SETUP, GTK_TYPE_PRINT_SETTINGS);
+
+  /**
    * GtkPrintOperation::custom-widget-apply:
    * @operation: the #GtkPrintOperation on which the signal was emitted
    * @widget: the custom widget added in create-custom-widget
Index: gtk/gtkprintoperation.h
===================================================================
--- gtk/gtkprintoperation.h	(revision 21912)
+++ gtk/gtkprintoperation.h	(working copy)
@@ -105,13 +105,18 @@
 
   GtkWidget *(*create_custom_widget) (GtkPrintOperation *operation);
   void       (*custom_widget_apply)  (GtkPrintOperation *operation,
-				      GtkWidget *widget);
+				      GtkWidget         *widget);
 
   gboolean (*preview)	     (GtkPrintOperation        *operation,
 			      GtkPrintOperationPreview *preview,
 			      GtkPrintContext          *context,
 			      GtkWindow                *parent);
 
+  void     (*update_custom_widget) (GtkPrintOperation *operation,
+                                    GtkWidget         *widget,
+                                    GtkPageSetup      *setup,
+                                    GtkPrintSettings  *settings);
+
   /* Padding for future expansion */
   void (*_gtk_reserved1) (void);
   void (*_gtk_reserved2) (void);
@@ -119,7 +124,6 @@
   void (*_gtk_reserved4) (void);
   void (*_gtk_reserved5) (void);
   void (*_gtk_reserved6) (void);
-  void (*_gtk_reserved7) (void);
 };
 
 #define GTK_PRINT_ERROR gtk_print_error_quark ()
