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;
 }

-- 


Reply via email to