{
Eina_List *l = NULL;
Elm_Gen_Item *it;
- if (!ELM_RECTS_INTERSECT(itb->x - sd->pan_x,
- itb->y - sd->pan_y,
+ if (!ELM_RECTS_INTERSECT(itb->x, itb->y,
sd->minw, itb->minh, x, y, 1, 1))
continue;
EINA_LIST_FOREACH(itb->items, l, it)
{
Evas_Coord itx, ity, itw, ith;
- itx = itb->x + it->x - sd->pan_x;
- ity = itb->y + it->y - sd->pan_y;
+ itx = itb->x + it->x;
+ ity = itb->y + it->y;
itw = (GL_IT(it)->w ? GL_IT(it)->w : sd->minw);
ith = GL_IT(it)->minh;
if (!it) return NULL;
int loop_count = 0;
int direction;
+ Elm_Genlist_Data *sd = GL_IT(it)->wsd;
Elm_Gen_Item *adjust_item = it;
+ Elm_Gen_Item *last = ELM_GEN_ITEM_FROM_INLIST(sd->items->last);
Elm_Object_Item *eo_item = NULL;
- Elm_Genlist_Data *sd = GL_IT(it)->wsd;
ELM_WIDGET_DATA_GET_OR_RETURN(WIDGET(adjust_item), wd, NULL);
++loop_count;
}
- if (adjust_item) return adjust_item;
+ if (adjust_item)
+ {
+ //Adjusted item must be aligned center position, so last item cannot be adjusted item.
+ if (adjust_item == last)
+ adjust_item = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(adjust_item)->prev);
+ return adjust_item;
+ }
adjust_item = it;
while (adjust_item && loop_count < 10)
if (!adjust_item)
adjust_item = it;
+ //Adjusted item must be aligned center position, so last item cannot be adjusted item.
+ if (adjust_item == last)
+ adjust_item = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(adjust_item)->prev);
+
return adjust_item;
}
Evas_Coord cx = 0, cy = 0;
Evas_Coord it_y, it_h;
Evas_Coord yy = *y;
+ Evas_Coord miny = 0, maxy = 0;
+
+ elm_pan_pos_min_get(sd->pan_obj, NULL, &miny);
+ elm_pan_pos_max_get(sd->pan_obj, NULL, &maxy);
elm_interface_scrollable_content_viewport_geometry_get(sd->obj, NULL, NULL, &vw, &vh);
+
+ yy = sd->pan_y - yy;
+ if (yy > maxy) yy = maxy;
+ if (yy < miny) yy = miny;
+
if (!strcmp(wd->scroll_item_valign, "center"))
{
cx = (vw / 2);
- cy = (vh / 2) - yy;
+ cy = yy + (vh / 2);
}
sd->adjusted_item = _elm_genlist_pos_adjust_xy_item_get(sd->obj, cx, cy);
sd->adjusted_item = _adjust_item_align(sd->adjusted_item);
if (!sd->adjusted_item) return;
- cy += psd->wsd->pan_y;
it_y = sd->adjusted_item->y + GL_IT(sd->adjusted_item)->block->y;
it_h = GL_IT(sd->adjusted_item)->h;