Elm_Gen_Item *it = data;
Evas_Event_Mouse_Move *ev = event_info;
Evas_Coord ox, oy, ow, oh, it_scrl_x, it_scrl_y;
- Evas_Coord minw = 0, minh = 0, x, y, dx, dy, adx, ady;
+ Evas_Coord minw = 0, minh = 0, x, y, w, h, dx, dy, adx, ady;
ELM_GENGRID_DATA_GET_FROM_ITEM(it, sd);
Elm_Object_Item *eo_it = EO_OBJ(it);
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
{
if (!sd->on_hold)
}
}
}
+ else if (ELM_RECTS_POINT_OUT(x, y, w, h, ev->cur.canvas.x, ev->cur.canvas.y) &&
+ !sd->reorder_it )
+ {
+ ELM_SAFE_FREE(it->long_timer, ecore_timer_del);
+ if (!sd->was_selected)
+ it->unsel_cb(it);
+ it->base->still_in = EINA_FALSE;
+ }
if ((it->dragging) && (it->down))
{
if (it->select_mode != ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
elm_coords_finger_size_adjust(1, &minw, 1, &minh);
- evas_object_geometry_get(obj, &x, &y, NULL, NULL);
x = ev->cur.canvas.x - x;
y = ev->cur.canvas.y - y;
dx = x - it->dx;
evas_object_smart_callback_call(WIDGET(it), SIG_DRAG_STOP, eo_it);
dragged = EINA_TRUE;
}
- if (sd->on_hold)
- {
- sd->longpressed = EINA_FALSE;
- sd->on_hold = EINA_FALSE;
- return;
- }
+
if ((sd->reorder_mode) &&
(sd->reorder_it))
{
_elm_gengrid_item_unrealize(it, EINA_FALSE);
}
- if (eo_do_ret(eo_it, tmp, elm_wdg_item_disabled_get()) || (dragged)) return;
+ if (eo_do_ret(eo_it, tmp, elm_wdg_item_disabled_get())) return;
+
+ if (sd->on_hold || it->base->still_in)
+ {
+ sd->longpressed = EINA_FALSE;
+ sd->on_hold = EINA_FALSE;
+ return;
+ }
if (sd->focused_item != eo_it)
elm_object_item_focus_set(eo_it, EINA_TRUE);
ELM_GENLIST_DATA_GET_FROM_ITEM(it, sd);
Elm_Object_Item *eo_it = EO_OBJ(it);
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
{
if (!sd->on_hold)
_item_unselect(it);
}
}
+ else if (ELM_RECTS_POINT_OUT(x, y, w, h, ev->cur.canvas.x, ev->cur.canvas.y) &&
+ !sd->reorder_it)
+ {
+ ELM_SAFE_FREE(it->long_timer, ecore_timer_del);
+ if ((!sd->wasselected) && (!it->flipped))
+ _item_unselect(it);
+ it->base->still_in = EINA_FALSE;
+ }
+
if (sd->multi_touched)
{
sd->cur_x = ev->cur.canvas.x;
{
it->dragging = EINA_TRUE;
ELM_SAFE_FREE(it->long_timer, ecore_timer_del);
- if (!sd->wasselected)
- _item_unselect(it);
if (dy < 0)
{
if (ady > adx)
it->long_timer = NULL;
sd->swipe = EINA_FALSE;
sd->movements = 0;
+ it->base->still_in = EINA_TRUE;
if (_is_no_select(it) ||
eo_do_ret((Eo *)eo_it, tmp, elm_wdg_item_disabled_get()))
ELM_SAFE_FREE(sd->multi_timer, ecore_timer_del);
sd->multi_timeout = EINA_FALSE;
}
- if (sd->on_hold)
+ if (sd->swipe)
{
- if (sd->swipe) _swipe_do(it);
+ if (!sd->wasselected) _item_unselect(it);
+ _swipe_do(it);
sd->longpressed = EINA_FALSE;
sd->on_hold = EINA_FALSE;
+ sd->wasselected = EINA_FALSE;
return;
}
if ((sd->reorder_mode) && (sd->reorder_it))
}
if (sd->longpressed)
{
+ if (!sd->wasselected) _item_unselect(it);
sd->longpressed = EINA_FALSE;
sd->wasselected = EINA_FALSE;
return;
}
if (_is_no_select(it) ||
- (eo_do_ret(EO_OBJ(it), tmp, elm_wdg_item_disabled_get()) || (dragged)))
+ (eo_do_ret(EO_OBJ(it), tmp, elm_wdg_item_disabled_get())))
return;
- if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD || !it->base->still_in) return;
evas_object_ref(sd->obj);
static void
_mouse_move_cb(void *data,
Evas *evas EINA_UNUSED,
- Evas_Object *o EINA_UNUSED,
+ Evas_Object *o,
void *event_info)
{
Evas_Object *obj;
Elm_List_Item_Data *it = data;
Evas_Event_Mouse_Move *ev = event_info;
+ Evas_Coord x = 0, y = 0, w = 0, h = 0;
ELM_LIST_ITEM_CHECK_OR_RETURN(it);
obj = WIDGET(it);
evas_object_ref(obj);
_elm_list_walk(sd);
+ evas_object_geometry_get(o, &x, &y, &w, &h);
+
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
{
if (!sd->on_hold)
_item_unselect(it);
}
}
- if (sd->movements == ELM_LIST_SWIPE_MOVES) sd->swipe = EINA_TRUE;
- else
+ }
+ else if (ELM_RECTS_POINT_OUT(x, y, w, h, ev->cur.canvas.x, ev->cur.canvas.y))
+ {
+ ELM_SAFE_FREE(it->long_timer, ecore_timer_del);
+ if (!sd->was_selected)
{
- sd->history[sd->movements].x = ev->cur.canvas.x;
- sd->history[sd->movements].y = ev->cur.canvas.y;
- if (abs((sd->history[sd->movements].x - sd->history[0].x)) > 40)
- sd->swipe = EINA_TRUE;
- else
- sd->movements++;
+ _item_unhighlight(it);
+ _item_unselect(it);
}
+ it->base->still_in = EINA_FALSE;
}
+ if (sd->movements == ELM_LIST_SWIPE_MOVES)
+ {
+ sd->swipe = EINA_TRUE;
+ }
+ else
+ {
+ sd->history[sd->movements].x = ev->cur.canvas.x;
+ sd->history[sd->movements].y = ev->cur.canvas.y;
+ if (abs((sd->history[sd->movements].x - sd->history[0].x)) > 40)
+ {
+ sd->swipe = EINA_TRUE;
+ }
+ else
+ sd->movements++;
+ }
+ if (sd->swipe)
+ ELM_SAFE_FREE(it->long_timer, ecore_timer_del);
_elm_list_unwalk(obj, sd);
evas_object_unref(obj);
}
}
sd->swipe = EINA_FALSE;
sd->movements = 0;
+ it->base->still_in = EINA_TRUE;
_elm_list_unwalk(obj, sd);
evas_object_unref(obj);
else sd->on_hold = EINA_FALSE;
sd->mouse_down = EINA_FALSE;
- sd->longpressed = EINA_FALSE;
ELM_SAFE_FREE(it->long_timer, ecore_timer_del);
ELM_SAFE_FREE(it->swipe_timer, ecore_timer_del);
- if (sd->on_hold)
+ if (sd->swipe)
{
- if (sd->swipe) _swipe_do(data);
- sd->on_hold = EINA_FALSE;
+ if (!sd->was_selected)
+ {
+ _item_unhighlight(it);
+ _item_unselect(it);
+ }
+ _swipe_do(data);
+ sd->swipe = EINA_FALSE;
+ sd->was_selected = EINA_FALSE;
return;
}
if (sd->longpressed)
_item_unhighlight(it);
_item_unselect(it);
}
- sd->was_selected = 0;
+ sd->longpressed = EINA_FALSE;
+ sd->was_selected = EINA_FALSE;
return;
}
if (it->base->disabled)
return;
- if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD || !it->base->still_in)
+ return;
evas_object_ref(obj);
_elm_list_walk(sd);
Eina_Bool disabled : 1;
Eina_Bool on_deletion : 1;
Eina_Bool on_translate : 1;
+ Eina_Bool still_in : 1;
};
#define ELM_NEW(t) calloc(1, sizeof(t))