diff --git a/elm_code/bin/elm_code_test_main.c b/elm_code/bin/elm_code_test_main.c index 755c532..d83c116 100644 --- a/elm_code/bin/elm_code_test_main.c +++ b/elm_code/bin/elm_code_test_main.c @@ -92,8 +92,7 @@ _elm_code_test_diff_setup(Evas_Object *parent) static Evas_Object * elm_code_test_win_setup(void) { - Evas_Object *win; - Evas_Object *vbox; + Evas_Object *win,*vbox; win = elm_win_util_standard_add("main", "Elm_Code Test"); if (!win) return NULL; @@ -104,15 +103,11 @@ elm_code_test_win_setup(void) elm_box_homogeneous_set(vbox, EINA_TRUE); evas_object_show(vbox); - elm_win_focus_highlight_enabled_set(win, EINA_TRUE); - evas_object_smart_callback_add(win, "delete,request", _elm_code_test_win_del, NULL); - elm_box_pack_end(vbox, _elm_code_test_welcome_setup(vbox)); - elm_box_pack_end(vbox, _elm_code_test_diff_setup(vbox)); - elm_win_resize_object_add(win, vbox); + evas_object_smart_callback_add(win, "delete,request", _elm_code_test_win_del, NULL); evas_object_resize(win, 380 * elm_config_scale_get(), 240 * elm_config_scale_get()); evas_object_show(win); diff --git a/elm_code/lib/elm_code_widget2.c b/elm_code/lib/elm_code_widget2.c index fa16532..0856012 100644 --- a/elm_code/lib/elm_code_widget2.c +++ b/elm_code/lib/elm_code_widget2.c @@ -5,6 +5,9 @@ #include #include #include +#define ELM_INTERNAL_API_ARGESFSDFEFC +#include + #include #include "elm_code_widget2.eo.h" @@ -15,7 +18,7 @@ typedef struct Evas_Font_Size font_size; unsigned int cursor_line, cursor_col; - Eina_Bool editable; + Eina_Bool editable, focussed; } Elm_Code_Widget2_Data; Eina_Unicode status_icons2[] = { @@ -133,7 +136,7 @@ _elm_code_widget_fill_line(Elm_Code_Widget2_Data *pd, Evas_Textgrid_Cell *cells, } _elm_code_widget_fill_line_tokens(cells, w, line); - if (pd->editable && pd->cursor_line == line->number) + if (pd->editable && pd->focussed && pd->cursor_line == line->number) { if (pd->cursor_col < (unsigned int) w) cells[pd->cursor_col].bg = ELM_CODE_TOKEN_TYPE_CURSOR; @@ -225,6 +228,10 @@ _elm_code_widget2_clicked_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj E widget = (Elm_Code_Widget2 *)data; pd = eo_data_scope_get(widget, ELM_CODE_WIDGET2_CLASS); + + if (pd->editable && !pd->focussed) + return; + event = (Evas_Event_Mouse_Up *)event_info; y = event->canvas.y; @@ -236,6 +243,19 @@ _elm_code_widget2_clicked_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj E eo_do(widget, eo_event_callback_call(ELM_CODE_WIDGET2_EVENT_LINE_CLICKED, line)); } +EOLIAN static Eina_Bool +_elm_code_widget2_elm_widget_on_focus(Eo *obj, Elm_Code_Widget2_Data *pd) +{ + Eina_Bool int_ret = EINA_FALSE; + eo_do_super(obj, ELM_CODE_WIDGET2_CLASS, int_ret = elm_obj_widget_on_focus()); + if (!int_ret) return EINA_TRUE; + + pd->focussed = elm_widget_focus_get(obj); + + _elm_code_widget_fill(pd); + return EINA_TRUE; +} + EOLIAN static void _elm_code_widget2_elm_interface_scrollable_content_pos_set(Eo *obj EINA_UNUSED, Elm_Code_Widget2_Data *pd EINA_UNUSED, @@ -329,7 +349,7 @@ _elm_code_widget2_evas_object_smart_add(Eo *obj, Elm_Code_Widget2_Data *pd) Evas_Object *grid; eo_do_super(obj, ELM_CODE_WIDGET2_CLASS, evas_obj_smart_add()); -// elm_widget_can_focus_set(obj, EINA_TRUE); + elm_widget_can_focus_set(obj, EINA_TRUE); grid = evas_object_textgrid_add(obj); evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); diff --git a/elm_code/lib/elm_code_widget2.eo b/elm_code/lib/elm_code_widget2.eo index d71f78f..39f6f4d 100644 --- a/elm_code/lib/elm_code_widget2.eo +++ b/elm_code/lib/elm_code_widget2.eo @@ -37,6 +37,7 @@ class Elm_Code_Widget2 (Elm_Box, Elm_Interface_Scrollable, class.constructor; Eo.Base.constructor; Evas.Object_Smart.add; + Elm_Widget.on_focus; Elm_Interface_Scrollable.content_pos_set; } events { diff --git a/elm_code/lib/elm_code_widget2.eo.c b/elm_code/lib/elm_code_widget2.eo.c index bf34af5..0aa2208 100644 --- a/elm_code/lib/elm_code_widget2.eo.c +++ b/elm_code/lib/elm_code_widget2.eo.c @@ -31,12 +31,16 @@ void _elm_code_widget2_eo_base_constructor(Eo *obj, Elm_Code_Widget2_Data *pd); void _elm_code_widget2_evas_object_smart_add(Eo *obj, Elm_Code_Widget2_Data *pd); +Eina_Bool _elm_code_widget2_elm_widget_on_focus(Eo *obj, Elm_Code_Widget2_Data *pd); + + void _elm_code_widget2_elm_interface_scrollable_content_pos_set(Eo *obj, Elm_Code_Widget2_Data *pd, Evas_Coord x, Evas_Coord y, Eina_Bool sig); static Eo_Op_Description _elm_code_widget2_op_desc[] = { EO_OP_FUNC_OVERRIDE(eo_constructor, _elm_code_widget2_eo_base_constructor), EO_OP_FUNC_OVERRIDE(evas_obj_smart_add, _elm_code_widget2_evas_object_smart_add), + EO_OP_FUNC_OVERRIDE(elm_obj_widget_on_focus, _elm_code_widget2_elm_widget_on_focus), EO_OP_FUNC_OVERRIDE(elm_interface_scrollable_content_pos_set, _elm_code_widget2_elm_interface_scrollable_content_pos_set), EO_OP_FUNC(elm_code_widget2_code_set, _elm_code_widget2_code_set, ""), EO_OP_FUNC(elm_code_widget2_code_get, _elm_code_widget2_code_get, ""),