e/bluez4: Change adapter properties
Patch by: Lucas Joia <lucasjoia@profusion.mobi> SVN revision: 82200
This commit is contained in:
parent
d638ebd2cd
commit
e0920a6d0d
|
@ -87,12 +87,108 @@ _ebluez4_cb_search(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||||
DBG("Starting discovery...");
|
DBG("Starting discovery...");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ebluez4_cb_adap_settings_dialog_del(E_Win *win)
|
||||||
|
{
|
||||||
|
E_Dialog *dialog = win->data;
|
||||||
|
ebluez4_adapter_settings_del(dialog);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ebluez4_check_changed(void *data, Evas_Object *obj, const char *prop_name)
|
||||||
|
{
|
||||||
|
Adapter *adap = data;
|
||||||
|
Eina_Bool value = e_widget_check_checked_get(obj);
|
||||||
|
ebluez4_adapter_property_set(adap, prop_name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ebluez4_powered_changed(void *data, Evas_Object *obj, void *info __UNUSED__)
|
||||||
|
{
|
||||||
|
_ebluez4_check_changed(data, obj, "Powered");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ebluez4_visible_changed(void *data, Evas_Object *obj, void *info __UNUSED__)
|
||||||
|
{
|
||||||
|
_ebluez4_check_changed(data, obj, "Discoverable");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ebluez4_pairable_changed(void *data, Evas_Object *obj, void *info __UNUSED__)
|
||||||
|
{
|
||||||
|
_ebluez4_check_changed(data, obj, "Pairable");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ebluez4_cb_adap_settings(void *data)
|
||||||
|
{
|
||||||
|
Adapter *adap = data;
|
||||||
|
E_Container *con;
|
||||||
|
E_Dialog *dialog;
|
||||||
|
Evas *evas;
|
||||||
|
Evas_Object *list;
|
||||||
|
Evas_Object *ck;
|
||||||
|
int mw, mh;
|
||||||
|
Eina_List *ck_list = NULL;
|
||||||
|
|
||||||
|
if (adap->dialog)
|
||||||
|
ebluez4_adapter_settings_del(adap->dialog);
|
||||||
|
|
||||||
|
con = e_container_current_get(e_manager_current_get());
|
||||||
|
|
||||||
|
dialog = e_dialog_new(con, "Adapter Dialog", "adapter");
|
||||||
|
e_dialog_title_set(dialog, "Adapter Settings");
|
||||||
|
e_dialog_resizable_set(dialog, EINA_TRUE);
|
||||||
|
e_win_delete_callback_set(dialog->win, _ebluez4_cb_adap_settings_dialog_del);
|
||||||
|
|
||||||
|
evas = e_win_evas_get(dialog->win);
|
||||||
|
|
||||||
|
list = e_widget_list_add(evas, 0, 0);
|
||||||
|
|
||||||
|
ck = e_widget_check_add(evas, "Default", NULL);
|
||||||
|
e_widget_check_checked_set(ck, adap->is_default);
|
||||||
|
e_widget_list_object_append(list, ck, 0, 0, 0);
|
||||||
|
|
||||||
|
ck = e_widget_check_add(evas, "Powered", &(adap->powered_checked));
|
||||||
|
e_widget_check_checked_set(ck, adap->powered);
|
||||||
|
e_widget_list_object_append(list, ck, 0, 0, 0);
|
||||||
|
evas_object_smart_callback_add(ck, "changed", _ebluez4_powered_changed,
|
||||||
|
adap);
|
||||||
|
ck_list = eina_list_append(ck_list, ck);
|
||||||
|
|
||||||
|
|
||||||
|
ck = e_widget_check_add(evas, "Visible", &(adap->visible_checked));
|
||||||
|
e_widget_check_checked_set(ck, adap->visible);
|
||||||
|
e_widget_list_object_append(list, ck, 0, 0, 0);
|
||||||
|
evas_object_smart_callback_add(ck, "changed",
|
||||||
|
_ebluez4_visible_changed, adap);
|
||||||
|
ck_list = eina_list_append(ck_list, ck);
|
||||||
|
|
||||||
|
ck = e_widget_check_add(evas, "Pairable", &(adap->pairable_checked));
|
||||||
|
e_widget_check_checked_set(ck, adap->pairable);
|
||||||
|
e_widget_list_object_append(list, ck, 0, 0, 0);
|
||||||
|
evas_object_smart_callback_add(ck, "changed",
|
||||||
|
_ebluez4_pairable_changed, adap);
|
||||||
|
ck_list = eina_list_append(ck_list, ck);
|
||||||
|
|
||||||
|
e_dialog_show(dialog);
|
||||||
|
e_widget_size_min_get(list, &mw, &mh);
|
||||||
|
if(mw < 150) mw = 150;
|
||||||
|
e_dialog_content_set(dialog, list, mw, mh);
|
||||||
|
|
||||||
|
dialog->data = adap;
|
||||||
|
adap->dialog = dialog;
|
||||||
|
e_object_data_set(E_OBJECT(dialog), ck_list);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ebluez4_adap_list_dialog_del(Instance *inst)
|
_ebluez4_adap_list_dialog_del(Instance *inst)
|
||||||
{
|
{
|
||||||
if (!inst->adap_dialog) return;
|
if (!inst->adapters_dialog) return;
|
||||||
e_object_del(E_OBJECT(inst->adap_dialog));
|
e_object_del(E_OBJECT(inst->adapters_dialog));
|
||||||
inst->adap_dialog = NULL;
|
inst->adapters_dialog = NULL;
|
||||||
inst->adap_list = NULL;
|
inst->adap_list = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,7 +207,7 @@ _ebluez4_cb_adap_list(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||||
E_Dialog *dialog;
|
E_Dialog *dialog;
|
||||||
Evas *evas;
|
Evas *evas;
|
||||||
|
|
||||||
if (inst->adap_dialog)
|
if (inst->adapters_dialog)
|
||||||
_ebluez4_adap_list_dialog_del(inst);
|
_ebluez4_adap_list_dialog_del(inst);
|
||||||
|
|
||||||
con = e_container_current_get(e_manager_current_get());
|
con = e_container_current_get(e_manager_current_get());
|
||||||
|
@ -131,7 +227,7 @@ _ebluez4_cb_adap_list(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||||
e_dialog_show(dialog);
|
e_dialog_show(dialog);
|
||||||
|
|
||||||
dialog->data = inst;
|
dialog->data = inst;
|
||||||
inst->adap_dialog = dialog;
|
inst->adapters_dialog = dialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -412,8 +508,8 @@ ebluez4_update_inst(Evas_Object *dest, Eina_List *src, Instance *inst)
|
||||||
else if (src == ctxt->adapters)
|
else if (src == ctxt->adapters)
|
||||||
{
|
{
|
||||||
EINA_LIST_FOREACH(src, iter, adap)
|
EINA_LIST_FOREACH(src, iter, adap)
|
||||||
e_widget_ilist_append(dest, NULL, adap->name, NULL, NULL, //FIXME: use correct cb for selecting adapter
|
e_widget_ilist_append(dest, NULL, adap->name,
|
||||||
edbus_object_path_get(adap->obj));
|
_ebluez4_cb_adap_settings, adap, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
e_widget_ilist_thaw(dest);
|
e_widget_ilist_thaw(dest);
|
||||||
|
@ -474,3 +570,34 @@ ebluez4_show_error(const char *err_name, const char *err_msg)
|
||||||
e_dialog_show(dialog);
|
e_dialog_show(dialog);
|
||||||
e_dialog_border_icon_set(dialog, "dialog-error");
|
e_dialog_border_icon_set(dialog, "dialog-error");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ebluez4_adapter_settings_del(E_Dialog *dialog)
|
||||||
|
{
|
||||||
|
Adapter *adap;
|
||||||
|
Eina_List *ck_list;
|
||||||
|
|
||||||
|
if (!dialog) return;
|
||||||
|
adap = dialog->data;
|
||||||
|
ck_list = e_object_data_get(E_OBJECT(dialog));
|
||||||
|
eina_list_free(ck_list);
|
||||||
|
e_object_del(E_OBJECT(dialog));
|
||||||
|
adap->dialog = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ebluez4_adapter_properties_update(void *data)
|
||||||
|
{
|
||||||
|
Eina_List *ck_list;
|
||||||
|
Evas_Object *ck;
|
||||||
|
Adapter *adap = data;
|
||||||
|
|
||||||
|
if (!adap->dialog) return;
|
||||||
|
ck_list = e_object_data_get(E_OBJECT(adap->dialog));
|
||||||
|
ck = eina_list_nth(ck_list, 0);
|
||||||
|
e_widget_check_checked_set(ck, adap->powered);
|
||||||
|
ck = eina_list_nth(ck_list, 1);
|
||||||
|
e_widget_check_checked_set(ck, adap->visible);
|
||||||
|
ck = eina_list_nth(ck_list, 2);
|
||||||
|
e_widget_check_checked_set(ck, adap->pairable);
|
||||||
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ struct _Instance
|
||||||
Evas_Object *found_list;
|
Evas_Object *found_list;
|
||||||
E_Dialog *search_dialog;
|
E_Dialog *search_dialog;
|
||||||
Evas_Object *adap_list;
|
Evas_Object *adap_list;
|
||||||
E_Dialog *adap_dialog;
|
E_Dialog *adapters_dialog;
|
||||||
};
|
};
|
||||||
|
|
||||||
EAPI extern E_Module_Api e_modapi;
|
EAPI extern E_Module_Api e_modapi;
|
||||||
|
@ -23,5 +23,7 @@ void ebluez4_update_inst(Evas_Object *dest, Eina_List *src, Instance *inst);
|
||||||
void ebluez4_update_instances(Eina_List *src);
|
void ebluez4_update_instances(Eina_List *src);
|
||||||
void ebluez4_update_all_gadgets_visibility();
|
void ebluez4_update_all_gadgets_visibility();
|
||||||
void ebluez4_show_error(const char *err_name, const char *err_msg);
|
void ebluez4_show_error(const char *err_name, const char *err_msg);
|
||||||
|
void ebluez4_adapter_settings_del(E_Dialog *dialog);
|
||||||
|
void ebluez4_adapter_properties_update(void *data);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -53,6 +53,7 @@ _free_adap(Adapter *adap)
|
||||||
edbus_object_unref(adap->obj);
|
edbus_object_unref(adap->obj);
|
||||||
eina_stringshare_del(adap->name);
|
eina_stringshare_del(adap->name);
|
||||||
adap->name = NULL;
|
adap->name = NULL;
|
||||||
|
ebluez4_adapter_settings_del(adap->dialog);
|
||||||
free(adap);
|
free(adap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,6 +420,8 @@ _on_adap_property_changed(void *context, const EDBus_Message *msg)
|
||||||
DBG("'%s' property of %s changed to %s", key, adap->name, name);
|
DBG("'%s' property of %s changed to %s", key, adap->name, name);
|
||||||
eina_stringshare_del(adap->name);
|
eina_stringshare_del(adap->name);
|
||||||
adap->name = eina_stringshare_add(name);
|
adap->name = eina_stringshare_add(name);
|
||||||
|
ebluez4_update_instances(ctxt->adapters);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else if (!strcmp(key, "Discoverable"))
|
else if (!strcmp(key, "Discoverable"))
|
||||||
{
|
{
|
||||||
|
@ -442,7 +445,7 @@ _on_adap_property_changed(void *context, const EDBus_Message *msg)
|
||||||
adap->powered = powered;
|
adap->powered = powered;
|
||||||
}
|
}
|
||||||
|
|
||||||
ebluez4_update_instances(ctxt->adapters);
|
ebluez4_adapter_properties_update(adap);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -487,6 +490,7 @@ _on_adap_properties(void *data, const EDBus_Message *msg, EDBus_Pending *pending
|
||||||
adap->visible = visible;
|
adap->visible = visible;
|
||||||
adap->pairable = pairable;
|
adap->pairable = pairable;
|
||||||
adap->powered = powered;
|
adap->powered = powered;
|
||||||
|
ebluez4_update_instances(ctxt->adapters);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -533,7 +537,6 @@ _set_adapter(const char *path)
|
||||||
edbus_proxy_signal_handler_add(adap->proxy, "PropertyChanged",
|
edbus_proxy_signal_handler_add(adap->proxy, "PropertyChanged",
|
||||||
_on_adap_property_changed, adap);
|
_on_adap_property_changed, adap);
|
||||||
ctxt->adapters = eina_list_append(ctxt->adapters, adap);
|
ctxt->adapters = eina_list_append(ctxt->adapters, adap);
|
||||||
ebluez4_update_instances(ctxt->adapters);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -761,3 +764,21 @@ ebluez4_dev_path_cmp(const void *d1, const void *d2)
|
||||||
|
|
||||||
return strcmp(edbus_object_path_get(dev->obj), path);
|
return strcmp(edbus_object_path_get(dev->obj), path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ebluez4_adapter_property_set(Adapter *adap, const char *prop_name, Eina_Bool value)
|
||||||
|
{
|
||||||
|
EDBus_Message_Iter *variant, *iter;
|
||||||
|
EDBus_Message *new_msg;
|
||||||
|
|
||||||
|
if (!adap) return;
|
||||||
|
if (!adap->obj) return;
|
||||||
|
new_msg = edbus_proxy_method_call_new(adap->proxy, "SetProperty");
|
||||||
|
iter = edbus_message_iter_get(new_msg);
|
||||||
|
edbus_message_iter_basic_append(iter, 's', prop_name);
|
||||||
|
variant = edbus_message_iter_container_new(iter, 'v', "b");
|
||||||
|
edbus_message_iter_basic_append(variant, 'b', value);
|
||||||
|
edbus_message_iter_container_close(iter, variant);
|
||||||
|
edbus_proxy_send(adap->proxy, new_msg, NULL, NULL, -1);
|
||||||
|
edbus_message_unref(new_msg);
|
||||||
|
}
|
||||||
|
|
|
@ -49,7 +49,11 @@ typedef struct _Adapter
|
||||||
Eina_Bool visible;
|
Eina_Bool visible;
|
||||||
Eina_Bool pairable;
|
Eina_Bool pairable;
|
||||||
Eina_Bool powered;
|
Eina_Bool powered;
|
||||||
|
int visible_checked;
|
||||||
|
int pairable_checked;
|
||||||
|
int powered_checked;
|
||||||
Eina_Bool is_default;
|
Eina_Bool is_default;
|
||||||
|
E_Dialog *dialog;
|
||||||
EDBus_Object *obj;
|
EDBus_Object *obj;
|
||||||
EDBus_Proxy *proxy;
|
EDBus_Proxy *proxy;
|
||||||
} Adapter;
|
} Adapter;
|
||||||
|
@ -76,3 +80,4 @@ void ebluez4_disconnect_device(Device *dev);
|
||||||
void ebluez4_pair_with_device(const char *addr, void (*cb)(void *, Eina_Bool, const char *), void *data);
|
void ebluez4_pair_with_device(const char *addr, void (*cb)(void *, Eina_Bool, const char *), void *data);
|
||||||
void ebluez4_remove_device(EDBus_Object *obj);
|
void ebluez4_remove_device(EDBus_Object *obj);
|
||||||
int ebluez4_dev_path_cmp(const void *d1, const void *d2);
|
int ebluez4_dev_path_cmp(const void *d1, const void *d2);
|
||||||
|
void ebluez4_adapter_property_set(Adapter *adap, const char *prop_name, Eina_Bool value);
|
||||||
|
|
Loading…
Reference in New Issue