From 6a7271084d6698d26f94c876092ab2fc45057e33 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 26 Feb 2010 06:30:17 +0000 Subject: [PATCH] slight change in drag events vs scrolling on_hold to fix small "distance race" issue. SVN revision: 46505 --- legacy/elementary/src/bin/test_genlist.c | 7 +++++++ legacy/elementary/src/lib/elm_genlist.c | 23 ++++++++++++----------- legacy/elementary/src/lib/elm_list.c | 2 +- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/legacy/elementary/src/bin/test_genlist.c b/legacy/elementary/src/bin/test_genlist.c index 802bcbf749..5f5807ef57 100644 --- a/legacy/elementary/src/bin/test_genlist.c +++ b/legacy/elementary/src/bin/test_genlist.c @@ -872,6 +872,12 @@ item_drag_stop(void *data, Evas_Object *obj, void *event_info) printf("drag stop\n"); } +static void +item_longpress(void *data, Evas_Object *obj, void *event_info) +{ + printf("longpress\n"); +} + void test_genlist5(void *data, Evas_Object *obj, void *event_info) { @@ -926,6 +932,7 @@ test_genlist5(void *data, Evas_Object *obj, void *event_info) evas_object_smart_callback_add(gl, "drag,start,right", item_drag_right, NULL); evas_object_smart_callback_add(gl, "drag", item_drag, NULL); evas_object_smart_callback_add(gl, "drag,stop", item_drag_stop, NULL); + evas_object_smart_callback_add(gl, "longpressed", item_longpress, NULL); bx2 = elm_box_add(win); elm_box_horizontal_set(bx2, 1); diff --git a/legacy/elementary/src/lib/elm_genlist.c b/legacy/elementary/src/lib/elm_genlist.c index 9ca5657a60..d7264f4285 100644 --- a/legacy/elementary/src/lib/elm_genlist.c +++ b/legacy/elementary/src/lib/elm_genlist.c @@ -477,16 +477,7 @@ _mouse_move(void *data, Evas *evas, Evas_Object *obj, void *event_info) _item_unselect(it); } } - if ((!it->down) || (it->wd->on_hold) || (it->wd->longpressed)) - { - if (it->long_timer) - { - ecore_timer_del(it->long_timer); - it->long_timer = NULL; - } - return; - } - if (it->dragging) + if ((it->dragging) && (it->down)) { if (it->long_timer) { @@ -496,6 +487,15 @@ _mouse_move(void *data, Evas *evas, Evas_Object *obj, void *event_info) evas_object_smart_callback_call(it->wd->obj, "drag", it); return; } + if ((!it->down)/* || (it->wd->on_hold)*/ || (it->wd->longpressed)) + { + if (it->long_timer) + { + ecore_timer_del(it->long_timer); + it->long_timer = NULL; + } + return; + } if (!it->display_only) elm_coords_finger_size_adjust(1, &minw, 1, &minh); evas_object_geometry_get(obj, &x, &y, NULL, NULL); @@ -577,6 +577,7 @@ _mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info) evas_object_geometry_get(obj, &x, &y, NULL, NULL); it->dx = ev->canvas.x - x; it->dy = ev->canvas.y - y; + it->wd->longpressed = EINA_FALSE; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) it->wd->on_hold = EINA_TRUE; else it->wd->on_hold = EINA_FALSE; it->wd->wasselected = it->selected; @@ -599,6 +600,7 @@ _mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info) it->down = 0; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) it->wd->on_hold = EINA_TRUE; else it->wd->on_hold = EINA_FALSE; + it->wd->longpressed = EINA_FALSE; if (it->long_timer) { ecore_timer_del(it->long_timer); @@ -612,7 +614,6 @@ _mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info) } if (it->wd->on_hold) { - it->wd->longpressed = EINA_FALSE; it->wd->on_hold = EINA_FALSE; return; } diff --git a/legacy/elementary/src/lib/elm_list.c b/legacy/elementary/src/lib/elm_list.c index 080eb45b18..3074906640 100644 --- a/legacy/elementary/src/lib/elm_list.c +++ b/legacy/elementary/src/lib/elm_list.c @@ -398,6 +398,7 @@ _mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info) if (ev->button != 1) return; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) wd->on_hold = EINA_TRUE; else wd->on_hold = EINA_FALSE; + wd->longpressed = EINA_FALSE; if (it->long_timer) { ecore_timer_del(it->long_timer); @@ -410,7 +411,6 @@ _mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info) } if (wd->longpressed) { - wd->longpressed = EINA_FALSE; if (!wd->wasselected) _item_unselect(it); wd->wasselected = 0; return;