[gnome-initial-setup] Split each page into its own UI file



commit 2e3ffe596d809e683b22c7225a4012fe9c8b935c
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Fri Jun 22 16:19:53 2012 -0400

    Split each page into its own UI file
    
    At the same time, split the accounts part out more, but not completely
    yet. This fixes EULAs.

 gnome-initial-setup/Makefile.am           |   15 +-
 gnome-initial-setup/gis-account-page.c    |  253 ++++++----
 gnome-initial-setup/gis-account-page.ui   |  272 +++++++++++
 gnome-initial-setup/gis-assistant.c       |   91 +----
 gnome-initial-setup/gis-goa-page.c        |   13 +-
 gnome-initial-setup/gis-goa-page.ui       |   56 +++
 gnome-initial-setup/gis-location-page.c   |   13 +-
 gnome-initial-setup/gis-location-page.ui  |  126 +++++
 gnome-initial-setup/gis-network-page.c    |   14 +-
 gnome-initial-setup/gis-network-page.ui   |  125 +++++
 gnome-initial-setup/gis-summary-page.c    |   10 +-
 gnome-initial-setup/gis-summary-page.ui   |  109 +++++
 gnome-initial-setup/gis-utils.c           |   23 +
 gnome-initial-setup/gis-utils.h           |    1 +
 gnome-initial-setup/gis-welcome-page.c    |   10 +
 gnome-initial-setup/gis-welcome-page.ui   |   54 ++
 gnome-initial-setup/gnome-initial-setup.c |   46 +--
 gnome-initial-setup/gnome-initial-setup.h |    5 +-
 gnome-initial-setup/setup.gresource.xml   |    6 +
 gnome-initial-setup/setup.ui              |  746 -----------------------------
 20 files changed, 988 insertions(+), 1000 deletions(-)
---
diff --git a/gnome-initial-setup/Makefile.am b/gnome-initial-setup/Makefile.am
index 036d41e..231c057 100644
--- a/gnome-initial-setup/Makefile.am
+++ b/gnome-initial-setup/Makefile.am
@@ -24,7 +24,16 @@ timedated.h: $(srcdir)/timedated1-interface.xml
 		--generate-c-code timedated $<
 BUILT_SOURCES += timedated.c timedated.h
 
-setup_resources.c: setup.gresource.xml setup.ui welcome-image.png
+UI_FILES = \
+	setup.ui \
+	gis-welcome-page.ui \
+	gis-network-page.ui \
+	gis-account-page.ui \
+	gis-location-page.ui \
+	gis-goa-page.ui \
+	gis-summary-page.ui
+
+setup_resources.c: setup.gresource.xml $(UI_FILES) welcome-image.png
 	$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $(srcdir)/setup.gresource.xml
 BUILT_SOURCES += setup_resources.c
 
@@ -67,7 +76,7 @@ EXTRA_DIST = \
 	$(sys_DATA) \
 	$(included_source_files) \
 	timedated1-interface.xml \
-	setup.ui \
-	welcome-image.png \
+	$(UI_FILES) \
 	setup.gresource.xml \
+	welcome-image.png \
 	welcome-tour.desktop
diff --git a/gnome-initial-setup/gis-account-page.c b/gnome-initial-setup/gis-account-page.c
index 65b5056..1505443 100644
--- a/gnome-initial-setup/gis-account-page.c
+++ b/gnome-initial-setup/gis-account-page.c
@@ -1,23 +1,48 @@
 
 /* Account page {{{1 */
 
+#define OBJ(type,name) ((type)gtk_builder_get_object(data->builder,(name)))
+#define WID(name) OBJ(GtkWidget*,name)
+
 static gboolean skip_account = FALSE;
 
+typedef struct _AccountData AccountData;
+
+struct _AccountData {
+        SetupData *setup;
+        GtkBuilder *builder;
+
+        ActUserManager *act_client;
+
+        gboolean valid_name;
+        gboolean valid_username;
+        gboolean valid_password;
+        const gchar *password_reason;
+        ActUserPasswordMode password_mode;
+        ActUserAccountType account_type;
+
+        gboolean user_data_unsaved;
+
+        GtkWidget *photo_dialog;
+        GdkPixbuf *avatar_pixbuf;
+        gchar *avatar_filename;
+};
+
 static void
-update_account_page_status (SetupData *setup)
+update_account_page_status (AccountData *data)
 {
         gboolean complete;
 
-        complete = setup->valid_name && setup->valid_username &&
-                   (setup->valid_password ||
-                    setup->password_mode == ACT_USER_PASSWORD_MODE_NONE);
+        complete = data->valid_name && data->valid_username &&
+                (data->valid_password ||
+                 data->password_mode == ACT_USER_PASSWORD_MODE_NONE);
 
-        gis_assistant_set_page_complete (gis_get_assistant (setup), WID("account-page"), complete);
+        gis_assistant_set_page_complete (gis_get_assistant (data->setup), WID("account-page"), complete);
         gtk_widget_set_sensitive (WID("local-account-done-button"), complete);
 }
 
 static void
-fullname_changed (GtkWidget *w, GParamSpec *pspec, SetupData *setup)
+fullname_changed (GtkWidget *w, GParamSpec *pspec, AccountData *data)
 {
         GtkWidget *combo;
         GtkWidget *entry;
@@ -32,10 +57,10 @@ fullname_changed (GtkWidget *w, GParamSpec *pspec, SetupData *setup)
 
         gtk_list_store_clear (GTK_LIST_STORE (model));
 
-        setup->valid_name = is_valid_name (name);
-        setup->user_data_unsaved = TRUE;
+        data->valid_name = is_valid_name (name);
+        data->user_data_unsaved = TRUE;
 
-        if (!setup->valid_name) {
+        if (!data->valid_name) {
                 gtk_entry_set_text (GTK_ENTRY (entry), "");
                 return;
         }
@@ -44,11 +69,11 @@ fullname_changed (GtkWidget *w, GParamSpec *pspec, SetupData *setup)
 
         gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
 
-        update_account_page_status (setup);
+        update_account_page_status (data);
 }
 
 static void
-username_changed (GtkComboBoxText *combo, SetupData *setup)
+username_changed (GtkComboBoxText *combo, AccountData *data)
 {
         const gchar *username;
         gchar *tip;
@@ -56,8 +81,8 @@ username_changed (GtkComboBoxText *combo, SetupData *setup)
 
         username = gtk_combo_box_text_get_active_text (combo);
 
-        setup->valid_username = is_valid_username (username, &tip);
-        setup->user_data_unsaved = TRUE;
+        data->valid_username = is_valid_username (username, &tip);
+        data->user_data_unsaved = TRUE;
 
         entry = gtk_bin_get_child (GTK_BIN (combo));
 
@@ -69,11 +94,11 @@ username_changed (GtkComboBoxText *combo, SetupData *setup)
                 clear_entry_validation_error (GTK_ENTRY (entry));
         }
 
-        update_account_page_status (setup);
+        update_account_page_status (data);
 }
 
 static void
-password_check_changed (GtkWidget *w, GParamSpec *pspec, SetupData *setup)
+password_check_changed (GtkWidget *w, GParamSpec *pspec, AccountData *data)
 {
         GtkWidget *password_entry;
         GtkWidget *confirm_entry;
@@ -82,12 +107,12 @@ password_check_changed (GtkWidget *w, GParamSpec *pspec, SetupData *setup)
         need_password = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w));
 
         if (need_password) {
-                setup->password_mode = ACT_USER_PASSWORD_MODE_REGULAR;
-                setup->valid_password = FALSE;
+                data->password_mode = ACT_USER_PASSWORD_MODE_REGULAR;
+                data->valid_password = FALSE;
         }
         else {
-                setup->password_mode = ACT_USER_PASSWORD_MODE_NONE;
-                setup->valid_password = TRUE;
+                data->password_mode = ACT_USER_PASSWORD_MODE_NONE;
+                data->valid_password = TRUE;
         }
 
         password_entry = WID("account-password-entry");
@@ -98,28 +123,28 @@ password_check_changed (GtkWidget *w, GParamSpec *pspec, SetupData *setup)
         gtk_widget_set_sensitive (password_entry, need_password);
         gtk_widget_set_sensitive (confirm_entry, need_password);
 
-        setup->user_data_unsaved = TRUE;
-        update_account_page_status (setup);
+        data->user_data_unsaved = TRUE;
+        update_account_page_status (data);
 }
 
 static void
-admin_check_changed (GtkWidget *w, GParamSpec *pspec, SetupData *setup)
+admin_check_changed (GtkWidget *w, GParamSpec *pspec, AccountData *data)
 {
         if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w))) {
-                setup->account_type = ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR;
+                data->account_type = ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR;
         }
         else {
-                setup->account_type = ACT_USER_ACCOUNT_TYPE_STANDARD;
+                data->account_type = ACT_USER_ACCOUNT_TYPE_STANDARD;
         }
 
-        setup->user_data_unsaved = TRUE;
-        update_account_page_status (setup);
+        data->user_data_unsaved = TRUE;
+        update_account_page_status (data);
 }
 
 #define MIN_PASSWORD_LEN 6
 
 static void
-update_password_entries (SetupData *setup)
+update_password_entries (AccountData *data)
 {
         const gchar *password;
         const gchar *verify;
@@ -142,41 +167,41 @@ update_password_entries (SetupData *setup)
         strength = pw_strength (password, NULL, username, &hint, &long_hint);
 
         if (strength == 0.0) {
-                setup->valid_password = FALSE;
-                setup->password_reason = long_hint ? long_hint : hint;
+                data->valid_password = FALSE;
+                data->password_reason = long_hint ? long_hint : hint;
         }
         else if (strcmp (password, verify) != 0) {
-                setup->valid_password = FALSE;
-                setup->password_reason = _("Passwords do not match");
+                data->valid_password = FALSE;
+                data->password_reason = _("Passwords do not match");
         }
         else {
-                setup->valid_password = TRUE;
+                data->valid_password = TRUE;
         }
 }
 
 static void
-password_changed (GtkWidget *w, GParamSpec *pspec, SetupData *setup)
+password_changed (GtkWidget *w, GParamSpec *pspec, AccountData *data)
 {
-        update_password_entries (setup);
+        update_password_entries (data);
 
-        setup->user_data_unsaved = TRUE;
-        update_account_page_status (setup);
+        data->user_data_unsaved = TRUE;
+        update_account_page_status (data);
 }
 
 static void
-confirm_changed (GtkWidget *w, GParamSpec *pspec, SetupData *setup)
+confirm_changed (GtkWidget *w, GParamSpec *pspec, AccountData *data)
 {
         clear_entry_validation_error (GTK_ENTRY (w));
-        update_password_entries (setup);
+        update_password_entries (data);
 
-        setup->user_data_unsaved = TRUE;
-        update_account_page_status (setup);
+        data->user_data_unsaved = TRUE;
+        update_account_page_status (data);
 }
 
 static gboolean
 confirm_entry_focus_out (GtkWidget     *entry,
                          GdkEventFocus *event,
-                         SetupData     *setup)
+                         AccountData     *data)
 {
         const gchar *password;
         const gchar *verify;
@@ -189,9 +214,9 @@ confirm_entry_focus_out (GtkWidget     *entry,
         verify = gtk_entry_get_text (confirm_entry);
 
         if (strlen (password) > 0 && strlen (verify) > 0) {
-                if (!setup->valid_password) {
+                if (!data->valid_password) {
                         set_entry_validation_error (confirm_entry,
-                                                    setup->password_reason);
+                                                    data->password_reason);
                 }
                 else {
                         clear_entry_validation_error (confirm_entry);
@@ -202,19 +227,20 @@ confirm_entry_focus_out (GtkWidget     *entry,
 }
 
 static void
-set_user_avatar (SetupData *setup)
+set_user_avatar (AccountData *data)
 {
         GFile *file = NULL;
         GFileIOStream *io_stream = NULL;
         GOutputStream *stream = NULL;
         GError *error = NULL;
+        SetupData *setup = data->setup;
 
-        if (setup->avatar_filename != NULL) {
-                act_user_set_icon_file (setup->act_user, setup->avatar_filename);
+        if (data->avatar_filename != NULL) {
+                act_user_set_icon_file (setup->act_user, data->avatar_filename);
                 return;
         }
 
-        if (setup->avatar_pixbuf == NULL) {
+        if (data->avatar_pixbuf == NULL) {
                 return;
         }
 
@@ -223,7 +249,7 @@ set_user_avatar (SetupData *setup)
                 goto out;
 
         stream = g_io_stream_get_output_stream (G_IO_STREAM (io_stream));
-        if (!gdk_pixbuf_save_to_stream (setup->avatar_pixbuf, stream, "png", NULL, &error, NULL))
+        if (!gdk_pixbuf_save_to_stream (data->avatar_pixbuf, stream, "png", NULL, &error, NULL))
                 goto out;
 
         act_user_set_icon_file (setup->act_user, g_file_get_path (file)); 
@@ -239,40 +265,41 @@ set_user_avatar (SetupData *setup)
 }
 
 static void
-create_user (SetupData *setup)
+create_user (AccountData *data)
 {
         const gchar *username;
         const gchar *fullname;
         GError *error;
+        SetupData *setup = data->setup;
 
         username = gtk_combo_box_text_get_active_text (OBJ(GtkComboBoxText*, "account-username-combo"));
         fullname = gtk_entry_get_text (OBJ(GtkEntry*, "account-fullname-entry"));
 
         error = NULL;
-        setup->act_user = act_user_manager_create_user (setup->act_client, username, fullname, setup->account_type, &error);
+        setup->act_user = act_user_manager_create_user (data->act_client, username, fullname, data->account_type, &error);
         if (error != NULL) {
                 g_warning ("Failed to create user: %s", error->message);
                 g_error_free (error);
         }
 
-        set_user_avatar (setup);
+        set_user_avatar (data);
 }
 
-static void save_account_data (SetupData *setup);
+static void save_account_data (AccountData *data);
 
-gulong when_loaded;
+static gulong when_loaded;
 
 static void
-save_when_loaded (ActUser *user, GParamSpec *pspec, SetupData *setup)
+save_when_loaded (ActUser *user, GParamSpec *pspec, AccountData *data)
 {
         g_signal_handler_disconnect (user, when_loaded);
         when_loaded = 0;
 
-        save_account_data (setup);
+        save_account_data (data);
 }
 
 static void
-clear_account_page (SetupData *setup)
+clear_account_page (AccountData *data)
 {
         GtkWidget *fullname_entry;
         GtkWidget *username_combo;
@@ -289,19 +316,19 @@ clear_account_page (SetupData *setup)
         password_entry = WID("account-password-entry");
         confirm_entry = WID("account-confirm-entry");
 
-        setup->valid_name = FALSE;
-        setup->valid_username = FALSE;
-        setup->valid_password = TRUE;
-        setup->password_mode = ACT_USER_PASSWORD_MODE_NONE;
-        setup->account_type = ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR;
-        setup->user_data_unsaved = FALSE;
+        data->valid_name = FALSE;
+        data->valid_username = FALSE;
+        data->valid_password = TRUE;
+        data->password_mode = ACT_USER_PASSWORD_MODE_NONE;
+        data->account_type = ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR;
+        data->user_data_unsaved = FALSE;
 
-        need_password = setup->password_mode != ACT_USER_PASSWORD_MODE_NONE;
+        need_password = data->password_mode != ACT_USER_PASSWORD_MODE_NONE;
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (password_check), need_password);
         gtk_widget_set_sensitive (password_entry, need_password);
         gtk_widget_set_sensitive (confirm_entry, need_password);
 
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (admin_check), setup->account_type == ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR);
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (admin_check), data->account_type == ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR);
 
         gtk_entry_set_text (GTK_ENTRY (fullname_entry), "");
         gtk_list_store_clear (GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (username_combo))));
@@ -310,37 +337,38 @@ clear_account_page (SetupData *setup)
 }
 
 static void
-save_account_data (SetupData *setup)
+save_account_data (AccountData *data)
 {
         const gchar *realname;
         const gchar *username;
         const gchar *password;
+        SetupData *setup = data->setup;
 
-        if (!setup->user_data_unsaved) {
+        if (!data->user_data_unsaved) {
                 return;
         }
 
         /* this can happen when going back */
-        if (!setup->valid_name ||
-            !setup->valid_username ||
-            !setup->valid_password) {
+        if (!data->valid_name ||
+            !data->valid_username ||
+            !data->valid_password) {
                 return;
         }
 
         if (setup->act_user == NULL) {
-                create_user (setup);
+                create_user (data);
         }
 
         if (setup->act_user == NULL) {
                 g_warning ("User creation failed");
-                clear_account_page (setup);
+                clear_account_page (data);
                 return;
         }
 
         if (!act_user_is_loaded (setup->act_user)) {
                 if (when_loaded == 0)
                         when_loaded = g_signal_connect (setup->act_user, "notify::is-loaded",
-                                                        G_CALLBACK (save_when_loaded), setup);
+                                                        G_CALLBACK (save_when_loaded), data);
                 return;
         }
 
@@ -350,23 +378,23 @@ save_account_data (SetupData *setup)
 
         act_user_set_real_name (setup->act_user, realname);
         act_user_set_user_name (setup->act_user, username);
-        act_user_set_account_type (setup->act_user, setup->account_type);
-        if (setup->password_mode == ACT_USER_PASSWORD_MODE_REGULAR) {
+        act_user_set_account_type (setup->act_user, data->account_type);
+        if (data->password_mode == ACT_USER_PASSWORD_MODE_REGULAR) {
                 act_user_set_password (setup->act_user, password, NULL);
         }
         else {
-                act_user_set_password_mode (setup->act_user, setup->password_mode);
+                act_user_set_password_mode (setup->act_user, data->password_mode);
         }
 
         gnome_keyring_create_sync ("Default", password ? password : "");
         gnome_keyring_set_default_keyring_sync ("Default");
 
-        setup->user_data_unsaved = FALSE;
+        data->user_data_unsaved = FALSE;
 }
 
 static void
 show_local_account_dialog (GtkWidget *button,
-                           SetupData *setup)
+                           AccountData *data)
 {
         GtkWidget *dialog;
 
@@ -376,54 +404,54 @@ show_local_account_dialog (GtkWidget *button,
 }
 
 static void
-hide_local_account_dialog (GtkButton *button, gpointer data)
+hide_local_account_dialog (GtkButton *button, gpointer user_data)
 {
-        SetupData *setup = data;
+        AccountData *data = user_data;
         GtkWidget *dialog;
 
         dialog = WID("local-account-dialog");
 
         gtk_widget_hide (dialog);
-        clear_account_page (setup);
+        clear_account_page (data);
 }
 
 static void
-create_local_account (GtkButton *button, gpointer data)
+create_local_account (GtkButton *button, gpointer user_data)
 {
-        SetupData *setup = data;
+        AccountData *data = user_data;
         gtk_widget_hide (WID("local-account-dialog"));
 }
 
 static void
 avatar_callback (GdkPixbuf   *pixbuf,
                  const gchar *filename,
-                 gpointer     data)
+                 gpointer     user_data)
 {
-        SetupData *setup = data;
+        AccountData *data = user_data;
         GtkWidget *image;
         GdkPixbuf *tmp;
 
-        g_clear_object (&setup->avatar_pixbuf);
-        g_free (setup->avatar_filename);
-        setup->avatar_filename = NULL;
+        g_clear_object (&data->avatar_pixbuf);
+        g_free (data->avatar_filename);
+        data->avatar_filename = NULL;
 
         image = WID("local-account-avatar-image");
 
         if (pixbuf) {
-                setup->avatar_pixbuf = g_object_ref (pixbuf);
+                data->avatar_pixbuf = g_object_ref (pixbuf);
                 tmp = gdk_pixbuf_scale_simple (pixbuf, 64, 64, GDK_INTERP_BILINEAR);
                 gtk_image_set_from_pixbuf (GTK_IMAGE (image), tmp);
                 g_object_unref (tmp);
         }
         else if (filename) {
-                setup->avatar_filename = g_strdup (filename);
+                data->avatar_filename = g_strdup (filename);
                 tmp = gdk_pixbuf_new_from_file_at_size (filename, 64, 64, NULL);
                 gtk_image_set_from_pixbuf (GTK_IMAGE (image), tmp);
                 g_object_unref (tmp);
         }
         else {
                 gtk_image_set_from_icon_name (GTK_IMAGE (image), "avatar-default",
-                                                                GTK_ICON_SIZE_DIALOG);
+                                              GTK_ICON_SIZE_DIALOG);
         }
 }
 
@@ -439,12 +467,19 @@ prepare_account_page (SetupData *setup)
         GtkWidget *local_account_cancel_button;
         GtkWidget *local_account_done_button;
         GtkWidget *local_account_avatar_button;
+        AccountData *data = g_slice_new (AccountData);
+        GisAssistant *assistant = gis_get_assistant (setup);
+        data->builder = gis_builder ("gis-account-page");
+        data->setup = setup;
 
         if (!skip_account)
                 gtk_widget_show (WID("account-page"));
 
         g_signal_connect (WID("account-new-local"), "clicked",
-                          G_CALLBACK (show_local_account_dialog), setup);
+                          G_CALLBACK (show_local_account_dialog), data);
+
+        gtk_window_set_transient_for (OBJ(GtkWindow*,"local-account-dialog"),
+                                      gis_get_main_window(setup));
 
         fullname_entry = WID("account-fullname-entry");
         username_combo = WID("account-username-combo");
@@ -455,31 +490,37 @@ prepare_account_page (SetupData *setup)
         local_account_cancel_button = WID("local-account-cancel-button");
         local_account_done_button = WID("local-account-done-button");
         local_account_avatar_button = WID("local-account-avatar-button");
-        setup->photo_dialog = (GtkWidget *)um_photo_dialog_new (local_account_avatar_button,
-                                                                avatar_callback,
-                                                                setup);
+        data->photo_dialog = (GtkWidget *)um_photo_dialog_new (local_account_avatar_button,
+                                                               avatar_callback,
+                                                               data);
 
         g_signal_connect (fullname_entry, "notify::text",
-                          G_CALLBACK (fullname_changed), setup);
+                          G_CALLBACK (fullname_changed), data);
         g_signal_connect (username_combo, "changed",
-                          G_CALLBACK (username_changed), setup);
+                          G_CALLBACK (username_changed), data);
         g_signal_connect (password_check, "notify::active",
-                           G_CALLBACK (password_check_changed), setup);
+                          G_CALLBACK (password_check_changed), data);
         g_signal_connect (admin_check, "notify::active",
-                          G_CALLBACK (admin_check_changed), setup);
+                          G_CALLBACK (admin_check_changed), data);
         g_signal_connect (password_entry, "notify::text",
-                          G_CALLBACK (password_changed), setup);
+                          G_CALLBACK (password_changed), data);
         g_signal_connect (confirm_entry, "notify::text",
-                          G_CALLBACK (confirm_changed), setup);
+                          G_CALLBACK (confirm_changed), data);
         g_signal_connect_after (confirm_entry, "focus-out-event",
-                                G_CALLBACK (confirm_entry_focus_out), setup);
+                                G_CALLBACK (confirm_entry_focus_out), data);
         g_signal_connect (local_account_cancel_button, "clicked",
-                          G_CALLBACK (hide_local_account_dialog), setup);
+                          G_CALLBACK (hide_local_account_dialog), data);
         g_signal_connect (local_account_done_button, "clicked",
-                          G_CALLBACK (create_local_account), setup);
+                          G_CALLBACK (create_local_account), data);
 
-        setup->act_client = act_user_manager_get_default ();
+        data->act_client = act_user_manager_get_default ();
 
-        clear_account_page (setup);
-        update_account_page_status (setup);
+        clear_account_page (data);
+        update_account_page_status (data);
+
+        gis_assistant_add_page (assistant, WID ("account-page"));
+        gis_assistant_set_page_complete (assistant, WID ("account-page"), TRUE);
 }
+
+#undef OBJ
+#undef WID
diff --git a/gnome-initial-setup/gis-account-page.ui b/gnome-initial-setup/gis-account-page.ui
new file mode 100644
index 0000000..db5fc9a
--- /dev/null
+++ b/gnome-initial-setup/gis-account-page.ui
@@ -0,0 +1,272 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkListStore" id="account-username-model">
+    <columns>
+      <column type="gchararray"/>
+    </columns>
+  </object>
+  <object class="GtkDialog" id="local-account-dialog">
+    <property name="title"></property>
+    <property name="modal">True</property>
+    <property name="resizable">False</property>
+    <child internal-child="action_area">
+      <object class="GtkBox" id="local-account-action-area">
+        <child>
+          <object class="GtkButton" id="local-account-cancel-button">
+            <property name="visible">True</property>
+            <property name="label" translatable="yes">_Cancel</property>
+            <property name="use-underline">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkButton" id="local-account-done-button">
+            <property name="visible">True</property>
+            <property name="sensitive">False</property>
+            <property name="label" translatable="yes">_Done</property>
+            <property name="use-underline">True</property>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="local-account-content-area">
+        <property name="margin">12</property>
+        <child>
+          <object class="GtkGrid" id="local-account-grid">
+            <property name="visible">True</property>
+            <property name="row-spacing">6</property>
+            <property name="column-spacing">12</property>
+            <property name="margin-bottom">18</property>
+            <child>
+              <object class="GtkToggleButton" id="local-account-avatar-button">
+                <property name="visible">True</property>
+                <child>
+                  <object class="GtkImage" id="local-account-avatar-image">
+                    <property name="visible">True</property>
+                    <property name="icon-name">avatar-default</property>
+                    <property name="pixel-size">64</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left-attach">2</property>
+                <property name="top-attach">1</property>
+                <property name="width">1</property>
+                <property name="height">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="account-fullname-label">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">_Full Name</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">account-fullname-entry</property>
+                <property name="halign">end</property>
+                <style>
+                  <class name="dim-label"/>
+                </style>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="account-fullname-entry">
+                <property name="visible">True</property>
+                <property name="halign">start</property>
+              </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+
+            <child>
+              <object class="GtkLabel" id="account-username-label">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">_Username</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">account-username-combo</property>
+                <property name="halign">end</property>
+                <style>
+                  <class name="dim-label"/>
+                </style>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">2</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBoxText" id="account-username-combo">
+                <property name="visible">True</property>
+                <property name="halign">start</property>
+                <property name="has_entry">True</property>
+                <property name="entry_text_column">0</property>
+                <property name="model">account-username-model</property>
+              </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">2</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+
+            <child>
+              <object class="GtkCheckButton" id="account-password-check">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">_Require a password to use this account</property>
+                <property name="use_underline">True</property>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">3</property>
+                <property name="width">2</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+
+            <child>
+              <object class="GtkLabel" id="account-password-label">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">_Password</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">account-password-entry</property>
+                <property name="halign">end</property>
+                <style>
+                  <class name="dim-label"/>
+                </style>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">4</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="account-password-entry">
+                <property name="visible">True</property>
+                <property name="halign">start</property>
+                <property name="visibility">False</property>
+              </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">4</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+
+            <child>
+              <object class="GtkLabel" id="account-confirm-label">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">_Confirm Password</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">account-confirm-entry</property>
+                <property name="halign">end</property>
+                <style>
+                  <class name="dim-label"/>
+                </style>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">5</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="account-confirm-entry">
+                <property name="visible">True</property>
+                <property name="halign">start</property>
+                <property name="visibility">False</property>
+              </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">5</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+
+            <child>
+              <object class="GtkCheckButton" id="account-admin-check">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">_Act as administrator of this computer</property>
+                <property name="use_underline">True</property>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">6</property>
+                <property name="width">2</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-6">local-account-cancel-button</action-widget>
+      <action-widget response="-5">local-account-done-button</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkGrid" id="account-page">
+    <property name="name">account-page</property>
+    <property name="visible">False</property>
+    <property name="halign">center</property>
+    <child>
+      <object class="GtkLabel" id="account-title">
+        <property name="visible">True</property>
+        <property name="label" translatable="yes">Choose How to Log In</property>
+        <property name="halign">center</property>
+        <property name="valign">start</property>
+        <property name="margin-bottom">18</property>
+        <attributes>
+          <attribute name="weight" value="bold"/>
+          <attribute name="scale" value="1.2"/>
+        </attributes>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">0</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkButtonBox" id="account-buttons">
+        <property name="visible">True</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkButton" id="account-new-local">
+            <property name="visible">True</property>
+            <property name="label" translatable="yes">Create a Local Account</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkButton" id="account-enterprise-login">
+            <property name="visible">True</property>
+            <property name="label" translatable="yes">Use an Enterprise Login</property>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">1</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+  </object>
+</interface>
diff --git a/gnome-initial-setup/gis-assistant.c b/gnome-initial-setup/gis-assistant.c
index a04e88d..d89455a 100644
--- a/gnome-initial-setup/gis-assistant.c
+++ b/gnome-initial-setup/gis-assistant.c
@@ -31,27 +31,11 @@
 #include "gis-assistant.h"
 #include "cc-notebook.h"
 
-static void
-gis_assistant_buildable_add_child (GtkBuildable  *buildable,
-                                   GtkBuilder    *builder,
-                                   GObject       *child,
-                                   const gchar   *type);
-
-static void
-gis_assistant_buildable_init (GtkBuildableIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (GisAssistant, gis_assistant, GTK_TYPE_BOX,
-                         G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
-                                                gis_assistant_buildable_init))
+G_DEFINE_TYPE (GisAssistant, gis_assistant, GTK_TYPE_BOX)
 
 #define GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GIS_TYPE_ASSISTANT, GisAssistantPrivate))
 
 enum {
-  CHILD_PROP_0,
-  CHILD_PROP_PAGE_COMPLETE,
-};
-
-enum {
   PREPARE,
   LAST_SIGNAL,
 };
@@ -257,56 +241,14 @@ gis_assistant_finalize (GObject *gobject)
 }
 
 static void
-gis_assistant_get_child_property (GtkContainer *container,
-                                  GtkWidget    *child,
-                                  guint         property_id,
-                                  GValue       *value,
-                                  GParamSpec   *pspec)
-{
-  GisAssistant *assistant = GIS_ASSISTANT (container);
-
-  switch (property_id) {
-  case CHILD_PROP_PAGE_COMPLETE:
-    g_value_set_boolean (value,
-                         gis_assistant_get_page_complete (assistant, child));
-    break;
-  default:
-    GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec);
-    break;
-  }
-}
-
-static void
-gis_assistant_set_child_property (GtkContainer *container,
-                                  GtkWidget    *child,
-                                  guint         property_id,
-                                  const GValue *value,
-                                  GParamSpec   *pspec)
-{
-  GisAssistant *assistant = GIS_ASSISTANT (container);
-
-  switch (property_id) {
-  case CHILD_PROP_PAGE_COMPLETE:
-    gis_assistant_set_page_complete (assistant, child, g_value_get_boolean (value));
-    break;
-  default:
-    GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec);
-    break;
-  }
-}
-
-static void
 gis_assistant_class_init (GisAssistantClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
 
   g_type_class_add_private (klass, sizeof (GisAssistantPrivate));
 
   gobject_class->finalize = gis_assistant_finalize;
 
-  container_class->get_child_property = gis_assistant_get_child_property;
-  container_class->set_child_property = gis_assistant_set_child_property;
   klass->prepare = gis_assistant_prepare;
 
   /**
@@ -328,35 +270,4 @@ gis_assistant_class_init (GisAssistantClass *klass)
                   NULL, NULL,
                   g_cclosure_marshal_VOID__OBJECT,
                   G_TYPE_NONE, 1, GTK_TYPE_WIDGET);
-
-  /**
-   * GisAssistant:complete:
-   *
-   * Setting the "complete" child property to %TRUE marks a page as
-   * complete (i.e.: all the required fields are filled out). GTK+ uses
-   * this information to control the sensitivity of the navigation buttons.
-   */
-  gtk_container_class_install_child_property (container_class,
-                                              CHILD_PROP_PAGE_COMPLETE,
-                                              g_param_spec_boolean ("complete",
-                                                                    "Page complete",
-                                                                    "Whether all required fields on the page have been filled out",
-                                                                    FALSE,
-                                                                    G_PARAM_READWRITE));
-}
-
-static void
-gis_assistant_buildable_add_child (GtkBuildable  *buildable,
-                                   GtkBuilder    *builder,
-                                   GObject       *child,
-                                   const gchar   *type)
-{
-  GisAssistant *assistant = GIS_ASSISTANT (buildable);
-  gis_assistant_add_page (assistant, GTK_WIDGET (child));
-}
-
-static void
-gis_assistant_buildable_init (GtkBuildableIface *iface)
-{
-  iface->add_child = gis_assistant_buildable_add_child;
 }
diff --git a/gnome-initial-setup/gis-goa-page.c b/gnome-initial-setup/gis-goa-page.c
index 86bdc8c..fd8ed54 100644
--- a/gnome-initial-setup/gis-goa-page.c
+++ b/gnome-initial-setup/gis-goa-page.c
@@ -15,10 +15,14 @@
 #include <glib/gi18n.h>
 #include <gio/gio.h>
 
+#define OBJ(type,name) ((type)gtk_builder_get_object(data->builder,(name)))
+#define WID(name) OBJ(GtkWidget*,name)
+
 typedef struct _GoaData GoaData;
 
 struct _GoaData {
   SetupData *setup;
+  GtkBuilder *builder;
   /* online data */
   GoaClient *goa_client;
 };
@@ -159,7 +163,6 @@ add_account_to_list (GoaData *data, GoaObject *object)
   GoaAccount *account;
   GIcon *icon;
   gchar *markup;
-  SetupData *setup = data->setup;
 
   account = goa_object_peek_account (object);
 
@@ -207,7 +210,6 @@ remove_account_from_list (GoaData *data, GoaObject *object)
   GtkWidget *child;
   GoaAccount *account;
   const gchar *account_id, *id;
-  SetupData *setup = data->setup;
 
   account = goa_object_peek_account (object);
 
@@ -273,9 +275,11 @@ gis_prepare_online_page (SetupData *setup)
   GtkWidget *button;
   GError *error = NULL;
   GoaData *data = g_slice_new (GoaData);
+  GisAssistant *assistant = gis_get_assistant (setup);
   data->setup = setup;
-
+  data->builder = gis_builder ("gis-goa-page");
   data->goa_client = goa_client_new_sync (NULL, &error);
+
   if (data->goa_client == NULL)
     {
        g_error ("Failed to get a GoaClient: %s", error->message);
@@ -293,4 +297,7 @@ gis_prepare_online_page (SetupData *setup)
                     G_CALLBACK (goa_account_added), data);
   g_signal_connect (data->goa_client, "account-removed",
                     G_CALLBACK (goa_account_removed), data);
+
+  gis_assistant_add_page (assistant, WID ("goa-page"));
+  gis_assistant_set_page_complete (assistant, WID ("goa-page"), TRUE);
 }
diff --git a/gnome-initial-setup/gis-goa-page.ui b/gnome-initial-setup/gis-goa-page.ui
new file mode 100644
index 0000000..d3ca58a
--- /dev/null
+++ b/gnome-initial-setup/gis-goa-page.ui
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkGrid" id="goa-page">
+    <property name="name">online-page</property>
+    <property name="visible">True</property>
+    <property name="halign">center</property>
+    <child>
+      <object class="GtkLabel" id="online-title">
+        <property name="visible">True</property>
+        <property name="label" translatable="yes">Link other accounts</property>
+        <property name="halign">center</property>
+        <property name="valign">start</property>
+        <property name="margin-bottom">18</property>
+        <attributes>
+          <attribute name="weight" value="bold"/>
+          <attribute name="scale" value="1.2"/>
+        </attributes>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">0</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkBox" id="online-accounts-list">
+        <property name="orientation">vertical</property>
+        <property name="visible">True</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">2</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkButton" id="online-add-button">
+        <property name="visible">True</property>
+        <property name="label">_Add Account</property>
+        <property name="use_underline">True</property>
+        <property name="halign">start</property>
+        <property name="valign">start</property>
+        <property name="margin-top">24</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">3</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+  </object>
+</interface>
diff --git a/gnome-initial-setup/gis-location-page.c b/gnome-initial-setup/gis-location-page.c
index 57b9b59..cdb614d 100644
--- a/gnome-initial-setup/gis-location-page.c
+++ b/gnome-initial-setup/gis-location-page.c
@@ -22,10 +22,13 @@
 
 #define DEFAULT_TZ "Europe/London"
 
+#define OBJ(type,name) ((type)gtk_builder_get_object(data->builder,(name)))
+#define WID(name) OBJ(GtkWidget*,name)
+
 typedef struct _LocationData LocationData;
 
 struct _LocationData {
-  SetupData *setup;
+  GtkBuilder *builder;
 
   /* location data */
   CcTimezoneMap *map;
@@ -69,7 +72,6 @@ queue_set_timezone (LocationData *data)
 static void
 update_timezone (LocationData *data)
 {
-  SetupData *setup = data->setup;
   GString *str;
   gchar *location;
   gchar *timezone;
@@ -120,7 +122,6 @@ static void
 set_location_from_gweather_location (LocationData     *data,
                                      GWeatherLocation *gloc)
 {
-  SetupData *setup = data->setup;
   GWeatherTimezone *zone = gweather_location_get_timezone (gloc);
   gchar *city = gweather_location_get_city_name (gloc);
 
@@ -241,7 +242,8 @@ gis_prepare_location_page (SetupData *setup)
   GError *error;
   const gchar *timezone;
   LocationData *data = g_slice_new (LocationData);
-  data->setup = setup;
+  GisAssistant *assistant = gis_get_assistant (setup);
+  data->builder = gis_builder ("gis-location-page");;
 
   frame = WID("location-map-frame");
 
@@ -301,4 +303,7 @@ gis_prepare_location_page (SetupData *setup)
 #else
   gtk_widget_hide (WID ("location-auto-button"));
 #endif
+
+  gis_assistant_add_page (assistant, WID ("location-page"));
+  gis_assistant_set_page_complete (assistant, WID ("location-page"), TRUE);
 }
diff --git a/gnome-initial-setup/gis-location-page.ui b/gnome-initial-setup/gis-location-page.ui
new file mode 100644
index 0000000..d86e527
--- /dev/null
+++ b/gnome-initial-setup/gis-location-page.ui
@@ -0,0 +1,126 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkGrid" id="location-page">
+    <property name="name">location-page</property>
+    <property name="visible">True</property>
+    <property name="halign">center</property>
+    <property name="valign">start</property>
+    <property name="hexpand">True</property>
+    <child>
+      <object class="GtkLabel" id="location-title">
+        <property name="visible">True</property>
+        <property name="label" translatable="yes">Choose Your Location</property>
+        <property name="halign">center</property>
+        <property name="hexpand">False</property>
+        <property name="valign">start</property>
+        <property name="margin-bottom">18</property>
+        <attributes>
+          <attribute name="weight" value="bold"/>
+          <attribute name="scale" value="1.2"/>
+        </attributes>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">0</property>
+        <property name="width">2</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkButton" id="location-auto-button">
+        <property name="visible">True</property>
+        <property name="label" translatable="yes">_Determine your location automatically</property>
+        <property name="use_underline">True</property>
+        <property name="halign">start</property>
+        <property name="margin-right">24</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">1</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkFrame" id="location-map-frame">
+        <property name="visible">True</property>
+        <property name="halign">fill</property>
+        <property name="valign">fill</property>
+        <property name="hexpand">True</property>
+        <property name="vexpand">True</property>
+        <property name="margin-top">12</property>
+        <property name="margin-bottom">12</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">2</property>
+        <property name="width">2</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkGrid" id="location-info-grid">
+        <property name="visible">True</property>
+        <property name="halign">start</property>
+        <property name="valign">start</property>
+        <property name="row-spacing">12</property>
+        <property name="column-spacing">6</property>
+        <child>
+          <object class="GtkLabel" id="location-label">
+            <property name="visible">True</property>
+            <property name="label" translatable="yes">Location</property>
+            <property name="halign">end</property>
+            <style>
+              <class name="dim-label"/>
+            </style>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="current-location-label">
+            <property name="visible">True</property>
+            <property name="label">Boston, MA</property>
+            <property name="halign">start</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="timezone-label">
+            <property name="visible">True</property>
+            <property name="label" translatable="yes">Time Zone</property>
+            <property name="halign">end</property>
+            <style>
+              <class name="dim-label"/>
+            </style>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="current-timezone-label">
+            <property name="visible">True</property>
+            <property name="label">America / New York</property>
+            <property name="halign">start</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">3</property>
+      </packing>
+    </child>
+  </object>
+</interface>
diff --git a/gnome-initial-setup/gis-network-page.c b/gnome-initial-setup/gis-network-page.c
index c42a5fb..abdac82 100644
--- a/gnome-initial-setup/gis-network-page.c
+++ b/gnome-initial-setup/gis-network-page.c
@@ -22,8 +22,11 @@
 
 typedef struct _NetworkData NetworkData;
 
+#define OBJ(type,name) ((type)gtk_builder_get_object(data->builder,(name)))
+#define WID(name) OBJ(GtkWidget*,name)
+
 struct _NetworkData {
-  SetupData *setup;
+  GtkBuilder *builder;
 
   /* network data */
   NMClient *nm_client;
@@ -262,7 +265,6 @@ select_and_scroll_to_ap (NetworkData *data, NMAccessPoint *ap)
   gchar *ssid_target;
   const GByteArray *ssid;
   const gchar *ssid_text;
-  SetupData *setup = data->setup;
 
   model = (GtkTreeModel *)data->ap_list;
 
@@ -311,7 +313,6 @@ refresh_without_device (NetworkData *data)
   GtkWidget *label;
   GtkWidget *spinner;
   GtkWidget *swin;
-  SetupData *setup = data->setup;
 
   swin = WID("network-scrolledwindow");
   label = WID("no-network-label");
@@ -341,7 +342,6 @@ refresh_wireless_list (NetworkData *data)
   GtkWidget *label;
   GtkWidget *spinner;
   GtkWidget *swin;
-  SetupData *setup = data->setup;
 
   data->refreshing = TRUE;
 
@@ -630,7 +630,8 @@ gis_prepare_network_page (SetupData *setup)
   DBusGConnection *bus;
   GError *error;
   NetworkData *data = g_slice_new0 (NetworkData);
-  data->setup = setup;
+  GisAssistant *assistant = gis_get_assistant (setup);
+  data->builder = gis_builder ("gis-network-page");
 
   col = OBJ(GtkTreeViewColumn*, "network-list-column");
 
@@ -735,5 +736,8 @@ gis_prepare_network_page (SetupData *setup)
 
   refresh_wireless_list (data);
 
+  gis_assistant_add_page (assistant, WID ("network-page"));
+  gis_assistant_set_page_complete (assistant, WID ("network-page"), TRUE);
+
  out: ;
 }
diff --git a/gnome-initial-setup/gis-network-page.ui b/gnome-initial-setup/gis-network-page.ui
new file mode 100644
index 0000000..0dc2c99
--- /dev/null
+++ b/gnome-initial-setup/gis-network-page.ui
@@ -0,0 +1,125 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkListStore" id="liststore-wireless">
+    <columns>
+      <column type="gchararray"/> <!-- column-name id -->
+      <column type="gchararray"/> <!-- column-name title -->
+      <column type="gchararray"/> <!-- column-name sortable -->
+      <column type="guint"/>      <!-- column-name strength -->
+      <column type="guint"/>      <!-- column-name mode -->
+      <column type="guint"/>      <!-- column-name security -->
+      <column type="gboolean"/>   <!-- column-name activating -->
+      <column type="gboolean"/>   <!-- column-name active -->
+      <column type="guint"/>      <!-- column-name pulse -->
+    </columns>
+  </object>
+  <object class="GtkGrid" id="network-page">
+    <property name="name">network-page</property>
+    <property name="visible">True</property>
+    <property name="margin-left">48</property>
+    <property name="margin-right">48</property>
+    <property name="margin-bottom">48</property>
+    <property name="halign">center</property>
+    <child>
+      <object class="GtkLabel" id="network-title">
+        <property name="visible">True</property>
+        <property name="label" translatable="yes">Wireless Networks</property>
+        <property name="halign">center</property>
+        <property name="valign">start</property>
+        <property name="margin-bottom">18</property>
+        <attributes>
+          <attribute name="weight" value="bold"/>
+          <attribute name="scale" value="1.2"/>
+        </attributes>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">0</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkScrolledWindow" id="network-scrolledwindow">
+        <property name="visible">True</property>
+        <property name="margin-top">0</property>
+        <property name="margin-bottom">32</property>
+        <property name="hscrollbar-policy">never</property>
+        <property name="vscrollbar-policy">automatic</property>
+        <property name="shadow-type">in</property>
+        <child>
+          <object class="GtkTreeView" id="network-list">
+            <property name="visible">True</property>
+            <property name="can-focus">True</property>
+            <property name="vexpand">True</property>
+            <property name="halign">fill</property>
+            <property name="valign">fill</property>
+            <property name="model">liststore-wireless</property>
+            <property name="headers-visible">False</property>
+            <property name="search-column">2</property>
+            <property name="enable-grid-lines">horizontal</property>
+            <property name="show-expanders">False</property>
+            <child internal-child="selection">
+              <object class="GtkTreeSelection" id="network-list-selection">
+                <property name="mode">single</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn" id="network-list-column"/>
+            </child>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">1</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkGrid" id="no-network-grid">
+        <property name="visible">True</property>
+        <property name="halign">start</property>
+        <property name="valign">start</property>
+        <child>
+          <object class="GtkSpinner" id="no-network-spinner">
+            <property name="visible">True</property>
+            <property name="active">True</property>
+            <property name="halign">center</property>
+            <property name="valign">center</property>
+            <property name="margin-left">6</property>
+            <property name="margin-right">6</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="no-network-label">
+            <property name="visible">True</property>
+            <property name="label">No text</property>
+            <property name="halign">center</property>
+            <property name="valign">center</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">0</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">3</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+  </object>
+</interface>
diff --git a/gnome-initial-setup/gis-summary-page.c b/gnome-initial-setup/gis-summary-page.c
index 3673aac..38870bf 100644
--- a/gnome-initial-setup/gis-summary-page.c
+++ b/gnome-initial-setup/gis-summary-page.c
@@ -3,13 +3,14 @@
 #include "config.h"
 #include "gis-summary-page.h"
 
-#include "gis-utils.h"
-
 #include <glib/gi18n.h>
 #include <gio/gio.h>
 
 #include <gdm-greeter-client.h>
 
+#define OBJ(type,name) ((type)gtk_builder_get_object(builder,(name)))
+#define WID(name) OBJ(GtkWidget*,name)
+
 static GdmGreeterClient *
 connect_to_slave (void)
 {
@@ -98,6 +99,8 @@ gis_prepare_summary_page (SetupData *setup)
   GtkWidget *button;
   GKeyFile *overrides = gis_get_overrides (setup);
   gchar *s;
+  GisAssistant *assistant = gis_get_assistant (setup);
+  GtkBuilder *builder = gis_builder ("gis-summary-page");
 
   s = g_key_file_get_locale_string (overrides,
                                     "Summary", "summary-title",
@@ -148,4 +151,7 @@ gis_prepare_summary_page (SetupData *setup)
   button = WID("summary-tour-button");
   g_signal_connect (button, "clicked",
                     G_CALLBACK (tour_cb), setup);
+
+  gis_assistant_add_page (assistant, WID ("summary-page"));
+  gis_assistant_set_page_complete (assistant, WID ("summary-page"), TRUE);
 }
diff --git a/gnome-initial-setup/gis-summary-page.ui b/gnome-initial-setup/gis-summary-page.ui
new file mode 100644
index 0000000..6a9b0f5
--- /dev/null
+++ b/gnome-initial-setup/gis-summary-page.ui
@@ -0,0 +1,109 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkSizeGroup" id="summary-sizegroup">
+    <widgets>
+      <widget name="summary-start-button"/>
+      <widget name="summary-tour-button"/>
+    </widgets>
+  </object>
+  <object class="GtkGrid" id="summary-page">
+    <property name="name">summary-page</property>
+    <property name="visible">True</property>
+    <property name="halign">center</property>
+    <child>
+      <object class="GtkLabel" id="summary-title">
+        <property name="visible">True</property>
+        <property name="label" translatable="yes">Enjoy GNOME!</property>
+        <property name="halign">center</property>
+        <property name="valign">start</property>
+        <property name="margin-bottom">18</property>
+        <attributes>
+          <attribute name="weight" value="bold"/>
+          <attribute name="scale" value="1.2"/>
+        </attributes>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">0</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkLabel" id="summary-details">
+        <property name="visible">True</property>
+        <property name="label" translatable="yes">Your new account is ready to use.</property>
+        <property name="halign">center</property>
+        <property name="valign">start</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">1</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkLabel" id="summary-details2">
+        <property name="visible">True</property>
+        <property name="label" translatable="yes">You may change any of these options at any time in the System Settings.</property>
+        <property name="halign">center</property>
+        <property name="valign">start</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">2</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkButton" id="summary-start-button">
+        <property name="visible">True</property>
+        <property name="use-underline">True</property>
+        <property name="label" translatable="yes">_Start using GNOME 3</property>
+        <property name="halign">center</property>
+        <property name="valign">start</property>
+        <property name="vexpand">True</property>
+        <property name="margin">18</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">3</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkLabel" id="summary-tour-details">
+        <property name="visible">True</property>
+        <property name="label" translatable="yes">New to GNOME 3 and need help finding your way around?</property>
+        <property name="halign">center</property>
+        <property name="valign">start</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">4</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkButton" id="summary-tour-button">
+        <property name="visible">True</property>
+        <property name="use-underline">True</property>
+        <property name="label" translatable="yes">_Take a Tour</property>
+        <property name="halign">center</property>
+        <property name="valign">start</property>
+        <property name="margin">18</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">5</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+  </object>
+</interface>
diff --git a/gnome-initial-setup/gis-utils.c b/gnome-initial-setup/gis-utils.c
index a95e198..c36ffd6 100644
--- a/gnome-initial-setup/gis-utils.c
+++ b/gnome-initial-setup/gis-utils.c
@@ -1,9 +1,12 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
 
 #include "config.h"
 #include "gis-utils.h"
 
 #include <string.h>
 
+#include <stdlib.h>
+
 void
 gis_copy_account_file (ActUser     *act_user,
                        const gchar *relative_path)
@@ -81,3 +84,23 @@ out:
         g_free (to);
         g_free (from);
 }
+
+GtkBuilder *
+gis_builder (gchar *resource)
+{
+    GtkBuilder *builder;
+    gchar *resource_path = g_strdup_printf ("/ui/%s.ui", resource);
+    GError *error = NULL;
+
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder, resource_path, &error);
+
+    g_free (resource_path);
+
+    if (error != NULL) {
+        g_printerr ("%s", error->message);
+        exit (1);
+    }
+
+    return builder;
+}
diff --git a/gnome-initial-setup/gis-utils.h b/gnome-initial-setup/gis-utils.h
index 089db71..6cfb1ce 100644
--- a/gnome-initial-setup/gis-utils.h
+++ b/gnome-initial-setup/gis-utils.h
@@ -11,6 +11,7 @@ G_BEGIN_DECLS
 
 void gis_copy_account_file (ActUser     *act_user,
                             const gchar *relative_path);
+GtkBuilder * gis_builder (gchar *resource);
 
 G_END_DECLS
 
diff --git a/gnome-initial-setup/gis-welcome-page.c b/gnome-initial-setup/gis-welcome-page.c
index 50b6f13..96a7737 100644
--- a/gnome-initial-setup/gis-welcome-page.c
+++ b/gnome-initial-setup/gis-welcome-page.c
@@ -10,11 +10,16 @@
 
 #include <gtk/gtk.h>
 
+#define OBJ(type,name) ((type)gtk_builder_get_object(builder,(name)))
+#define WID(name) OBJ(GtkWidget*,name)
+
 void
 gis_prepare_welcome_page (SetupData *setup)
 {
   gchar *s;
   GKeyFile *overrides = gis_get_overrides (setup);
+  GisAssistant *assistant = gis_get_assistant (setup);
+  GtkBuilder *builder = gis_builder ("gis-welcome-page");
 
   s = g_key_file_get_locale_string (overrides,
                                     "Welcome", "welcome-image",
@@ -40,4 +45,9 @@ gis_prepare_welcome_page (SetupData *setup)
   g_free (s);
 
   g_key_file_unref (overrides);
+
+  gis_assistant_add_page (assistant, WID ("welcome-page"));
+  gis_assistant_set_page_complete (assistant, WID ("welcome-page"), TRUE);
+
+  g_object_unref (builder);
 }
diff --git a/gnome-initial-setup/gis-welcome-page.ui b/gnome-initial-setup/gis-welcome-page.ui
new file mode 100644
index 0000000..35b561a
--- /dev/null
+++ b/gnome-initial-setup/gis-welcome-page.ui
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkGrid" id="welcome-page">
+    <property name="name">welcome-page</property>
+    <property name="visible">True</property>
+    <property name="halign">center</property>
+    <child>
+      <object class="GtkLabel" id="welcome-title">
+        <property name="visible">True</property>
+        <property name="label" translatable="yes">Welcome to GNOME 3</property>
+        <property name="halign">center</property>
+        <property name="valign">start</property>
+        <property name="margin-bottom">18</property>
+        <attributes>
+          <attribute name="weight" value="bold"/>
+          <attribute name="scale" value="1.2"/>
+        </attributes>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkImage" id="welcome-image">
+        <property name="visible">True</property>
+        <property name="halign">center</property>
+        <property name="valign">start</property>
+        <property name="pixbuf">resource:///image/welcome-image.png</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkLabel" id="welcome-subtitle">
+        <property name="visible">True</property>
+        <property name="label" translatable="yes">Let's set up some essentials.</property>
+        <property name="halign">center</property>
+        <property name="margin-top">18</property>
+        <property name="margin-bottom">18</property>
+        <attributes>
+          <attribute name="weight" value="bold"/>
+        </attributes>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">2</property>
+      </packing>
+    </child>
+  </object>
+</interface>
diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
index 7324842..dd9fe89 100644
--- a/gnome-initial-setup/gnome-initial-setup.c
+++ b/gnome-initial-setup/gnome-initial-setup.c
@@ -35,33 +35,19 @@
 
 /* Setup data {{{1 */
 struct _SetupData {
-        GtkBuilder *builder;
-        GtkWindow *main_window;
+  GtkWindow *main_window;
+  GKeyFile *overrides;
+  GtkBuilder *builder;
+  GisAssistant *assistant;
 
-        GKeyFile *overrides;
-
-        GisAssistant *assistant;
-
-        /* account data */
-        ActUserManager *act_client;
-        ActUser *act_user;
-
-        gboolean valid_name;
-        gboolean valid_username;
-        gboolean valid_password;
-        const gchar *password_reason;
-        ActUserPasswordMode password_mode;
-        ActUserAccountType account_type;
-
-        gboolean user_data_unsaved;
-
-        GtkWidget *photo_dialog;
-        GdkPixbuf *avatar_pixbuf;
-        gchar *avatar_filename;
+  ActUser *act_user;
 };
 
 #include "gis-account-page.c"
 
+#define OBJ(type,name) ((type)gtk_builder_get_object(setup->builder,(name)))
+#define WID(name) OBJ(GtkWidget*,name)
+
 static void
 copy_account_data (SetupData *setup)
 {
@@ -83,8 +69,6 @@ prepare_cb (GisAssistant *assi, GtkWidget *page, SetupData *setup)
 {
         g_debug ("Preparing page %s", gtk_widget_get_name (page));
 
-        save_account_data (setup);
-
         if (page == WID("welcome-page")) {
                 gtk_window_set_title (setup->main_window, _("Welcome"));
         }
@@ -139,12 +123,6 @@ gis_get_overrides (SetupData *setup)
         return g_key_file_ref (setup->overrides);
 }
 
-GtkBuilder *
-gis_get_builder (SetupData *setup)
-{
-        return setup->builder;
-}
-
 GtkWindow *
 gis_get_main_window (SetupData *setup)
 {
@@ -201,13 +179,7 @@ main (int argc, char *argv[])
         /* Make sure GisAssistant is initialized. */
         g_debug ("Registering: %s\n", g_type_name (gis_assistant_get_type ()));
 
-        setup->builder = gtk_builder_new ();
-        gtk_builder_add_from_resource (setup->builder, "/ui/setup.ui", &error);
-
-        if (error != NULL) {
-                g_printerr ("%s", error->message);
-                exit (1);
-        }
+        setup->builder = gis_builder ("setup");
 
         setup->overrides = g_key_file_new ();
         filename = g_build_filename (UIDIR, "overrides.ini", NULL);
diff --git a/gnome-initial-setup/gnome-initial-setup.h b/gnome-initial-setup/gnome-initial-setup.h
index 9f3640f..c3b7a58 100644
--- a/gnome-initial-setup/gnome-initial-setup.h
+++ b/gnome-initial-setup/gnome-initial-setup.h
@@ -6,6 +6,7 @@
 #include <gtk/gtk.h>
 
 #include "gis-assistant.h"
+#include "gis-utils.h"
 
 #include <act/act-user-manager.h>
 
@@ -13,15 +14,11 @@ G_BEGIN_DECLS
 
 typedef struct _SetupData SetupData;
 
-GtkBuilder *gis_get_builder (SetupData *setup);
 GtkWindow *gis_get_main_window (SetupData *setup);
 GKeyFile *gis_get_overrides (SetupData *setup);
 GisAssistant * gis_get_assistant (SetupData *setup);
 ActUser * gis_get_act_user (SetupData *setup);
 
-#define OBJ(type,name) ((type)gtk_builder_get_object(gis_get_builder(setup),(name)))
-#define WID(name) OBJ(GtkWidget*,name)
-
 G_END_DECLS
 
 #endif /* __GNOME_INITIAL_SETUP_H__ */
diff --git a/gnome-initial-setup/setup.gresource.xml b/gnome-initial-setup/setup.gresource.xml
index ee890a8..466a6f1 100644
--- a/gnome-initial-setup/setup.gresource.xml
+++ b/gnome-initial-setup/setup.gresource.xml
@@ -5,6 +5,12 @@
   </gresource>
   <gresource prefix="/ui">
     <file preprocess="xml-stripblanks">setup.ui</file>
+    <file preprocess="xml-stripblanks">gis-welcome-page.ui</file>
+    <file preprocess="xml-stripblanks">gis-network-page.ui</file>
+    <file preprocess="xml-stripblanks">gis-account-page.ui</file>
+    <file preprocess="xml-stripblanks">gis-location-page.ui</file>
+    <file preprocess="xml-stripblanks">gis-goa-page.ui</file>
+    <file preprocess="xml-stripblanks">gis-summary-page.ui</file>
   </gresource>
 </gresources>
 
diff --git a/gnome-initial-setup/setup.ui b/gnome-initial-setup/setup.ui
index d16ef15..b277d3d 100644
--- a/gnome-initial-setup/setup.ui
+++ b/gnome-initial-setup/setup.ui
@@ -1,246 +1,6 @@
 <?xml version="1.0"?>
 <interface>
   <requires lib="gtk+" version="3.0"/>
-  <object class="GtkListStore" id="liststore-wireless">
-    <columns>
-      <column type="gchararray"/> <!-- column-name id -->
-      <column type="gchararray"/> <!-- column-name title -->
-      <column type="gchararray"/> <!-- column-name sortable -->
-      <column type="guint"/>      <!-- column-name strength -->
-      <column type="guint"/>      <!-- column-name mode -->
-      <column type="guint"/>      <!-- column-name security -->
-      <column type="gboolean"/>   <!-- column-name activating -->
-      <column type="gboolean"/>   <!-- column-name active -->
-      <column type="guint"/>      <!-- column-name pulse -->
-    </columns>
-  </object>
-  <object class="GtkListStore" id="account-username-model">
-    <columns>
-      <column type="gchararray"/>
-    </columns>
-  </object>
-  <object class="GtkDialog" id="local-account-dialog">
-    <property name="title"></property>
-    <property name="transient-for">main-window</property>
-    <property name="modal">True</property>
-    <property name="resizable">False</property>
-    <child internal-child="action_area">
-      <object class="GtkBox" id="local-account-action-area">
-        <child>
-          <object class="GtkButton" id="local-account-cancel-button">
-            <property name="visible">True</property>
-            <property name="label" translatable="yes">_Cancel</property>
-            <property name="use-underline">True</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkButton" id="local-account-done-button">
-            <property name="visible">True</property>
-            <property name="sensitive">False</property>
-            <property name="label" translatable="yes">_Done</property>
-            <property name="use-underline">True</property>
-          </object>
-        </child>
-      </object>
-    </child>
-    <child internal-child="vbox">
-      <object class="GtkBox" id="local-account-content-area">
-        <property name="margin">12</property>
-        <child>
-          <object class="GtkGrid" id="local-account-grid">
-            <property name="visible">True</property>
-            <property name="row-spacing">6</property>
-            <property name="column-spacing">12</property>
-            <property name="margin-bottom">18</property>
-            <child>
-              <object class="GtkToggleButton" id="local-account-avatar-button">
-                <property name="visible">True</property>
-                <child>
-                  <object class="GtkImage" id="local-account-avatar-image">
-                    <property name="visible">True</property>
-                    <property name="icon-name">avatar-default</property>
-                    <property name="pixel-size">64</property>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="left-attach">2</property>
-                <property name="top-attach">1</property>
-                <property name="width">1</property>
-                <property name="height">2</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="account-fullname-label">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">_Full Name</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">account-fullname-entry</property>
-                <property name="halign">end</property>
-                <style>
-                  <class name="dim-label"/>
-                </style>
-              </object>
-              <packing>
-                <property name="left-attach">0</property>
-                <property name="top-attach">1</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="account-fullname-entry">
-                <property name="visible">True</property>
-                <property name="halign">start</property>
-              </object>
-              <packing>
-                <property name="left-attach">1</property>
-                <property name="top-attach">1</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-
-            <child>
-              <object class="GtkLabel" id="account-username-label">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">_Username</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">account-username-combo</property>
-                <property name="halign">end</property>
-                <style>
-                  <class name="dim-label"/>
-                </style>
-              </object>
-              <packing>
-                <property name="left-attach">0</property>
-                <property name="top-attach">2</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkComboBoxText" id="account-username-combo">
-                <property name="visible">True</property>
-                <property name="halign">start</property>
-                <property name="has_entry">True</property>
-                <property name="entry_text_column">0</property>
-                <property name="model">account-username-model</property>
-              </object>
-              <packing>
-                <property name="left-attach">1</property>
-                <property name="top-attach">2</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-
-            <child>
-              <object class="GtkCheckButton" id="account-password-check">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">_Require a password to use this account</property>
-                <property name="use_underline">True</property>
-              </object>
-              <packing>
-                <property name="left-attach">0</property>
-                <property name="top-attach">3</property>
-                <property name="width">2</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-
-            <child>
-              <object class="GtkLabel" id="account-password-label">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">_Password</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">account-password-entry</property>
-                <property name="halign">end</property>
-                <style>
-                  <class name="dim-label"/>
-                </style>
-              </object>
-              <packing>
-                <property name="left-attach">0</property>
-                <property name="top-attach">4</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="account-password-entry">
-                <property name="visible">True</property>
-                <property name="halign">start</property>
-                <property name="visibility">False</property>
-              </object>
-              <packing>
-                <property name="left-attach">1</property>
-                <property name="top-attach">4</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-
-            <child>
-              <object class="GtkLabel" id="account-confirm-label">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">_Confirm Password</property>
-                <property name="use_underline">True</property>
-                <property name="mnemonic_widget">account-confirm-entry</property>
-                <property name="halign">end</property>
-                <style>
-                  <class name="dim-label"/>
-                </style>
-              </object>
-              <packing>
-                <property name="left-attach">0</property>
-                <property name="top-attach">5</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="account-confirm-entry">
-                <property name="visible">True</property>
-                <property name="halign">start</property>
-                <property name="visibility">False</property>
-              </object>
-              <packing>
-                <property name="left-attach">1</property>
-                <property name="top-attach">5</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-
-            <child>
-              <object class="GtkCheckButton" id="account-admin-check">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">_Act as administrator of this computer</property>
-                <property name="use_underline">True</property>
-              </object>
-              <packing>
-                <property name="left-attach">0</property>
-                <property name="top-attach">6</property>
-                <property name="width">2</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-          </object>
-        </child>
-      </object>
-    </child>
-    <action-widgets>
-      <action-widget response="-6">local-account-cancel-button</action-widget>
-      <action-widget response="-5">local-account-done-button</action-widget>
-    </action-widgets>
-  </object>
-  <object class="GtkSizeGroup" id="summary-sizegroup">
-    <widgets>
-      <widget name="summary-start-button"/>
-      <widget name="summary-tour-button"/>
-    </widgets>
-  </object>
   <object class="GtkWindow" id="main-window">
     <!-- interface-naming-policy toplevel-contextual -->
     <property name="border-width">12</property>
@@ -253,512 +13,6 @@
     <child>
       <object class="GisAssistant" id="assistant">
         <property name="visible">True</property>
-        <child>
-          <object class="GtkGrid" id="welcome-page">
-            <property name="name">welcome-page</property>
-            <property name="visible">True</property>
-            <property name="halign">center</property>
-            <child>
-              <object class="GtkLabel" id="welcome-title">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">Welcome to GNOME 3</property>
-                <property name="halign">center</property>
-                <property name="valign">start</property>
-                <property name="margin-bottom">18</property>
-                <attributes>
-                  <attribute name="weight" value="bold"/>
-                  <attribute name="scale" value="1.2"/>
-                </attributes>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkImage" id="welcome-image">
-                <property name="visible">True</property>
-                <property name="halign">center</property>
-                <property name="valign">start</property>
-                <property name="pixbuf">resource:///image/welcome-image.png</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="welcome-subtitle">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">Let's set up some essentials.</property>
-                <property name="halign">center</property>
-                <property name="margin-top">18</property>
-                <property name="margin-bottom">18</property>
-                <attributes>
-                  <attribute name="weight" value="bold"/>
-                </attributes>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">2</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="complete">True</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkGrid" id="network-page">
-            <property name="name">network-page</property>
-            <property name="visible">True</property>
-            <property name="margin-left">48</property>
-            <property name="margin-right">48</property>
-            <property name="margin-bottom">48</property>
-            <property name="halign">center</property>
-            <child>
-              <object class="GtkLabel" id="network-title">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">Wireless Networks</property>
-                <property name="halign">center</property>
-                <property name="valign">start</property>
-                <property name="margin-bottom">18</property>
-                <attributes>
-                  <attribute name="weight" value="bold"/>
-                  <attribute name="scale" value="1.2"/>
-                </attributes>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">0</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkScrolledWindow" id="network-scrolledwindow">
-                <property name="visible">True</property>
-                <property name="margin-top">0</property>
-                <property name="margin-bottom">32</property>
-                <property name="hscrollbar-policy">never</property>
-                <property name="vscrollbar-policy">automatic</property>
-                <property name="shadow-type">in</property>
-                <child>
-                  <object class="GtkTreeView" id="network-list">
-                    <property name="visible">True</property>
-                    <property name="can-focus">True</property>
-                    <property name="vexpand">True</property>
-                    <property name="halign">fill</property>
-                    <property name="valign">fill</property>
-                    <property name="model">liststore-wireless</property>
-                    <property name="headers-visible">False</property>
-                    <property name="search-column">2</property>
-                    <property name="enable-grid-lines">horizontal</property>
-                    <property name="show-expanders">False</property>
-                    <child internal-child="selection">
-                      <object class="GtkTreeSelection" id="network-list-selection">
-                        <property name="mode">single</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkTreeViewColumn" id="network-list-column"/>
-                    </child>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">1</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkGrid" id="no-network-grid">
-                <property name="visible">True</property>
-                <property name="halign">start</property>
-                <property name="valign">start</property>
-                <child>
-                  <object class="GtkSpinner" id="no-network-spinner">
-                    <property name="visible">True</property>
-                    <property name="active">True</property>
-                    <property name="halign">center</property>
-                    <property name="valign">center</property>
-                    <property name="margin-left">6</property>
-                    <property name="margin-right">6</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">0</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="no-network-label">
-                    <property name="visible">True</property>
-                    <property name="label">No text</property>
-                    <property name="halign">center</property>
-                    <property name="valign">center</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">0</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">3</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="complete">True</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkGrid" id="account-page">
-            <property name="name">account-page</property>
-            <property name="visible">False</property>
-            <property name="halign">center</property>
-            <child>
-              <object class="GtkLabel" id="account-title">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">Choose How to Log In</property>
-                <property name="halign">center</property>
-                <property name="valign">start</property>
-                <property name="margin-bottom">18</property>
-                <attributes>
-                  <attribute name="weight" value="bold"/>
-                  <attribute name="scale" value="1.2"/>
-                </attributes>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">0</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButtonBox" id="account-buttons">
-                <property name="visible">True</property>
-                <property name="orientation">vertical</property>
-                <child>
-                  <object class="GtkButton" id="account-new-local">
-                    <property name="visible">True</property>
-                    <property name="label" translatable="yes">Create a Local Account</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkButton" id="account-enterprise-login">
-                    <property name="visible">True</property>
-                    <property name="label" translatable="yes">Use an Enterprise Login</property>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">1</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-          </object>
-        </child>
-        <child>
-          <object class="GtkGrid" id="location-page">
-            <property name="name">location-page</property>
-            <property name="visible">True</property>
-            <property name="halign">center</property>
-            <property name="valign">start</property>
-            <property name="hexpand">True</property>
-            <child>
-              <object class="GtkLabel" id="location-title">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">Choose Your Location</property>
-                <property name="halign">center</property>
-                <property name="hexpand">False</property>
-                <property name="valign">start</property>
-                <property name="margin-bottom">18</property>
-                <attributes>
-                  <attribute name="weight" value="bold"/>
-                  <attribute name="scale" value="1.2"/>
-                </attributes>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">0</property>
-                <property name="width">2</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="location-auto-button">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">_Determine your location automatically</property>
-                <property name="use_underline">True</property>
-                <property name="halign">start</property>
-                <property name="margin-right">24</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">1</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkFrame" id="location-map-frame">
-                <property name="visible">True</property>
-                <property name="halign">fill</property>
-                <property name="valign">fill</property>
-                <property name="hexpand">True</property>
-                <property name="vexpand">True</property>
-                <property name="margin-top">12</property>
-                <property name="margin-bottom">12</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">2</property>
-                <property name="width">2</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkGrid" id="location-info-grid">
-                <property name="visible">True</property>
-                <property name="halign">start</property>
-                <property name="valign">start</property>
-                <property name="row-spacing">12</property>
-                <property name="column-spacing">6</property>
-                <child>
-                  <object class="GtkLabel" id="location-label">
-                    <property name="visible">True</property>
-                    <property name="label" translatable="yes">Location</property>
-                    <property name="halign">end</property>
-                    <style>
-                      <class name="dim-label"/>
-                    </style>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="current-location-label">
-                    <property name="visible">True</property>
-                    <property name="label">Boston, MA</property>
-                    <property name="halign">start</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="timezone-label">
-                    <property name="visible">True</property>
-                    <property name="label" translatable="yes">Time Zone</property>
-                    <property name="halign">end</property>
-                    <style>
-                      <class name="dim-label"/>
-                    </style>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="current-timezone-label">
-                    <property name="visible">True</property>
-                    <property name="label">America / New York</property>
-                    <property name="halign">start</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">1</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">3</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="complete">True</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkGrid" id="online-page">
-            <property name="name">online-page</property>
-            <property name="visible">True</property>
-            <property name="halign">center</property>
-            <child>
-              <object class="GtkLabel" id="online-title">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">Link other accounts</property>
-                <property name="halign">center</property>
-                <property name="valign">start</property>
-                <property name="margin-bottom">18</property>
-                <attributes>
-                  <attribute name="weight" value="bold"/>
-                  <attribute name="scale" value="1.2"/>
-                </attributes>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">0</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkBox" id="online-accounts-list">
-                <property name="orientation">vertical</property>
-                <property name="visible">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">2</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="online-add-button">
-                <property name="visible">True</property>
-                <property name="label">_Add Account</property>
-                <property name="use_underline">True</property>
-                <property name="halign">start</property>
-                <property name="valign">start</property>
-                <property name="margin-top">24</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">3</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="complete">True</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkGrid" id="summary-page">
-            <property name="name">summary-page</property>
-            <property name="visible">True</property>
-            <property name="halign">center</property>
-            <child>
-              <object class="GtkLabel" id="summary-title">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">Enjoy GNOME!</property>
-                <property name="halign">center</property>
-                <property name="valign">start</property>
-                <property name="margin-bottom">18</property>
-                <attributes>
-                  <attribute name="weight" value="bold"/>
-                  <attribute name="scale" value="1.2"/>
-                </attributes>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">0</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="summary-details">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">Your new account is ready to use.</property>
-                <property name="halign">center</property>
-                <property name="valign">start</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">1</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="summary-details2">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">You may change any of these options at any time in the System Settings.</property>
-                <property name="halign">center</property>
-                <property name="valign">start</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">2</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="summary-start-button">
-                <property name="visible">True</property>
-                <property name="use-underline">True</property>
-                <property name="label" translatable="yes">_Start using GNOME 3</property>
-                <property name="halign">center</property>
-                <property name="valign">start</property>
-                <property name="vexpand">True</property>
-                <property name="margin">18</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">3</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="summary-tour-details">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">New to GNOME 3 and need help finding your way around?</property>
-                <property name="halign">center</property>
-                <property name="valign">start</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">4</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="summary-tour-button">
-                <property name="visible">True</property>
-                <property name="use-underline">True</property>
-                <property name="label" translatable="yes">_Take a Tour</property>
-                <property name="halign">center</property>
-                <property name="valign">start</property>
-                <property name="margin">18</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">5</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="complete">True</property>
-          </packing>
-        </child>
       </object>
     </child>
   </object>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]