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
This commit is contained in:
Mykyta Biliavskyi 2015-09-17 13:56:37 +00:00
parent ba45d8689e
commit 27c17e9a43
2 changed files with 26 additions and 3 deletions

View File

@ -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));

View File

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