cnp: remove loss callback when object is deleted
authorThiep Ha <thiepha@gmail.com>
Thu, 25 Jun 2015 05:54:36 +0000 (08:54 +0300)
committerDaniel Zaoui <daniel.zaoui@samsung.com>
Thu, 25 Jun 2015 05:54:36 +0000 (08:54 +0300)
Summary:
SEG_FAULT happens when the object which has selection is deleted,
and new selection is done at another object.
Reason: loss_cb is not removed when the object which has selection is deleted.
When new selection is set for new object, the loss_cb is called for deleted
object. As result, SEG_FAULT happens.

Test Plan:
Run elementary test, open Entry, do selection,
close Entry window, open Entry one more time, do selection.

Reviewers: JackDanielZ

Differential Revision: https://phab.enlightenment.org/D2763

src/lib/elm_cnp.c

index 0bee00a..301994d 100644 (file)
@@ -669,7 +669,12 @@ static void
 _x11_sel_obj_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
 {
    X11_Cnp_Selection *sel = data;
-   if (sel->widget == obj) sel->widget = NULL;
+   if (sel->widget == obj)
+     {
+        sel->loss_cb = NULL;
+        sel->loss_data = NULL;
+        sel->widget = NULL;
+     }
    if (dragwidget == obj) dragwidget = NULL;
 }