Index: wizard/main.c
===================================================================
--- wizard/main.c	(revision 549)
+++ wizard/main.c	(working copy)
@@ -67,6 +67,16 @@
 
 static BluetoothChooser *selector = NULL;
 
+static GtkWidget *passkey_dialog = NULL;
+static GtkWidget *radio_auto = NULL;
+static GtkWidget *radio_fixed = NULL;
+static GtkWidget *radio_0000 = NULL;
+static GtkWidget *radio_1111 = NULL;
+static GtkWidget *radio_1234 = NULL;
+static GtkWidget *radio_custom = NULL;
+static GtkWidget *vbox_fixed = NULL;
+static GtkWidget *entry_custom = NULL;
+
 static void
 set_large_label (GtkLabel *label, const char *text)
 {
@@ -252,7 +262,7 @@
 }
 
 static void prepare_callback(GtkWidget *assistant,
-					GtkWidget *page, gpointer data)
+                             GtkWidget *page, gpointer data)
 {
 	gboolean complete = TRUE;
 	const char *path = AGENT_PATH;
@@ -311,79 +321,6 @@
 							page, complete);
 }
 
-static GtkWidget *create_vbox(GtkWidget *assistant, GtkAssistantPageType type,
-				const gchar *title, const gchar *section)
-{
-	GtkWidget *vbox;
-	GtkWidget *label;
-	GdkPixbuf *pixbuf;
-	gchar *str;
-
-	vbox = gtk_vbox_new(FALSE, 6);
-
-	gtk_container_set_border_width(GTK_CONTAINER(vbox), 24);
-	gtk_assistant_append_page(GTK_ASSISTANT(assistant), vbox);
-	gtk_assistant_set_page_type(GTK_ASSISTANT(assistant), vbox, type);
-	gtk_assistant_set_page_title(GTK_ASSISTANT(assistant), vbox, title);
-
-	pixbuf = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(),
-						"bluetooth", 32, 0, NULL);
-	gtk_assistant_set_page_header_image(GTK_ASSISTANT(assistant),
-								vbox, pixbuf);
-	g_object_unref(pixbuf);
-
-	if (section) {
-		label = gtk_label_new(NULL);
-		str = g_strdup_printf("<b>%s</b>\n", section);
-		gtk_label_set_markup(GTK_LABEL(label), str);
-		g_free(str);
-		gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
-		gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
-	}
-
-	return vbox;
-}
-
-static void create_intro(GtkWidget *assistant)
-{
-	GtkWidget *vbox;
-	GtkWidget *label;
-	GtkWidget *combo;
-	GtkTreeModel *model;
-	GtkCellRenderer *renderer;
-
-	vbox = create_vbox(assistant, GTK_ASSISTANT_PAGE_INTRO,
-			_("Introduction"),
-			_("Welcome to the Bluetooth device setup wizard"));
-
-	label = gtk_label_new(NULL);
-	gtk_label_set_markup(GTK_LABEL(label), _("The device wizard will "
-				"walk you through the process of configuring "
-				"Bluetooth enabled devices for use with this "
-				"computer.\n\n"));
-	gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
-	gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
-	gtk_widget_set_size_request(GTK_WIDGET(label), 380, -1);
-	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0);
-
-	combo = gtk_combo_box_new();
-
-	model = bluetooth_client_get_adapter_model(client);
-	gtk_combo_box_set_model(GTK_COMBO_BOX(combo), model);
-	g_object_unref(model);
-
-	gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
-	gtk_cell_layout_clear(GTK_CELL_LAYOUT(combo));
-
-	renderer = gtk_cell_renderer_text_new();
-	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), renderer, TRUE);
-	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), renderer,
-					"text", BLUETOOTH_COLUMN_NAME, NULL);
-
-	if (gtk_tree_model_iter_n_children(model, NULL) > 1)
-		gtk_box_pack_start(GTK_BOX(vbox), combo, FALSE, FALSE, 0);
-}
-
 static gboolean
 set_page_search_complete (void)
 {
@@ -407,8 +344,7 @@
 	return complete;
 }
 
-static gboolean entry_custom_event(GtkWidget *entry,
-					GdkEventKey *event, GtkWidget *box)
+static gboolean entry_custom_event(GtkWidget *entry, GdkEventKey *event)
 {
 	if (event->length == 0)
 		return FALSE;
@@ -420,10 +356,10 @@
 	return TRUE;
 }
 
-static void entry_custom_changed(GtkWidget *entry, GtkWidget *dialog)
+static void entry_custom_changed(GtkWidget *entry)
 {
 	user_pincode = g_strdup (gtk_entry_get_text(GTK_ENTRY(entry)));
-	gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
+	gtk_dialog_set_response_sensitive (GTK_DIALOG (passkey_dialog),
 					   GTK_RESPONSE_ACCEPT,
 					   gtk_entry_get_text_length (GTK_ENTRY (entry)) >= 1);
 }
@@ -436,7 +372,7 @@
 	gtk_widget_set_sensitive(widget, active);
 }
 
-static void set_user_pincode(GtkWidget *button, GtkWidget *dialog)
+static void set_user_pincode(GtkWidget *button)
 {
 	GSList *list, *l;
 
@@ -452,7 +388,7 @@
 		/* Is it radio_fixed that changed? */
 		radio = g_object_get_data (G_OBJECT (button), "button");
 		if (radio != NULL) {
-			set_user_pincode (radio, NULL);
+			set_user_pincode (radio);
 			return;
 		}
 
@@ -462,7 +398,7 @@
 		if (entry != NULL) {
 			g_free (user_pincode);
 			user_pincode = g_strdup (gtk_entry_get_text(entry));
-			gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
+			gtk_dialog_set_response_sensitive (GTK_DIALOG (passkey_dialog),
 							   GTK_RESPONSE_ACCEPT,
 							   gtk_entry_get_text_length (entry) >= 1);
 		} else if (pin != NULL) {
@@ -494,47 +430,15 @@
 static void
 passkey_option_button_clicked (GtkButton *button, gpointer data)
 {
-	GtkWidget *dialog;
-	GtkBuilder *xml;
-	GtkWidget *radio_auto;
-	GtkWidget *radio_0000;
-	GtkWidget *radio_1111;
-	GtkWidget *radio_1234;
-	GtkWidget *radio_custom;
-	GtkWidget *entry_custom;
 	GtkWidget *radio;
 	char *oldpin;
 
-	xml = gtk_builder_new ();
-	if (gtk_builder_add_from_file (xml, "passkey-options.ui", NULL) == 0) {
-		if (gtk_builder_add_from_file (xml, PKGDATADIR "/" "passkey-options.ui", NULL) == 0) {
-			g_warning ("Could not load passkey-options.ui, broken installation");
-			return;
-		}
-	}
-
 	oldpin = user_pincode;
 	user_pincode = NULL;
+   
+	gtk_window_present(GTK_WINDOW(passkey_dialog));
 
-	dialog = GTK_WIDGET (gtk_builder_get_object (xml, "dialog"));
-	radio_auto = GTK_WIDGET (gtk_builder_get_object (xml, "radio_auto"));
-	radio_0000 = GTK_WIDGET (gtk_builder_get_object (xml, "radio_0000"));
-	radio_1111 = GTK_WIDGET (gtk_builder_get_object (xml, "radio_1111"));
-	radio_1234 = GTK_WIDGET (gtk_builder_get_object (xml, "radio_1234"));
-	radio_custom = GTK_WIDGET (gtk_builder_get_object (xml, "radio_custom"));
-	entry_custom = GTK_WIDGET (gtk_builder_get_object (xml, "entry_custom"));
-
-	g_signal_connect (entry_custom, "key-press-event",
-			  G_CALLBACK (entry_custom_event), NULL);
-	g_signal_connect (entry_custom, "changed",
-			  G_CALLBACK (entry_custom_changed), dialog);
-
-	toggle_set_sensitive(radio_custom, entry_custom);
-	g_signal_connect(radio_custom, "toggled",
-			G_CALLBACK(toggle_set_sensitive), entry_custom);
-
 	/* When reopening, try to guess where the pincode was set */
-	radio = NULL;
 	if (oldpin == NULL)
 		radio = radio_auto;
 	else if (g_str_equal (oldpin, "0000"))
@@ -546,42 +450,65 @@
 	else
 		radio = radio_custom;
 
+	if (radio != radio_auto)
+		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_fixed), TRUE);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE);
 	if (radio == radio_custom)
 		gtk_entry_set_text (GTK_ENTRY (entry_custom), oldpin);
+	else
+		gtk_entry_set_text (GTK_ENTRY (entry_custom), "");
 
-	g_free (oldpin);
+	if (gtk_dialog_run (GTK_DIALOG (passkey_dialog)) != GTK_RESPONSE_ACCEPT) {
+		g_free (user_pincode);
+		user_pincode = oldpin;
+	} else {
+		g_free (oldpin);
+	}
 
-	g_object_set_data (G_OBJECT (radio_auto), "pin", "");
-	g_object_set_data (G_OBJECT (radio_0000), "pin", "0000");
-	g_object_set_data (G_OBJECT (radio_1111), "pin", "1111");
-	g_object_set_data (G_OBJECT (radio_1234), "pin", "1234");
-	g_object_set_data (G_OBJECT (radio_custom), "entry", entry_custom);
+	gtk_widget_hide(passkey_dialog);
+}
 
-	g_signal_connect(radio_auto, "toggled",
-			 G_CALLBACK(set_user_pincode), dialog);
-	g_signal_connect(radio_0000, "toggled",
-			 G_CALLBACK(set_user_pincode), dialog);
-	g_signal_connect(radio_1111, "toggled",
-			 G_CALLBACK(set_user_pincode), dialog);
-	g_signal_connect(radio_1234, "toggled",
-			 G_CALLBACK(set_user_pincode), dialog);
-	g_signal_connect(radio_custom, "toggled",
-			 G_CALLBACK(set_user_pincode), dialog);
+static GtkWidget *create_wizard(void)
+{
+	GtkAssistant *assistant;
+	GtkBuilder *builder;
+	GError *err = NULL;
+	GtkWidget *combo, *page_intro;
+	GtkTreeModel *model;
+	GtkCellRenderer *renderer;
+	GdkPixbuf *pixbuf;
 
-	g_signal_connect (G_OBJECT (dialog), "response",
-			  G_CALLBACK (gtk_widget_destroy), NULL);
+	builder = gtk_builder_new();
+	if(gtk_builder_add_from_file(builder, "wizard.ui", &err) == 0)
+	{
+		// FIXME err->message
+		g_error_free(err);
+		return NULL;
+	}
+   
+	assistant = GTK_ASSISTANT(gtk_builder_get_object(builder, "assistant"));
 
-	gtk_widget_show_all (dialog);
-}
+	// Intro page
+	combo = gtk_combo_box_new();
 
-static void create_search(GtkWidget *assistant)
-{
-	GtkWidget *vbox;
-	GtkWidget *button;
+	model = bluetooth_client_get_adapter_model(client);
+	gtk_combo_box_set_model(GTK_COMBO_BOX(combo), model);
+	g_object_unref(model);
 
-	vbox = create_vbox(assistant, GTK_ASSISTANT_PAGE_CONTENT, _("Device search"), NULL);
+	gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
+	gtk_cell_layout_clear(GTK_CELL_LAYOUT(combo));
 
+	renderer = gtk_cell_renderer_text_new();
+	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), renderer, TRUE);
+	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), renderer,
+					"text", BLUETOOTH_COLUMN_NAME, NULL);
+
+	page_intro = GTK_WIDGET(gtk_builder_get_object(builder, "page_intro"));
+	if (gtk_tree_model_iter_n_children(model, NULL) > 1)
+		gtk_box_pack_start(GTK_BOX(page_intro), combo, FALSE, FALSE, 0);
+
+	// Search page
+	page_search = GTK_WIDGET(gtk_builder_get_object(builder, "page_search"));
 	/* The selector */
 	selector = BLUETOOTH_CHOOSER (bluetooth_chooser_new(_("Select the device you want to setup")));
 	gtk_container_set_border_width(GTK_CONTAINER(selector), 5);
@@ -598,86 +525,86 @@
 	g_signal_connect(selector, "notify::device-selected-name",
 			 G_CALLBACK(device_selected_name_cb), assistant);
 
-	gtk_container_add(GTK_CONTAINER(vbox), GTK_WIDGET (selector));
+	gtk_container_add(GTK_CONTAINER(page_search), GTK_WIDGET (selector));
 
-	page_search = vbox;
+	// Setup page
+	page_setup = GTK_WIDGET(gtk_builder_get_object(builder, "page_setup"));
+	label_setup = GTK_WIDGET(gtk_builder_get_object(builder, "label_setup"));
+	label_passkey_help = GTK_WIDGET(gtk_builder_get_object(builder, "label_passkey_help"));
+	label_passkey = GTK_WIDGET(gtk_builder_get_object(builder, "label_passkey"));
 
-	button = gtk_button_new_with_mnemonic (_("Passkey _Options..."));
-	g_signal_connect (G_OBJECT (button), "clicked",
-			  G_CALLBACK (passkey_option_button_clicked), assistant);
-	gtk_widget_show (button);
+	// Summary page
+	page_summary = GTK_WIDGET(gtk_builder_get_object(builder, "page_summary"));
+   
+	// Set page icons (named icons not supported by Glade)
+	pixbuf = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(),
+						"bluetooth", 32, 0, NULL);
+	gtk_assistant_set_page_header_image(assistant, page_intro, pixbuf);
+	gtk_assistant_set_page_header_image(assistant, page_search, pixbuf);
+	gtk_assistant_set_page_header_image(assistant, page_setup, pixbuf);
+	gtk_assistant_set_page_header_image(assistant, page_summary, pixbuf);
+	g_object_unref(pixbuf);
+   
+	// Passkey dialog
+	passkey_dialog = GTK_WIDGET(gtk_builder_get_object(builder, "passkey_dialog"));
+	radio_auto = GTK_WIDGET(gtk_builder_get_object(builder, "radio_auto"));
+	radio_fixed = GTK_WIDGET(gtk_builder_get_object(builder, "radio_fixed"));
+	radio_0000 = GTK_WIDGET(gtk_builder_get_object(builder, "radio_0000"));
+	radio_1111 = GTK_WIDGET(gtk_builder_get_object(builder, "radio_1111"));
+	radio_1234 = GTK_WIDGET(gtk_builder_get_object(builder, "radio_1234"));
+	radio_custom = GTK_WIDGET(gtk_builder_get_object(builder, "radio_custom"));
+	vbox_fixed = GTK_WIDGET(gtk_builder_get_object(builder, "vbox_fixed"));
+	entry_custom = GTK_WIDGET(gtk_builder_get_object(builder, "entry_custom"));
+   
+	g_object_set_data (G_OBJECT (radio_auto), "pin", "");
+	g_object_set_data (G_OBJECT (radio_fixed), "button", radio_0000);
+	g_object_set_data (G_OBJECT (radio_0000), "pin", "0000");
+	g_object_set_data (G_OBJECT (radio_1111), "pin", "1111");
+	g_object_set_data (G_OBJECT (radio_1234), "pin", "1234");
+	g_object_set_data (G_OBJECT (radio_custom), "entry", entry_custom);
+   
+	g_signal_connect(radio_auto, "toggled",
+			 G_CALLBACK(set_user_pincode), NULL);
+	g_signal_connect(radio_fixed, "toggled",
+			 G_CALLBACK(set_user_pincode), NULL);
+	g_signal_connect(radio_0000, "toggled",
+			 G_CALLBACK(set_user_pincode), NULL);
+	g_signal_connect(radio_1111, "toggled",
+			 G_CALLBACK(set_user_pincode), NULL);
+	g_signal_connect(radio_1234, "toggled",
+			 G_CALLBACK(set_user_pincode), NULL);
+	g_signal_connect(radio_custom, "toggled",
+			 G_CALLBACK(set_user_pincode), NULL);
+   
+	g_signal_connect (entry_custom, "key-press-event",
+			  G_CALLBACK (entry_custom_event), NULL);
+	g_signal_connect (entry_custom, "changed",
+			  G_CALLBACK (entry_custom_changed), NULL);
+	g_signal_connect(radio_fixed, "toggled",
+			G_CALLBACK(toggle_set_sensitive), vbox_fixed);
+	g_signal_connect(radio_custom, "toggled",
+			G_CALLBACK(toggle_set_sensitive), entry_custom);
 
-	gtk_box_pack_start (GTK_BOX(vbox), GTK_WIDGET (button),
-			    FALSE, FALSE, 6);
-}
-
-static void create_setup(GtkWidget *assistant)
-{
-	GtkWidget *vbox;
-	GtkWidget *label;
-
-	vbox = create_vbox(assistant, GTK_ASSISTANT_PAGE_CONTENT,
-				_("Device setup"),
-				_("Setting up new device"));
-
-	label = gtk_label_new(NULL);
-	gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
-	gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
-	gtk_widget_set_size_request(GTK_WIDGET(label), 380, -1);
-	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0);
-	label_setup = label;
-
-	label = gtk_label_new(NULL);
-	gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
-	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0);
-	label_passkey_help = label;
-
-	label = gtk_label_new(NULL);
-	gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.5);
-	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0);
-	label_passkey = label;
-
-	page_setup = vbox;
-}
-
-static void create_summary(GtkWidget *assistant)
-{
-	GtkWidget *vbox;
-
-	vbox = create_vbox(assistant, GTK_ASSISTANT_PAGE_SUMMARY,
-				_("Summary"),
-				_("Successfully configured new device"));
-
-	page_summary = vbox;
-}
-
-static GtkWidget *create_wizard(void)
-{
-	GtkWidget *assistant;
-
-	assistant = gtk_assistant_new();
-	gtk_window_set_title(GTK_WINDOW(assistant), _("Bluetooth Device Wizard"));
-	gtk_window_set_position(GTK_WINDOW(assistant), GTK_WIN_POS_CENTER);
-	gtk_window_set_default_size(GTK_WINDOW(assistant), 440, 440);
-
-	create_intro(assistant);
-	//create_type(assistant);
-	create_search(assistant);
-	create_setup(assistant);
-	create_summary(assistant);
-
+	/* Connect signals.  Autoconnect could be used if the build process
+         * was changed.  Set the GtkBuilder documentation for details.
+         * Check all signals are in the .ui files before removing manual
+         * connections. */
+	/*gtk_builder_connect_signals(builder, NULL);*/
+   
 	g_signal_connect(G_OBJECT(assistant), "close",
 					G_CALLBACK(close_callback), NULL);
 	g_signal_connect(G_OBJECT(assistant), "cancel",
 					G_CALLBACK(close_callback), NULL);
 	g_signal_connect(G_OBJECT(assistant), "prepare",
 					G_CALLBACK(prepare_callback), NULL);
+	g_signal_connect (gtk_builder_get_object(builder, "passkey_option_button"), "clicked",
+			  G_CALLBACK (passkey_option_button_clicked), assistant);
 
-	gtk_widget_show_all(assistant);
+	gtk_widget_show_all(GTK_WIDGET(assistant));
 
 	gtk_assistant_update_buttons_state(GTK_ASSISTANT(assistant));
 
-	return assistant;
+	return GTK_WIDGET(assistant);
 }
 
 static UniqueResponse
Index: wizard.ui
===================================================================
--- wizard.ui	(revision 0)
+++ wizard.ui	(revision 0)
@@ -0,0 +1,361 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkAssistant" id="assistant">
+    <property name="title" translatable="yes">Bluetooth Device Wizard</property>
+    <property name="window_position">center</property>
+    <property name="default_width">440</property>
+    <property name="default_height">440</property>
+    <signal name="prepare" handler="prepare_callback"/>
+    <signal name="cancel" handler="close_callback"/>
+    <signal name="close" handler="close_callback"/>
+    <child>
+      <object class="GtkVBox" id="page_intro">
+        <property name="visible">True</property>
+        <property name="border_width">24</property>
+        <property name="spacing">6</property>
+        <child>
+          <object class="GtkLabel" id="label1">
+            <property name="visible">True</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="label" translatable="yes">&lt;b&gt;Welcome to the Bluetooth device setup wizard&lt;/b&gt;
+</property>
+            <property name="use_markup">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label2">
+            <property name="width_request">380</property>
+            <property name="visible">True</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="label" translatable="yes">The device wizard will walk you through the process of configuring Bluetooth enabled devices for use with this computer.
+
+</property>
+            <property name="wrap">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="page_type">intro</property>
+        <property name="title">Introduction</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkVBox" id="page_search">
+        <property name="visible">True</property>
+        <property name="border_width">24</property>
+        <property name="spacing">6</property>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <object class="GtkButton" id="passkey_option_button">
+            <property name="label" translatable="yes">Passkey _options...</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_underline">True</property>
+            <signal name="clicked" handler="passkey_option_button_clicked"/>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="title">Device search</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkVBox" id="page_setup">
+        <property name="visible">True</property>
+        <property name="border_width">24</property>
+        <property name="spacing">6</property>
+        <child>
+          <object class="GtkLabel" id="label3">
+            <property name="visible">True</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="label" translatable="yes">&lt;b&gt;Setting up new device&lt;/b&gt;
+</property>
+            <property name="use_markup">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label_setup">
+            <property name="width_request">380</property>
+            <property name="visible">True</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="label">label_setup</property>
+            <property name="wrap">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label_passkey_help">
+            <property name="visible">True</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="label">label_passkey_help</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label_passkey">
+            <property name="visible">True</property>
+            <property name="label">label_passkey</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">3</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="title">Device setup</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkVBox" id="page_summary">
+        <property name="visible">True</property>
+        <property name="border_width">24</property>
+        <property name="spacing">6</property>
+        <child>
+          <object class="GtkLabel" id="label4">
+            <property name="visible">True</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="label" translatable="yes">&lt;b&gt;Successfully configured new device&lt;/b&gt;
+</property>
+            <property name="use_markup">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+      </object>
+      <packing>
+        <property name="page_type">summary</property>
+        <property name="title">Summary</property>
+      </packing>
+    </child>
+  </object>
+  <object class="GtkDialog" id="passkey_dialog">
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Passkey options</property>
+    <property name="modal">True</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="type_hint">dialog</property>
+    <property name="transient_for">assistant</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkRadioButton" id="radio_auto">
+            <property name="label" translatable="yes">_Automatic passkey selection</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="use_underline">True</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="radio_fixed">
+            <property name="label" translatable="yes">Use _fixed passkey:</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="use_underline">True</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <property name="group">radio_auto</property>
+          </object>
+          <packing>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkAlignment" id="alignment1">
+            <property name="visible">True</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="left_padding">24</property>
+            <child>
+              <object class="GtkVBox" id="vbox_fixed">
+                <property name="visible">True</property>
+                <property name="sensitive">False</property>
+                <child>
+                  <object class="GtkRadioButton" id="radio_0000">
+                    <property name="label" translatable="yes">'0000' (most headsets, mice and GPS devices)</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkRadioButton" id="radio_1111">
+                    <property name="label" translatable="yes">'1111'</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                    <property name="group">radio_0000</property>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkRadioButton" id="radio_1234">
+                    <property name="label" translatable="yes">'1234'</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                    <property name="group">radio_0000</property>
+                  </object>
+                  <packing>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkHBox" id="hbox1">
+                    <property name="visible">True</property>
+                    <property name="spacing">7</property>
+                    <child>
+                      <object class="GtkRadioButton" id="radio_custom">
+                        <property name="label" translatable="yes">Custom passkey code:</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="active">True</property>
+                        <property name="draw_indicator">True</property>
+                        <property name="group">radio_0000</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkEntry" id="entry_custom">
+                        <property name="visible">True</property>
+                        <property name="sensitive">False</property>
+                        <property name="can_focus">True</property>
+                        <property name="max_length">20</property>
+                        <property name="width_chars">20</property>
+                        <signal name="changed" handler="entry_custom_changed"/>
+                        <signal name="key_press_event" handler="entry_custom_event"/>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">3</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="position">3</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="cancel_button">
+                <property name="label" translatable="yes">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="close_button">
+                <property name="label" translatable="yes">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-2">cancel_button</action-widget>
+      <action-widget response="-3">close_button</action-widget>
+    </action-widgets>
+  </object>
+</interface>
