diff --git a/src/modules/connman/TODO b/src/modules/connman/TODO index 9a8c83e05..bbf620062 100644 --- a/src/modules/connman/TODO +++ b/src/modules/connman/TODO @@ -9,8 +9,6 @@ - Streamline the Cancel() and Release() callbacks because they are very similar - - Destroy popup when we are going to ask for user input - - When we request user input, give focus to the first 'Mandatory' entry field diff --git a/src/modules/connman/agent.c b/src/modules/connman/agent.c index 93bd7841b..334e475ed 100644 --- a/src/modules/connman/agent.c +++ b/src/modules/connman/agent.c @@ -9,7 +9,7 @@ #include "e.h" #include "agent.h" #include "E_Connman.h" - +#include "e_mod_main.h" #define AGENT_IFACE "net.connman.Agent" typedef struct _E_Connman_Agent_Input E_Connman_Agent_Input; @@ -388,6 +388,9 @@ _parse_field(struct Connman_Field *field, DBusMessageIter *value) static DBusMessage * _agent_request_input(E_DBus_Object *obj, DBusMessage *msg) { + E_Connman_Module_Context *ctxt = connman_mod->data; + const Eina_List *l; + E_Connman_Instance *inst; DBusMessageIter iter, dict; E_Connman_Agent *agent; DBusMessage *reply; @@ -400,6 +403,9 @@ _agent_request_input(E_DBus_Object *obj, DBusMessage *msg) dbus_message_unref(agent->msg); agent->msg = dbus_message_ref(msg); + EINA_LIST_FOREACH(ctxt->instances, l, inst) + econnman_popup_del(inst); + if (agent->dialog) _dialog_del(agent->dialog); agent->dialog = _dialog_new(agent); diff --git a/src/modules/connman/e_mod_main.c b/src/modules/connman/e_mod_main.c index 3ecd230c2..83d0ae426 100644 --- a/src/modules/connman/e_mod_main.c +++ b/src/modules/connman/e_mod_main.c @@ -3,7 +3,7 @@ #include "E_Connman.h" -static E_Module *connman_mod; +E_Module *connman_mod = NULL; static char tmpbuf[4096]; /* general purpose buffer, just use immediately */ const char _e_connman_name[] = "connman"; @@ -165,8 +165,6 @@ void econnman_mod_services_changed(struct Connman_Manager *cm) } } -static void _econnman_popup_del(E_Connman_Instance *inst); - static Eina_Bool _econnman_popup_input_window_mouse_up_cb(void *data, int type, void *event) { @@ -176,7 +174,7 @@ static Eina_Bool _econnman_popup_input_window_mouse_up_cb(void *data, if (ev->window != inst->ui.popup.input_win) return ECORE_CALLBACK_PASS_ON; - _econnman_popup_del(inst); + econnman_popup_del(inst); return ECORE_CALLBACK_PASS_ON; } @@ -257,8 +255,10 @@ static void _econnman_popup_new(E_Connman_Instance *inst) _econnman_popup_input_window_create(inst); } -static void _econnman_popup_del(E_Connman_Instance *inst) +void +econnman_popup_del(E_Connman_Instance *inst) { + if (!inst->popup) return; _econnman_popup_input_window_destroy(inst); e_object_del(E_OBJECT(inst->popup)); inst->popup = NULL; @@ -397,7 +397,7 @@ _econnman_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event) if (!inst->popup) _econnman_popup_new(inst); else - _econnman_popup_del(inst); + econnman_popup_del(inst); } else if (ev->button == 3) _econnman_menu_new(inst, ev); @@ -467,7 +467,7 @@ _gc_shutdown(E_Gadcon_Client *gcc) return; if (inst->popup) - _econnman_popup_del(inst); + econnman_popup_del(inst); evas_object_del(inst->ui.gadget); diff --git a/src/modules/connman/e_mod_main.h b/src/modules/connman/e_mod_main.h index ebacac1bd..8a2e143f9 100644 --- a/src/modules/connman/e_mod_main.h +++ b/src/modules/connman/e_mod_main.h @@ -9,6 +9,7 @@ #define MOD_CONF_VERSION 3 +extern E_Module *connman_mod; extern int _e_connman_log_dom; typedef struct E_Connman_Instance E_Connman_Instance; @@ -55,6 +56,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 econnman_popup_del(E_Connman_Instance *inst); const char *e_connman_theme_path(void); E_Config_Dialog *e_connman_config_dialog_new(E_Container *con, E_Connman_Module_Context *ctxt);