forked from enlightenment/enventor
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:
parent
5c8ff06ba3
commit
02fb416a85
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue