summaryrefslogtreecommitdiff
path: root/demo
diff options
context:
space:
mode:
authorZeeshan Ali (Khattak) <zeeshanak@gnome.org>2014-06-03 17:11:03 +0100
committerZeeshan Ali (Khattak) <zeeshanak@gnome.org>2014-06-03 17:11:03 +0100
commite8a5531846577d8d7ff01e4cc86c6f3d91f5a320 (patch)
tree3692963a267be9b54eef770903c0d3f31d46340b /demo
parent77d2ed9c90dc11766edeb0d5d4055adaa3a02969 (diff)
downloadgeoclue-e8a5531846577d8d7ff01e4cc86c6f3d91f5a320.tar.gz
demo: Exit if geoclue deactivates us automatically
This mostl likely means that user disabled geolocation (globally or for the client specifically) so there is no point in keeping it running.
Diffstat (limited to 'demo')
-rw-r--r--demo/where-am-i.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/demo/where-am-i.c b/demo/where-am-i.c
index d1f1e98..6053ee9 100644
--- a/demo/where-am-i.c
+++ b/demo/where-am-i.c
@@ -90,6 +90,33 @@ on_location_proxy_ready (GObject *source_object,
}
static void
+on_client_props_changed (GDBusProxy *client,
+ GVariant *changed_properties,
+ GStrv invalidated_properties,
+ gpointer user_data)
+{
+ GVariantIter *iter;
+ const gchar *key;
+ GVariant *value;
+
+ if (g_variant_n_children (changed_properties) <= 0)
+ return;
+
+ g_variant_get (changed_properties, "a{sv}", &iter);
+ while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+
+ if (g_strcmp0 (key, "Active") != 0)
+ continue;
+
+ if (!g_variant_get_boolean (value)) {
+ g_print ("Geolocation disabled. Quiting..\n");
+ on_location_timeout (client);
+ }
+ }
+ g_variant_iter_free (iter);
+}
+
+static void
on_client_signal (GDBusProxy *client,
gchar *sender_name,
gchar *signal_name,
@@ -150,6 +177,8 @@ on_client_proxy_ready (GObject *source_object,
g_signal_connect (client, "g-signal",
G_CALLBACK (on_client_signal), user_data);
+ g_signal_connect (client, "g-properties-changed",
+ G_CALLBACK (on_client_props_changed), user_data);
g_dbus_proxy_call (client,
"Start",