diff options
author | Zeeshan Ali (Khattak) <zeeshanak@gnome.org> | 2014-06-03 17:11:03 +0100 |
---|---|---|
committer | Zeeshan Ali (Khattak) <zeeshanak@gnome.org> | 2014-06-03 17:11:03 +0100 |
commit | e8a5531846577d8d7ff01e4cc86c6f3d91f5a320 (patch) | |
tree | 3692963a267be9b54eef770903c0d3f31d46340b /demo | |
parent | 77d2ed9c90dc11766edeb0d5d4055adaa3a02969 (diff) | |
download | geoclue-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.c | 29 |
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", |