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); ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs