Summary:
when a few recursive event emissions are happening, and in some deep
recursive level a subscription to the same object is happening, the
subscription would just be executed when the complete recursion is done.
that is wrong. The subscription needs to be executed when the event is
called after the subscription is added, undepended from any recursive
level. That fixes that and adds a regression test for it.
This was discovered in e, since e gives a lot of error messages about a eo object
that is already freed. It turned out this object is returned from evas, and exactly
the above happened to the EFL_EVENT_DEL subscription of that object.
Test Plan: make check
Reviewers: tasn, cedric, stefan_schmidt
Subscribers: stefan_schmidt, netstar, zmike, raster, jpeg
Differential Revision: https://phab.enlightenment.org/D4656
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Summary: I had fixed some typos and some wrong expressions, such as capital letters, singular, and orders of groups in Edje and Eet API reference doxygen.
Test Plan: Doxygen Revision
Reviewers: stefan, cedric, raster, Jaehyun_Cho, jpeg
Subscribers: conr2d
Differential Revision: https://phab.enlightenment.org/D4666
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This fixes the following ERR message:
ERR<10589>:eina_safety /home/jpeg/e/core/efl/src/lib/ecore_evas/ecore_evas.c:3149
_ecore_evas_mouse_move_process_internal() safety check failed: cursor == NULL
Also support both Evas.Image and EO Efl.Canvas.Image classes.
Add a test case in elm_test (under "Icon").
I'm not so happy about this patch... it shows that the API
barrier between legacy and EO implemented for images may not
be such a great idea after all :(
The previous patch (b184874fa5) was preventing
post-event callbacks from triggering any form of input event,
including side-effects due to mouse,in. In fact by tracking
which exact events we want to post-process we can support
proper recursion. This fixes crashes in Bryce.
I'm not changing the documentation as this is still a dubious
code design.
Fixes T3144
Fixes T5157
See T3144 that I marked as Wontfix.
Bryce in E manually feeds events from a post-event callback
resulting in Evas going insane and leading to frequent crashes.
The ideal solution (for E) would be to ensure that everything works
smoothly, the input event data is valid up until the post-event cb
is called, etc... Unfortunately, with recursive events the exact
order of operations may be messed up: the post-event
I don't want to add yet more complexity to Evas events here (it's
already spaghetti all over the place) so I'm simply blocking any
new event feed when running the post-event callback list.
It's not possible to just freeze the events (I tried, it failed).
**********************
Some more explanation:
post-event callbacks are used to implement reverse-order logic
where the on-hold flag of an input event may be set by an event
listener that does not come first.
Here's a situation to illustrate: scroller A inside scroller B.
As events are propagated from children to parents (assuming the
propagate flag is set), we'd assume the events to go first to A
and then to B, which means a mouse wheel event would make the
inner-most scroller (A) scroll, and the outer-most scroller (B)
wouldn't budge.
But as things are designed, A and B are not simple evas objects,
and the actual event-catching object is a top-most transparent
rectangle (top-most in Z stack order). Since A is inside B, B's
rectangle BR is over A's rectangle AR, thus catches the wheel
event first. But in terms of UX we still want A to scroll, not B.
The solution then is to reverse the event processing order and
post-event callbacks are the way to do that. This comes with the
consequence that the event_info needs to remain valid until the
post-event is called, and stay the same (so that the on-hold flag
set by A can be read by B).
Recursive events (by explicit feed or modifying the canvas so
that mouse,in or mouse,out are triggered) mess with this logic,
and trigger the post-events too early (event is not fully
processed) or too late (event_info is not valid anymore... and
crash!).
Thanks @raster for explaining the goal of post-event callbacks!
This reverts commit b8beb6834b.
this now actually works... for some mysterious reason... ? :/ i am
baffled. go back in until we can find the issue then...
Summary: I had fixed some typos and some wrong expressions, such as capital letters, singular, and orders of groups in API reference doxygen.
Test Plan: Doxygen revision
Reviewers: stefan, cedric, raster, Jaehyun_Cho, jpeg
Subscribers: conr2d
Differential Revision: https://phab.enlightenment.org/D4658
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
On systems where this happens it'll probably happen a lot, so
we don't want to continuously log this, but since it's definitely
showing a bug somewhere (efl or kernel) it probably should be an ERR.
After a long search I found that fileselector was not calling
super.group_del on deletion, leading to the use of dangling pointers.
So let's verify that group_del is properly called.
See T4598
In this case data_scope_get is more appropriate as the data is
indeed stored on the stack (function scope) and not somewhere else.
After this last fix I see no eo_debug error logs in elementary test.
Yay! eo_debug is now usable :)
The data class should be specified for debug purposes.
Also, this fixes invalid uses inside the smart object
implementation where it assumed that the smart data was part
of the eo data. It may not (legacy objects).
In case of manual free, as is heavily used by Evas, we can't really
print an ERR if there are still references before free has been
called.
This may not be ideal from a pure EO point of view but considering
how Evas uses manual free this is the best solution to avoid
polluting debug logs.
This changes the following message when the object is referencing
its own data. Also lowers from ERR to WRN and adds the class
name for the referenced data.
ERR<17450>:eo /home/jpeg/e/core/efl/src/lib/eo/eo_private.h:337
_efl_unref_internal() in /home/jpeg/e/core/efl/src/lib/eo/eo.c:620:
func '_efl_object_call_end' Data of object 0x400000021008db58 is
still referenced by object 0x400000021008db58
Note that evas and elm have a few calls to efl_data_ref(obj, NULL)
which are imho quite ugly: not using the return value and not
specifying the data class. I'm keeping them as-is for now.
This fixes some of the occurences of the following error message
when using eo_debug:
ERR<23101>:eo /home/jpeg/e/core/efl/src/lib/eo/eo.c:1955
efl_data_scope_get() Tried getting data of class 'Elm.Widget'
from object of class 'Edje.Object', but the former is not a
direct inheritance of the latter.
If we're going to call efl_isa, then let's at least do it before
efl_data_scope_get.
Summary:
When mbe got focus the input panel will be shown.
Otherwise, input panel will be hidden.
If the mbe still got focus then input panel hide by user action.
there is no way to reactivate the input panel in case.
Reviewers: woohyun, jpeg, cedric, Hermet
Reviewed By: jpeg
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D4661
Summary:
The axis type joystick event could occur without user's control if joystick is too sensitive.
The deadzone prevents this unnecessary event. The default value is 200.
The event value for an axis is a signed integer between -32767 and +32767.
Test Plan: Using example
Reviewers: raster, cedric, jpeg
Reviewed By: jpeg
Subscribers: stefan_schmidt
Differential Revision: https://phab.enlightenment.org/D4654
Previous code here would store incorrect values into the
window->input rectangle. These values should be what is actually
getting set in the wl_region. This code also fixes an issue when
setting input region for transparent/alpha windows by clearing out
any pending input region (wl_surface_set_input_region(surface, null)).
Reviewed-By: Derek Foreman <derekf@osg.samsung.com>
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>