we were missing this - add it in like connman for release.enlightenment-0.23
parent
afc1f44ac7
commit
6cb62a79ae
4 changed files with 237 additions and 9 deletions
@ -0,0 +1,183 @@ |
||||
/* Setup if we need bluez5? */ |
||||
#include "e_wizard.h" |
||||
#include "e_wizard_api.h" |
||||
|
||||
static void |
||||
_recommend_bluez5(E_Wizard_Page *pg EINA_UNUSED) |
||||
{ |
||||
Evas_Object *of, *ob; |
||||
|
||||
api->wizard_title_set(_("Bluetooth Management")); |
||||
|
||||
of = elm_frame_add(e_comp->elm); |
||||
ob = elm_label_add(of); |
||||
elm_object_content_set(of, ob); |
||||
#if defined(USE_MODULE_BLUEZ5) |
||||
elm_object_text_set(of, _("BlueZ Bluetooth service not found")); |
||||
|
||||
|
||||
elm_object_text_set(ob, _("Install/Enable BlueZ 5 / bluetoothd service for network management support")); |
||||
#else |
||||
elm_object_text_set(of, _("Bluez5 module disabled")); |
||||
elm_object_text_set(ob, _("Install it for Bluetooth management support")); |
||||
#endif |
||||
evas_object_show(ob); |
||||
evas_object_show(of); |
||||
|
||||
api->wizard_page_show(of); |
||||
// pg->data = o;
|
||||
|
||||
api->wizard_button_next_enable_set(1); |
||||
} |
||||
|
||||
static Eldbus_Connection *conn; |
||||
static Eldbus_Pending *pending_bluez5; |
||||
static Ecore_Timer *bluez5_timeout = NULL; |
||||
|
||||
static Eina_Bool |
||||
_bluez5_fail(void *data) |
||||
{ |
||||
E_Wizard_Page *pg = data; |
||||
E_Config_Module *em; |
||||
Eina_List *l; |
||||
|
||||
EINA_LIST_FOREACH(e_config->modules, l, em) |
||||
{ |
||||
if (!em->name) continue; |
||||
if (!strcmp(em->name, "bluez5")) |
||||
{ |
||||
e_config->modules = eina_list_remove_list |
||||
(e_config->modules, l); |
||||
if (em->name) eina_stringshare_del(em->name); |
||||
free(em); |
||||
break; |
||||
} |
||||
} |
||||
|
||||
e_config_save_queue(); |
||||
|
||||
bluez5_timeout = NULL; |
||||
_recommend_bluez5(pg); |
||||
return EINA_FALSE; |
||||
} |
||||
|
||||
static Eina_Bool |
||||
_page_next_call(void *data EINA_UNUSED) |
||||
{ |
||||
api->wizard_next(); |
||||
return ECORE_CALLBACK_CANCEL; |
||||
} |
||||
|
||||
static void |
||||
_check_bluez5_owner(void *data, const Eldbus_Message *msg, |
||||
Eldbus_Pending *pending EINA_UNUSED) |
||||
{ |
||||
const char *id; |
||||
pending_bluez5 = NULL; |
||||
|
||||
if (bluez5_timeout) |
||||
{ |
||||
ecore_timer_del(bluez5_timeout); |
||||
bluez5_timeout = NULL; |
||||
} |
||||
|
||||
if (eldbus_message_error_get(msg, NULL, NULL)) |
||||
goto fail; |
||||
|
||||
if (!eldbus_message_arguments_get(msg, "s", &id)) |
||||
goto fail; |
||||
|
||||
if (id[0] != ':') |
||||
goto fail; |
||||
|
||||
api->wizard_button_next_enable_set(1); |
||||
ecore_idler_add(_page_next_call, NULL); |
||||
return; |
||||
|
||||
fail: |
||||
_bluez5_fail(data); |
||||
} |
||||
/*
|
||||
|
||||
E_API int |
||||
wizard_page_init(E_Wizard_Page *pg EINA_UNUSED, Eina_Bool *need_xdg_desktops EINA_UNUSED, Eina_Bool *need_xdg_icons EINA_UNUSED) |
||||
{ |
||||
return 1; |
||||
} |
||||
|
||||
E_API int |
||||
wizard_page_shutdown(E_Wizard_Page *pg EINA_UNUSED) |
||||
{ |
||||
return 1; |
||||
} |
||||
*/ |
||||
E_API int |
||||
wizard_page_show(E_Wizard_Page *pg) |
||||
{ |
||||
Eina_Bool have_bluez5 = EINA_FALSE; |
||||
|
||||
#if defined(USE_MODULE_BLUEZ5) |
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM); |
||||
#endif |
||||
if (conn) |
||||
{ |
||||
if (pending_bluez5) |
||||
eldbus_pending_cancel(pending_bluez5); |
||||
|
||||
pending_bluez5 = eldbus_name_owner_get(conn, "org.bluez", |
||||
_check_bluez5_owner, pg); |
||||
if (bluez5_timeout) |
||||
ecore_timer_del(bluez5_timeout); |
||||
bluez5_timeout = ecore_timer_loop_add(0.5, _bluez5_fail, pg); |
||||
have_bluez5 = EINA_TRUE; |
||||
api->wizard_button_next_enable_set(0); |
||||
} |
||||
if (!have_bluez5) |
||||
{ |
||||
E_Config_Module *em; |
||||
Eina_List *l; |
||||
EINA_LIST_FOREACH(e_config->modules, l, em) |
||||
{ |
||||
if (!em->name) continue; |
||||
if (!strcmp(em->name, "bluez5")) |
||||
{ |
||||
e_config->modules = eina_list_remove_list |
||||
(e_config->modules, l); |
||||
if (em->name) eina_stringshare_del(em->name); |
||||
free(em); |
||||
break; |
||||
} |
||||
} |
||||
e_config_save_queue(); |
||||
_recommend_bluez5(pg); |
||||
} |
||||
api->wizard_title_set(_("Checking to see if BlueZ exists")); |
||||
return 1; /* 1 == show ui, and wait for user, 0 == just continue */ |
||||
} |
||||
|
||||
E_API int |
||||
wizard_page_hide(E_Wizard_Page *pg EINA_UNUSED) |
||||
{ |
||||
if (pending_bluez5) |
||||
{ |
||||
eldbus_pending_cancel(pending_bluez5); |
||||
pending_bluez5 = NULL; |
||||
} |
||||
if (bluez5_timeout) |
||||
{ |
||||
ecore_timer_del(bluez5_timeout); |
||||
bluez5_timeout = NULL; |
||||
} |
||||
if (conn) |
||||
eldbus_connection_unref(conn); |
||||
conn = NULL; |
||||
|
||||
return 1; |
||||
} |
||||
/*
|
||||
E_API int |
||||
wizard_page_apply(E_Wizard_Page *pg EINA_UNUSED) |
||||
{ |
||||
return 1; |
||||
} |
||||
*/ |
Loading…
Reference in new issue