Index: gtk/gtkprintunixdialog.c
===================================================================
--- gtk/gtkprintunixdialog.c	(revision 21872)
+++ 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 +261,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 useful for custom widget
+   * to connect to this signal and handle change of selected printer.
+   *
+   * 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 +1603,8 @@
 
   update_dialog_from_settings (dialog);
   update_dialog_from_capabilities (dialog);
+
+  g_signal_emit (dialog, signals[PRINTER_CHANGED], 0);
 }
 
 static void
Index: gtk/gtkprintunixdialog.h
===================================================================
--- gtk/gtkprintunixdialog.h	(revision 21872)
+++ 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);
Index: gtk/gtkprintoperation-unix.c
===================================================================
--- gtk/gtkprintoperation-unix.c	(revision 21872)
+++ gtk/gtkprintoperation-unix.c	(working copy)
@@ -388,6 +388,8 @@
       
       gtk_print_unix_dialog_add_custom_tab (GTK_PRINT_UNIX_DIALOG (pd),
 					    priv->custom_widget, label);
+
+      g_signal_emit_by_name (op, "init-custom-widget", pd, priv->custom_widget);
     }
   
   return pd;
Index: gtk/gtkprintoperation.c
===================================================================
--- gtk/gtkprintoperation.c	(revision 21872)
+++ gtk/gtkprintoperation.c	(working copy)
@@ -46,6 +46,7 @@
   END_PRINT,
   STATUS_CHANGED,
   CREATE_CUSTOM_WIDGET,
+  INIT_CUSTOM_WIDGET,
   CUSTOM_WIDGET_APPLY,
   PREVIEW,
   LAST_SIGNAL
@@ -806,6 +807,27 @@
 		  G_TYPE_OBJECT, 0);
 
   /**
+   * GtkPrintOperation::init-custom-widget:
+   * @operation: the #GtkPrintOperation on which the signal was emitted
+   * @print_dialog: the print dialog
+   * @custom_widget: the custom widget added in create-custom-widget
+   *
+   * Emmited after addition of the custom widget to the print dialog.
+   * Application can connect to this signal and obtain pointer to the
+   * print dialog thorough this signal.
+   *
+   * Since: 2.16
+   */
+  signals[INIT_CUSTOM_WIDGET] =
+    g_signal_new (I_("init-custom-widget"),
+		  G_TYPE_FROM_CLASS (class),
+		  G_SIGNAL_RUN_LAST,
+		  G_STRUCT_OFFSET (GtkPrintOperationClass, status_changed),
+		  NULL, NULL,
+		  _gtk_marshal_VOID__OBJECT_OBJECT,
+		  G_TYPE_NONE, 2, GTK_TYPE_WIDGET, GTK_TYPE_WIDGET);
+
+  /**
    * 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 21872)
+++ gtk/gtkprintoperation.h	(working copy)
@@ -105,7 +105,10 @@
 
   GtkWidget *(*create_custom_widget) (GtkPrintOperation *operation);
   void       (*custom_widget_apply)  (GtkPrintOperation *operation,
-				      GtkWidget *widget);
+				      GtkWidget         *widget);
+  void     (*init_custom_widget)     (GtkPrintOperation *operation,
+                                      GtkWidget         *print_dialog,
+                                      GtkWidget         *custom_widget);
 
   gboolean (*preview)	     (GtkPrintOperation        *operation,
 			      GtkPrintOperationPreview *preview,
