From: Hosang Kim Date: Wed, 3 Jun 2015 13:08:38 +0000 (+0900) Subject: elm_interface_scrollable : Fix logic about setting EVAS_EVENT_FLAG_ON_HOLD X-Git-Tag: v1.15.0-alpha1~201 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8ee96d16f1e311bbd08c992d45df83a415a36510;p=platform%2Fupstream%2Felementary.git elm_interface_scrollable : Fix logic about setting EVAS_EVENT_FLAG_ON_HOLD Summary: Even if scroller is not scrolled, EVAS_EVENT_FLAG_ON_HOLD is set. So clicked event is canceled in Edje. Test Plan: On the button in the vertical scroller, click button and move mouse horizontal. Mouse up on the button, so now button is not clicked Reviewers: Hermet, CHAN, seoz, jaehwan, woohyun, SanghyeonLee Differential Revision: https://phab.enlightenment.org/D2550 --- diff --git a/src/lib/elm_interface_scrollable.c b/src/lib/elm_interface_scrollable.c index fbfd7ce..bf598db 100644 --- a/src/lib/elm_interface_scrollable.c +++ b/src/lib/elm_interface_scrollable.c @@ -2782,49 +2782,62 @@ _elm_scroll_post_event_move(void *data, elm_widget_parents_bounce_get(sid->obj, &horiz, &vert); if (sid->down.hold_parent) { - if ((sid->down.dir_x) && horiz && + if ((sid->down.dir_x) && (horiz || !sid->bounce_horiz) && !_elm_scroll_can_scroll(sid, sid->down.hdir)) { sid->down.dir_x = EINA_FALSE; } - if ((sid->down.dir_y) && vert && + if ((sid->down.dir_y) && (vert || !sid->bounce_vert) && !_elm_scroll_can_scroll(sid, sid->down.vdir)) { sid->down.dir_y = EINA_FALSE; } + sid->down.dragged_began = EINA_TRUE; } if (sid->down.dir_x) { if ((!sid->obj) || (!elm_widget_drag_child_locked_x_get(sid->obj))) { - sid->down.want_dragged = EINA_FALSE; - sid->down.dragged = EINA_TRUE; - if (sid->obj) + if (sid->down.dragged_began) { - elm_widget_drag_lock_x_set(sid->obj, 1); + sid->down.want_dragged = EINA_FALSE; + sid->down.dragged = EINA_TRUE; + if (sid->obj) + { + elm_widget_drag_lock_x_set(sid->obj, 1); + } + start = 1; } - start = 1; } else - sid->down.dir_x = EINA_FALSE; + { + sid->down.dragged_began = EINA_TRUE; + sid->down.dir_x = EINA_FALSE; + } } if (sid->down.dir_y) { if ((!sid->obj) || (!elm_widget_drag_child_locked_y_get(sid->obj))) { - sid->down.want_dragged = EINA_FALSE; - sid->down.dragged = EINA_TRUE; - if (sid->obj) + if (sid->down.dragged_began) { - elm_widget_drag_lock_y_set - (sid->obj, EINA_TRUE); + sid->down.want_dragged = EINA_FALSE; + sid->down.dragged = EINA_TRUE; + if (sid->obj) + { + elm_widget_drag_lock_y_set + (sid->obj, EINA_TRUE); + } + start = 1; } - start = 1; } else - sid->down.dir_y = EINA_FALSE; + { + sid->down.dragged_began = EINA_TRUE; + sid->down.dir_y = EINA_FALSE; + } } if ((!sid->down.dir_x) && (!sid->down.dir_y)) { @@ -3137,10 +3150,9 @@ _elm_scroll_mouse_move_event_cb(void *data, if (sid->one_direction_at_a_time) { - if (!((sid->down.dir_x) || (sid->down.dir_y)) && - (((x * x) + (y * y)) > - (_elm_config->thumbscroll_threshold * - _elm_config->thumbscroll_threshold))) + if (((x * x) + (y * y)) > + (_elm_config->thumbscroll_threshold * + _elm_config->thumbscroll_threshold)) { if (sid->one_direction_at_a_time == ELM_SCROLLER_SINGLE_DIRECTION_SOFT) @@ -3236,13 +3248,19 @@ _elm_scroll_mouse_move_event_cb(void *data, sid->down.dragged_began_timestamp = ecore_loop_time_get(); #endif } - sid->down.dragged_began = EINA_TRUE; + if (!sid->down.dragged) { sid->down.want_dragged = EINA_TRUE; + } + if ((((_elm_scroll_can_scroll(sid, LEFT) || _elm_scroll_can_scroll(sid, RIGHT)) && sid->down.dir_x) || + ((_elm_scroll_can_scroll(sid, UP) || _elm_scroll_can_scroll(sid, DOWN)) && sid->down.dir_y)) && + !sid->down.dragged_began) + { ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + sid->down.dragged_began = EINA_TRUE; } - if (sid->down.dragged) + else if (sid->down.dragged_began) { ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } @@ -3309,7 +3327,11 @@ _elm_scroll_mouse_move_event_cb(void *data, { if (sid->down.dragged_began) { - ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + if ((_elm_scroll_can_scroll(sid, sid->down.hdir) && sid->down.dir_x) || + (_elm_scroll_can_scroll(sid, sid->down.vdir) && sid->down.dir_y)) + { + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + } if (!sid->down.hold) { sid->down.hold = EINA_TRUE;