On Wed, 8 Feb 2012 18:32:49 +0900 Hyoyoung Chang <[email protected]> said:
in svn :) (a little bit hacky.. but hey!)
> Dear all.
>
> 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"
>
> Thank you.
--
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler) [email protected]
------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel