forked from enlightenment/enlightenment
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...");
|
||||
}
|
||||
|
||||
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
|
||||
_ebluez4_adap_list_dialog_del(Instance *inst)
|
||||
{
|
||||
if (!inst->adap_dialog) return;
|
||||
e_object_del(E_OBJECT(inst->adap_dialog));
|
||||
inst->adap_dialog = NULL;
|
||||
if (!inst->adapters_dialog) return;
|
||||
e_object_del(E_OBJECT(inst->adapters_dialog));
|
||||
inst->adapters_dialog = 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;
|
||||
Evas *evas;
|
||||
|
||||
if (inst->adap_dialog)
|
||||
if (inst->adapters_dialog)
|
||||
_ebluez4_adap_list_dialog_del(inst);
|
||||
|
||||
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);
|
||||
|
||||
dialog->data = inst;
|
||||
inst->adap_dialog = dialog;
|
||||
inst->adapters_dialog = dialog;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -412,8 +508,8 @@ ebluez4_update_inst(Evas_Object *dest, Eina_List *src, Instance *inst)
|
|||
else if (src == ctxt->adapters)
|
||||
{
|
||||
EINA_LIST_FOREACH(src, iter, adap)
|
||||
e_widget_ilist_append(dest, NULL, adap->name, NULL, NULL, //FIXME: use correct cb for selecting adapter
|
||||
edbus_object_path_get(adap->obj));
|
||||
e_widget_ilist_append(dest, NULL, adap->name,
|
||||
_ebluez4_cb_adap_settings, adap, NULL);
|
||||
}
|
||||
|
||||
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_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;
|
||||
E_Dialog *search_dialog;
|
||||
Evas_Object *adap_list;
|
||||
E_Dialog *adap_dialog;
|
||||
E_Dialog *adapters_dialog;
|
||||
};
|
||||
|
||||
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_all_gadgets_visibility();
|
||||
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
|
||||
|
|
|
@ -53,6 +53,7 @@ _free_adap(Adapter *adap)
|
|||
edbus_object_unref(adap->obj);
|
||||
eina_stringshare_del(adap->name);
|
||||
adap->name = NULL;
|
||||
ebluez4_adapter_settings_del(adap->dialog);
|
||||
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);
|
||||
eina_stringshare_del(adap->name);
|
||||
adap->name = eina_stringshare_add(name);
|
||||
ebluez4_update_instances(ctxt->adapters);
|
||||
return;
|
||||
}
|
||||
else if (!strcmp(key, "Discoverable"))
|
||||
{
|
||||
|
@ -442,7 +445,7 @@ _on_adap_property_changed(void *context, const EDBus_Message *msg)
|
|||
adap->powered = powered;
|
||||
}
|
||||
|
||||
ebluez4_update_instances(ctxt->adapters);
|
||||
ebluez4_adapter_properties_update(adap);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -487,6 +490,7 @@ _on_adap_properties(void *data, const EDBus_Message *msg, EDBus_Pending *pending
|
|||
adap->visible = visible;
|
||||
adap->pairable = pairable;
|
||||
adap->powered = powered;
|
||||
ebluez4_update_instances(ctxt->adapters);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -533,7 +537,6 @@ _set_adapter(const char *path)
|
|||
edbus_proxy_signal_handler_add(adap->proxy, "PropertyChanged",
|
||||
_on_adap_property_changed, adap);
|
||||
ctxt->adapters = eina_list_append(ctxt->adapters, adap);
|
||||
ebluez4_update_instances(ctxt->adapters);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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 pairable;
|
||||
Eina_Bool powered;
|
||||
int visible_checked;
|
||||
int pairable_checked;
|
||||
int powered_checked;
|
||||
Eina_Bool is_default;
|
||||
E_Dialog *dialog;
|
||||
EDBus_Object *obj;
|
||||
EDBus_Proxy *proxy;
|
||||
} 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_remove_device(EDBus_Object *obj);
|
||||
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