diff options
author | Thiep Ha <thiepha@gmail.com> | 2015-06-25 08:54:36 +0300 |
---|---|---|
committer | Daniel Zaoui <daniel.zaoui@samsung.com> | 2015-06-25 08:54:36 +0300 |
commit | f25823aa4be7e2f3ddbddba006a90bdd68b3f173 (patch) | |
tree | d33711089b1fa8ba6d8cbb137d74e09adbd291ef | |
parent | 6d94fb95096084d89913775269b855303e0ced69 (diff) | |
download | elementary-f25823aa4be7e2f3ddbddba006a90bdd68b3f173.tar.gz |
cnp: remove loss callback when object is deleted
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
-rw-r--r-- | src/lib/elm_cnp.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/lib/elm_cnp.c b/src/lib/elm_cnp.c index 0bee00a07..301994d8f 100644 --- a/src/lib/elm_cnp.c +++ b/src/lib/elm_cnp.c @@ -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; } |