[gnome-initial-setup] page: Allow the page to make the decision about whether or not to use apply



commit e59468f93d231967e02da826dd31d3f7c3b9cf53
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Sat Jun 15 01:37:19 2013 -0400

    page: Allow the page to make the decision about whether or not to use apply

 gnome-initial-setup/gis-page.c                     |   24 +++++++++-----
 gnome-initial-setup/gis-page.h                     |    2 +-
 .../pages/account/gis-account-page.c               |   33 ++++++++------------
 3 files changed, 29 insertions(+), 30 deletions(-)
---
diff --git a/gnome-initial-setup/gis-page.c b/gnome-initial-setup/gis-page.c
index 2596f0a..abe5ea1 100644
--- a/gnome-initial-setup/gis-page.c
+++ b/gnome-initial-setup/gis-page.c
@@ -180,6 +180,13 @@ gis_page_constructed (GObject *object)
   G_OBJECT_CLASS (gis_page_parent_class)->constructed (object);
 }
 
+static gboolean
+gis_page_real_apply (GisPage      *page,
+                     GCancellable *cancellable)
+{
+  return FALSE;
+}
+
 static void
 gis_page_class_init (GisPageClass *klass)
 {
@@ -192,6 +199,7 @@ gis_page_class_init (GisPageClass *klass)
   object_class->set_property = gis_page_set_property;
 
   klass->get_builder = gis_page_real_get_builder;
+  klass->apply = gis_page_real_apply;
 
   obj_props[PROP_DRIVER] =
     g_param_spec_object ("driver", "", "", GIS_TYPE_DRIVER,
@@ -274,13 +282,6 @@ gis_page_apply_begin (GisPage                *page,
 
   klass = GIS_PAGE_GET_CLASS (page);
 
-  /* Shortcut case where no apply vfunc, to avoid flicker */
-  if (!klass->apply) {
-    if (callback)
-      (callback) (page, TRUE, user_data);
-    return;
-  }
-
   /* Unrefs in gis_page_apply_complete() */
   g_object_ref (page);
 
@@ -288,9 +289,14 @@ gis_page_apply_begin (GisPage                *page,
   page->priv->apply_data = user_data;
   page->priv->apply_cancel = g_cancellable_new ();
   page->priv->applying = TRUE;
-  g_object_notify_by_pspec (G_OBJECT (page), obj_props[PROP_APPLYING]);
 
-  (klass->apply) (page, page->priv->apply_cancel);
+  if (!klass->apply (page, page->priv->apply_cancel))
+    {
+      /* Shortcut case where we don't want apply, to avoid flicker */
+      gis_page_apply_complete (page, TRUE);
+    }
+
+  g_object_notify_by_pspec (G_OBJECT (page), obj_props[PROP_APPLYING]);
 }
 
 void
diff --git a/gnome-initial-setup/gis-page.h b/gnome-initial-setup/gis-page.h
index 25775e7..4c9ab9d 100644
--- a/gnome-initial-setup/gis-page.h
+++ b/gnome-initial-setup/gis-page.h
@@ -63,7 +63,7 @@ struct _GisPageClass
   GtkBuilder * (*get_builder) (GisPage *page);
   GtkWidget  * (*get_action_widget) (GisPage *page);
   void         (*locale_changed) (GisPage *page);
-  void         (*apply) (GisPage *page,
+  gboolean     (*apply) (GisPage *page,
                          GCancellable *cancellable);
   void         (*save_data) (GisPage *page);
   void         (*shown) (GisPage *page);
diff --git a/gnome-initial-setup/pages/account/gis-account-page.c 
b/gnome-initial-setup/pages/account/gis-account-page.c
index 28fb309..411f820 100644
--- a/gnome-initial-setup/pages/account/gis-account-page.c
+++ b/gnome-initial-setup/pages/account/gis-account-page.c
@@ -931,22 +931,6 @@ enterprise_add_user (GisAccountPage *page)
   }
 }
 
-static void
-save_account_data (GisAccountPage *page)
-{
-  GisAccountPagePrivate *priv = page->priv;
-  switch (priv->mode) {
-  case UM_LOCAL:
-    gis_page_apply_complete (GIS_PAGE (page), TRUE);
-    break;
-  case UM_ENTERPRISE:
-    enterprise_add_user (page);
-    break;
-  default:
-    g_assert_not_reached ();
-  }
-}
-
 static gchar *
 realm_get_name (UmRealmObject *realm)
 {
@@ -1119,14 +1103,23 @@ toggle_mode (GtkToggleButton *button,
             gtk_toggle_button_get_active (button) ? UM_ENTERPRISE : UM_LOCAL);
 }
 
-static void
+static gboolean
 gis_account_page_apply (GisPage *gis_page,
                         GCancellable *cancellable)
 {
   GisAccountPage *page = GIS_ACCOUNT_PAGE (gis_page);
-  g_clear_object (&page->priv->cancellable);
-  page->priv->cancellable = g_object_ref (cancellable);
-  save_account_data (page);
+  GisAccountPagePrivate *priv = page->priv;
+
+  switch (priv->mode) {
+  case UM_LOCAL:
+    return FALSE;
+  case UM_ENTERPRISE:
+    page->priv->cancellable = g_object_ref (cancellable);
+    enterprise_add_user (page);
+    return TRUE;
+  default:
+    g_assert_not_reached ();
+  }
 }
 
 static void


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