aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2012-04-23 17:44:45 +0800
committerMilan Crha <mcrha@redhat.com>2012-04-23 17:46:05 +0800
commitbf2c718d1f1ecdaf0feec0274c2b12eee57aa6bf (patch)
tree0b1984407c2f046f109c1468f88dd8f933a6587a
parent68978b5a021e73f44a05a19b6492469c3da13f79 (diff)
downloadgsoc2013-evolution-bf2c718d1f1ecdaf0feec0274c2b12eee57aa6bf.tar
gsoc2013-evolution-bf2c718d1f1ecdaf0feec0274c2b12eee57aa6bf.tar.gz
gsoc2013-evolution-bf2c718d1f1ecdaf0feec0274c2b12eee57aa6bf.tar.bz2
gsoc2013-evolution-bf2c718d1f1ecdaf0feec0274c2b12eee57aa6bf.tar.lz
gsoc2013-evolution-bf2c718d1f1ecdaf0feec0274c2b12eee57aa6bf.tar.xz
gsoc2013-evolution-bf2c718d1f1ecdaf0feec0274c2b12eee57aa6bf.tar.zst
gsoc2013-evolution-bf2c718d1f1ecdaf0feec0274c2b12eee57aa6bf.zip
Bug #655753 - Improve offline notification for network outage
-rw-r--r--data/org.gnome.evolution.shell.gschema.xml.in7
-rw-r--r--modules/offline-alert/evolution-offline-alert.c15
-rw-r--r--shell/e-shell.c9
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 @@
<key name="start-offline" type="b">
<default>false</default>
<_summary>Start in offline mode</_summary>
- <_description> Whether Evolution will start up in offline mode instead of online mode.</_description>
+ <_description>Whether Evolution will start up in offline mode instead of online mode.</_description>
+ </key>
+ <key name="currently-offline" type="b">
+ <default>false</default>
+ <_summary>Current state of offline mode</_summary>
+ <_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.</_description>
</key>
<key name="folder-paths" type="as">
<default>[]</default>
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 ();