Gesture Layer: changed order in cleanup func.
authorAharon Hillel <a.hillel@samsung.com>
Mon, 1 Jul 2013 15:45:06 +0000 (18:45 +0300)
committerSungho Kwak <sungho1.kwak@samsung.com>
Mon, 8 Jul 2013 06:47:15 +0000 (15:47 +0900)
Changed the order when GLayer is deleted. First we cancel all Gestures,
then we handle any event forwarding.

Conflicts:

src/lib/elm_gesture_layer.c

Change-Id: I7ad6919550b9cd50a1c050bb0a845d2569d2d4c7

src/lib/elm_gesture_layer.c

index d6a1741..ade33c0 100644 (file)
@@ -3746,16 +3746,7 @@ _elm_gesture_layer_smart_del(Evas_Object *obj)
 
    ELM_GESTURE_LAYER_DATA_GET(obj, sd);
 
-   _event_history_clear(obj);
-   eina_list_free(sd->pending);
-
-   EINA_LIST_FREE (sd->touched, data)
-     free(data);
-
-   if (!elm_widget_disabled_get(obj))
-     _callbacks_unregister(obj);
-
-   /* Free all gestures internal data structures */
+   /* First Free all gestures internal data structures */
    for (i = 0; i < ELM_GESTURE_LAST; i++)
      if (sd->gesture[i])
        {
@@ -3763,6 +3754,7 @@ _elm_gesture_layer_smart_del(Evas_Object *obj)
             free(sd->gesture[i]->data);
 
           free(sd->gesture[i]);
+          sd->gesture[i] = NULL; /* Referenced by _event_history_clear */
        }
    if (sd->gest_taps_timeout)
      {
@@ -3770,6 +3762,16 @@ _elm_gesture_layer_smart_del(Evas_Object *obj)
         sd->gest_taps_timeout = NULL;
      }
 
+   /* Then take care of clearing events */
+   _event_history_clear(obj);
+   sd->pending = eina_list_free(sd->pending);
+
+   EINA_LIST_FREE(sd->touched, data)
+     free(data);
+
+   if (!elm_widget_disabled_get(obj))
+     _callbacks_unregister(obj);
+
    _elm_gesture_layer_parent_sc->base.del(obj); /* handles freeing sd */
 }
 
@@ -3778,7 +3780,6 @@ _elm_gesture_layer_smart_set_user(Elm_Widget_Smart_Class *sc)
 {
    sc->base.add = _elm_gesture_layer_smart_add;
    sc->base.del = _elm_gesture_layer_smart_del;
-
    sc->disable = _elm_gesture_layer_smart_disable;
 }