From bf2c718d1f1ecdaf0feec0274c2b12eee57aa6bf Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 23 Apr 2012 11:44:45 +0200 Subject: Bug #655753 - Improve offline notification for network outage --- data/org.gnome.evolution.shell.gschema.xml.in | 7 ++++++- modules/offline-alert/evolution-offline-alert.c | 15 ++++++++------- shell/e-shell.c | 9 +++++++++ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/data/org.gnome.evolution.shell.gschema.xml.in b/data/org.gnome.evolution.shell.gschema.xml.in index e5c09799de..9164983d90 100644 --- a/data/org.gnome.evolution.shell.gschema.xml.in +++ b/data/org.gnome.evolution.shell.gschema.xml.in @@ -18,7 +18,12 @@ false <_summary>Start in offline mode - <_description> Whether Evolution will start up in offline mode instead of online mode. + <_description>Whether Evolution will start up in offline mode instead of online mode. + + + false + <_summary>Current state of offline mode + <_description>Set to true when evolution is currently in offline mode, false otherwise. This is responding to both user choice of working online/offline and network outages noticed by any network monitoring system. [] diff --git a/modules/offline-alert/evolution-offline-alert.c b/modules/offline-alert/evolution-offline-alert.c index 5fcb79706c..4c3678f477 100644 --- a/modules/offline-alert/evolution-offline-alert.c +++ b/modules/offline-alert/evolution-offline-alert.c @@ -81,7 +81,13 @@ offline_alert_network_available_cb (EShell *shell, GParamSpec *pspec, EOfflineAlert *extension) { - if (e_shell_get_network_available (shell)) + if (e_shell_get_network_available (shell)) { + if (extension->alert != NULL) + e_alert_response (extension->alert, GTK_RESPONSE_OK); + return; + } + + if (!e_shell_get_online (shell)) return; g_return_if_fail (extension->alert == NULL); @@ -124,11 +130,6 @@ offline_alert_window_added_cb (GtkApplication *application, if (e_shell_get_online (shell)) return; - if (!e_shell_get_network_available (shell)) { - g_object_notify (G_OBJECT (shell), "network-available"); - return; - } - g_return_if_fail (extension->alert == NULL); /* This alert only shows at startup, not when the user @@ -137,7 +138,7 @@ offline_alert_window_added_cb (GtkApplication *application, action = E_SHELL_WINDOW_ACTION_WORK_ONLINE (window); - extension->alert = e_alert_new ("offline-alert:offline", NULL); + extension->alert = e_alert_new (e_shell_get_network_available (shell) ? "offline-alert:offline" : "offline-alert:no-network", NULL); e_alert_add_action (extension->alert, action, GTK_RESPONSE_NONE); g_object_add_weak_pointer ( diff --git a/shell/e-shell.c b/shell/e-shell.c index bc252845cd..7f0625afe3 100644 --- a/shell/e-shell.c +++ b/shell/e-shell.c @@ -1209,6 +1209,15 @@ e_shell_init (EShell *shell) "org.gnome.evolution.shell", "start-offline"); + e_shell_settings_install_property_for_key ( + "currently-offline", + "org.gnome.evolution.shell", + "currently-offline"); + + g_object_bind_property (shell, "online", + e_shell_get_shell_settings (shell), "currently-offline", + G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE | G_BINDING_INVERT_BOOLEAN); + /*** Session Management ***/ sm_client = egg_sm_client_get (); -- cgit v1.2.3