if( it->wd->edit_mode != ELM_GENLIST_EDIT_MODE_NONE )
(void)_edit_mode_reset( it->wd );
if (ev->button != 1) return;
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
+ {
+ it->wd->on_hold = EINA_TRUE;
+ }
if(it->wd->edit_field && !it->renamed)
elm_genlist_item_rename_mode_set(it, 0);
it->wd->longpressed = EINA_FALSE;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) it->wd->on_hold = EINA_TRUE;
else it->wd->on_hold = EINA_FALSE;
+ if (it->wd->on_hold) return;
it->wd->wasselected = it->selected;
_item_hilight(it);
if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
}
}
if ((it->disabled) || (dragged)) return;
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
if (it->wd->multi)
{
if (!it->selected && !it->menuopened)
Evas_Coord x, y;
Evas_Coord sx, sy;
Evas_Coord dx, dy;
+ Evas_Coord pdx, pdy;
Evas_Coord bx, by;
Evas_Coord ax, ay;
Evas_Coord bx0, by0;
unsigned char locked : 1;
unsigned char bounce_x_hold : 1;
unsigned char bounce_y_hold : 1;
+ unsigned char scroll : 1;
} down;
struct {
if (sd->down.momentum_animator)
sd->down.bounce_x_hold = 1;
sd->down.bounce_x_animator = NULL;
+ sd->down.pdx = 0;
sd->bouncemex = 0;
return ECORE_CALLBACK_CANCEL;
}
if (sd->down.momentum_animator)
sd->down.bounce_y_hold = 1;
sd->down.bounce_y_animator = NULL;
+ sd->down.pdy = 0;
sd->bouncemey = 0;
return ECORE_CALLBACK_CANCEL;
}
sd->down.bounce_y_hold = 0;
sd->down.ax = 0;
sd->down.ay = 0;
+ sd->down.pdx = 0;
+ sd->down.pdy = 0;
return ECORE_CALLBACK_CANCEL;
}
}
sd->down.bounce_y_hold = 0;
sd->down.ax = 0;
sd->down.ay = 0;
+ sd->down.pdx = 0;
+ sd->down.pdy = 0;
}
elm_smart_scroller_child_pos_set(obj, nx, ny);
}
sd->down.bounce_y_hold = 0;
sd->down.ax = 0;
sd->down.ay = 0;
+ sd->down.pdx = 0;
+ sd->down.pdy = 0;
}
x = nx;
if (x < 0) x = 0;
// if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return ;
if (_elm_config->thumbscroll_enable)
{
+ sd->down.hold = 0;
if ((sd->down.bounce_x_animator) || (sd->down.bounce_y_animator) ||
(sd->down.momentum_animator) || (sd->scrollto.x.animator) ||
(sd->scrollto.y.animator))
{
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_SCROLL | EVAS_EVENT_FLAG_ON_HOLD;
+ sd->down.scroll=1;
+ sd->down.hold = 1;
_smart_anim_stop(sd->smart_obj);
}
+
if (sd->scrollto.x.animator)
{
ecore_animator_del(sd->scrollto.x.animator);
sd->down.history[0].y = ev->canvas.y;
}
sd->down.dragged_began = 0;
- sd->down.hold = 0;
sd->down.hold_parent = 0;
sd->down.cancelled = 0;
}
{
sd->down.dx = ((double)dx / at);
sd->down.dy = ((double)dy / at);
+ if (((sd->down.dx > 0) && (sd->down.pdx > 0)) ||
+ ((sd->down.dx < 0) && (sd->down.pdx < 0)))
+ sd->down.dx += sd->down.pdx * 2; // * 2 - probably should be config
+ if (((sd->down.dy > 0) && (sd->down.pdy > 0)) ||
+ ((sd->down.dy < 0) && (sd->down.pdy < 0)))
+ sd->down.dy += sd->down.pdy * 2; // * 2 - probably should be config
+ sd->down.pdx = sd->down.dx;
+ sd->down.pdy = sd->down.dy;
+
ox = -sd->down.dx;
oy = -sd->down.dy;
if (!_smart_do_page(sd) && sd->freeze_bounce == EINA_FALSE)
if (!sd->down.momentum_animator && !sd->freeze_momentum_animator)
{
sd->down.momentum_animator = ecore_animator_add(_smart_momentum_animator, sd);
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_SCROLL;
_smart_anim_start(sd->smart_obj);
}
sd->down.anim_start = ecore_loop_time_get();
sd->down.hold_animator = NULL;
}
}
+ else
+ {
+ sd->down.pdx = 0;
+ sd->down.pdy = 0;
+ }
evas_event_feed_hold(e, 0, ev->timestamp, ev->data);
if (_smart_do_page(sd))
{
}
else
{
+ sd->down.pdx = 0;
+ sd->down.pdy = 0;
if (_smart_do_page(sd))
{
Evas_Coord pgx, pgy;
(!elm_widget_drag_child_locked_x_get(sd->widget)))
{
pgx = _smart_page_x_get(sd, ox);
- if (pgx != x) _smart_scrollto_x(sd, _elm_config->page_scroll_friction, pgx);
+ if (pgx != x)
+ {
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_SCROLL;
+ _smart_scrollto_x(sd, _elm_config->page_scroll_friction, pgx);
+ }
}
if ((!sd->widget) ||
(!elm_widget_drag_child_locked_y_get(sd->widget)))
{
pgy = _smart_page_y_get(sd, oy);
- if (pgy != y) _smart_scrollto_y(sd, _elm_config->page_scroll_friction, pgy);
+ if (pgy != y)
+ {
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_SCROLL;
+ _smart_scrollto_y(sd, _elm_config->page_scroll_friction, pgy);
+ }
+
}
}
if (sd->down.hold_animator)
sd->down.hold_animator = NULL;
}
}
+ if (sd->down.scroll)
+ {
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_SCROLL;
+ sd->down.scroll = 0;
+ }
if (sd->down.hold)
{
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
{
x = ev->cur.canvas.x - sd->down.x;
y = ev->cur.canvas.y - sd->down.y;
-
sd->down.hdir = -1;
sd->down.vdir = -1;