nikawhite pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=27c17e9a43fcfad84f07f81217f5a51c05cf4c8b
commit 27c17e9a43fcfad84f07f81217f5a51c05cf4c8b Author: Mykyta Biliavskyi <[email protected]> Date: Thu Sep 17 13:56:37 2015 +0000 Goto: close window from the toolbar. Summary: moved the focus management for "goto" window from base_gui.c inside goto.c. Added timer, that make delay between unfocus of the "goto" window and freeing the "goto" internal structures. It is necessary because when the "goto" window is active and pressed button on toolbar firstly emitted the signal "unfocused" for window and then happens button click event. @fix T1604 --- src/bin/base_gui.c | 6 +++--- src/bin/goto.c | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/bin/base_gui.c b/src/bin/base_gui.c index cf31ad4..8bb35d6 100644 --- a/src/bin/base_gui.c +++ b/src/bin/base_gui.c @@ -20,14 +20,14 @@ win_delete_request_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, { menu_exit(); } - +/* static void win_focused_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { goto_close(); } - +*/ static void win_resize_cb(void *data EINA_UNUSED, Evas *o EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) @@ -231,7 +231,7 @@ base_gui_init(void) evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE, win_resize_cb, NULL); evas_object_smart_callback_add(win, "delete,request", win_delete_request_cb, NULL); - evas_object_smart_callback_add(win, "focused", win_focused_cb, NULL); +/* evas_object_smart_callback_add(win, "focused", win_focused_cb, NULL);*/ //Window icon Evas_Object *icon = evas_object_image_add(evas_object_evas_get(win)); diff --git a/src/bin/goto.c b/src/bin/goto.c index 246c755..80bcc04 100644 --- a/src/bin/goto.c +++ b/src/bin/goto.c @@ -4,6 +4,8 @@ #include "common.h" +#define UNFOCUS_DELAY 0.2 + typedef struct goto_s { Evas_Object *win; @@ -11,6 +13,7 @@ typedef struct goto_s Evas_Object *entry; Evas_Object *btn; Evas_Object *enventor; + Ecore_Timer *timer; } goto_data; static goto_data *g_gd = NULL; @@ -26,6 +29,23 @@ win_delete_request_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, goto_close(); } +static Eina_Bool +timer_cb(void *data EINA_UNUSED) +{ + goto_close(); + return ECORE_CALLBACK_CANCEL; +} + +static void +win_unfocused_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + goto_data *gd = (goto_data*) data; + if (gd->timer) return; + evas_object_hide(gd->win); + gd->timer = ecore_timer_add(UNFOCUS_DELAY, timer_cb, gd); +} + static void win_moved_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) @@ -123,6 +143,7 @@ goto_open(Evas_Object *enventor) win_w = (Evas_Coord) ((double) win_w * elm_config_scale_get()); win_h = (Evas_Coord) ((double) win_h * elm_config_scale_get()); evas_object_resize(win, win_w, win_h); + evas_object_smart_callback_add(win, "unfocused", win_unfocused_cb, gd); evas_object_smart_callback_add(win, "delete,request", win_delete_request_cb, gd); evas_object_smart_callback_add(win, "moved", win_moved_cb, gd); @@ -206,6 +227,8 @@ goto_close(void) evas_object_geometry_get(gd->win, NULL, NULL, &win_w, &win_h); elm_win_screen_position_get(gd->win, &win_x, &win_y); evas_object_del(gd->win); + if (gd->timer) + ecore_timer_del(gd->timer); free(gd); g_gd = NULL; --
