|
From: Enlightenment C. <no...@cv...> - 2007-04-23 17:21:41
|
Enlightenment CVS committal
Author : urandom
Project : e17
Module : apps/e
Dir : e17/apps/e/src/bin
Modified Files:
e_int_shelf_config.c e_shelf.c e_shelf.h
Log Message:
patch by Hannes Janetzek for checking whether the mouse is over the shelf
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_shelf_config.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -3 -r1.27 -r1.28
--- e_int_shelf_config.c 11 Apr 2007 15:37:04 -0000 1.27
+++ e_int_shelf_config.c 23 Apr 2007 17:21:38 -0000 1.28
@@ -240,6 +240,7 @@
e_shelf_orient(cfdata->es, cfdata->escfg->orient);
e_shelf_position_calc(cfdata->es);
e_shelf_populate(cfdata->es);
+ e_shelf_toggle(cfdata->es, 1);
e_shelf_show(cfdata->es);
e_config_save_queue();
cfdata->es->config_dialog = cfd;
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_shelf.c,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -3 -r1.56 -r1.57
--- e_shelf.c 11 Apr 2007 15:37:04 -0000 1.56
+++ e_shelf.c 23 Apr 2007 17:21:38 -0000 1.57
@@ -19,7 +19,6 @@
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_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_hide_timer(void *data);
static int _e_shelf_cb_hide_animator(void *data);
@@ -142,8 +141,7 @@
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_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->name = evas_stringshare_add(name);
snprintf(buf, sizeof(buf), "e/shelf/%s/base", es->style);
@@ -271,36 +269,47 @@
EAPI void
e_shelf_toggle(E_Shelf *es, int show)
{
- E_OBJECT_CHECK(es);
- E_OBJECT_TYPE_CHECK(es, E_SHELF_TYPE);
- if (show)
- {
- if (es->hide_timer)
- {
- ecore_timer_del(es->hide_timer);
- es->hide_timer = NULL;
- }
- if (es->hidden && !es->instant_timer)
- {
- es->hidden = 0;
- edje_object_signal_emit(es->o_base, "e,state,visible", "e");
- if (es->instant_delay >= 0.0)
- {
- if (!es->instant_timer)
- _e_shelf_cb_instant_hide_timer(es);
- }
- else
- {
- if(!es->hide_animator)
- es->hide_animator = ecore_animator_add(_e_shelf_cb_hide_animator, es);
- }
- }
- }
- else if (!show && es->cfg->autohide && !es->hidden)
- {
- if(!es->hide_timer)
- es->hide_timer = ecore_timer_add(es->cfg->hide_timeout, _e_shelf_cb_hide_timer, es);
- }
+ E_OBJECT_CHECK(es);
+ E_OBJECT_TYPE_CHECK(es, E_SHELF_TYPE);
+
+ if(!es->cfg->autohide && !es->hidden) return;
+
+ if (show)
+ {
+
+ if(!es->hide_timer) es->hide_timer = ecore_timer_add(0.1, _e_shelf_cb_hide_timer, es);
+
+ if (es->hidden && !es->instant_timer)
+ {
+ es->hidden = 0;
+ edje_object_signal_emit(es->o_base, "e,state,visible", "e");
+ if (es->instant_delay >= 0.0)
+ {
+ if (!es->instant_timer)
+ _e_shelf_cb_instant_hide_timer(es);
+ }
+ else
+ {
+ if(!es->hide_animator)
+ es->hide_animator = ecore_animator_add(_e_shelf_cb_hide_animator, es);
+ }
+ }
+ }
+ else if (!show && es->cfg->autohide && !es->hidden)
+ {
+ es->hidden = 1;
+ 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);
+ }
+ }
}
EAPI void
@@ -1149,25 +1158,6 @@
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
_e_shelf_cb_id_sort(void *data1, void *data2)
{
@@ -1178,28 +1168,39 @@
return (es1->id) > (es2->id);
}
-static int
+static int
_e_shelf_cb_hide_timer(void *data)
{
- E_Shelf *es;
+ Evas_Coord x, y, w, h, px, py;
- es = data;
-
- es->hidden = 1;
- 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);
- }
- es->hide_timer = NULL;
+ E_Shelf *es = data;
- return 0;
+ evas_object_geometry_get(es->o_base, &x, &y, &w, &h);
+ if (es->popup)
+ 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))
+ {
+ es->last_in = ecore_time_get();
+ return 1;
+ }
+ else
+ {
+ if(es->last_in + es->cfg->hide_timeout < ecore_time_get())
+ {
+ e_shelf_toggle(es, 0);
+ if(es->hide_timer)
+ {
+ ecore_timer_del(es->hide_timer);
+ es->hide_timer = NULL;
+ }
+ return 0;
+ }
+ else
+ return 1;
+ }
}
static int
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_shelf.h,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -3 -r1.20 -r1.21
--- e_shelf.h 8 Apr 2007 09:32:48 -0000 1.20
+++ e_shelf.h 23 Apr 2007 17:21:38 -0000 1.21
@@ -40,6 +40,7 @@
int hide_origin;
float instant_delay;
Ecore_Timer *instant_timer;
+ double last_in; /* last time the pointer was in the shelf */
};
EAPI int e_shelf_init(void);
|