diff options
author | SangHyeon Lee <sh10233.lee@samsung.com> | 2015-04-06 10:54:15 +0900 |
---|---|---|
committer | ChunEon Park <hermet@hermet.pe.kr> | 2015-04-06 10:55:11 +0900 |
commit | 2214d290b1f1492d76c1089a399104d91e0bd7e4 (patch) | |
tree | ac49f1c6d2a09202e5f377a8bb0a4ac213a1e34c | |
parent | 544a9ad55bde6900f97f4586505acded242b9d32 (diff) | |
download | elementary-2214d290b1f1492d76c1089a399104d91e0bd7e4.tar.gz |
Elm_Win: Fix _elm_win_focus_prev_target_del callback added repeatly without callback del.
Summary:
When object in elm_win lose their focus, elm_win save it on focus_highlight.prev structure,
and add **EVAS_CALLBACK_DEL** event callback. But after changed focus object also lose their focus from other,
**EVAS_CALLBACK_DEL** on prev object is not deleted if their in_theme is not **EINA_TRUE**.
This could be cause **'Memory Leak' **until previous focused objects are deleting.
checking in_theme of prev focus_highlight is for send signal on prev focused view(edje),
so 'if' sentence for checking previous existance and in_theme need to be separated.
@fix
Test Plan:
You can easily check this on elementary_test. launch radio sample and make focus by keyboard and
change focus repeatly, callback is added as per focus movement, but callback del is not called.
Reviewers: seoz, woohyun, raster, Hermet
Reviewed By: Hermet
Subscribers: jaehwan
Differential Revision: https://phab.enlightenment.org/D2276
-rw-r--r-- | src/lib/elm_win.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/lib/elm_win.c b/src/lib/elm_win.c index 57935f0f5..717017b28 100644 --- a/src/lib/elm_win.c +++ b/src/lib/elm_win.c @@ -920,12 +920,13 @@ _elm_win_focus_highlight_reconfigure_job(void *data) (!sd->focus_highlight.theme_changed)) return; - if ((previous) && (sd->focus_highlight.prev.in_theme)) + if (previous) { evas_object_event_callback_del_full (previous, EVAS_CALLBACK_DEL, _elm_win_focus_prev_target_del, data); - elm_widget_signal_emit - (previous, "elm,action,focus_highlight,hide", "elm"); + if (sd->focus_highlight.prev.in_theme) + elm_widget_signal_emit + (previous, "elm,action,focus_highlight,hide", "elm"); } if (!target) |