[gnome-initial-setup] gis-assistant: Add new "Skip" button



commit c10e159e7e0bf6a5dfd8f83855837087edc261a0
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Wed Oct 23 11:30:03 2013 -0400

    gis-assistant: Add new "Skip" button
    
    This is part of the new designs

 gnome-initial-setup/gis-assistant.c                |   25 +++++++++++++++----
 gnome-initial-setup/gis-assistant.ui               |    8 ++++++
 gnome-initial-setup/gis-page.c                     |   26 ++++++++++++++++++++
 gnome-initial-setup/gis-page.h                     |    2 +
 gnome-initial-setup/pages/goa/gis-goa-page.c       |    3 +-
 .../pages/network/gis-network-page.c               |   21 +++++++++++++++-
 6 files changed, 78 insertions(+), 7 deletions(-)
---
diff --git a/gnome-initial-setup/gis-assistant.c b/gnome-initial-setup/gis-assistant.c
index 93b6fe4..bcefde1 100644
--- a/gnome-initial-setup/gis-assistant.c
+++ b/gnome-initial-setup/gis-assistant.c
@@ -48,6 +48,7 @@ static guint signals[LAST_SIGNAL];
 struct _GisAssistantPrivate
 {
   GtkWidget *forward;
+  GtkWidget *skip;
   GtkWidget *back;
   GtkWidget *cancel;
   GtkWidget *progress_indicator;
@@ -221,7 +222,7 @@ update_navigation_buttons (GisAssistant *assistant)
     }
   else
     {
-      gboolean can_go_forward, is_first_page;
+      gboolean page_complete, page_skippable, is_first_page;
 
       gtk_widget_show (priv->back);
       gtk_widget_show (priv->forward);
@@ -229,12 +230,23 @@ update_navigation_buttons (GisAssistant *assistant)
       is_first_page = (page_priv->link->prev == NULL);
       gtk_widget_set_visible (priv->back, !is_first_page);
 
-      can_go_forward = gis_page_get_complete (page);
-      gtk_widget_set_sensitive (priv->forward, can_go_forward);
-      if (can_go_forward)
+      page_complete = gis_page_get_complete (page);
+      page_skippable = gis_page_get_skippable (page);
+
+      if (page_complete) {
+        gtk_widget_show (priv->forward);
+        gtk_widget_hide (priv->skip);
+        gtk_widget_set_sensitive (priv->forward, TRUE);
         gtk_style_context_add_class (gtk_widget_get_style_context (priv->forward), "suggested-action");
-      else
+      } else if (page_skippable) {
+        gtk_widget_hide (priv->forward);
+        gtk_widget_show (priv->skip);
+      } else {
+        gtk_widget_show (priv->forward);
+        gtk_widget_hide (priv->skip);
+        gtk_widget_set_sensitive (priv->forward, FALSE);
         gtk_style_context_remove_class (gtk_widget_get_style_context (priv->forward), "suggested-action");
+      }
     }
 }
 
@@ -399,6 +411,7 @@ gis_assistant_locale_changed (GisAssistant *assistant)
   GList *l;
 
   gtk_button_set_label (GTK_BUTTON (priv->forward), _("_Next"));
+  gtk_button_set_label (GTK_BUTTON (priv->skip), _("_Skip"));
   gtk_button_set_label (GTK_BUTTON (priv->back), _("_Previous"));
   gtk_button_set_label (GTK_BUTTON (priv->cancel), _("_Cancel"));
 
@@ -427,6 +440,7 @@ gis_assistant_init (GisAssistant *assistant)
                     G_CALLBACK (current_page_changed), assistant);
 
   g_signal_connect (priv->forward, "clicked", G_CALLBACK (go_forward), assistant);
+  g_signal_connect (priv->skip, "clicked", G_CALLBACK (go_forward), assistant);
   g_signal_connect (priv->back, "clicked", G_CALLBACK (go_backward), assistant);
   g_signal_connect (priv->cancel, "clicked", G_CALLBACK (do_cancel), assistant);
 
@@ -462,6 +476,7 @@ gis_assistant_class_init (GisAssistantClass *klass)
   gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass), 
"/org/gnome/initial-setup/gis-assistant.ui");
 
   gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisAssistant, forward);
+  gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisAssistant, skip);
   gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisAssistant, back);
   gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisAssistant, cancel);
   gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisAssistant, progress_indicator);
diff --git a/gnome-initial-setup/gis-assistant.ui b/gnome-initial-setup/gis-assistant.ui
index 2d7dd83..d6b1f1e 100644
--- a/gnome-initial-setup/gis-assistant.ui
+++ b/gnome-initial-setup/gis-assistant.ui
@@ -24,6 +24,14 @@
       </packing>
     </child>
     <child>
+      <object class="GtkButton" id="skip">
+        <property name="use-underline">True</property>
+      </object>
+      <packing>
+        <property name="pack-type">end</property>
+      </packing>
+    </child>
+    <child>
       <object class="GtkButton" id="forward">
         <property name="visible">True</property>
         <property name="use-underline">True</property>
diff --git a/gnome-initial-setup/gis-page.c b/gnome-initial-setup/gis-page.c
index 997ebbb..d27547d 100644
--- a/gnome-initial-setup/gis-page.c
+++ b/gnome-initial-setup/gis-page.c
@@ -37,6 +37,7 @@ struct _GisPagePrivate
   gpointer apply_data;
 
   guint complete : 1;
+  guint skippable : 1;
   guint padding : 6;
 };
 typedef struct _GisPagePrivate GisPagePrivate;
@@ -49,6 +50,7 @@ enum
   PROP_DRIVER,
   PROP_TITLE,
   PROP_COMPLETE,
+  PROP_SKIPPABLE,
   PROP_APPLYING,
   PROP_LAST,
 };
@@ -74,6 +76,9 @@ gis_page_get_property (GObject    *object,
     case PROP_COMPLETE:
       g_value_set_boolean (value, priv->complete);
       break;
+    case PROP_SKIPPABLE:
+      g_value_set_boolean (value, priv->skippable);
+      break;
     case PROP_APPLYING:
       g_value_set_boolean (value, gis_page_get_applying (page));
       break;
@@ -99,6 +104,9 @@ gis_page_set_property (GObject      *object,
     case PROP_TITLE:
       gis_page_set_title (page, (char *) g_value_get_string (value));
       break;
+    case PROP_SKIPPABLE:
+      priv->skippable = g_value_get_boolean (value);
+      break;
     case PROP_COMPLETE:
       priv->complete = g_value_get_boolean (value);
       break;
@@ -213,6 +221,9 @@ gis_page_class_init (GisPageClass *klass)
   obj_props[PROP_COMPLETE] =
     g_param_spec_boolean ("complete", "", "", FALSE,
                           G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE);
+  obj_props[PROP_SKIPPABLE] =
+    g_param_spec_boolean ("skippable", "", "", FALSE,
+                          G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
   obj_props[PROP_APPLYING] =
     g_param_spec_boolean ("applying", "", "", FALSE,
                           G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
@@ -259,6 +270,21 @@ gis_page_set_complete (GisPage *page, gboolean complete)
   g_object_notify_by_pspec (G_OBJECT (page), obj_props[PROP_COMPLETE]);
 }
 
+gboolean
+gis_page_get_skippable (GisPage *page)
+{
+  GisPagePrivate *priv = gis_page_get_instance_private (page);
+  return priv->skippable;
+}
+
+void
+gis_page_set_skippable (GisPage *page, gboolean skippable)
+{
+  GisPagePrivate *priv = gis_page_get_instance_private (page);
+  priv->skippable = skippable;
+  g_object_notify_by_pspec (G_OBJECT (page), obj_props[PROP_SKIPPABLE]);
+}
+
 void
 gis_page_locale_changed (GisPage *page)
 {
diff --git a/gnome-initial-setup/gis-page.h b/gnome-initial-setup/gis-page.h
index 77e427c..2be72df 100644
--- a/gnome-initial-setup/gis-page.h
+++ b/gnome-initial-setup/gis-page.h
@@ -72,6 +72,8 @@ char *       gis_page_get_title (GisPage *page);
 void         gis_page_set_title (GisPage *page, char *title);
 gboolean     gis_page_get_complete (GisPage *page);
 void         gis_page_set_complete (GisPage *page, gboolean complete);
+gboolean     gis_page_get_skippable (GisPage *page);
+void         gis_page_set_skippable (GisPage *page, gboolean skippable);
 GtkWidget *  gis_page_get_action_widget (GisPage *page);
 void         gis_page_locale_changed (GisPage *page);
 void         gis_page_apply_begin (GisPage *page, GisPageApplyCallback callback, gpointer user_data);
diff --git a/gnome-initial-setup/pages/goa/gis-goa-page.c b/gnome-initial-setup/pages/goa/gis-goa-page.c
index 6ce6155..b008717 100644
--- a/gnome-initial-setup/pages/goa/gis-goa-page.c
+++ b/gnome-initial-setup/pages/goa/gis-goa-page.c
@@ -228,6 +228,7 @@ sync_accounts (GisGoaPage *page)
   g_list_free_full (accounts, (GDestroyNotify) g_object_unref);
 
   sync_visibility (page);
+  gis_page_set_skippable (GIS_PAGE (page), !priv->accounts_exist);
 }
 
 static void
@@ -317,7 +318,7 @@ gis_goa_page_constructed (GObject *object)
   populate_provider_list (page);
   sync_accounts (page);
 
-  gis_page_set_complete (GIS_PAGE (page), TRUE);
+  gis_page_set_skippable (GIS_PAGE (page), TRUE);
 }
 
 static void
diff --git a/gnome-initial-setup/pages/network/gis-network-page.c 
b/gnome-initial-setup/pages/network/gis-network-page.c
index 2306fa9..bb4e94c 100644
--- a/gnome-initial-setup/pages/network/gis-network-page.c
+++ b/gnome-initial-setup/pages/network/gis-network-page.c
@@ -516,6 +516,22 @@ active_connections_changed (NMClient *client, GParamSpec *pspec, GisNetworkPage
 }
 
 static void
+sync_complete (GisNetworkPage *page)
+{
+  GisNetworkPagePrivate *priv = gis_network_page_get_instance_private (page);
+  gboolean activated;
+
+  activated = (nm_device_get_state (priv->nm_device) == NM_DEVICE_STATE_ACTIVATED);
+  gis_page_set_complete (GIS_PAGE (page), activated);
+}
+
+static void
+device_state_changed (GObject *object, GParamSpec *param, GisNetworkPage *page)
+{
+  sync_complete (page);
+}
+
+static void
 gis_network_page_constructed (GObject *object)
 {
   GisNetworkPage *page = GIS_NETWORK_PAGE (object);
@@ -559,6 +575,8 @@ gis_network_page_constructed (GObject *object)
   visible = TRUE;
   priv->nm_settings = nm_remote_settings_new (NULL);
 
+  g_signal_connect (priv->nm_device, "notify::state",
+                    G_CALLBACK (device_state_changed), page);
   g_signal_connect (priv->nm_client, "notify::active-connections",
                     G_CALLBACK (active_connections_changed), page);
 
@@ -572,8 +590,9 @@ gis_network_page_constructed (GObject *object)
                     G_CALLBACK (row_activated), page);
 
   refresh_wireless_list (page);
+  sync_complete (page);
 
-  gis_page_set_complete (GIS_PAGE (page), TRUE);
+  gis_page_set_skippable (GIS_PAGE (page), TRUE);
 
  out:
   gtk_widget_set_visible (GTK_WIDGET (page), visible);


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