raster pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=d567faa7787afb3d478f1c857cb28ab4fa0e5fc3
commit d567faa7787afb3d478f1c857cb28ab4fa0e5fc3 Author: Carsten Haitzler (Rasterman) <[email protected]> Date: Tue Sep 26 16:15:07 2017 +0900 Fix infinite recursion for legacy + efl ui win events --- src/lib/elementary/efl_ui_win.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index ae7354a026..30d4d3d492 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -1853,6 +1853,14 @@ EFL_CALLBACKS_ARRAY_DEFINE(_elm_win_evas_feed_fake_callbacks, { EFL_EVENT_KEY_DOWN, _evas_event_key_feed_fake_cb }, { EFL_EVENT_KEY_UP, _evas_event_key_feed_fake_cb }) +#define RECURSE_PROTECT(x) \ + do { static int calling = 0; \ + if (calling) return; \ + calling++; \ + x; \ + calling--; \ + } while (0) + static void _elm_win_evas_render_post(void *data, Evas *e EINA_UNUSED, @@ -1861,7 +1869,7 @@ _elm_win_evas_render_post(void *data, Efl_Gfx_Event_Render_Post *ev = event_info; Eo *win = data; - efl_event_callback_legacy_call(win, EFL_CANVAS_EVENT_RENDER_POST, ev); + RECURSE_PROTECT(efl_event_callback_legacy_call(win, EFL_CANVAS_EVENT_RENDER_POST, ev)); } static void @@ -1872,7 +1880,7 @@ _elm_win_evas_render_pre(void *data, Eo *win = data; _elm_win_throttle_ok = EINA_TRUE; - efl_event_callback_legacy_call(win, EFL_CANVAS_EVENT_RENDER_PRE, NULL); + RECURSE_PROTECT(efl_event_callback_legacy_call(win, EFL_CANVAS_EVENT_RENDER_PRE, NULL)); } static void @@ -1883,7 +1891,7 @@ _elm_win_evas_focus_in(void *data, Eo *win = data; _elm_win_throttle_ok = EINA_TRUE; - efl_event_callback_legacy_call(win, EFL_CANVAS_EVENT_FOCUS_IN, NULL); + RECURSE_PROTECT(efl_event_callback_legacy_call(win, EFL_CANVAS_EVENT_FOCUS_IN, NULL)); } static void @@ -1893,7 +1901,7 @@ _elm_win_evas_focus_out(void *data, { Eo *win = data; - efl_event_callback_legacy_call(win, EFL_CANVAS_EVENT_FOCUS_OUT, NULL); + RECURSE_PROTECT(efl_event_callback_legacy_call(win, EFL_CANVAS_EVENT_FOCUS_OUT, NULL)); } static void @@ -1905,7 +1913,7 @@ _elm_win_evas_object_focus_in(void *data, Eo *win = data; _elm_win_throttle_ok = EINA_TRUE; - efl_event_callback_legacy_call(win, EFL_CANVAS_EVENT_OBJECT_FOCUS_IN, object); + RECURSE_PROTECT(efl_event_callback_legacy_call(win, EFL_CANVAS_EVENT_OBJECT_FOCUS_IN, object)); } static void @@ -1916,7 +1924,7 @@ _elm_win_evas_object_focus_out(void *data, Eo *object = event_info; Eo *win = data; - efl_event_callback_legacy_call(win, EFL_CANVAS_EVENT_OBJECT_FOCUS_OUT, object); + RECURSE_PROTECT(efl_event_callback_legacy_call(win, EFL_CANVAS_EVENT_OBJECT_FOCUS_OUT, object)); } static void @@ -1927,7 +1935,7 @@ _elm_win_evas_device_changed(void *data, Eo *device = event_info; Eo *win = data; - efl_event_callback_legacy_call(win, EFL_CANVAS_EVENT_DEVICE_CHANGED, device); + RECURSE_PROTECT(efl_event_callback_legacy_call(win, EFL_CANVAS_EVENT_DEVICE_CHANGED, device)); } static void --
