Subject: [E-devel] [patch] evas - preventing retard mouse event
process in evas_object_event_callback_call
I made a small patch to prevent retard mouse event process.
At certain circumstance (like as genlist select callback + naviframe
item push),
some events are repeat processed.
If some evas_objects're iterating in evas_event_feed_mouse_up and
mouse_out event's emitted by other interrupt(such as naviframe item
push),
then some evas_objects events are multiple processed by
evas_object_event_callback_call.
More elaborating it with a example.
There are a genlist and a multibuttonentry on genlist item.
When a user clicks multibuttonentry then evas will process mouse down
and up.
in evas_event_feed_mouse_up, it gets evas object list to process mouse
events.
Then in the evas object list, there are two evas objects - rect and
textblock.
Two objects have its own parents.
the rect has below parents.
----------------------------------------
edje - genlist item
elm_genlist_pan
edje
multibuttonentry
box
entry
els_scroller (0x2a601788)
rect <== the rect
the textblock has below parents.
----------------------------------------------
edje - genlist item
elm_genlist_pan
edje
multibuttonentry
box
entry
els_scroller(0x2a601788)
edje
elm_pan
edje
textblock <== the textblock
(note : two evas object have same parent (els_scroller))
So normally mouse up callbacks event propagates to its own parent.
the rect is processed to genlist item. and the textblock is processed
to genlist item.
but when els_scroller is processed, it's blocked by checking event
type and event id checking.
Mouse Up(rect) -> Mouse Up(textblock)
event_id (3) -> event_id (3)
evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type
type, void *event_info, int event_id)
{
...
if ((obj->delete_me) || (!obj->layer)) return;
if ((obj->last_event == event_id) &&
(obj->last_event_type == type)) return;
<=== blocked
However if naviframe item is pushed in the middle
of mouse up processing.
It can break into mouse up. So it's processed like below.
Mouse Up(rect) -> Mouse Out(rect) -> Mouse Out(textblock) -> Mouse
Up(textblock)
event_id (3) -> event_id(4) -> event_id(4)
-> event_id(3)
(note Mouse_Out is made by naviframe item push for event freezing)
If that, there's no mechanism to block that repeat processing same
event.
So I suggest this patch.
This patch blocks old events if there's no reason to process.
(It blocks old mouse_up event because mouse_out is processed.)
And I think it also clear the bug in
"[E-devel] event repetition with elm_naviframe/elm_genlist"
SVN revision: 67879
if file was chaned by somebody, it was added to dirty list during cache request.
currently this dirty image added to cache->dirty list and never freed until image shutdown.
but dirty image of chaned file never used so add delete code for memory efficiency.
and fix bad indentation.
SVN revision: 67604
'gl_flavor_gles' when checking for sgx support (if we reset
gl_flavor_gles here, then the autofoo output always returns 'NO' for
gles.
SVN revision: 67572
void pointer causing a segfault. The attached patch fixes the issue
and allows an expedite run to complete.
By: Will Newton <will.newton@gmail.com>
SVN revision: 67543
option.
It should have been OR instead of AND operator.
When the image object alpha is on "OR" the rotation angle
is not "0", direct rendering isn't allowed. However,
allow direct rendering if EVAS_GL_DIRECT_OVERRIDE=1 is set.
SVN revision: 67521
This optimization is significant for rendering to a large surface
because it'l save an extra copy overhead as well as an extra rendering pass.
To enable it, you can give EVAS_GL_OPTIONS_DIRECT hint in the surface
config options_bits. The following conditions have to be met in order
for evas to render directly into the Evas' window. If they are not met, the
engine will fallback to rendering to an FBO as it normally does.
conditions:
1.) All the GL calls have to be called using the pixel_get_callback function.
This is necessary for the evas object order to be maintained.
2.) Alpha must be disabled on the image ojbect that renders evas_gl.
3.) No rotation allowed.
One way to override above condition is to set EVAS_GL_DIRECT_OVERRIDE=1 but
there is no guarantee in its behavior.
Currently, this optimization is added for gl_x11 engine only.
SVN revision: 67388
Make the functions static as well to avoid gcc warnings like this:
warning: 'ALPHA_SSE3' is static but used in inline function 'sub4_alpha_sse3' which is not static
Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org>
SVN revision: 67355
This really just filters them out. The solution is not complete, nor is
it the best one. But this fixes the bugs for the meanwhile.
SVN revision: 67327
We only check the value of references if EVAS_CSERVE isn't defined, so
no need to define it or assign it if EVAS_CSERVE isn't defined.
SVN revision: 67304
be 1.1 (or 1.5) for the last release. too late. THIS is why i'm sick
and tired of all the bloody separate libs that have to be versiioned
and build and released separately. :( too many places to go fix up per
release.
SVN revision: 67284
found was causing compiler optimizations to, in some compielr versions
and optimization levels, to skip a func in the eva stest suites...
which is wrong. no more pure mumbo. gone entirely.
evas_textblock_string_escape_get() was the one.
SVN revision: 67266
if the eng setup has a NULL surface, and if the RenderEngine has an
existing surface, that means we are hiding/closing the window, and
thus should free the existing RenderEngine Window.
SVN revision: 67160
to ensure backward compatibility. Previously, the user
simply declared a Evas_GL_Config object but this can
cause problems if more config options are added. So,
we have Evas allocate the config object for the user
so it can handle addition in the future.
Also, added some safety code around _extensions_init
SVN revision: 67141
old version of this w/ the 3 includes Should be working, but I've
tested it on 2 machines now, and it fails on both with those lines in
there, so I am removing them).
Make wayland_egl engine Actually work and draw stuff now (too many
code changes to list them all separately). See http://i.imgur.com/i2eBE.png.
SVN revision: 67128
On macosx i386, that code fails because even though __VEC__ is defined,
the compiler doesn't understand the 'vector' keyword (that macro is
irrelevent here). So there was no way to make evas compile for ppc if
altivec was not supported by the compiler.
SVN revision: 66966
* This feature requires libOSMesa to be installed.
One caveat with OSMesa is that a surface config (ie. Depth Buffer and etc)
is associated with a context rather than a surface, which is the case
in EvasGL. So for now, when a user specifies a surface config, it gets
associated with the first context that the surface does a make current to.
For typical usage case, this shouldn't be a prolem. Will need to fix it
eventually.
SVN revision: 66896
Handle 'moving' nad 'resizing' of objects if they are not 'frame objects'
Add code for frame_object_get/set functions.
Fix some formatting.
SVN revision: 66536
Subject: Drawing objects by pixman
* Extend pixman support to allow other operations to use
pixman when doing software rendering. On x86 this isn't useful
but on ARMv7 with NEON pixman happens to do better with image
blending and nearest scale blending.
* Add tiled rotator for 32bit display as an option.
SVN revision: 66478
intel drivers don;'t like it for some odd reason - i'm trying to track
it down but i can't sanely try middlegrounds right now (eg dont
dlopen/dlsym but actually directly assign symbols etc.), so back out
and let's figure this out before it goes back in :(
SVN revision: 66308
1. Make Obj replacement and Par Sep less confusing.
2. We'll may, at some point, use the Unicode NewLine char instead of \n.
so it's now easily replaceable.
SVN revision: 66255
currently evas_object_event_callback_call checks _evas_event_counter
for preventing object's callback called several times in one evas event.
but it use global variable(_evas_event_counter), it can be changed while
procssing same event.
for example , evas_event_feed_mouse_up.
If there are several object in e->pointer.object.in and object 1's callback
create new evas event, object 2 cannot now event id.
so I change callback call api, and object callbacks can decide wheather it deal with that event.
SVN revision: 66234