ctxpopup: Fix T1753 (ctxpopup is not closed when esc is pressed)

Summary:
Fix to dismiss ctxpopup when esc is pressed or menu is opened
@fix

Reviewers: Hermet

Differential Revision: https://phab.enlightenment.org/D1631
This commit is contained in:
Jaehyun Cho 2014-11-03 12:19:33 +09:00 committed by ChunEon Park
parent 5c8ff06ba3
commit 02fb416a85
7 changed files with 97 additions and 48 deletions

View File

@ -15,6 +15,7 @@ typedef struct app_s
Eina_Bool ctrl_pressed : 1;
Eina_Bool shift_pressed : 1;
Eina_Bool template_new : 1;
Eina_Bool menu_opened : 1;
} app_data;
int main(int argc, char **argv);
@ -413,6 +414,15 @@ enventor_ctxpopup_selected_cb(void *data EINA_UNUSED, Evas_Object *obj,
enventor_object_save(obj, config_edc_path_get());
}
static void
enventor_ctxpopup_dismissed_cb(void *data EINA_UNUSED, Evas_Object *obj,
void *event_info EINA_UNUSED)
{
app_data *ad = data;
if (ad->menu_opened)
enventor_object_focus_set(obj, EINA_FALSE);
}
static void
enventor_focused_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
@ -438,6 +448,8 @@ enventor_setup(app_data *ad)
enventor_program_run_cb, ad);
evas_object_smart_callback_add(enventor, "ctxpopup,selected",
enventor_ctxpopup_selected_cb, ad);
evas_object_smart_callback_add(enventor, "ctxpopup,dismissed",
enventor_ctxpopup_dismissed_cb, ad);
evas_object_smart_callback_add(enventor, "focused",
enventor_focused_cb, ad);
@ -664,7 +676,13 @@ main_key_down_cb(void *data, int type EINA_UNUSED, void *ev)
file_mgr_warning_close();
return ECORE_CALLBACK_DONE;
}
if (enventor_object_ctxpopup_visible_get(ad->enventor))
{
enventor_object_ctxpopup_dismiss(ad->enventor);
return ECORE_CALLBACK_DONE;
}
ad->menu_opened = EINA_FALSE;
menu_toggle();
return ECORE_CALLBACK_DONE;
}
@ -695,6 +713,9 @@ main_key_down_cb(void *data, int type EINA_UNUSED, void *ev)
//README
if (!strcmp(event->key, "F1"))
{
if (enventor_object_ctxpopup_visible_get(ad->enventor))
enventor_object_ctxpopup_dismiss(ad->enventor);
ad->menu_opened = EINA_TRUE;
menu_about();
return ECORE_CALLBACK_DONE;
}
@ -702,18 +723,27 @@ main_key_down_cb(void *data, int type EINA_UNUSED, void *ev)
//New
if (!strcmp(event->key, "F2"))
{
if (enventor_object_ctxpopup_visible_get(ad->enventor))
enventor_object_ctxpopup_dismiss(ad->enventor);
ad->menu_opened = EINA_TRUE;
menu_edc_new(EINA_FALSE);
return ECORE_CALLBACK_DONE;
}
//Save
if (!strcmp(event->key, "F3"))
{
if (enventor_object_ctxpopup_visible_get(ad->enventor))
enventor_object_ctxpopup_dismiss(ad->enventor);
ad->menu_opened = EINA_TRUE;
menu_edc_save();
return ECORE_CALLBACK_DONE;
}
//Load
if (!strcmp(event->key, "F4"))
{
if (enventor_object_ctxpopup_visible_get(ad->enventor))
enventor_object_ctxpopup_dismiss(ad->enventor);
ad->menu_opened = EINA_TRUE;
menu_edc_load();
return ECORE_CALLBACK_DONE;
}
@ -747,6 +777,9 @@ main_key_down_cb(void *data, int type EINA_UNUSED, void *ev)
//Setting
if (!strcmp(event->key, "F12"))
{
if (enventor_object_ctxpopup_visible_get(ad->enventor))
enventor_object_ctxpopup_dismiss(ad->enventor);
ad->menu_opened = EINA_TRUE;
menu_setting();
return ECORE_CALLBACK_DONE;
}

View File

@ -15,7 +15,6 @@ struct menu_s
Evas_Object *fileselector_layout;
Evas_Object *about_layout;
Evas_Object *ctxpopup;
Evas_Object *enventor;
const char *last_accessed_path;
@ -663,14 +662,6 @@ menu_open(menu_data *md)
md->active_request++;
}
static void
ctxpopup_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
menu_data *md = data;
md->ctxpopup = NULL;
}
void
menu_init(Evas_Object *enventor)
{
@ -763,11 +754,6 @@ menu_toggle(void)
about_close(md);
return;
}
if (md->ctxpopup)
{
elm_ctxpopup_dismiss(md->ctxpopup);
return;
}
//Main Menu
if (md->active_request) menu_close(md);
@ -777,24 +763,6 @@ menu_toggle(void)
}
}
void
menu_ctxpopup_unregister(Evas_Object *ctxpopup)
{
menu_data *md = g_md;
evas_object_event_callback_del(ctxpopup, EVAS_CALLBACK_DEL, ctxpopup_del_cb);
if (ctxpopup == md->ctxpopup) md->ctxpopup = NULL;
}
void
menu_ctxpopup_register(Evas_Object *ctxpopup)
{
menu_data *md = g_md;
md->ctxpopup = ctxpopup;
if (!ctxpopup) return;
evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, ctxpopup_del_cb,
md);
}
int
menu_activated_get(void)
{

View File

@ -1,8 +1,6 @@
void menu_init(Evas_Object *enventor);
void menu_term(void);
void menu_toggle(void);
void menu_ctxpopup_register(Evas_Object *ctxpopup);
void menu_ctxpopup_unregister(Evas_Object *ctxpopup);
void menu_edc_new(Eina_Bool template_new);
void menu_edc_save(void);
void menu_edc_load(void);

View File

@ -27,6 +27,7 @@ struct editor_s
Evas_Object *en_line;
Evas_Object *scroller;
Evas_Object *layout;
Evas_Object *ctxpopup;
Evas_Object *enventor;
syntax_helper *sh;
@ -53,7 +54,7 @@ struct editor_s
Eina_Bool on_select_recover : 1;
Eina_Bool auto_indent : 1;
Eina_Bool part_highlight : 1;
Eina_Bool ctxpopup: 1;
Eina_Bool ctxpopup_enabled : 1;
Eina_Bool on_save : 1;
};
@ -295,6 +296,15 @@ ctxpopup_preview_dismiss_cb(void *data, Evas_Object *obj,
if (skip_focus) return;
elm_object_disabled_set(ed->layout, EINA_FALSE);
elm_object_focus_set(ed->en_edit, EINA_TRUE);
evas_object_smart_callback_call(ed->enventor, SIG_CTXPOPUP_DISMISSED, NULL);
}
static void
ctxpopup_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
edit_data *ed = data;
ed->ctxpopup = NULL;
}
//This function is called when user press up/down key or mouse wheel up/down
@ -349,9 +359,8 @@ preview_img_relay_show(edit_data *ed, Evas_Object *ctxpopup, Eina_Bool next)
cursor_pos);
}
end:
#if 0
menu_ctxpopup_unregister(ctxpopup);
#endif
evas_object_event_callback_del(ctxpopup, EVAS_CALLBACK_DEL, ctxpopup_del_cb);
ed->ctxpopup = NULL;
elm_ctxpopup_dismiss(ctxpopup);
}
@ -410,9 +419,8 @@ image_preview_show(edit_data *ed, char *cur, Evas_Coord x, Evas_Coord y)
evas_object_move(ctxpopup, x, y);
evas_object_show(ctxpopup);
#if 0
menu_ctxpopup_register(ctxpopup);
#endif
evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, ctxpopup_del_cb, ed);
ed->ctxpopup = ctxpopup;
elm_object_disabled_set(ed->layout, EINA_TRUE);
succeed = EINA_TRUE;
}
@ -443,9 +451,8 @@ candidate_list_show(edit_data *ed, char *text, char *cur, char *selected)
evas_pointer_output_xy_get(evas_object_evas_get(ed->en_edit), &x, &y);
evas_object_move(ctxpopup, x, y);
evas_object_show(ctxpopup);
#if 0
menu_ctxpopup_register(ctxpopup);
#endif
evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, ctxpopup_del_cb, ed);
ed->ctxpopup = ctxpopup;
elm_object_disabled_set(ed->layout, EINA_TRUE);
}
@ -468,7 +475,7 @@ edit_cursor_double_clicked_cb(void *data, Evas_Object *obj,
edit_data *ed = data;
if (ed->ctrl_pressed) return;
if (!ed->ctxpopup) return;
if (!ed->ctxpopup_enabled) return;
char *selected = (char *) elm_entry_selection_get(obj);
if (!selected) return;
@ -1036,7 +1043,7 @@ edit_init(Evas_Object *enventor)
ed->linenumber = EINA_TRUE;
ed->auto_indent = EINA_TRUE;
ed->part_highlight = EINA_TRUE;
ed->ctxpopup = EINA_TRUE;
ed->ctxpopup_enabled = EINA_TRUE;
ed->cur_line = -1;
ed->select_pos = -1;
ed->font_scale = 1;
@ -1279,12 +1286,24 @@ edit_auto_indent_get(edit_data *ed)
Eina_Bool
edit_ctxpopup_get(edit_data *ed)
{
return ed->ctxpopup;
return ed->ctxpopup_enabled;
}
void
edit_ctxpopup_set(edit_data *ed, Eina_Bool ctxpopup)
{
ctxpopup = !!ctxpopup;
ed->ctxpopup = ctxpopup;
ed->ctxpopup_enabled = ctxpopup;
}
Eina_Bool
edit_ctxpopup_visible_get(edit_data *ed)
{
return (ed->ctxpopup ? EINA_TRUE : EINA_FALSE);
}
void
edit_ctxpopup_dismiss(edit_data *ed)
{
elm_ctxpopup_dismiss(ed->ctxpopup);
}

View File

@ -380,6 +380,21 @@ class Enventor.Object (Elm_Widget, Efl.File) {
@in size_t n;
}
}
ctxpopup_visible_get {
/*@
@brief
@warning
@see
@ingroup Enventor */
return: Eina_Bool;
}
ctxpopup_dismiss {
/*@
@brief
@warning
@see
@ingroup Enventor */
}
}
implements {
class.constructor;

View File

@ -223,6 +223,8 @@ void edit_part_highlight_set(edit_data *ed, Eina_Bool part_highlight);
Eina_Bool edit_part_highlight_get(edit_data *ed);
void edit_ctxpopup_set(edit_data *ed, Eina_Bool ctxpopup);
Eina_Bool edit_ctxpopup_get(edit_data *ed);
Eina_Bool edit_ctxpopup_visible_get(edit_data *ed);
void edit_ctxpopup_dismiss(edit_data *ed);
Eina_Bool edit_load(edit_data *ed, const char *edc_path);
void edit_selection_clear(edit_data *ed);

View File

@ -343,6 +343,20 @@ _enventor_object_ctxpopup_set(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd,
edit_ctxpopup_set(pd->ed, ctxpopup);
}
EOLIAN static Eina_Bool
_enventor_object_ctxpopup_visible_get(Eo *obj EINA_UNUSED,
Enventor_Object_Data *pd)
{
edit_ctxpopup_visible_get(pd->ed);
}
EOLIAN static void
_enventor_object_ctxpopup_dismiss(Eo *obj EINA_UNUSED,
Enventor_Object_Data *pd)
{
edit_ctxpopup_dismiss(pd->ed);
}
EOLIAN static Eina_Bool
_enventor_object_dummy_swallow_get(Eo *obj EINA_UNUSED,
Enventor_Object_Data *pd)