forked from enlightenment/enlightenment
patch by Hannes Janetzek for checking whether the mouse is over the shelf
SVN revision: 29688
This commit is contained in:
parent
5168a0989f
commit
726d152924
|
@ -240,6 +240,7 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||||
e_shelf_orient(cfdata->es, cfdata->escfg->orient);
|
e_shelf_orient(cfdata->es, cfdata->escfg->orient);
|
||||||
e_shelf_position_calc(cfdata->es);
|
e_shelf_position_calc(cfdata->es);
|
||||||
e_shelf_populate(cfdata->es);
|
e_shelf_populate(cfdata->es);
|
||||||
|
e_shelf_toggle(cfdata->es, 1);
|
||||||
e_shelf_show(cfdata->es);
|
e_shelf_show(cfdata->es);
|
||||||
e_config_save_queue();
|
e_config_save_queue();
|
||||||
cfdata->es->config_dialog = cfd;
|
cfdata->es->config_dialog = cfd;
|
||||||
|
|
|
@ -19,7 +19,6 @@ static void _e_shelf_cb_menu_items_append(void *data, E_Menu *mn);
|
||||||
static void _e_shelf_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info);
|
static void _e_shelf_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info);
|
||||||
static void _e_shelf_cb_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info);
|
static void _e_shelf_cb_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info);
|
||||||
static void _e_shelf_cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, void *event_info);
|
static void _e_shelf_cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, void *event_info);
|
||||||
static void _e_shelf_cb_mouse_out(void *data, Evas *evas, Evas_Object *obj, void *event_info);
|
|
||||||
static int _e_shelf_cb_id_sort(void *data1, void *data2);
|
static int _e_shelf_cb_id_sort(void *data1, void *data2);
|
||||||
static int _e_shelf_cb_hide_timer(void *data);
|
static int _e_shelf_cb_hide_timer(void *data);
|
||||||
static int _e_shelf_cb_hide_animator(void *data);
|
static int _e_shelf_cb_hide_animator(void *data);
|
||||||
|
@ -142,7 +141,6 @@ e_shelf_zone_new(E_Zone *zone, const char *name, const char *style, int popup, i
|
||||||
evas_object_event_callback_add(es->o_event, EVAS_CALLBACK_MOUSE_DOWN, _e_shelf_cb_mouse_down, es);
|
evas_object_event_callback_add(es->o_event, EVAS_CALLBACK_MOUSE_DOWN, _e_shelf_cb_mouse_down, es);
|
||||||
evas_object_event_callback_add(es->o_event, EVAS_CALLBACK_MOUSE_UP, _e_shelf_cb_mouse_up, es);
|
evas_object_event_callback_add(es->o_event, EVAS_CALLBACK_MOUSE_UP, _e_shelf_cb_mouse_up, es);
|
||||||
evas_object_event_callback_add(es->o_event, EVAS_CALLBACK_MOUSE_IN, _e_shelf_cb_mouse_in, es);
|
evas_object_event_callback_add(es->o_event, EVAS_CALLBACK_MOUSE_IN, _e_shelf_cb_mouse_in, es);
|
||||||
evas_object_event_callback_add(es->o_event, EVAS_CALLBACK_MOUSE_OUT, _e_shelf_cb_mouse_out, es);
|
|
||||||
|
|
||||||
es->o_base = edje_object_add(es->evas);
|
es->o_base = edje_object_add(es->evas);
|
||||||
es->name = evas_stringshare_add(name);
|
es->name = evas_stringshare_add(name);
|
||||||
|
@ -273,13 +271,14 @@ e_shelf_toggle(E_Shelf *es, int show)
|
||||||
{
|
{
|
||||||
E_OBJECT_CHECK(es);
|
E_OBJECT_CHECK(es);
|
||||||
E_OBJECT_TYPE_CHECK(es, E_SHELF_TYPE);
|
E_OBJECT_TYPE_CHECK(es, E_SHELF_TYPE);
|
||||||
|
|
||||||
|
if(!es->cfg->autohide && !es->hidden) return;
|
||||||
|
|
||||||
if (show)
|
if (show)
|
||||||
{
|
{
|
||||||
if (es->hide_timer)
|
|
||||||
{
|
if(!es->hide_timer) es->hide_timer = ecore_timer_add(0.1, _e_shelf_cb_hide_timer, es);
|
||||||
ecore_timer_del(es->hide_timer);
|
|
||||||
es->hide_timer = NULL;
|
|
||||||
}
|
|
||||||
if (es->hidden && !es->instant_timer)
|
if (es->hidden && !es->instant_timer)
|
||||||
{
|
{
|
||||||
es->hidden = 0;
|
es->hidden = 0;
|
||||||
|
@ -298,8 +297,18 @@ e_shelf_toggle(E_Shelf *es, int show)
|
||||||
}
|
}
|
||||||
else if (!show && es->cfg->autohide && !es->hidden)
|
else if (!show && es->cfg->autohide && !es->hidden)
|
||||||
{
|
{
|
||||||
if(!es->hide_timer)
|
es->hidden = 1;
|
||||||
es->hide_timer = ecore_timer_add(es->cfg->hide_timeout, _e_shelf_cb_hide_timer, es);
|
edje_object_signal_emit(es->o_base, "e,state,hidden", "e");
|
||||||
|
if (es->instant_delay >= 0.0)
|
||||||
|
{
|
||||||
|
if (!es->instant_timer)
|
||||||
|
es->instant_timer = ecore_timer_add(es->instant_delay, _e_shelf_cb_instant_hide_timer, es);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!es->hide_animator)
|
||||||
|
es->hide_animator = ecore_animator_add(_e_shelf_cb_hide_animator, es);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1149,25 +1158,6 @@ _e_shelf_cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, void *event_info)
|
||||||
e_shelf_toggle(es, 1);
|
e_shelf_toggle(es, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
_e_shelf_cb_mouse_out(void *data, Evas *evas, Evas_Object *obj, void *event_info)
|
|
||||||
{
|
|
||||||
Evas_Event_Mouse_Out *ev;
|
|
||||||
E_Shelf *es;
|
|
||||||
|
|
||||||
es = data;
|
|
||||||
ev = event_info;
|
|
||||||
if (es->cfg->autohide)
|
|
||||||
{
|
|
||||||
Evas_Coord x, y, w, h;
|
|
||||||
|
|
||||||
evas_object_geometry_get(es->o_base, &x, &y, &w, &h);
|
|
||||||
if (!E_INSIDE(ev->canvas.x, ev->canvas.y, x, y, w, h))
|
|
||||||
e_shelf_toggle(es, 0);
|
|
||||||
}
|
|
||||||
edje_object_signal_emit(es->o_base, "e,state,unfocused", "e");
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_e_shelf_cb_id_sort(void *data1, void *data2)
|
_e_shelf_cb_id_sort(void *data1, void *data2)
|
||||||
{
|
{
|
||||||
|
@ -1181,25 +1171,36 @@ _e_shelf_cb_id_sort(void *data1, void *data2)
|
||||||
static int
|
static int
|
||||||
_e_shelf_cb_hide_timer(void *data)
|
_e_shelf_cb_hide_timer(void *data)
|
||||||
{
|
{
|
||||||
E_Shelf *es;
|
Evas_Coord x, y, w, h, px, py;
|
||||||
|
|
||||||
es = data;
|
E_Shelf *es = data;
|
||||||
|
|
||||||
es->hidden = 1;
|
evas_object_geometry_get(es->o_base, &x, &y, &w, &h);
|
||||||
edje_object_signal_emit(es->o_base, "e,state,hidden", "e");
|
if (es->popup)
|
||||||
if (es->instant_delay >= 0.0)
|
ecore_x_pointer_xy_get(es->popup->evas_win, &px, &py);
|
||||||
|
else
|
||||||
|
evas_pointer_canvas_xy_get(es->evas, &px, &py);
|
||||||
|
|
||||||
|
if (E_INSIDE(px, py, x, y, w, h))
|
||||||
{
|
{
|
||||||
if (!es->instant_timer)
|
es->last_in = ecore_time_get();
|
||||||
es->instant_timer = ecore_timer_add(es->instant_delay, _e_shelf_cb_instant_hide_timer, es);
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!es->hide_animator)
|
if(es->last_in + es->cfg->hide_timeout < ecore_time_get())
|
||||||
es->hide_animator = ecore_animator_add(_e_shelf_cb_hide_animator, es);
|
{
|
||||||
}
|
e_shelf_toggle(es, 0);
|
||||||
|
if(es->hide_timer)
|
||||||
|
{
|
||||||
|
ecore_timer_del(es->hide_timer);
|
||||||
es->hide_timer = NULL;
|
es->hide_timer = NULL;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
@ -40,6 +40,7 @@ struct _E_Shelf
|
||||||
int hide_origin;
|
int hide_origin;
|
||||||
float instant_delay;
|
float instant_delay;
|
||||||
Ecore_Timer *instant_timer;
|
Ecore_Timer *instant_timer;
|
||||||
|
double last_in; /* last time the pointer was in the shelf */
|
||||||
};
|
};
|
||||||
|
|
||||||
EAPI int e_shelf_init(void);
|
EAPI int e_shelf_init(void);
|
||||||
|
|
Loading…
Reference in New Issue