slight change in drag events vs scrolling on_hold to fix small "distance
authorCarsten Haitzler <raster@rasterman.com>
Fri, 26 Feb 2010 06:30:17 +0000 (06:30 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Fri, 26 Feb 2010 06:30:17 +0000 (06:30 +0000)
race" issue.

SVN revision: 46505

src/bin/test_genlist.c
src/lib/elm_genlist.c
src/lib/elm_list.c

index 802bcbf..5f5807e 100644 (file)
@@ -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);
index 9ca5657..d7264f4 100644 (file)
@@ -477,23 +477,23 @@ _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->dragging) && (it->down))
      {
         if (it->long_timer)
           {
              ecore_timer_del(it->long_timer);
              it->long_timer = NULL;
           }
+        evas_object_smart_callback_call(it->wd->obj, "drag", it);
         return;
      }
-   if (it->dragging)
+   if ((!it->down)/* || (it->wd->on_hold)*/ || (it->wd->longpressed))
      {
         if (it->long_timer)
           {
              ecore_timer_del(it->long_timer);
              it->long_timer = NULL;
           }
-        evas_object_smart_callback_call(it->wd->obj, "drag", it);
         return;
      }
    if (!it->display_only)
@@ -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;
      }
index 080eb45..3074906 100644 (file)
@@ -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;