diff --git a/src/modules/bluez5/e_mod_main.c b/src/modules/bluez5/e_mod_main.c index ad576bfba..a581c466c 100644 --- a/src/modules/bluez5/e_mod_main.c +++ b/src/modules/bluez5/e_mod_main.c @@ -9,6 +9,9 @@ static E_Config_DD *conf_device_edd = NULL; static E_Config_DD *conf_edd = NULL; Config *ebluez5_config = NULL; +static Ecore_Event_Handler *_exe_exit_handler = NULL; +static Ecore_Exe *_rfkill_exe = NULL; + E_API E_Module_Api e_modapi = {E_MODULE_API_VERSION, "Bluez5"}; static void @@ -285,6 +288,29 @@ ebluez5_popups_show(void) } } +static Eina_Bool +_exe_cb_exit(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) +{ + Ecore_Exe_Event_Del *ev = event; + + if (!ev->exe) return ECORE_CALLBACK_PASS_ON; + if (ev->exe == _rfkill_exe) + { + if ((ev->exited) && (ev->exit_code != EXIT_SUCCESS)) + { + e_util_dialog_show + (_("Bluetooth rfkill run Error"), + _("Trying to rfkill unblock the bluetooth adapter failed.
" + "Do you have rfkill installed? Check sysactions.conf
" + "to ensure the command is right and your user is
" + "permitted to use the rfkill unblock action. Check the
" + "users and groups there to be sure.")); + } + _rfkill_exe = NULL; + } + return ECORE_CALLBACK_PASS_ON; +} + void ebluez5_rfkill_unblock(const char *name) { @@ -297,7 +323,7 @@ ebluez5_rfkill_unblock(const char *name) eina_strbuf_append_printf (buf, "%s/enlightenment/utils/enlightenment_sys rfkill-unblock %s", e_prefix_lib_get(), name); - ecore_exe_run(eina_strbuf_string_get(buf), NULL); + _rfkill_exe = ecore_exe_run(eina_strbuf_string_get(buf), NULL); eina_strbuf_free(buf); } } @@ -449,6 +475,9 @@ e_modapi_init(E_Module *m) E_CONFIG_LIST(D, T, adapters, conf_adapter_edd); E_CONFIG_LIST(D, T, devices, conf_device_edd); + _exe_exit_handler = + ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _exe_cb_exit, NULL); + ebluez5_config = e_config_domain_load("module.ebluez5", conf_edd); if (!ebluez5_config) ebluez5_config = E_NEW(Config, 1); @@ -467,9 +496,6 @@ e_modapi_shutdown(E_Module *m EINA_UNUSED) Config_Adapter *ad; Config_Device *dev; - E_CONFIG_DD_FREE(conf_edd); - E_CONFIG_DD_FREE(conf_adapter_edd); - EINA_LIST_FREE(ebluez5_config->adapters, ad) { eina_stringshare_del(ad->addr); @@ -488,6 +514,14 @@ e_modapi_shutdown(E_Module *m EINA_UNUSED) e_gadget_type_del("Bluetooth"); e_gadcon_provider_unregister(&_gc_class); + + if (_exe_exit_handler) + { + ecore_event_handler_del(_exe_exit_handler); + _exe_exit_handler = NULL; + } + E_CONFIG_DD_FREE(conf_edd); + E_CONFIG_DD_FREE(conf_adapter_edd); return 1; }