Summary:
We track list presence already, so we can just do a boolean test instead
of an O(n) lookup.
Depends on D6349
Reviewers: devilhorns
Reviewed By: devilhorns
Subscribers: cedric, #committers, zmike
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D6350
in the provider we accidently flattend out the widget history by
returning the wrong parent. However, this flattening code was required
for the element focus code of the two generic widgets, so the item is
found for every widget, in every subtree.
It is my understanding that some items view are created with efl_add directly
and manipulate VIEW directly with Eo new API. This clash with the inconsistent
behavior that evas_object_del expect. To work around this, we track object life
by explictely relying on efl_wref_add while holding the pointer to the object.
This changes a lot of things all across the EFL. Previously,
methods tagged @const had both their external prototype and
internal impl generated with const on object, while property
getters only had const on the external API. This is now changed
and it all has const everywhere.
Ref T6859.
This reverts commit f0a0da9f44.
As per T5938 seems we really want to restore a totally wrong
behaviour, without taking care of newer apps being broken.
I revert this for now, but I'm still convinced that we must
find a way to let user use a sane ordering for newer app.
I'm thinking about adding an api in genlist to let the widget
use the new sane ordering, something like
elm_genlist_fixed_ordering_set(bool) so that new apps can use
this to ensure correct behaviour. zmike what do you think about
this solution?
Commit fd82c2521 has changed the behaviour of item_next/prev_get()
in case of genlist with group items (not tree).
The lagacy behaviour was to tread normal items and group items
in a flat way, like if group items was on the same level of
the children normal items.
As the commit already implement bug compatibility, seems to me
the case to restore also this case. Note that this changes only
apply to legacy genlist (I think).
Let me know if this broke something for you...as touching genlist
code is always an "I hope this is right" operation.
This patch implements bug compatibility.
genlist internally uses both a tree structure with Eina_List and a flat
Eina_Inlist to track its items. ALL of the items are in the inlist while
subitems appear in their parent's list. As a consequence both lists must
be kept in sync pretty tightly. Obviously this is not done at all and
has led to countless bugs, as soon as tree or groups are used:
- Invalid order of items (visually)
- Invalid order of items with sorted_insert
- Glitches in the matrix
- Crashes with sorted_insert
- Odd/even styles not properly set
- Promote/demote functions broken by design
- Developers send to psychiatric hospitals
- Etc...
Legacy genlist (1.19 and before) used an inlist order that basically
didn't make sense, as it didn't follow the logical order of elements (as
they appear visually). Unfortunately this has "worked" (really, that's a
huge stretch to use this word here) for a long time this way. As a
consequence, some applications (*cough* empc *cough*) have relied on
this order to implement "next album" or "previous album" where the
album title is a group node.
By changing the order of items in the inlist, this has broken the
assumptions made above, and ends up in cases that return NULL, leading
to SEGV. Sure, the app should have checked NULL, but that's not really
the point here. The behavior has been changed.
This patch implements "fixes" for the following functions:
- elm_genlist_first_item_get(): Don't return a parent
- elm_genlist_last_item_get(): Return a parent
- elm_genlist_item_next_get(): return a parent upon reaching the last child
- elm_genlist_item_prev_get(): return a child when a parent is passed
Important notes:
- This does not cover 100% behavior compatibility here. The only way to
have it would be to simply revert the entire genlist code to its
original version and never touch it again, ever.
- An explicit API is required for an application to specify which API
level it targets, so that we can cherry-pick which bug compatibility
features we want to enable. We are already doing this for EDC,
unfortunately.
@fix
fix T5938
Signed-off-by: Mike Blumenkrantz <zmike@osg.samsung.com>
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
better rely on the adapter and wait for realization so the adapter is
wether created or not even created but used with content. This fixes
item content focus, crashes at startup and a freeze in genlist test!
elementary_test -to genlist
-> LOTS of warnings, when creating the genlist, as the items aren't
ready yet. This just avoids the WRN as recalc will happen later anyway.
Following @taxi2se's recommendation. This is indeed a focus method, and
Widget already inherits from Focus.Object.
Ping @bu5hm4n who probably wants to adapt this further.
Ref T5363
Summary:
Send signal EFL_ACCESS_STATE_ANIMATED when dragging starts and stops to atspi clients and also set EFL_ACCESS_STATE_ANIMATED
when reorder mode is enabled.
Test Plan: When reorder happens atspi client should receive object:state-changed:animated signal.
Reviewers: kimcinoo, shilpasingh
Reviewed By: shilpasingh
Subscribers: cedric, govi, rajeshps, jpeg
Differential Revision: https://phab.enlightenment.org/D5515
Conditions:
- style is "double_label"
- the is some content for items (i.e elm_label)
- elm_genlist_filter set was once called after genlist creation with
NULL data
- label_get callback uses elm_genlist_item_prev_get on its current item
- at least one item is added as a sub-item
- ~2 blocks of items are added afterwards
- items are added quickly while holding 'enter' on an elm_button
@fix
This thing is used by only 2 EO APIs that are marked as @beta. I wonder
if the @beta tag or the ptr() expression made it work for eolian,
because it simply wasn't defined in EO.
I'm renaming it just so that it's more consistent with the new names
used by atspi (and EO API in general).
When using reusable content, genlist preserves old object's state and is
expecting reusable_content_get callback to change all needed properties.
But there was an inconsistency: it was silently re-enabling the old content.
@fix
This will be used to solve issues around style_set:
if the widget is legacy or pure eo we may need to select a different
style. So in the constructor we need to know whether we are legacy or
eo. Note that calling style_set in finalize only is too late as we would
lose information such as efl_text_set() called inside efl_add().