#define GL_IT(_it) (_it->item)
#define IS_ROOT_PARENT_IT(_it) \
- ((_it->group) || (GL_IT(_it)->items && GL_IT(_it)->expanded_depth == 0)) \
+ ((_it->group) || ((GL_IT(_it)->items && GL_IT(_it)->expanded_depth == 0) \
+ &&(!(GL_IT(_it)->type & ELM_GENLIST_ITEM_TREE)))) \
static const Evas_Smart_Interface *_smart_interfaces[] =
{
static void _expand_toggle_signal_cb(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__);
static void _expand_signal_cb(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__);
static void _contract_signal_cb(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__);
-static void _elm_genlist_item_state_update(Elm_Gen_Item *it, Item_Cache *ic);
+static void _elm_genlist_item_state_update(Elm_Gen_Item *it);
static void _decorate_item_unrealize(Elm_Gen_Item *it);
static void _decorate_all_item_unrealize(Elm_Gen_Item *it);
static void _decorate_item_set(Elm_Gen_Item *it);
#if GENLIST_FX_SUPPORT
static Eina_Bool _elm_genlist_fx_capture(Evas_Object *obj, int level);
static void _elm_genlist_fx_play(Evas_Object *obj);
-static void _elm_genlist_fx_clear(Evas_Object *obj);
+static void _elm_genlist_fx_clear(Evas_Object *obj, Eina_Bool force);
static void _elm_genlist_proxy_item_del(const Elm_Object_Item *item);
#endif
evas_object_geometry_get(obj, NULL, NULL, &ow, &oh);
if ((ow == w) && (oh == h)) return;
- psd->wsd->s_iface->content_viewport_size_get
- (ELM_WIDGET_DATA(psd->wsd)->obj, &vw, NULL);
- if (vw != 0) psd->wsd->prev_viewport_w = vw;
-
-
- if (psd->wsd->mode == ELM_LIST_COMPRESS)
+ psd->wsd->s_iface->content_viewport_size_get(ELM_WIDGET_DATA(psd->wsd)->obj,
+ &vw, NULL);
+ if (psd->wsd->mode == ELM_LIST_COMPRESS &&
+ vw != psd->wsd->prev_viewport_w)
psd->wsd->size_changed = EINA_TRUE;
+ if (vw != 0) psd->wsd->prev_viewport_w = vw;
psd->wsd->pan_changed = EINA_TRUE;
if (psd->wsd->calc_job) ecore_job_del(psd->wsd->calc_job);
}
static void
-_elm_genlist_item_state_update(Elm_Gen_Item *it,
- Item_Cache *itc)
+_elm_genlist_item_state_update(Elm_Gen_Item *it)
{
- if (itc)
+ if (it->selected)
{
- if (it->selected != itc->selected)
- {
- if (it->selected)
- {
- if (it->deco_all_view)
- edje_object_signal_emit
- (it->deco_all_view, "elm,state,selected", "elm,nosound");
- edje_object_signal_emit
- (VIEW(it), "elm,state,selected", "elm,nosound");
- evas_object_smart_callback_call(WIDGET(it), SIG_HIGHLIGHTED, it);
- }
- }
- if (elm_widget_item_disabled_get(it) != itc->disabled)
- {
- if (elm_widget_item_disabled_get(it))
- edje_object_signal_emit(VIEW(it), "elm,state,disabled", "elm");
- if (it->deco_all_view)
- edje_object_signal_emit
- (it->deco_all_view, "elm,state,disabled", "elm");
- }
- if (it->item->expanded != itc->expanded)
- {
- if (it->item->expanded)
- edje_object_signal_emit(VIEW(it), "elm,state,expanded", "elm");
- if (it->deco_all_view)
- edje_object_signal_emit
- (it->deco_all_view, "elm,state,expanded", "elm");
- }
+ if (it->deco_all_view)
+ edje_object_signal_emit
+ (it->deco_all_view, "elm,state,selected", "elm");
+ edje_object_signal_emit
+ (VIEW(it), "elm,state,selected", "elm");
+ evas_object_smart_callback_call(WIDGET(it), SIG_HIGHLIGHTED, it);
}
- else
+ if (elm_widget_item_disabled_get(it))
{
- if (it->selected)
- {
- if (it->deco_all_view)
- edje_object_signal_emit
- (it->deco_all_view, "elm,state,selected", "elm,nosound");
- edje_object_signal_emit
- (VIEW(it), "elm,state,selected", "elm,nosound");
- evas_object_smart_callback_call(WIDGET(it), SIG_HIGHLIGHTED, it);
- }
- if (elm_widget_item_disabled_get(it))
- {
- edje_object_signal_emit(VIEW(it), "elm,state,disabled", "elm");
- if (it->deco_all_view)
- edje_object_signal_emit
- (it->deco_all_view, "elm,state,disabled", "elm");
- }
- if (it->item->expanded)
- {
- edje_object_signal_emit(VIEW(it), "elm,state,expanded", "elm");
- if (it->deco_all_view)
- edje_object_signal_emit
- (it->deco_all_view, "elm,state,expanded", "elm");
- }
+ edje_object_signal_emit(VIEW(it), "elm,state,disabled", "elm");
+ if (it->deco_all_view)
+ edje_object_signal_emit
+ (it->deco_all_view, "elm,state,disabled", "elm");
+ }
+ if (it->item->expanded)
+ {
+ edje_object_signal_emit(VIEW(it), "elm,state,expanded", "elm");
+ if (it->deco_all_view)
+ edje_object_signal_emit
+ (it->deco_all_view, "elm,state,expanded", "elm");
}
}
// 1. Add resize callback for multiline entry.
// 2. Do not unrealize it for focus issue
// ps. Only for entry because of performnace
- if (!strcmp("elm_layout", evas_object_type_get(ic)))
- {
- // If editfield style, it can have entry.
- const char *group;
- edje_object_file_get(elm_layout_edje_get(ic), NULL, &group);
- if (group && !strncmp("elm/layout/editfield/", group, 20))
- it->item->unrealize_disabled = EINA_TRUE;
- }
- else if (!strcmp("elm_entry", evas_object_type_get(ic)))
- it->item->unrealize_disabled = EINA_TRUE;
+ if (!strcmp("elm_entry", evas_object_type_get(ic)))
+ it->item->unrealize_disabled = EINA_TRUE;
}
#endif
#if 0
(it->deco_all_view, elm_widget_mirrored_get(WIDGET(it)));
_elm_genlist_item_odd_even_update(it);
- _elm_genlist_item_state_update(it, NULL);
+ _elm_genlist_item_state_update(it);
#if 1 // FIXME: difference from upstream
if (GL_IT(it)->wsd->reorder_mode)
// 1. Add resize callback for multiline entry.
// 2. Do not unrealize it for focus issue
// ps. Only for entry because of performnace
- if (!strcmp("elm_layout", evas_object_type_get(ic)))
+ if (!strcmp("elm_entry", evas_object_type_get(ic)))
{
- // If editfield style, it can have entry.
- const char *group;
- edje_object_file_get(elm_layout_edje_get(ic), NULL, &group);
- if (group && !strncmp("elm/layout/editfield/", group, 20))
- {
- evas_object_event_callback_add
- (ic, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, it);
- it->item->unrealize_disabled = EINA_TRUE;
- }
-
- }
- else if (!strcmp("elm_entry", evas_object_type_get(ic)))
- {
- evas_object_event_callback_add
- (ic, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, it);
+ if (!elm_entry_single_line_get(ic))
+ evas_object_event_callback_add
+ (ic, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, it);
it->item->unrealize_disabled = EINA_TRUE;
}
#endif
int in,
Eina_Bool calc)
{
- Item_Cache *itc = NULL;
const char *treesize;
char buf[1024];
int tsize = 20;
if (it->item->order_num_in != in)
{
_item_order_update(EINA_INLIST_GET(it), in);
- _elm_genlist_item_state_update(it, NULL);
+ _elm_genlist_item_state_update(it);
_elm_genlist_item_index_update(it);
}
return;
(it->itc->decorate_all_item_style))
_decorate_all_item_realize(it, EINA_FALSE);
- _elm_genlist_item_state_update(it, itc);
+ _elm_genlist_item_state_update(it);
_elm_genlist_item_index_update(it);
}
Eina_Bool down = EINA_FALSE;
int y, dy, diff;
- dy = 6 * elm_config_scale_get();
+ dy = 20 * elm_config_scale_get();
t = ((0.0 > (t = ecore_loop_time_get()
- GL_IT(it)->wsd->start_time)) ? 0.0 : t);
sd->group_item_width = mw;
sd->group_item_height = mh;
}
- else if ((!sd->item_width) && (it->item->type == ELM_GENLIST_ITEM_NONE))
+ else if ((!sd->item_width) &&
+ (it->item->type == ELM_GENLIST_ITEM_NONE))
{
sd->item_width = mw;
sd->item_height = mh;
#if GROUP_ITEMS_FEATURE
git->item->want_realize = EINA_FALSE;
#else
- _item_unrealize(git, EINA_TRUE);
+ evas_object_hide(VIEW(git));
#endif
}
if (it->realized)
{
evas_object_geometry_get(it->base.view, &x, &y, &w, &h);
-
- /* check item which displays more than half of its size */
- if (ELM_RECTS_INTERSECT
- (x + (w / 2), y + (h / 2), 0, 0, sx, sy, sw, sh))
- items = eina_list_append(items, it->base.access_obj);
+ items = eina_list_append(items, it->base.access_obj);
if (!it->base.access_order) continue;
evas_object_smart_member_add(VIEW(it), GL_IT(it)->wsd->pan_obj);
elm_widget_sub_object_add(WIDGET(it), VIEW(it));
_elm_genlist_item_odd_even_update(it);
- _elm_genlist_item_state_update(it, NULL);
+ _elm_genlist_item_state_update(it);
edje_object_signal_emit
(it->deco_all_view, "elm,state,decorate,disabled", "elm");
GL_IT(it)->wsd->multi_touched = EINA_TRUE;
GL_IT(it)->wsd->prev_mx = ev->canvas.x;
GL_IT(it)->wsd->prev_my = ev->canvas.y;
- /*
- if (!GL_IT(it)->wsd->wasselected)
- _item_unselect(it);
- GL_IT(it)->wsd->wasselected = EINA_FALSE;
- */
if (it->long_timer)
{
ecore_timer_del(it->long_timer);
}
static Eina_Bool
-_idle_process(void *data,
- Eina_Bool *wakeup)
-{
- Elm_Genlist_Smart_Data *sd = data;
-
- if (_queue_process(sd) > 0) *wakeup = EINA_TRUE;
- if (!sd->queue)
- {
- return ECORE_CALLBACK_CANCEL;
- }
-#if GENLIST_FX_SUPPORT
- if (sd->fx_first_captured)
- _elm_genlist_fx_clear(ELM_WIDGET_DATA(sd)->obj);
-#endif
- return ECORE_CALLBACK_RENEW;
-}
-
-static Eina_Bool
_item_idle_enterer(void *data)
{
- Eina_Bool wakeup = EINA_FALSE;
Elm_Genlist_Smart_Data *sd = data;
- Eina_Bool ok = _idle_process(data, &wakeup);
- if (wakeup)
+ if (sd->prev_viewport_w == 0) return ECORE_CALLBACK_RENEW;
+ if (_queue_process(sd) > 0)
{
// wake up mainloop
+ // Job always be alive because idle_enterer should be alive
if (sd->calc_job) ecore_job_del(sd->calc_job);
sd->calc_job = ecore_job_add(_calc_job, sd);
}
- if (ok == ECORE_CALLBACK_CANCEL) sd->queue_idle_enterer = NULL;
+ if (!sd->queue)
+ {
+ sd->queue_idle_enterer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
- return ok;
+#if GENLIST_FX_SUPPORT
+ _elm_genlist_fx_clear(ELM_WIDGET_DATA(sd)->obj, EINA_FALSE);
+#endif
+ return ECORE_CALLBACK_RENEW;
}
static void
_scroll_animate_start_cb(Evas_Object *obj,
void *data __UNUSED__)
{
+#if GENLIST_FX_SUPPORT
+ _elm_genlist_fx_clear(obj, EINA_FALSE);
+#endif
evas_object_smart_callback_call(obj, SIG_SCROLL_ANIM_START, NULL);
}
_scroll_animate_stop_cb(Evas_Object *obj,
void *data __UNUSED__)
{
+#if GENLIST_FX_SUPPORT
+ _elm_genlist_fx_clear(obj, EINA_FALSE);
+#endif
evas_object_smart_callback_call(obj, SIG_SCROLL_ANIM_STOP, NULL);
}
}
static void
-_elm_genlist_fx_clear(Evas_Object *obj)
+_elm_genlist_fx_clear(Evas_Object *obj, Eina_Bool force)
{
ELM_GENLIST_DATA_GET(obj, sd);
Proxy_Item *pi;
Elm_Gen_Item *it;
+ if ((!force) && (!sd->fx_first_captured)) return;
+
EINA_LIST_FREE(sd->capture_before_items, pi)
{
if ((pi->it) && (GL_IT(pi->it))) GL_IT(pi->it)->has_proxy_it = EINA_FALSE;
#if GENLIST_FX_SUPPORT
if (sd->fx_mode)
{
- _elm_genlist_fx_clear(obj);
+ _elm_genlist_fx_clear(obj, EINA_TRUE);
sd->genlist_clearing = EINA_TRUE;
sd->rendered = EINA_FALSE;
}
#endif
#if GENLIST_FX_SUPPORT
- if (GL_IT(it)->wsd->fx_first_captured)
- _elm_genlist_fx_clear(ELM_WIDGET_DATA(GL_IT(it)->wsd)->obj);
+ _elm_genlist_fx_clear(ELM_WIDGET_DATA(GL_IT(it)->wsd)->obj, EINA_FALSE);
#endif
if (GL_IT(it)->wsd->update_job) ecore_job_del(GL_IT(it)->wsd->update_job);
if (!it->item->block) return;
EINA_SAFETY_ON_NULL_RETURN(itc);
it->itc = itc;
+
it->item->nocache_once = EINA_TRUE;
elm_widget_stringlist_free(it->texts);
}
}
#if GENLIST_FX_SUPPORT
- if (sd->fx_first_captured)
- _elm_genlist_fx_clear(ELM_WIDGET_DATA(sd)->obj);
-
+ _elm_genlist_fx_clear(ELM_WIDGET_DATA(sd)->obj, EINA_FALSE);
#endif
if (sd->calc_job) ecore_job_del(sd->calc_job);
sd->calc_job = ecore_job_add(_calc_job, sd);
Elm_Gen_Item *it = (Elm_Gen_Item *)item;
ELM_GENLIST_ITEM_CHECK_OR_RETURN(item);
- if (!it) return;
if (mode >= ELM_OBJECT_SELECT_MODE_MAX)
return;
if (it->select_mode != mode)
ELM_GENLIST_ITEM_CHECK_OR_RETURN(item, ELM_OBJECT_SELECT_MODE_MAX);
- if (!it) return ELM_OBJECT_SELECT_MODE_MAX;
-
return it->select_mode;
}
pi->proxy = evas_object_image_filled_add
(evas_object_evas_get(ELM_WIDGET_DATA(GL_IT(it)->wsd)->obj));
- if (!pi->proxy) return EINA_FALSE;
+ if (!pi->proxy)
+ {
+ free(pi);
+ return NULL;
+ }
evas_object_clip_set(pi->proxy, evas_object_clip_get(GL_IT(it)->wsd->pan_obj));
evas_object_smart_member_add(pi->proxy, GL_IT(it)->wsd->pan_obj);
evas_object_hide(pi->proxy);
Elm_Gen_FX_Item *fx_done_it = data;
Elm_Genlist_Smart_Data *sd = GL_IT(fx_done_it->it)->wsd;
- if ((!fx_done_it) || (!fx_done_it->it) || (!sd)) return;
+ if (!fx_done_it) return;
+ if ((!fx_done_it->it) || (!sd)) return;
evas_object_image_source_visible_set(fx_done_it->proxy, EINA_TRUE);
evas_object_lower(fx_done_it->proxy);
Eina_List *l;
Elm_Genlist_Smart_Data *sd = GL_IT(fx_done_it->it)->wsd;
- if ((!fx_done_it) || (!fx_done_it->it) || (!sd)) return;
+ if (!fx_done_it) return;
+ if ((!fx_done_it->it) || (!sd)) return;
sd->fx_items = eina_list_remove(sd->fx_items, fx_done_it);
GL_IT(fx_done_it->it)->fi = NULL;
_elm_genlist_fx_items_make(obj);
if (!eina_list_count(sd->fx_items) || (sd->queue))
{
- _elm_genlist_fx_clear(obj);
+ _elm_genlist_fx_clear(obj, EINA_TRUE);
return;
}
{
elm_transit_effect_translation_add(fi->trans, fi->from.x, fi->from.y, fi->to.x, fi->to.y);
elm_transit_effect_color_add(fi->trans, 0, 0, 0, 0, 255, 255, 255, 255);
+ if ((!sd->pinch_zoom_mode) && (!sd->expanded_item))
+ elm_transit_effect_zoom_add(fi->trans, 0.8, 1.0);
}
else if (fi->type == ELM_GEN_ITEM_FX_TYPE_DEL)
{
+ _item_unhighlight(fi->it);
elm_transit_effect_translation_add(fi->trans, fi->from.x, fi->from.y, fi->to.x, fi->to.y);
elm_transit_effect_color_add(fi->trans, 255, 255, 255, 255, 0, 0, 0, 0);
+ if ((!sd->pinch_zoom_mode) && (!sd->expanded_item))
+ elm_transit_effect_zoom_add(fi->trans, 1.0, 0.8);
}
elm_transit_effect_add(fi->trans, _item_fx_op, fi, _item_fx_done);
elm_transit_del_cb_set(fi->trans, _item_fx_del_cb, fi);
Elm_Gen_Item *it;
Eina_Bool done = EINA_FALSE;
- if ((sd->queue) || (!sd->rendered) || (sd->queue_idle_enterer)) return EINA_FALSE;
+ if ((sd->queue) || (!sd->rendered)
+ || (sd->queue_idle_enterer) || (!sd->fx_mode)) return EINA_FALSE;
EINA_INLIST_FOREACH(sd->blocks, itb)
{