enlightenment_my/src/modules/wizard/page_115.c

184 lines
4.2 KiB
C

/* 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;
}
*/