diff --git a/src/bin/e_menu.c b/src/bin/e_menu.c index 54c4105d6..98cd1a27b 100644 --- a/src/bin/e_menu.c +++ b/src/bin/e_menu.c @@ -2768,27 +2768,10 @@ _e_menu_cb_item_in(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED_ } static void -_e_menu_cb_item_out(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +_e_menu_cb_item_out(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info EINA_UNUSED) { - E_Menu_Item *mi; - Evas_Event_Mouse_In *ev; - - mi = data; - ev = event_info; + E_Menu_Item *mi = data; e_menu_item_active_set(mi, 0); - if (_e_menu_activate_maybe_drag) - { - if (mi->drag_cb.func) - { - /* User is dragging a draggable item elsewhere. */ - mi->drag.x = ev->output.x - (ev->output.x - mi->x); - mi->drag.y = ev->output.y - (ev->output.y - mi->y); - _e_menu_deactivate_all(); - mi->drag_cb.func(mi->drag_cb.data, mi->menu, mi); - } - /* Either way, the maybe drag stops here. */ - _e_menu_activate_maybe_drag = 0; - } } static Eina_Bool @@ -2976,7 +2959,25 @@ _e_menu_cb_mouse_move(void *data __UNUSED__, int type __UNUSED__, void *event) _e_menu_submenu_activate(mi); } } - evas_event_feed_mouse_move(m->evas, ev->x, ev->y, ev->timestamp, NULL); + if (!_e_menu_activate_maybe_drag) + /* this is useless while the mouse is down */ + evas_event_feed_mouse_move(m->evas, ev->x, ev->y, ev->timestamp, NULL); + } + if (_e_active_menu_item) + { + if (!E_INSIDE(ev->x, ev->y, _e_active_menu_item->x, _e_active_menu_item->y, _e_active_menu_item->w, _e_active_menu_item->h)) + { + if (_e_active_menu_item->drag_cb.func) + { + /* User is dragging a draggable item elsewhere. */ + _e_active_menu_item->drag.x = ev->x - (ev->x - _e_active_menu_item->x); + _e_active_menu_item->drag.y = ev->y - (ev->y - _e_active_menu_item->y); + _e_menu_deactivate_all(); + _e_active_menu_item->drag_cb.func(_e_active_menu_item->drag_cb.data, _e_active_menu_item->menu, _e_active_menu_item); + } + /* Either way, the maybe drag stops here. */ + _e_menu_activate_maybe_drag = 0; + } } _e_menu_list_free_unref(tmp);