From c75180f73cd28956999e34d776e917c563486cea Mon Sep 17 00:00:00 2001
From: Ondrej Holy <oholy@redhat.com>
Date: Thu, 4 Jul 2013 13:49:51 +0200
Subject: [PATCH] user-accounts: Info message when we are offline

https://bugzilla.gnome.org/show_bug.cgi?id=702477
---
 panels/user-accounts/data/account-dialog.ui | 70 +++++++++++++++++++++++++++++
 panels/user-accounts/um-account-dialog.c    | 27 ++++++++++-
 2 files changed, 95 insertions(+), 2 deletions(-)

diff --git a/panels/user-accounts/data/account-dialog.ui b/panels/user-accounts/data/account-dialog.ui
index cba128d..9176e9b 100644
--- a/panels/user-accounts/data/account-dialog.ui
+++ b/panels/user-accounts/data/account-dialog.ui
@@ -567,6 +567,76 @@
                 <property name="position">1</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkGrid" id="enterprise-offline-area">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="hexpand">True</property>
+                <property name="column_spacing">6</property>
+                <property name="row_spacing">6</property>
+                <child>
+                  <object class="GtkLabel" id="label18">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Enterprise login allows an existing centrally managed user account to be used on this device.</property>
+                    <property name="wrap">True</property>
+                    <property name="wrap_mode">word-char</property>
+                    <property name="margin_bottom">12</property>
+                    <style>
+                      <class name="dim-label"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">3</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkImage" id="image1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="icon_name">network-offline-symbolic</property>
+                    <property name="pixel_size">64</property>
+                    <property name="yalign">1</property>
+                    <property name="vexpand">True</property>
+                    <property name="hexpand">True</property>
+                    <property name="margin_bottom">6</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                    <property name="width">3</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label17">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Go online to add
+enterprise login accounts.</property>
+                    <property name="yalign">0</property>
+                    <property name="justify">center</property>
+                    <property name="vexpand">True</property>
+                    <property name="hexpand">True</property>
+                    <attributes>
+                      <attribute name="scale" value="1.2"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">2</property>
+                    <property name="width">3</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">2</property>
+              </packing>
+            </child>
           </object>
   <object class="GtkDialog" id="join-dialog">
     <property name="can_focus">False</property>
diff --git a/panels/user-accounts/um-account-dialog.c b/panels/user-accounts/um-account-dialog.c
index 2c76b3f..5b674dd 100644
--- a/panels/user-accounts/um-account-dialog.c
+++ b/panels/user-accounts/um-account-dialog.c
@@ -37,6 +37,7 @@
 typedef enum {
         UM_LOCAL,
         UM_ENTERPRISE,
+        UM_OFFLINE,
         NUM_MODES
 } UmAccountMode;
 
@@ -1179,6 +1180,17 @@ on_realmd_disappeared (GDBusConnection *unused1,
         mode_change (self, UM_LOCAL);
 }
 
+static void
+on_network_changed (GNetworkMonitor *monitor,
+                    gboolean available,
+                    gpointer user_data)
+{
+        UmAccountDialog *self = UM_ACCOUNT_DIALOG (user_data);
+
+        if (self->mode != UM_LOCAL)
+                mode_change (self, UM_ENTERPRISE);
+}
+
 static gboolean
 enterprise_domain_timeout (UmAccountDialog *self)
 {
@@ -1248,6 +1260,7 @@ enterprise_init (UmAccountDialog *self,
                  GtkBuilder *builder)
 {
         GtkWidget *widget;
+        GNetworkMonitor *monitor;
 
         self->enterprise_realms = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_OBJECT);
         self->enterprise_check_credentials = FALSE;
@@ -1291,6 +1304,9 @@ enterprise_init (UmAccountDialog *self,
                                                G_BUS_NAME_WATCHER_FLAGS_AUTO_START,
                                                on_realmd_appeared, on_realmd_disappeared,
                                                self, NULL);
+
+        monitor = g_network_monitor_get_default ();
+        g_signal_connect (monitor, "network-changed", G_CALLBACK (on_network_changed), self);
 }
 
 static void
@@ -1324,12 +1340,19 @@ static void
 mode_change (UmAccountDialog *self,
              UmAccountMode mode)
 {
-        gboolean active;
+        gboolean active, available;
+        GNetworkMonitor *monitor;
+
+        if (mode != UM_LOCAL) {
+                monitor = g_network_monitor_get_default ();
+                available = g_network_monitor_get_network_available (monitor);
+                mode = available ? UM_ENTERPRISE : UM_OFFLINE;
+        }
 
         gtk_notebook_set_current_page (GTK_NOTEBOOK (self->container_widget), mode);
 
         /* The enterprise toggle state */
-        active = (mode == UM_ENTERPRISE);
+        active = (mode != UM_LOCAL);
         if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->enterprise_button)) != active)
                 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->enterprise_button), active);
 
-- 
1.8.3.1

