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 ctrl_pressed : 1;
|
||||||
Eina_Bool shift_pressed : 1;
|
Eina_Bool shift_pressed : 1;
|
||||||
Eina_Bool template_new : 1;
|
Eina_Bool template_new : 1;
|
||||||
|
Eina_Bool menu_opened : 1;
|
||||||
} app_data;
|
} app_data;
|
||||||
|
|
||||||
int main(int argc, char **argv);
|
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());
|
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
|
static void
|
||||||
enventor_focused_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
|
enventor_focused_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
|
||||||
void *event_info EINA_UNUSED)
|
void *event_info EINA_UNUSED)
|
||||||
|
@ -438,6 +448,8 @@ enventor_setup(app_data *ad)
|
||||||
enventor_program_run_cb, ad);
|
enventor_program_run_cb, ad);
|
||||||
evas_object_smart_callback_add(enventor, "ctxpopup,selected",
|
evas_object_smart_callback_add(enventor, "ctxpopup,selected",
|
||||||
enventor_ctxpopup_selected_cb, ad);
|
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",
|
evas_object_smart_callback_add(enventor, "focused",
|
||||||
enventor_focused_cb, ad);
|
enventor_focused_cb, ad);
|
||||||
|
|
||||||
|
@ -664,7 +676,13 @@ main_key_down_cb(void *data, int type EINA_UNUSED, void *ev)
|
||||||
file_mgr_warning_close();
|
file_mgr_warning_close();
|
||||||
return ECORE_CALLBACK_DONE;
|
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();
|
menu_toggle();
|
||||||
return ECORE_CALLBACK_DONE;
|
return ECORE_CALLBACK_DONE;
|
||||||
}
|
}
|
||||||
|
@ -695,6 +713,9 @@ main_key_down_cb(void *data, int type EINA_UNUSED, void *ev)
|
||||||
//README
|
//README
|
||||||
if (!strcmp(event->key, "F1"))
|
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();
|
menu_about();
|
||||||
return ECORE_CALLBACK_DONE;
|
return ECORE_CALLBACK_DONE;
|
||||||
}
|
}
|
||||||
|
@ -702,18 +723,27 @@ main_key_down_cb(void *data, int type EINA_UNUSED, void *ev)
|
||||||
//New
|
//New
|
||||||
if (!strcmp(event->key, "F2"))
|
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);
|
menu_edc_new(EINA_FALSE);
|
||||||
return ECORE_CALLBACK_DONE;
|
return ECORE_CALLBACK_DONE;
|
||||||
}
|
}
|
||||||
//Save
|
//Save
|
||||||
if (!strcmp(event->key, "F3"))
|
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();
|
menu_edc_save();
|
||||||
return ECORE_CALLBACK_DONE;
|
return ECORE_CALLBACK_DONE;
|
||||||
}
|
}
|
||||||
//Load
|
//Load
|
||||||
if (!strcmp(event->key, "F4"))
|
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();
|
menu_edc_load();
|
||||||
return ECORE_CALLBACK_DONE;
|
return ECORE_CALLBACK_DONE;
|
||||||
}
|
}
|
||||||
|
@ -747,6 +777,9 @@ main_key_down_cb(void *data, int type EINA_UNUSED, void *ev)
|
||||||
//Setting
|
//Setting
|
||||||
if (!strcmp(event->key, "F12"))
|
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();
|
menu_setting();
|
||||||
return ECORE_CALLBACK_DONE;
|
return ECORE_CALLBACK_DONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@ struct menu_s
|
||||||
Evas_Object *fileselector_layout;
|
Evas_Object *fileselector_layout;
|
||||||
Evas_Object *about_layout;
|
Evas_Object *about_layout;
|
||||||
|
|
||||||
Evas_Object *ctxpopup;
|
|
||||||
Evas_Object *enventor;
|
Evas_Object *enventor;
|
||||||
|
|
||||||
const char *last_accessed_path;
|
const char *last_accessed_path;
|
||||||
|
@ -663,14 +662,6 @@ menu_open(menu_data *md)
|
||||||
md->active_request++;
|
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
|
void
|
||||||
menu_init(Evas_Object *enventor)
|
menu_init(Evas_Object *enventor)
|
||||||
{
|
{
|
||||||
|
@ -763,11 +754,6 @@ menu_toggle(void)
|
||||||
about_close(md);
|
about_close(md);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (md->ctxpopup)
|
|
||||||
{
|
|
||||||
elm_ctxpopup_dismiss(md->ctxpopup);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Main Menu
|
//Main Menu
|
||||||
if (md->active_request) menu_close(md);
|
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
|
int
|
||||||
menu_activated_get(void)
|
menu_activated_get(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
void menu_init(Evas_Object *enventor);
|
void menu_init(Evas_Object *enventor);
|
||||||
void menu_term(void);
|
void menu_term(void);
|
||||||
void menu_toggle(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_new(Eina_Bool template_new);
|
||||||
void menu_edc_save(void);
|
void menu_edc_save(void);
|
||||||
void menu_edc_load(void);
|
void menu_edc_load(void);
|
||||||
|
|
|
@ -27,6 +27,7 @@ struct editor_s
|
||||||
Evas_Object *en_line;
|
Evas_Object *en_line;
|
||||||
Evas_Object *scroller;
|
Evas_Object *scroller;
|
||||||
Evas_Object *layout;
|
Evas_Object *layout;
|
||||||
|
Evas_Object *ctxpopup;
|
||||||
Evas_Object *enventor;
|
Evas_Object *enventor;
|
||||||
|
|
||||||
syntax_helper *sh;
|
syntax_helper *sh;
|
||||||
|
@ -53,7 +54,7 @@ struct editor_s
|
||||||
Eina_Bool on_select_recover : 1;
|
Eina_Bool on_select_recover : 1;
|
||||||
Eina_Bool auto_indent : 1;
|
Eina_Bool auto_indent : 1;
|
||||||
Eina_Bool part_highlight : 1;
|
Eina_Bool part_highlight : 1;
|
||||||
Eina_Bool ctxpopup: 1;
|
Eina_Bool ctxpopup_enabled : 1;
|
||||||
Eina_Bool on_save : 1;
|
Eina_Bool on_save : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -295,6 +296,15 @@ ctxpopup_preview_dismiss_cb(void *data, Evas_Object *obj,
|
||||||
if (skip_focus) return;
|
if (skip_focus) return;
|
||||||
elm_object_disabled_set(ed->layout, EINA_FALSE);
|
elm_object_disabled_set(ed->layout, EINA_FALSE);
|
||||||
elm_object_focus_set(ed->en_edit, EINA_TRUE);
|
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
|
//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);
|
cursor_pos);
|
||||||
}
|
}
|
||||||
end:
|
end:
|
||||||
#if 0
|
evas_object_event_callback_del(ctxpopup, EVAS_CALLBACK_DEL, ctxpopup_del_cb);
|
||||||
menu_ctxpopup_unregister(ctxpopup);
|
ed->ctxpopup = NULL;
|
||||||
#endif
|
|
||||||
elm_ctxpopup_dismiss(ctxpopup);
|
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_move(ctxpopup, x, y);
|
||||||
evas_object_show(ctxpopup);
|
evas_object_show(ctxpopup);
|
||||||
#if 0
|
evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, ctxpopup_del_cb, ed);
|
||||||
menu_ctxpopup_register(ctxpopup);
|
ed->ctxpopup = ctxpopup;
|
||||||
#endif
|
|
||||||
elm_object_disabled_set(ed->layout, EINA_TRUE);
|
elm_object_disabled_set(ed->layout, EINA_TRUE);
|
||||||
succeed = 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_pointer_output_xy_get(evas_object_evas_get(ed->en_edit), &x, &y);
|
||||||
evas_object_move(ctxpopup, x, y);
|
evas_object_move(ctxpopup, x, y);
|
||||||
evas_object_show(ctxpopup);
|
evas_object_show(ctxpopup);
|
||||||
#if 0
|
evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, ctxpopup_del_cb, ed);
|
||||||
menu_ctxpopup_register(ctxpopup);
|
ed->ctxpopup = ctxpopup;
|
||||||
#endif
|
|
||||||
elm_object_disabled_set(ed->layout, EINA_TRUE);
|
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;
|
edit_data *ed = data;
|
||||||
|
|
||||||
if (ed->ctrl_pressed) return;
|
if (ed->ctrl_pressed) return;
|
||||||
if (!ed->ctxpopup) return;
|
if (!ed->ctxpopup_enabled) return;
|
||||||
|
|
||||||
char *selected = (char *) elm_entry_selection_get(obj);
|
char *selected = (char *) elm_entry_selection_get(obj);
|
||||||
if (!selected) return;
|
if (!selected) return;
|
||||||
|
@ -1036,7 +1043,7 @@ edit_init(Evas_Object *enventor)
|
||||||
ed->linenumber = EINA_TRUE;
|
ed->linenumber = EINA_TRUE;
|
||||||
ed->auto_indent = EINA_TRUE;
|
ed->auto_indent = EINA_TRUE;
|
||||||
ed->part_highlight = EINA_TRUE;
|
ed->part_highlight = EINA_TRUE;
|
||||||
ed->ctxpopup = EINA_TRUE;
|
ed->ctxpopup_enabled = EINA_TRUE;
|
||||||
ed->cur_line = -1;
|
ed->cur_line = -1;
|
||||||
ed->select_pos = -1;
|
ed->select_pos = -1;
|
||||||
ed->font_scale = 1;
|
ed->font_scale = 1;
|
||||||
|
@ -1279,12 +1286,24 @@ edit_auto_indent_get(edit_data *ed)
|
||||||
Eina_Bool
|
Eina_Bool
|
||||||
edit_ctxpopup_get(edit_data *ed)
|
edit_ctxpopup_get(edit_data *ed)
|
||||||
{
|
{
|
||||||
return ed->ctxpopup;
|
return ed->ctxpopup_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
edit_ctxpopup_set(edit_data *ed, Eina_Bool ctxpopup)
|
edit_ctxpopup_set(edit_data *ed, Eina_Bool ctxpopup)
|
||||||
{
|
{
|
||||||
ctxpopup = !!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;
|
@in size_t n;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ctxpopup_visible_get {
|
||||||
|
/*@
|
||||||
|
@brief
|
||||||
|
@warning
|
||||||
|
@see
|
||||||
|
@ingroup Enventor */
|
||||||
|
return: Eina_Bool;
|
||||||
|
}
|
||||||
|
ctxpopup_dismiss {
|
||||||
|
/*@
|
||||||
|
@brief
|
||||||
|
@warning
|
||||||
|
@see
|
||||||
|
@ingroup Enventor */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
implements {
|
implements {
|
||||||
class.constructor;
|
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);
|
Eina_Bool edit_part_highlight_get(edit_data *ed);
|
||||||
void edit_ctxpopup_set(edit_data *ed, Eina_Bool ctxpopup);
|
void edit_ctxpopup_set(edit_data *ed, Eina_Bool ctxpopup);
|
||||||
Eina_Bool edit_ctxpopup_get(edit_data *ed);
|
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);
|
Eina_Bool edit_load(edit_data *ed, const char *edc_path);
|
||||||
void edit_selection_clear(edit_data *ed);
|
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);
|
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
|
EOLIAN static Eina_Bool
|
||||||
_enventor_object_dummy_swallow_get(Eo *obj EINA_UNUSED,
|
_enventor_object_dummy_swallow_get(Eo *obj EINA_UNUSED,
|
||||||
Enventor_Object_Data *pd)
|
Enventor_Object_Data *pd)
|
||||||
|
|
Loading…
Reference in New Issue