add 'has-connections-changed' signal
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Tue, 1 Jun 2010 16:41:40 +0000 (18:41 +0200)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Tue, 1 Jun 2010 16:45:23 +0000 (18:45 +0200)
src/position-publisher.c

index f04b870..1646385 100644 (file)
@@ -39,6 +39,14 @@ enum
   LAST_PROPERTY
 };
 
+enum
+{
+  SIG_HAS_CONNECTIONS_CHANGED,
+  LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
 /* Minimum time before 2 publishing (in seconds) */
 #define PUBLISH_THROTTLE 10
 
@@ -81,6 +89,12 @@ remove_connection (PositionPublisher *self,
       self);
   priv->connections = g_slist_remove (priv->connections, conn);
   g_object_unref (conn);
+
+  if (g_slist_length (priv->connections) == 0)
+    {
+      g_print ("We don't have location connection any more\n");
+      g_signal_emit (self, signals[SIG_HAS_CONNECTIONS_CHANGED], 0, FALSE);
+    }
 }
 
 static void
@@ -243,6 +257,13 @@ connection_added_cb (ConnectionWatcher *watcher,
 
   priv->connections = g_slist_prepend (priv->connections, g_object_ref (conn));
 
+  if (g_slist_length (priv->connections) == 1)
+    {
+      /* We just added the first connection */
+      g_print ("We have location connection\n");
+      g_signal_emit (self, signals[SIG_HAS_CONNECTIONS_CHANGED], 0, TRUE);
+    }
+
   g_signal_connect (conn, "invalidated",
       G_CALLBACK (conn_invalidated_cb), self);
 
@@ -306,6 +327,16 @@ position_publisher_class_init (PositionPublisherClass *position_publisher_class)
       G_PARAM_CONSTRUCT | G_PARAM_WRITABLE | G_PARAM_READABLE
       | G_PARAM_STATIC_STRINGS);
   g_object_class_install_property (object_class, PROP_BLUR, param_spec);
+
+  signals[SIG_HAS_CONNECTIONS_CHANGED] = g_signal_new (
+      "has-connections-changed",
+      G_OBJECT_CLASS_TYPE (object_class),
+      G_SIGNAL_RUN_LAST,
+      0,
+      NULL, NULL,
+      g_cclosure_marshal_VOID__BOOLEAN,
+      G_TYPE_NONE,
+      1, G_TYPE_BOOLEAN);
 }
 
 void