wearable/rotary_selector: expand touch area of deleted item 86/203886/1
authorTaehyub Kim <taehyub.kim@samsung.com>
Thu, 10 May 2018 09:23:22 +0000 (18:23 +0900)
committerTaehyub Kim <taehyub.kim@samsung.com>
Thu, 18 Apr 2019 05:41:43 +0000 (14:41 +0900)
Change-Id: I14c8a1ce2a8f8a992f1f37ed920604a47add30fb

src/wearable/efl_extension_rotary_selector.c

index c522a488943ac9945ff24be537aa4fd04ff4afe2..d1c25b7cbf00a9082b8cd56aa9eef362791b3284 100644 (file)
@@ -385,6 +385,19 @@ _del_item_timer_cb(void *data)
    return ECORE_CALLBACK_CANCEL;
 }
 
+static void
+_delete_item(Eext_Rotary_Selector_Data *rsd, Eext_Rotary_Selector_Item *it)
+{
+   rsd->del_item = it;
+   rsd->item_list = eina_list_remove(rsd->item_list, it);
+   elm_object_signal_emit(it->base.obj, "elm,selector,item,hide", "elm");
+   rsd->del_item_index = rsd->pressed_item_index;
+   rsd->item_move_started = EINA_TRUE;
+   if (rsd->item_del_timer)
+     ecore_timer_del(rsd->item_del_timer);
+   rsd->item_del_timer = ecore_timer_add(_ROTARY_SELECTOR_DEL_ANIMATION_DURATION, _del_item_timer_cb, rsd);
+}
+
 static void
 _dnd_enter_cb(void *data, Evas_Object *obj)
 {
@@ -805,6 +818,7 @@ _drag_done_cb(void *data, Evas_Object *obj)
    if (rsd->drag_done)
      {
         evas_object_smart_callback_call(rsd->rotary_selector, "item,reordered", (void*)rsd->drag_item);
+        rsd->drag_item = NULL;
         return;
      }
    //there was no dnd pos, leave, done at drop side
@@ -825,6 +839,7 @@ _drag_done_cb(void *data, Evas_Object *obj)
         _item_update_animation_run(rsd);
         //delete tmp_item
         evas_object_del(tmp_item->base.obj);
+        rsd->drag_item = NULL;
      }
    else
      {
@@ -1064,6 +1079,15 @@ _event_area_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
         ecore_timer_del(rsd->longpress_timer);
         rsd->longpress_timer = NULL;
      }
+
+   if (rsd->drag_item)
+     {
+        rsd->pressed = EINA_FALSE;
+        rsd->touched_item_changed = EINA_FALSE;
+        rsd->pressed_item_index = _ROTARY_SELECTOR_PRESSED_ITEM_INDEX_INVALID;
+        return;
+     }
+
    if (rsd->previous_page_animator || rsd->next_page_animator || rsd->end_effect_animator)
      {
         INF("animator is running!!");
@@ -1147,33 +1171,34 @@ _event_area_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
                   int add_idx = eina_list_count(rsd->item_list) - 1;
                   if (rsd->editing)
                     {
-                       if (rsd->on_delete_icon)
+                       if (!rsd->entering_edit_mode)
                          {
-                            Eina_Bool still_on = _delete_icon_mouse_on_check(rsd, new_index, ev->canvas.x, ev->canvas.y);
-                            if (still_on)
+                            if (rsd->on_delete_icon)
                               {
-                                 Eext_Rotary_Selector_Item *it = NULL;
-
-                                 it = eina_list_nth(rsd->item_list, new_index);
-                                 rsd->del_item = it;
-                                 rsd->item_list = eina_list_remove(rsd->item_list, it);
-                                 elm_object_signal_emit(it->base.obj, "elm,selector,item,hide", "elm");
-                                 rsd->del_item_index = rsd->pressed_item_index;
-                                 rsd->item_move_started = EINA_TRUE;
-                                 if (rsd->item_del_timer)
-                                   ecore_timer_del(rsd->item_del_timer);
-                                 rsd->item_del_timer = ecore_timer_add(_ROTARY_SELECTOR_DEL_ANIMATION_DURATION, _del_item_timer_cb, rsd);
+                                 Eina_Bool still_on = _delete_icon_mouse_on_check(rsd, new_index, ev->canvas.x, ev->canvas.y);
+                                 if (still_on)
+                                   {
+                                      Eext_Rotary_Selector_Item *it = NULL;
+                                      it = eina_list_nth(rsd->item_list, new_index);
+                                      _delete_item(rsd, it);
+                                   }
                               }
-                         }
-                       else if (rsd->add_enabled && (new_index == add_idx))
-                         {
-                            if (!rsd->entering_edit_mode)
+                            else if (!rsd->add_enabled || (new_index != add_idx))
                               {
-                                 _editing_mode_turnoff(rsd);
-                                 evas_object_smart_callback_call(rsd->rotary_selector,
-                                                                 "add_item,clicked", NULL);
+                                 Eext_Rotary_Selector_Item *it = NULL;
+                                 it = eina_list_nth(rsd->item_list, new_index);
+                                 if (it->delete_enabled)
+                                   {
+                                      _delete_item(rsd, it);
+                                   }
                               }
-                         }
+                          else if (rsd->add_enabled && (new_index == add_idx))
+                            {
+                               _editing_mode_turnoff(rsd);
+                               evas_object_smart_callback_call(rsd->rotary_selector,
+                                                               "add_item,clicked", NULL);
+                            }
+                        }
                     }
                   else
                     {