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;
 

-- 


Reply via email to