Enlightenment CVS committal Author : devilhorns Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_zone.c Log Message: Delete edge input windows when we free the zone. Handle mouse clicks inside the edge input windows so that menus & such can still be shown if a user clicks the mouse down while on top of one of the edge windows. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_zone.c,v retrieving revision 1.129 retrieving revision 1.130 diff -u -3 -r1.129 -r1.130 --- e_zone.c 14 Dec 2007 05:57:15 -0000 1.129 +++ e_zone.c 27 Dec 2007 03:42:04 -0000 1.130 @@ -14,6 +14,7 @@ static void _e_zone_event_zone_desk_count_set_free(void *data, void *ev); static int _e_zone_cb_mouse_in(void *data, int type, void *event); static int _e_zone_cb_mouse_out(void *data, int type, void *event); +static int _e_zone_cb_mouse_down(void *data, int type, void *event); static int _e_zone_cb_timer(void *data); static int _e_zone_cb_desk_show(void *data, int type, void *event); static void _e_zone_update_flip(E_Zone *zone); @@ -95,9 +96,11 @@ ecore_event_handler_add(ECORE_X_EVENT_MOUSE_OUT, _e_zone_cb_mouse_out, zone)); zone->handlers = evas_list_append(zone->handlers, + ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_DOWN, + _e_zone_cb_mouse_down, zone)); + zone->handlers = evas_list_append(zone->handlers, ecore_event_handler_add(E_EVENT_DESK_SHOW, _e_zone_cb_desk_show, zone)); - snprintf(name, sizeof(name), "Zone %d", zone->num); zone->name = evas_stringshare_add(name); @@ -657,10 +660,22 @@ Evas_List *l; int x, y; + /* Delete the edge windows if they exist */ + if (zone->edge.top) ecore_x_window_del(zone->edge.top); + if (zone->edge.bottom) ecore_x_window_del(zone->edge.bottom); + if (zone->edge.left) ecore_x_window_del(zone->edge.left); + if (zone->edge.right) ecore_x_window_del(zone->edge.right); + /* Delete the object event callbacks */ - evas_object_event_callback_del(zone->bg_event_object, EVAS_CALLBACK_MOUSE_DOWN, _e_zone_cb_bg_mouse_down); - evas_object_event_callback_del(zone->bg_event_object, EVAS_CALLBACK_MOUSE_UP, _e_zone_cb_bg_mouse_up); - evas_object_event_callback_del(zone->bg_event_object, EVAS_CALLBACK_MOUSE_MOVE, _e_zone_cb_bg_mouse_move); + evas_object_event_callback_del(zone->bg_event_object, + EVAS_CALLBACK_MOUSE_DOWN, + _e_zone_cb_bg_mouse_down); + evas_object_event_callback_del(zone->bg_event_object, + EVAS_CALLBACK_MOUSE_UP, + _e_zone_cb_bg_mouse_up); + evas_object_event_callback_del(zone->bg_event_object, + EVAS_CALLBACK_MOUSE_MOVE, + _e_zone_cb_bg_mouse_move); if (zone->black_ecore_evas) { @@ -895,6 +910,35 @@ else if (ev->win == zone->edge.left) zev->edge = E_ZONE_EDGE_LEFT; else if (ev->win == zone->edge.right) zev->edge = E_ZONE_EDGE_RIGHT; ecore_event_add(E_EVENT_ZONE_EDGE_OUT, zev, NULL, NULL); + } + return 1; +} + +static int +_e_zone_cb_mouse_down(void *data, int type, void *event) +{ + Ecore_X_Event_Mouse_Button_Down *ev; + E_Event_Zone_Edge_Out *zev; + E_Zone *zone; + + ev = event; + zone = data; + if ((ev->win == zone->edge.top) || + (ev->win == zone->edge.bottom) || + (ev->win == zone->edge.left) || + (ev->win == zone->edge.right)) + { + zone->cur_mouse_action = + e_bindings_mouse_down_event_handle(E_BINDING_CONTEXT_ZONE, + E_OBJECT(zone), ev); + if (zone->cur_mouse_action) + { + if ((!zone->cur_mouse_action->func.end_mouse) && + (!zone->cur_mouse_action->func.end)) + zone->cur_mouse_action = NULL; + if (zone->cur_mouse_action) + e_object_ref(E_OBJECT(zone->cur_mouse_action)); + } } return 1; } ------------------------------------------------------------------------- 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