fix when there is no adaptor for an instance.

PS: I couldn't test it as my machine does not have a hw switch to turn
bluetooth off... and I'm lazy to search how to disable it using
software (hciconfig hci0 down does not do it, just put the adapter in
offline mode and my btusb is not modular, so I can't remove the
module) :-)



SVN revision: 47505
This commit is contained in:
Gustavo Sverzut Barbieri 2010-03-27 14:23:37 +00:00
parent 2b166419cf
commit 3020c32b54
2 changed files with 43 additions and 18 deletions

View File

@ -150,10 +150,15 @@ _bluez_toggle_powered(E_Bluez_Instance *inst)
return; return;
} }
if (!inst->adapter)
{
_bluez_operation_error_show(_("No bluetooth adapter."));
return;
}
if (!e_bluez_adapter_powered_get(inst->adapter, &powered)) if (!e_bluez_adapter_powered_get(inst->adapter, &powered))
{ {
_bluez_operation_error_show _bluez_operation_error_show(_("Query adapter's powered."));
(_("Query adapter's powered."));
return; return;
} }
@ -171,13 +176,15 @@ static void
_bluez_cb_toggle_powered(E_Object *obj __UNUSED__, const char *params __UNUSED__) _bluez_cb_toggle_powered(E_Object *obj __UNUSED__, const char *params __UNUSED__)
{ {
E_Bluez_Module_Context *ctxt; E_Bluez_Module_Context *ctxt;
const Eina_List *l;
E_Bluez_Instance *inst;
if (!bluez_mod) if (!bluez_mod)
return; return;
ctxt = bluez_mod->data; ctxt = bluez_mod->data;
if (ctxt->default_instance) EINA_LIST_FOREACH(ctxt->instances, l, inst)
_bluez_toggle_powered(ctxt->default_instance); if (inst->adapter) _bluez_toggle_powered(inst);
} }
static void _bluez_popup_del(E_Bluez_Instance *inst); static void _bluez_popup_del(E_Bluez_Instance *inst);
@ -267,6 +274,12 @@ _bluez_popup_cb_powered_changed(void *data, Evas_Object *obj)
return; return;
} }
if (!inst->adapter)
{
_bluez_operation_error_show(_("No bluetooth adapter."));
return;
}
if (!e_bluez_adapter_powered_set if (!e_bluez_adapter_powered_set
(inst->adapter, powered, _bluez_toggle_powered_cb, inst)) (inst->adapter, powered, _bluez_toggle_powered_cb, inst))
{ {
@ -457,7 +470,9 @@ _bluez_popup_cb_scan(void *data, void *data2 __UNUSED__)
E_Bluez_Instance *inst = data; E_Bluez_Instance *inst = data;
int ret; int ret;
if (inst->discovering) if (!inst->adapter)
ret = 0;
else if (inst->discovering)
ret = e_bluez_adapter_stop_discovery ret = e_bluez_adapter_stop_discovery
(inst->adapter, _bluez_discovery_cb, inst); (inst->adapter, _bluez_discovery_cb, inst);
else else
@ -484,6 +499,8 @@ _bluez_popup_cb_controls(void *data, void *data2 __UNUSED__)
_bluez_popup_del(inst); _bluez_popup_del(inst);
if (inst->conf_dialog) if (inst->conf_dialog)
return; return;
if (!inst->adapter)
return;
inst->conf_dialog = e_bluez_config_dialog_new(NULL, inst); inst->conf_dialog = e_bluez_config_dialog_new(NULL, inst);
} }
@ -647,6 +664,12 @@ _bluez_popup_new(E_Bluez_Instance *inst)
return; return;
} }
if (!inst->adapter)
{
_bluez_operation_error_show(_("No bluetooth adapter."));
return;
}
if (!e_bluez_adapter_discovering_get(inst->adapter, &b)) if (!e_bluez_adapter_discovering_get(inst->adapter, &b))
{ {
_bluez_operation_error_show(_("Can't get Discovering property")); _bluez_operation_error_show(_("Can't get Discovering property"));
@ -722,6 +745,8 @@ _bluez_menu_cb_cfg(void *data, E_Menu *menu __UNUSED__, E_Menu_Item *mi __UNUSED
_bluez_popup_del(inst); _bluez_popup_del(inst);
if (inst->conf_dialog) if (inst->conf_dialog)
return; return;
if (!inst->adapter)
return;
inst->conf_dialog = e_bluez_config_dialog_new(NULL, inst); inst->conf_dialog = e_bluez_config_dialog_new(NULL, inst);
} }
@ -834,12 +859,16 @@ _bluez_edje_view_update(E_Bluez_Instance *inst, Evas_Object *o)
E_Bluez_Module_Context *ctxt = inst->ctxt; E_Bluez_Module_Context *ctxt = inst->ctxt;
const char *name; const char *name;
if (!ctxt->has_manager) if ((!ctxt->has_manager) || (!inst->adapter))
{ {
edje_object_part_text_set(o, "e.text.powered", ""); edje_object_part_text_set(o, "e.text.powered", "");
edje_object_part_text_set(o, "e.text.status", ""); edje_object_part_text_set(o, "e.text.status", "");
edje_object_signal_emit(o, "e,changed,off", "e"); edje_object_signal_emit(o, "e,changed,off", "e");
edje_object_part_text_set(o, "e.text.name", _("No Bluetooth daemon")); if (!ctxt->has_manager)
edje_object_part_text_set(o, "e.text.name", _("No Bluetooth daemon"));
else
edje_object_part_text_set(o, "e.text.name",
_("No Bluetooth adapter"));
edje_object_signal_emit(o, "e,changed,name", "e"); edje_object_signal_emit(o, "e,changed,name", "e");
return; return;
} }
@ -868,8 +897,7 @@ _bluez_edje_view_update(E_Bluez_Instance *inst, Evas_Object *o)
else else
{ {
edje_object_signal_emit(o, "e,changed,off", "e"); edje_object_signal_emit(o, "e,changed,off", "e");
edje_object_part_text_set(o, "e.text.status", edje_object_part_text_set(o, "e.text.status", _("Bluetooth is off."));
_("Bluetooth is off."));
} }
} }
@ -884,7 +912,7 @@ _bluez_gadget_update(E_Bluez_Instance *inst)
{ {
E_Bluez_Module_Context *ctxt = inst->ctxt; E_Bluez_Module_Context *ctxt = inst->ctxt;
if (!ctxt->has_manager && inst->popup) if (inst->popup && ((!ctxt->has_manager) || (!inst->adapter)))
_bluez_popup_del(inst); _bluez_popup_del(inst);
if (inst->popup) if (inst->popup)
@ -926,7 +954,11 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
// TODO: instead of getting the default adapter, get the adapter for // TODO: instead of getting the default adapter, get the adapter for
// each instance. See the mixer module. // each instance. See the mixer module.
inst->adapter = e_bluez_adapter_get(ctxt->default_adapter); if (ctxt->default_adapter)
inst->adapter = e_bluez_adapter_get(ctxt->default_adapter);
else
inst->adapter = NULL;
if (inst->adapter) if (inst->adapter)
{ {
Eina_Bool powered, discoverable, discovering; Eina_Bool powered, discoverable, discovering;
@ -941,9 +973,6 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
inst->discovering = discovering; inst->discovering = discovering;
} }
if (!ctxt->default_instance)
ctxt->default_instance = inst;
_bluez_gadget_update(inst); _bluez_gadget_update(inst);
ctxt->instances = eina_list_append(ctxt->instances, inst); ctxt->instances = eina_list_append(ctxt->instances, inst);
@ -979,9 +1008,6 @@ _gc_shutdown(E_Gadcon_Client *gcc)
ctxt->instances = eina_list_remove(ctxt->instances, inst); ctxt->instances = eina_list_remove(ctxt->instances, inst);
if (ctxt->default_instance == inst)
ctxt->default_instance = NULL;
E_FREE(inst); E_FREE(inst);
} }

View File

@ -74,7 +74,6 @@ struct E_Bluez_Instance_Device
struct E_Bluez_Module_Context struct E_Bluez_Module_Context
{ {
Eina_List *instances; Eina_List *instances;
E_Bluez_Instance *default_instance;
const char *default_adapter; const char *default_adapter;
struct { struct {