stefan pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=da6297cc37b7538389840b7e0ae3f081eb609cbe

commit da6297cc37b7538389840b7e0ae3f081eb609cbe
Author: Stefan Schmidt <s.schm...@samsung.com>
Date:   Wed Apr 22 13:54:51 2015 +0200

    modules/geolocation: Follow InUse property change to give UI indication
    
    The InUse property of the manager object is available in newer GeoClue2
    versions. It shows if the service is in use by any application at the
    moment. We use this to indicate the usage in the UI.
    A blue geolocation icon means the service is in use, the grey icon means
    it is inactive.
---
 src/modules/geolocation/e_mod_main.c | 32 ++++++++++++++++++++++++++++++--
 1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/src/modules/geolocation/e_mod_main.c 
b/src/modules/geolocation/e_mod_main.c
index 4568d51..8b8f22d 100644
--- a/src/modules/geolocation/e_mod_main.c
+++ b/src/modules/geolocation/e_mod_main.c
@@ -39,7 +39,7 @@ struct _Instance
    Evas_Object     *popup_altitude;
    Evas_Object     *popup_accuracy;
    Evas_Object     *popup_description;
-   Eina_Bool       in_use;
+   int             in_use;
    Eldbus_Connection *conn;
    Eldbus_Service_Interface *iface;
    Eldbus_Proxy *manager;
@@ -341,6 +341,32 @@ cb_client_object_get(Eldbus_Proxy *proxy EINA_UNUSED, void 
*data, Eldbus_Pending
    eldbus_proxy_signal_handler_add(inst->client, "LocationUpdated", 
cb_client_location_updated_signal, inst);
 }
 
+static void
+cb_manager_props_changed(void *data, Eldbus_Proxy *proxy EINA_UNUSED, void 
*event)
+{
+   Eldbus_Proxy_Event_Property_Changed *ev;
+   int val;
+   Eina_Value v;
+   Instance *inst = data;
+
+   ev = event;
+   DBG("Manager property changed: %s", ev->name);
+
+   if (strcmp(ev->name, "InUse") == 0)
+     {
+        eina_value_setup(&v, EINA_VALUE_TYPE_INT);
+        eina_value_convert(ev->value, &v);
+        eina_value_get(&v, &val);
+        inst->in_use = val;
+        DBG("Manager InUse property changed to %i", inst->in_use);
+
+        if (inst->in_use)
+          edje_object_signal_emit(inst->icon, "e,state,location_on", "e");
+       else
+          edje_object_signal_emit(inst->icon, "e,state,location_off", "e");
+     }
+}
+
 static E_Gadcon_Client *
 _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
 {
@@ -368,7 +394,7 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, 
const char *style)
    inst->accuracy = 0.0;
    inst->altitude= 0.0 ;
    inst->description = NULL;
-   inst->in_use = EINA_FALSE;
+   inst->in_use = 0;
    edje_object_signal_emit(inst->icon, "e,state,location_off", "e");
 
    evas_object_event_callback_add(inst->icon,
@@ -392,6 +418,8 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, 
const char *style)
         return NULL;
      }
 
+   eldbus_proxy_event_callback_add(inst->manager, 
ELDBUS_PROXY_EVENT_PROPERTY_CHANGED, cb_manager_props_changed, inst);
+
    geo_clue2_manager_get_client_call(inst->manager, cb_client_object_get, 
inst);
 
    return gcc;

-- 


Reply via email to