Enlightenment CVS committal Author : englebass Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_shelf.c e_shelf.h Log Message: Show shelf on edge trap and hide on mouse out on window. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_shelf.c,v retrieving revision 1.75 retrieving revision 1.76 diff -u -3 -r1.75 -r1.76 --- e_shelf.c 9 Nov 2007 23:53:38 -0000 1.75 +++ e_shelf.c 22 Nov 2007 21:39:45 -0000 1.76 @@ -17,8 +17,8 @@ static void _e_shelf_menu_append(E_Shelf *es, E_Menu *mn); 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_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_mouse_in(void *data, int type, void *event); +static int _e_shelf_cb_mouse_out(void *data, int type, void *event); static int _e_shelf_cb_id_sort(void *data1, void *data2); static int _e_shelf_cb_hide_animator(void *data); static int _e_shelf_cb_hide_animator_timer(void *data); @@ -107,12 +107,15 @@ e_popup_layer_set(es->popup, layer); es->ee = es->popup->ecore_evas; es->evas = es->popup->evas; + es->win = es->popup->evas_win; } else { e_drop_xdnd_register_set(zone->container->event_win, 1); es->ee = zone->container->bg_ecore_evas; es->evas = zone->container->bg_evas; + /* TODO: We should have a mouse out on the evas object if we are on the desktop */ + es->win = zone->container->event_win; } es->fit_along = 1; es->layer = layer; @@ -124,12 +127,10 @@ evas_object_resize(es->o_event, es->w, es->h); evas_object_event_callback_add(es->o_event, EVAS_CALLBACK_MOUSE_DOWN, _e_shelf_cb_mouse_down, es); - es->o_hide = evas_object_rectangle_add(es->evas); - evas_object_color_set(es->o_hide, 0, 0, 0, 0); - evas_object_resize(es->o_hide, es->w, es->h); - evas_object_event_callback_add(es->o_hide, EVAS_CALLBACK_MOUSE_IN, _e_shelf_cb_mouse_in, es); - evas_object_event_callback_add(es->o_hide, EVAS_CALLBACK_MOUSE_OUT, _e_shelf_cb_mouse_out, es); - evas_object_repeat_events_set(es->o_hide, 1); + es->handlers = evas_list_append(es->handlers, + ecore_event_handler_add(E_EVENT_ZONE_EDGE_IN, _e_shelf_cb_mouse_in, es)); + es->handlers = evas_list_append(es->handlers, + ecore_event_handler_add(ECORE_X_EVENT_MOUSE_OUT, _e_shelf_cb_mouse_out, es)); es->o_base = edje_object_add(es->evas); es->name = evas_stringshare_add(name); @@ -140,18 +141,14 @@ "e/shelf/default/base"); if (es->popup) { - evas_object_layer_set(es->o_hide, 1); - evas_object_show(es->o_hide); evas_object_show(es->o_event); evas_object_show(es->o_base); e_popup_edje_bg_object_set(es->popup, es->o_base); } else { - evas_object_move(es->o_hide, es->zone->x + es->x, es->zone->y + es->y); evas_object_move(es->o_event, es->zone->x + es->x, es->zone->y + es->y); evas_object_move(es->o_base, es->zone->x + es->x, es->zone->y + es->y); - evas_object_layer_set(es->o_hide, layer + 1); evas_object_layer_set(es->o_event, layer); evas_object_layer_set(es->o_base, layer); } @@ -234,7 +231,6 @@ e_popup_show(es->popup); else { - evas_object_show(es->o_hide); evas_object_show(es->o_event); evas_object_show(es->o_base); } @@ -249,7 +245,6 @@ e_popup_hide(es->popup); else { - evas_object_hide(es->o_hide); evas_object_hide(es->o_event); evas_object_hide(es->o_base); } @@ -315,7 +310,6 @@ e_popup_move(es->popup, es->x, es->y); else { - evas_object_move(es->o_hide, es->zone->x + es->x, es->zone->y + es->y); evas_object_move(es->o_event, es->zone->x + es->x, es->zone->y + es->y); evas_object_move(es->o_base, es->zone->x + es->x, es->zone->y + es->y); } @@ -330,7 +324,6 @@ es->h = h; if (es->popup) e_popup_resize(es->popup, es->w, es->h); - evas_object_resize(es->o_hide, es->w, es->h); evas_object_resize(es->o_event, es->w, es->h); evas_object_resize(es->o_base, es->w, es->h); } @@ -348,11 +341,9 @@ e_popup_move_resize(es->popup, es->x, es->y, es->w, es->h); else { - evas_object_move(es->o_hide, es->zone->x + es->x, es->zone->y + es->y); evas_object_move(es->o_event, es->zone->x + es->x, es->zone->y + es->y); evas_object_move(es->o_base, es->zone->x + es->x, es->zone->y + es->y); } - evas_object_resize(es->o_hide, es->w, es->h); evas_object_resize(es->o_event, es->w, es->h); evas_object_resize(es->o_base, es->w, es->h); } @@ -368,7 +359,6 @@ e_popup_layer_set(es->popup, es->layer); else { - evas_object_layer_set(es->o_hide, es->layer + 1); evas_object_layer_set(es->o_event, es->layer); evas_object_layer_set(es->o_base, es->layer); } @@ -600,17 +590,15 @@ e_popup_layer_set(es->popup, es->cfg->layer); es->ee = es->popup->ecore_evas; es->evas = es->popup->evas; - evas_object_show(es->o_hide); + es->win = es->popup->evas_win; evas_object_show(es->o_event); evas_object_show(es->o_base); e_popup_edje_bg_object_set(es->popup, es->o_base); } else { - evas_object_move(es->o_hide, es->zone->x + es->x, es->zone->y + es->y); evas_object_move(es->o_event, es->zone->x + es->x, es->zone->y + es->y); evas_object_move(es->o_base, es->zone->x + es->x, es->zone->y + es->y); - evas_object_layer_set(es->o_hide, es->cfg->layer); evas_object_layer_set(es->o_event, es->cfg->layer); evas_object_layer_set(es->o_base, es->cfg->layer); } @@ -664,6 +652,7 @@ static void _e_shelf_free(E_Shelf *es) { + E_FREE_LIST(es->handlers, ecore_event_handler_del); if (es->hide_animator) { ecore_animator_del(es->hide_animator); @@ -686,7 +675,6 @@ e_object_del(E_OBJECT(es->gadcon)); evas_stringshare_del(es->name); evas_stringshare_del(es->style); - evas_object_del(es->o_hide); evas_object_del(es->o_event); evas_object_del(es->o_base); if (es->popup) @@ -1205,23 +1193,84 @@ } } -static void -_e_shelf_cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, void *event_info) +static int +_e_shelf_cb_mouse_in(void *data, int type, void *event) { - E_Shelf *es; + E_Event_Zone_Edge_In *ev; + E_Shelf *es; + int show = 0; + ev = event; es = data; - edje_object_signal_emit(es->o_base, "e,state,focused", "e"); - if (!es->cfg->autohide_show_action) e_shelf_toggle(es, 1); + switch (es->gadcon->orient) + { + case E_GADCON_ORIENT_LEFT: + if ((ev->edge == E_ZONE_EDGE_LEFT) && (ev->y >= es->y) && (ev->y <= (es->y + es->h))) + show = 1; + break; + case E_GADCON_ORIENT_RIGHT: + if ((ev->edge == E_ZONE_EDGE_RIGHT) && (ev->y >= es->y) && (ev->y <= (es->y + es->h))) + show = 1; + break; + case E_GADCON_ORIENT_TOP: + if ((ev->edge == E_ZONE_EDGE_TOP) && (ev->x >= es->x) && (ev->x <= (es->x + es->w))) + show = 1; + break; + case E_GADCON_ORIENT_BOTTOM: + if ((ev->edge == E_ZONE_EDGE_BOTTOM) && (ev->x >= es->x) && (ev->x <= (es->x + es->w))) + show = 1; + break; + case E_GADCON_ORIENT_CORNER_TL: + case E_GADCON_ORIENT_CORNER_LT: + if ((ev->edge == E_ZONE_EDGE_TOP) && (ev->x >= es->x) && (ev->x <= (es->x + es->w))) + show = 1; + else if ((ev->edge == E_ZONE_EDGE_LEFT) && (ev->y >= es->y) && (ev->y <= (es->y + es->h))) + show = 1; + break; + case E_GADCON_ORIENT_CORNER_TR: + case E_GADCON_ORIENT_CORNER_RT: + if ((ev->edge == E_ZONE_EDGE_TOP) && (ev->x >= es->x) && (ev->x <= (es->x + es->w))) + show = 1; + else if ((ev->edge == E_ZONE_EDGE_RIGHT) && (ev->y >= es->y) && (ev->y <= (es->y + es->h))) + show = 1; + break; + case E_GADCON_ORIENT_CORNER_BL: + case E_GADCON_ORIENT_CORNER_LB: + if ((ev->edge == E_ZONE_EDGE_BOTTOM) && (ev->x >= es->x) && (ev->x <= (es->x + es->w))) + show = 1; + else if ((ev->edge == E_ZONE_EDGE_LEFT) && (ev->y >= es->y) && (ev->y <= (es->y + es->h))) + show = 1; + break; + case E_GADCON_ORIENT_CORNER_BR: + case E_GADCON_ORIENT_CORNER_RB: + if ((ev->edge == E_ZONE_EDGE_BOTTOM) && (ev->x >= es->x) && (ev->x <= (es->x + es->w))) + show = 1; + else if ((ev->edge == E_ZONE_EDGE_RIGHT) && (ev->y >= es->y) && (ev->y <= (es->y + es->h))) + show = 1; + break; + default: + break; + } + + if (show) + { + edje_object_signal_emit(es->o_base, "e,state,focused", "e"); + if (!es->cfg->autohide_show_action) e_shelf_toggle(es, 1); + } + return 1; } -static void -_e_shelf_cb_mouse_out(void *data, Evas *evas, Evas_Object *obj, void *event_info) +static int +_e_shelf_cb_mouse_out(void *data, int type, void *event) { - E_Shelf *es; + Ecore_X_Event_Mouse_Out *ev; + E_Shelf *es; + ev = event; es = data; + if (ev->win != es->win) return 1; e_shelf_toggle(es, 0); + return 1; } static int =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_shelf.h,v retrieving revision 1.25 retrieving revision 1.26 diff -u -3 -r1.25 -r1.26 --- e_shelf.h 18 Oct 2007 09:06:30 -0000 1.25 +++ e_shelf.h 22 Nov 2007 21:39:45 -0000 1.26 @@ -21,9 +21,9 @@ E_Zone *zone; Evas_Object *o_base; Evas_Object *o_event; - Evas_Object *o_hide; Ecore_Evas *ee; Evas *evas; + Ecore_X_Window win; E_Gadcon *gadcon; const char *name; const char *style; @@ -42,6 +42,7 @@ int interrupted; float instant_delay; Ecore_Timer *instant_timer; + Evas_List *handlers; }; EAPI int e_shelf_init(void); ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs