forked from enlightenment/enlightenment
e/bluez4: Pair when select a found device
-Pair button is no longer needed -Only non-paired devices appear for the user to pair Patch by: Lucas Joia <lucasjoia@profusion.mobi> SVN revision: 82198
This commit is contained in:
parent
482eb40918
commit
990a1e3a11
|
@ -17,28 +17,41 @@ _ebluez4_search_dialog_del(Instance *inst)
|
|||
if (!inst->search_dialog) return;
|
||||
e_object_del(E_OBJECT(inst->search_dialog));
|
||||
inst->search_dialog = NULL;
|
||||
inst->found_list = NULL;
|
||||
|
||||
if (ctxt->adap_obj)
|
||||
{
|
||||
ebluez4_stop_discovery();
|
||||
DBG("Stopping discovery...");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_ebluez4_cb_search_dialog_del(E_Win *win)
|
||||
{
|
||||
E_Dialog *dialog = win->data;
|
||||
|
||||
_ebluez4_search_dialog_del(dialog->data);
|
||||
|
||||
ebluez4_stop_discovery();
|
||||
DBG("Stopping discovery...");
|
||||
}
|
||||
|
||||
static void
|
||||
_ebluez4_cb_pair(void *data, E_Dialog *dialog)
|
||||
_ebluez4_cb_paired(void *data, Eina_Bool success, const char *err_msg)
|
||||
{
|
||||
Instance *inst = data;
|
||||
if (success)
|
||||
_ebluez4_search_dialog_del(inst);
|
||||
else
|
||||
ebluez4_show_error("Bluez Error", err_msg);
|
||||
}
|
||||
|
||||
static void
|
||||
_ebluez4_cb_pair(void *data)
|
||||
{
|
||||
Instance *inst = data;
|
||||
const char *addr = e_widget_ilist_selected_value_get(inst->found_list);
|
||||
|
||||
if(!addr)
|
||||
return;
|
||||
ebluez4_pair_with_device(addr);
|
||||
ebluez4_pair_with_device(addr, _ebluez4_cb_paired, inst);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -50,7 +63,7 @@ _ebluez4_cb_search(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
Evas *evas;
|
||||
|
||||
if (inst->search_dialog)
|
||||
_ebluez4_cb_search_dialog_del(inst->search_dialog->win);
|
||||
_ebluez4_search_dialog_del(inst);
|
||||
|
||||
con = e_container_current_get(e_manager_current_get());
|
||||
|
||||
|
@ -64,7 +77,6 @@ _ebluez4_cb_search(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
inst->found_list = e_widget_ilist_add(evas, 0, 0, NULL);
|
||||
|
||||
e_dialog_content_set(dialog, inst->found_list, 250, 220);
|
||||
e_dialog_button_add(dialog, "Pair", NULL, _ebluez4_cb_pair, inst);
|
||||
|
||||
e_dialog_show(dialog);
|
||||
|
||||
|
@ -332,7 +344,7 @@ e_modapi_save(E_Module *m)
|
|||
|
||||
/* Public Functions */
|
||||
void
|
||||
ebluez4_update_inst(Evas_Object *dest, Eina_List *src)
|
||||
ebluez4_update_inst(Evas_Object *dest, Eina_List *src, Instance *inst)
|
||||
{
|
||||
Device *dev;
|
||||
Eina_List *iter;
|
||||
|
@ -341,7 +353,9 @@ ebluez4_update_inst(Evas_Object *dest, Eina_List *src)
|
|||
e_widget_ilist_clear(dest);
|
||||
|
||||
EINA_LIST_FOREACH(src, iter, dev)
|
||||
e_widget_ilist_append(dest, NULL, dev->name, NULL, NULL, dev->addr);
|
||||
if (src == ctxt->found_devices && !dev->paired)
|
||||
e_widget_ilist_append(dest, NULL, dev->name, _ebluez4_cb_pair, inst,
|
||||
dev->addr);
|
||||
|
||||
e_widget_ilist_thaw(dest);
|
||||
e_widget_ilist_go(dest);
|
||||
|
@ -357,7 +371,7 @@ ebluez4_update_instances(Eina_List *src)
|
|||
{
|
||||
EINA_LIST_FOREACH(instances, iter, inst)
|
||||
if (inst->found_list)
|
||||
ebluez4_update_inst(inst->found_list, src);
|
||||
ebluez4_update_inst(inst->found_list, src, inst);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ EAPI void *e_modapi_init(E_Module *m);
|
|||
EAPI int e_modapi_shutdown(E_Module *m);
|
||||
EAPI int e_modapi_save(E_Module *m);
|
||||
|
||||
void ebluez4_update_inst(Evas_Object *dest, Eina_List *src);
|
||||
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);
|
||||
|
|
|
@ -4,6 +4,12 @@
|
|||
#include "e_mod_main.h"
|
||||
#include "ebluez4.h"
|
||||
|
||||
typedef struct _Pair_Cb
|
||||
{
|
||||
void (*cb)(void *, Eina_Bool, const char *);
|
||||
void *data;
|
||||
} Pair_Cb;
|
||||
|
||||
Service services[] = {
|
||||
{ HumanInterfaceDevice_UUID, INPUT },
|
||||
{ AudioSource_UUID, AUDIO_SOURCE },
|
||||
|
@ -245,13 +251,16 @@ static void
|
|||
_on_paired(void *data, const EDBus_Message *msg, EDBus_Pending *pending)
|
||||
{
|
||||
const char *err_name, *err_msg;
|
||||
Pair_Cb *d = data;
|
||||
Eina_Bool success = EINA_TRUE;
|
||||
|
||||
if (edbus_message_error_get(msg, &err_name, &err_msg))
|
||||
{
|
||||
ERR("%s: %s", err_name, err_msg);
|
||||
ebluez4_show_error(err_name, err_msg);
|
||||
return;
|
||||
success = EINA_FALSE;
|
||||
}
|
||||
if (d->cb) d->cb(d->data, success, err_msg);
|
||||
free(d);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -276,14 +285,14 @@ _on_dev_properties(void *data, const EDBus_Message *msg, EDBus_Pending *pending)
|
|||
}
|
||||
|
||||
static void
|
||||
_unset_dev(const char *path)
|
||||
_unset_dev(Device *dev, Eina_List *list)
|
||||
{
|
||||
Device *dev = eina_list_search_unsorted(ctxt->devices, ebluez4_path_cmp,
|
||||
path);
|
||||
|
||||
if (!dev)
|
||||
return;
|
||||
ctxt->devices = eina_list_remove(ctxt->devices, dev);
|
||||
if (list == ctxt->devices)
|
||||
ctxt->devices = eina_list_remove(list, dev);
|
||||
else
|
||||
ctxt->found_devices = eina_list_remove(list, dev);
|
||||
_free_dev(dev);
|
||||
}
|
||||
|
||||
|
@ -305,11 +314,15 @@ static void
|
|||
_on_removed(void *context, const EDBus_Message *msg)
|
||||
{
|
||||
const char *path;
|
||||
Device *dev, *fdev;
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "o", &path))
|
||||
return;
|
||||
|
||||
_unset_dev(path);
|
||||
dev = eina_list_search_unsorted(ctxt->devices, ebluez4_path_cmp, path);
|
||||
fdev = eina_list_search_unsorted(ctxt->found_devices, _addr_cmp, dev->addr);
|
||||
_unset_dev(dev, ctxt->devices);
|
||||
_unset_dev(fdev, ctxt->found_devices);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -520,9 +533,13 @@ ebluez4_disconnect_device(Device *dev)
|
|||
}
|
||||
|
||||
void
|
||||
ebluez4_pair_with_device(const char *addr)
|
||||
ebluez4_pair_with_device(const char *addr, void (*cb)(void *, Eina_Bool, const char *), void *data)
|
||||
{
|
||||
edbus_proxy_call(ctxt->adap_proxy, "CreatePairedDevice", _on_paired, NULL,
|
||||
Pair_Cb *d = malloc(sizeof(Pair_Cb));
|
||||
EINA_SAFETY_ON_NULL_RETURN(d);
|
||||
d->cb = cb;
|
||||
d->data = data;
|
||||
edbus_proxy_call(ctxt->adap_proxy, "CreatePairedDevice", _on_paired, d,
|
||||
-1, "sos", addr, AGENT_PATH, "KeyboardDisplay");
|
||||
}
|
||||
|
||||
|
|
|
@ -62,6 +62,6 @@ void ebluez4_start_discovery();
|
|||
void ebluez4_stop_discovery();
|
||||
void ebluez4_connect_to_device(Device *dev);
|
||||
void ebluez4_disconnect_device(Device *dev);
|
||||
void ebluez4_pair_with_device(const char *addr);
|
||||
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_path_cmp(const void *d1, const void *d2);
|
||||
|
|
Loading…
Reference in New Issue