e/bluez4: allow Disconnect when device is connected

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



SVN revision: 82196
This commit is contained in:
Lucas Joia 2013-01-04 16:12:50 +00:00 committed by Lucas De Marchi
parent 24937afc55
commit f41c88872c
3 changed files with 45 additions and 2 deletions

View File

@ -81,6 +81,12 @@ _ebluez4_cb_connect(void *data, E_Menu *m, E_Menu_Item *mi)
ebluez4_connect_to_device(data);
}
static void
_ebluez4_cb_disconnect(void *data, E_Menu *m, E_Menu_Item *mi)
{
ebluez4_disconnect_device(data);
}
static void
_ebluez4_cb_forget(void *data, E_Menu *m, E_Menu_Item *mi)
{
@ -130,8 +136,16 @@ _ebluez4_add_devices(Instance *inst)
NULL);
e_menu_item_submenu_set(mi, subm);
mi = e_menu_item_new(subm);
e_menu_item_label_set(mi, "Connect");
e_menu_item_callback_set(mi, _ebluez4_cb_connect, dev);
if (dev->connected)
{
e_menu_item_label_set(mi, "Disconnect");
e_menu_item_callback_set(mi, _ebluez4_cb_disconnect, dev);
}
else
{
e_menu_item_label_set(mi, "Connect");
e_menu_item_callback_set(mi, _ebluez4_cb_connect, dev);
}
mi = e_menu_item_new(subm);
e_menu_item_label_set(mi, "Forget");
e_menu_item_callback_set(mi, _ebluez4_cb_forget, dev);

View File

@ -221,6 +221,26 @@ _try_to_connect(EDBus_Proxy *proxy)
edbus_proxy_call(proxy, "Connect", _on_connected, NULL, -1, "");
}
static void
_on_disconnected(void *data, const EDBus_Message *msg, EDBus_Pending *pending)
{
const char *err_name, *err_msg;
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;
}
}
static void
_try_to_disconnect(EDBus_Proxy *proxy)
{
if (proxy)
edbus_proxy_call(proxy, "Disconnect", _on_disconnected, NULL, -1, "");
}
static void
_on_paired(void *data, const EDBus_Message *msg, EDBus_Pending *pending)
{
@ -491,6 +511,14 @@ ebluez4_connect_to_device(Device *dev)
_try_to_connect(dev->proxy.audio_sink);
}
void
ebluez4_disconnect_device(Device *dev)
{
_try_to_disconnect(dev->proxy.input);
_try_to_disconnect(dev->proxy.audio_source);
_try_to_disconnect(dev->proxy.audio_sink);
}
void
ebluez4_pair_with_device(const char *addr)
{

View File

@ -61,6 +61,7 @@ void ebluez4_edbus_shutdown();
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_remove_device(EDBus_Object *obj);
int ebluez4_path_cmp(const void *d1, const void *d2);