[evolution-data-server] Bug 669847 - Fix up online notification (part 2)
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Bug 669847 - Fix up online notification (part 2)
- Date: Tue, 7 Feb 2012 15:29:53 +0000 (UTC)
commit 507375e6b74e8817525a7f2692256982a81fba79
Author: Alexander Larsson <alexl redhat com>
Date: Tue Feb 7 09:28:56 2012 -0600
Bug 669847 - Fix up online notification (part 2)
Use GNetworkMonitor (in GLib 2.31) for offline detection if available.
libebackend/e-data-factory.c | 41 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 41 insertions(+), 0 deletions(-)
---
diff --git a/libebackend/e-data-factory.c b/libebackend/e-data-factory.c
index f596e42..8694e5a 100644
--- a/libebackend/e-data-factory.c
+++ b/libebackend/e-data-factory.c
@@ -26,6 +26,10 @@
#include <config.h>
+#if GLIB_CHECK_VERSION(2,31,0)
+#define USE_NETWORK_MONITOR
+#endif
+
#include <libebackend/e-extensible.h>
#include <libebackend/e-backend-factory.h>
@@ -46,7 +50,9 @@ struct _EDataFactoryPrivate {
/* Hash Key -> EBackendFactory */
GHashTable *backend_factories;
+#ifndef USE_NETWORK_MONITOR
GSettings *settings;
+#endif
gboolean online;
};
@@ -64,6 +70,33 @@ G_DEFINE_ABSTRACT_TYPE_WITH_CODE (
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, e_data_factory_initable_init)
G_IMPLEMENT_INTERFACE (E_TYPE_EXTENSIBLE, NULL))
+#ifdef USE_NETWORK_MONITOR
+
+static void
+network_changed (GNetworkMonitor *monitor,
+ gboolean available,
+ EDataFactory *factory)
+{
+ e_data_factory_set_online (factory, available);
+}
+
+static void
+data_factory_init_online_monitoring (EDataFactory *factory)
+{
+ GNetworkMonitor *monitor;
+ gboolean network_available;
+
+ monitor = g_network_monitor_get_default ();
+ g_signal_connect (
+ monitor, "network-changed",
+ G_CALLBACK (network_changed), factory);
+
+ network_available = g_network_monitor_get_network_available (monitor);
+ e_data_factory_set_online (factory, network_available);
+}
+
+#else
+
static void
data_factory_online_changed (GSettings *settings,
const gchar *key,
@@ -102,6 +135,8 @@ data_factory_init_online_monitoring (EDataFactory *factory)
e_data_factory_set_online (factory, !start_offline);
}
+#endif
+
static void
data_factory_last_client_gone_cb (EBackend *backend,
EDataFactory *factory)
@@ -162,10 +197,16 @@ data_factory_dispose (GObject *object)
g_hash_table_remove_all (priv->backends);
g_hash_table_remove_all (priv->backend_factories);
+#ifdef USE_NETWORK_MONITOR
+ g_signal_handlers_disconnect_by_func (
+ g_network_monitor_get_default (),
+ G_CALLBACK (network_changed), object);
+#else
if (priv->settings != NULL) {
g_object_unref (priv->settings);
priv->settings = NULL;
}
+#endif
/* Chain up to parent's dispose() method. */
G_OBJECT_CLASS (e_data_factory_parent_class)->dispose (object);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]