e/bluez4: module inactive when bluez is down

Patch by: Lucas Joia <lucasjoia@profusion.mobi>



SVN revision: 82189
This commit is contained in:
Lucas Joia 2013-01-04 16:12:20 +00:00 committed by Lucas De Marchi
parent cef9137bc2
commit e51a6ea6d5
4 changed files with 40 additions and 9 deletions

View File

@ -102,6 +102,7 @@ _ebluez4_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event)
if (!(inst = data)) return;
if (ev->button != 1) return;
if (!ctxt->adap_obj) return;
if (!inst->popup)
_ebluez4_popup_new(inst);
@ -111,21 +112,32 @@ _ebluez4_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event)
e_gadcon_popup_show(inst->popup);
}
static void
_ebluez4_set_mod_icon(Evas_Object *base)
{
char edj_path[4096];
char *group;
snprintf(edj_path, sizeof(edj_path), "%s/e-module-bluez4.edj", mod->dir);
if (ctxt->adap_obj)
group = "modules/bluez4/main";
else
group = "modules/bluez4/inactive";
if (!e_theme_edje_object_set(base, "base/theme/modules/bluez4", group))
edje_object_file_set(base, edj_path, group);
}
/* Gadcon */
static E_Gadcon_Client *
_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
{
Instance *inst = NULL;
char buf[1024];
snprintf(buf, sizeof(buf), "%s/e-module-bluez4.edj", mod->dir);
inst = E_NEW(Instance, 1);
inst->o_bluez4 = edje_object_add(gc->evas);
if (!e_theme_edje_object_set(inst->o_bluez4, "base/theme/modules/bluez4",
"modules/bluez4/main"))
edje_object_file_set(inst->o_bluez4, buf, "modules/bluez4/main");
_ebluez4_set_mod_icon(inst->o_bluez4);
inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->o_bluez4);
inst->gcc->data = inst;
@ -276,3 +288,20 @@ ebluez4_update_instances(Eina_List *src)
if (inst->found_list)
ebluez4_update_inst(inst->found_list, src);
}
void
ebluez4_update_all_gadgets_visibility()
{
Eina_List *iter;
Instance *inst;
if (ctxt->adap_obj)
EINA_LIST_FOREACH(instances, iter, inst)
_ebluez4_set_mod_icon(inst->o_bluez4);
else
EINA_LIST_FOREACH(instances, iter, inst)
{
_ebluez4_set_mod_icon(inst->o_bluez4);
e_gadcon_popup_hide(inst->popup);
}
}

View File

@ -20,5 +20,6 @@ void ebluez4_disabled_set_all_search_buttons(Eina_Bool disabled);
void ebluez4_append_to_instances(const char *addr, const char *name);
void ebluez4_update_inst(Evas_Object *dest, Eina_List *src);
void ebluez4_update_instances(Eina_List *src);
void ebluez4_update_all_gadgets_visibility();
#endif

View File

@ -4,9 +4,6 @@
#include "e_mod_main.h"
#include "ebluez4.h"
/* Global Module Context */
Context *ctxt;
static int
_addr_cmp(const void *d1, const void *d2)
{
@ -52,6 +49,7 @@ _unset_adapter()
ctxt->adap_obj = NULL;
ebluez4_disabled_set_all_search_buttons(EINA_TRUE);
ebluez4_update_instances(ctxt->devices);
ebluez4_update_all_gadgets_visibility();
}
static void
@ -261,6 +259,7 @@ _set_adapter(const EDBus_Message *msg)
edbus_proxy_call(ctxt->adap_proxy, "ListDevices", _on_list, NULL, -1, "");
edbus_proxy_call(ctxt->adap_proxy, "RegisterAgent", NULL, NULL, -1, "os",
REMOTE_AGENT_PATH, "KeyboardDisplay");
ebluez4_update_all_gadgets_visibility();
}
static void

View File

@ -28,6 +28,8 @@ typedef struct _Context
Eina_List *devices;
} Context;
Context *ctxt;
void ebluez4_edbus_init();
void ebluez4_edbus_shutdown();
void ebluez4_start_discovery();