eunue pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=d36c849e2003aaa54432b74bcabe9f838d992a36
commit d36c849e2003aaa54432b74bcabe9f838d992a36 Author: Jaeun Choi <jaeun12.c...@samsung.com> Date: Tue Jan 16 14:57:38 2018 +0900 elm_panel: add exception handling in _drawer_close() this fixes a bug with scrollable panel not being blocked when it is closed. scroll is blocked in _anim_stop_cb() which is called after elm_interface_scrollable_region_bring_in(). but if panel content is already at the target position, _anim_stop_cb() is not called. so there is a need to check content's position and handle the exceptional case. --- src/lib/elementary/elm_panel.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/lib/elementary/elm_panel.c b/src/lib/elementary/elm_panel.c index 1ccf497193..0d89df0f90 100644 --- a/src/lib/elementary/elm_panel.c +++ b/src/lib/elementary/elm_panel.c @@ -343,7 +343,7 @@ static void _drawer_close(Evas_Object *obj, Evas_Coord w, Evas_Coord h, Eina_Bool anim) { ELM_PANEL_DATA_GET(obj, sd); - int x = 0, y = 0; + int x = 0, y = 0, cx, cy; Eina_Bool horizontal = EINA_FALSE; elm_widget_tree_unfocusable_set(obj, EINA_TRUE); @@ -369,6 +369,25 @@ _drawer_close(Evas_Object *obj, Evas_Coord w, Evas_Coord h, Eina_Bool anim) break; } + elm_interface_scrollable_content_pos_get(obj, &cx, &cy); + + if ((x == cx) && (y == cy)) + { + if (!sd->freeze) + { + if (horizontal) + elm_interface_scrollable_movement_block_set + (obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL); + else + elm_interface_scrollable_movement_block_set + (obj, EFL_UI_SCROLL_BLOCK_VERTICAL); + sd->freeze = EINA_TRUE; + elm_layout_signal_emit(sd->scr_ly, "elm,state,content,hidden", "elm"); + } + + return; + } + if (anim) { if (sd->freeze) --