ajwillia-ms pushed a commit to branch master. http://git.enlightenment.org/tools/edi.git/commit/?id=73d86702471d7c304dde040697c95e24bafced5c
commit 73d86702471d7c304dde040697c95e24bafced5c Author: YeongJong Lee <clean...@naver.com> Date: Sun Jan 1 14:24:21 2017 +0000 autosuggest: Fix position when the suggest list is hidden. Summary: Remove some unnecessary function. Reviewers: ajwillia.ms Reviewed By: ajwillia.ms Differential Revision: https://phab.enlightenment.org/D4539 --- src/bin/editor/edi_editor.c | 34 ++++++++++++++++++-------- src/bin/editor/edi_editor_suggest_provider_c.c | 9 +++++-- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/bin/editor/edi_editor.c b/src/bin/editor/edi_editor.c index 1d79d34..5422c2e 100644 --- a/src/bin/editor/edi_editor.c +++ b/src/bin/editor/edi_editor.c @@ -122,7 +122,7 @@ _suggest_list_content_get(void *data, Evas_Object *obj, const char *part) elm_code_widget_font_get(editor->entry, &font, &font_size); summary = edi_editor_suggest_provider_get(editor)->summary_get(editor, suggest_it); - format = "<align=left><font=\"%s\"><font_size=%d> %s</font_size></font></align>"; + format = "<align=left><font='%s'><font_size=%d> %s</font_size></font></align>"; displen = strlen(summary) + strlen(format) + strlen(font); display = malloc(sizeof(char) * displen); snprintf(display, displen, format, font, font_size, summary); @@ -346,7 +346,8 @@ static void _suggest_popup_show(Edi_Editor *editor) { unsigned int col, row; - Evas_Coord cx, cy, cw, ch; + Evas_Coord cx, cy, cw, ch, sy, sh, ey, eh, bg_x, bg_y; + char *word; if (!editor->suggest_genlist) return; @@ -358,15 +359,32 @@ _suggest_popup_show(Edi_Editor *editor) elm_code_widget_geometry_for_position_get(editor->entry, row, col, &cx, &cy, &cw, &ch); - evas_object_move(editor->suggest_bg, cx, cy); + word = _edi_editor_current_word_get(editor, row, col); + + bg_x = cx - (strlen(word) + 1) * cw; + bg_y = cy + ch; + + evas_object_move(editor->suggest_bg, bg_x, bg_y); evas_object_show(editor->suggest_bg); + evas_object_geometry_get(editor->suggest_bg, NULL, &sy, NULL, &sh); + evas_object_geometry_get(editor->entry, NULL, &ey, NULL, &eh); + + if (sy + sh > ey + eh) + { + bg_y = cy - sh; + + evas_object_move(editor->suggest_bg, bg_x, bg_y); + } + if (!evas_object_key_grab(editor->suggest_genlist, "Return", 0, 0, EINA_TRUE)) ERR("Failed to grab key - %s", "Return"); if (!evas_object_key_grab(editor->suggest_genlist, "Up", 0, 0, EINA_TRUE)) ERR("Failed to grab key - %s", "Up"); if (!evas_object_key_grab(editor->suggest_genlist, "Down", 0, 0, EINA_TRUE)) ERR("Failed to grab key - %s", "Down"); + + free(word); } static void @@ -449,18 +467,16 @@ static void _suggest_popup_setup(Edi_Editor *editor) { //Popup bg - Evas_Object *bg = elm_bubble_add(editor->entry); + Evas_Object *bg = elm_bg_add(editor->entry); editor->suggest_bg = bg; - evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_bg_color_set(bg, 30, 30, 30); evas_object_event_callback_add(bg, EVAS_CALLBACK_HIDE, _suggest_bg_cb_hide, editor); evas_object_resize(bg, 400 * elm_config_scale_get(), 300 * elm_config_scale_get()); //Box Evas_Object *box = elm_box_add(bg); - evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_padding_set(box, 5, 5); elm_object_content_set(bg, box); evas_object_show(box); @@ -482,7 +498,6 @@ _suggest_popup_setup(Edi_Editor *editor) Evas_Object *label = elm_label_add(box); elm_label_line_wrap_set(label, ELM_WRAP_MIXED); evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_color_set(label, 255, 255, 255, 255); evas_object_show(label); elm_box_pack_end(box, label); @@ -535,7 +550,6 @@ _smart_cb_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, else if (edi_editor_suggest_provider_has(editor) && !strcmp(ev->key, "space")) { _suggest_list_set(editor); - _suggest_popup_show(editor); } } diff --git a/src/bin/editor/edi_editor_suggest_provider_c.c b/src/bin/editor/edi_editor_suggest_provider_c.c index acc4260..360a13b 100644 --- a/src/bin/editor/edi_editor_suggest_provider_c.c +++ b/src/bin/editor/edi_editor_suggest_provider_c.c @@ -207,18 +207,23 @@ _edi_editor_suggest_c_detail_get(Edi_Editor *editor, Edi_Editor_Suggest_Item *it char *format, *display; const char *font, *term_str, *ret_str, *param_str; int font_size, displen; + unsigned int row, col; + Evas_Coord w; elm_code_widget_font_get(editor->entry, &font, &font_size); + elm_code_widget_cursor_position_get(editor->entry, &row, &col); + elm_code_widget_geometry_for_position_get(editor->entry, row, col, + NULL, NULL, &w, NULL); term_str = _edi_editor_suggest_c_summary_get(editor, item); ret_str = _suggest_item_return_get(item); param_str = _suggest_item_parameter_get(item); - format = "<align=left><font=\"%s\"><font_size=%d>%s<br><b>%s</b><br> %s</font_size></font></align>"; + format = "<left_margin=%d><align=left><font='%s'><font_size=%d>%s<br><b>%s</b><br>%s</font_size></font></align></left_margin>"; displen = strlen(ret_str) + strlen(param_str) + strlen(term_str) + strlen(format) + strlen(font); display = malloc(sizeof(char) * displen); - snprintf(display, displen, format, font, font_size, ret_str, term_str, param_str); + snprintf(display, displen, format, w, font, font_size, ret_str, term_str, param_str); return display; } --