I found a solution,and sorry for the late reply, I was on leave.

In evas_event_feed_multi_move() function, at the else part of
if(e->pointer.mouse_grabbed>0) we have,

        /* get all new in objects */
        ins = evas_event_objects_event_list(e, NULL, x, y);
        /* go thru old list of in objects */
        copy = evas_event_list_copy(e->pointer.object.in);
        EINA_LIST_FOREACH(copy, l, obj){
        if (evas_object_is_in_output_rect(obj, x, y, 1, 1) &&
                ((evas_object_clippers_is_visible(obj)) ||
                 (obj->mouse_grabbed)) &&
                 (eina_list_data_find(ins, obj)) &&
                 (!evas_event_passes_through(obj)) &&
                 (!evas_event_freezes_through(obj)) &&
                  (!obj->clip.clipees) &&
                 ((!obj->precise_is_inside) ||
                 (evas_object_is_inside(obj, x, y)))){
                ......
                }
        .....
        }

If you look at that - say the "copy" contains the objects of first
touch point, but the current event
details are for the second touch point. So
evas_object_is_in_output_rect(obj, x, y, 1, 1) fails,
 as there is no such object in "copy" for the second touch point.

However "ins" contains the objects of the second touch point.
so looping "ins" instead of "copy" solves the problem.

Regards

HariHaraSudhan







On Fri, Nov 11, 2011 at 3:41 PM, Carsten Haitzler <ras...@rasterman.com> wrote:
> On Fri, 11 Nov 2011 13:18:20 +0530 HariHara Sudhan <h...@emo2.com> said:
>
>> OK thank you, I think i have a lead. I will work on a solution.
>
> let me know what's happening - i find it odd that evas would just skip events
> unless it was specifically meant to - eg event happened outside that obj, 
> grabs
> were in effect or there were no callbacks set.
>
>> On Fri, Nov 11, 2011 at 12:25 PM, Carsten Haitzler <ras...@rasterman.com>
>> wrote:
>> > On Fri, 4 Nov 2011 20:11:12 +0530 HariHara Sudhan <h...@emo2.com> said:
>> >
>> > timestamp doesn't matter. it calls the callbacks on the objects the events
>> > are going to go to. if the mouse is grabbed (first press grabs mouse to the
>> > objects pressed) then callbacks are reported relative to grabbed objects
>> > until last finger is released. if (obj->callbacks) checks to see if object
>> > has any cb's at all. if it doesn't - don't other doing anything. the target
>> > object(s) don't have callbacks set at all. if inside your callbacks you are
>> > deleting objects or changing their callbacks.. you may get this. if objects
>> > are hidden, clipped out or otherwise not visible - they wont be called
>> > either. evas is checking for geometry and visibility here for the events.
>> >
>> >> As you Said ecore process all the events, and passes on to evas.
>> >> In evas at two points events are filtered.
>> >>
>> >> 1. evas_event_feed_multi_move()
>> >> 2.evas_object_event_callback_call()
>> >>
>> >> in evas_object_event_calback_call the if(obj->callbacks) fail for
>> >> events two consecutive events at same time.
>> >> only one of them returns value the other one returns NULL.
>> >>
>> >> in evas_event_feed_multi_move(), the if condition to check for
>> >> checking objects in position,visibility and etc fails for several
>> >> events.
>> >>
>> >> i'm not able to find why the condition fails in both these points.
>> >> Is the reason due to pouring events for the same timestamp?
>> >> any possible solutions?
>> >>
>> >>
>> >> thanks in advance
>> >>
>> >> Regards
>> >> HariHaraSudhan
>> >>
>> >> On Fri, Nov 4, 2011 at 4:58 AM, Carsten Haitzler <ras...@rasterman.com>
>> >> wrote:
>> >> > On Thu, 3 Nov 2011 19:36:11 +0530 HariHara Sudhan <h...@emo2.com> said:
>> >> >
>> >> >> Mouse gives events on a minimum of 8ms gap, but i get 2-3 touch events
>> >> >> within a ms.
>> >> >> So that is a lot of events.
>> >> >> But some events generated on ecore side, which are pushed into event
>> >> >> queue using _ecore_mouse_move are not reflected as evas_callbacks.
>> >> >> Some times it generates 3-4 events on ecore side but i get only one
>> >> >> callback on evas side.
>> >> >> here is the sample
>> >> >>
>> >> >>
>> >> >> evas id=2 x=578 y=66
>> >> >> eCore id=2 x=577 y=66
>> >> >>
>> >> >> evas id=2 x=577 y=66
>> >> >> eCore id=2 x=577 y=65
>> >> >> eCore id=2 x=578 y=65
>> >> >>
>> >> >> evas id=2 x=577 y=65
>> >> >>
>> >> >> evas id=2 x=578 y=65
>> >> >> eCore id=1 x=153 y=50
>> >> >> eCore id=1 x=153 y=51
>> >> >>
>> >> >> evas id=1 x=153 y=51
>> >> >> eCore id=2 x=578 y=64
>> >> >> eCore id=1 x=153 y=52
>> >> >> eCore id=2 x=578 y=65
>> >> >> eCore id=1 x=153 y=53
>> >> >> eCore id=2 x=579 y=65
>> >> >> eCore id=1 x=153 y=54
>> >> >> eCore id=2 x=579 y=66
>> >> >> eCore id=2 x=579 y=67
>> >> >>
>> >> >> evas id=2 x=579 y=67
>> >> >> eCore id=1 x=153 y=55
>> >> >> eCore id=2 x=580 y=67
>> >> >> eCore id=1 x=153 y=56
>> >> >> eCore id=1 x=153 y=57
>> >> >> eCore id=1 x=152 y=57
>> >> >> eCore id=2 x=580 y=68
>> >> >> eCore id=2 x=581 y=68
>> >> >>
>> >> >>
>> >> >> this is where my problem is,a lot of ecore events are generated but on
>> >> >> eas side i get only few.
>> >> >>
>> >> >> I couldn't find why some events are not reflected in evas_callbacks.
>> >> >>
>> >> >> is there a way to process the touch events as a seperate thread in
>> >> >> ecore_event_procesing? or any other solution for this problem?
>> >> >
>> >> > threads have nothing to do with this other than complicating things. 
>> >> > they
>> >> > don't solve anything, and won't. (unless u are spending large amounts of
>> >> > cpu just handling the input event stream and making ecore events out of
>> >> > it).  so you get ecore events - fine, but evas isnt calling back for all
>> >> > events... that shouldn't happen (unless position hasn't changed etc.)
>> >> >
>> >> >> Regards
>> >> >> HariHaraSudhan
>> >> >>
>> >> >> On Thu, Nov 3, 2011 at 6:34 PM, HariHara Sudhan <h...@emo2.com> wrote:
>> >> >> > Sent from my Windows Phone
>> >> >> > From: Carsten Haitzler
>> >> >> > Sent: 11/3/2011 4:20 PM
>> >> >> > To: Enlightenment developer list
>> >> >> > Cc: HariHara Sudhan
>> >> >> > Subject: Re: [E-devel] Ecore_processing mtdev events
>> >> >> > On Wed, 2 Nov 2011 19:38:09 +0530 HariHara Sudhan <h...@emo2.com>
>> >> >> > said:
>> >> >> >
>> >> >> >> Hi all,
>> >> >> >> I've lately added mtdev to receive touch events and process them as
>> >> >> >> ecore mouse events( as mpx).
>> >> >> >> i get the window id by the original mouse movements and use that id
>> >> >> >> for passing touch events for that window.
>> >> >> >>
>> >> >> >> i get the slot id from mtdev. Passing the slot id(starting from 1)
>> >> >> >> makes ecore think it as mpx style events and the callbacks for 
>> >> >> >> single
>> >> >> >> finger touch are also working fine. But when using two or more
>> >> >> >> fingers lots of events are generated. When getting data from
>> >> >> >> callback of EVAS_CALLBACK_MULTI_MOVE, lot of touch move events
>> >> >> >> aren't properly received for both the touch points.
>> >> >> >>
>> >> >> >> I'm not sure why some events are discarded when using two or more
>> >> >> >> fingers,but i think it might be discarded due to ecore queue
>> >> >> >> overflow.
>> >> >> >>
>> >> >> >> now i'm thinking of having a separate queue in ecore just to process
>> >> >> >> the touch events and thread them so that both touch and other events
>> >> >> >> gets processed in time.
>> >> >> >> Does anyone know what the reason for discarding of events might be??
>> >> >> >> if possible can anyone get me a solution for this problem too.
>> >> >> >>
>> >> >> >> Thanks in advance!
>> >> >> >
>> >> >> > hmm - the intent is u get an event whenever either one of the points
>> >> >> > touched reports a movement - thats the intention. yes- you may get a
>> >> >> > lot of events. that depends on the hardware and xorg itself. as such
>> >> >> > ecore doesnt discard events as it has no fixed size buffer - it won't
>> >> >> > overflow. it will pass on all events. it only avoids generating 
>> >> >> > events
>> >> >> > for the same touch point.
>> >> >> >
>> >> >> >
>> >> >> > --
>> >> >> > ------------- Codito, ergo sum - "I code, therefore I am"
>> >> >> > -------------- The Rasterman (Carsten Haitzler)
>> >> >> >  ras...@rasterman.com
>> >> >> >
>> >> >>
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Regards
>> >> >> HariHaraSudhan
>> >> >>
>> >> >
>> >> >
>> >> > --
>> >> > ------------- Codito, ergo sum - "I code, therefore I am" --------------
>> >> > The Rasterman (Carsten Haitzler)    ras...@rasterman.com
>> >> >
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Regards
>> >> HariHaraSudhan
>> >>
>> >
>> >
>> > --
>> > ------------- Codito, ergo sum - "I code, therefore I am" --------------
>> > The Rasterman (Carsten Haitzler)    ras...@rasterman.com
>> >
>> >
>>
>>
>>
>> --
>> Regards
>> HariHaraSudhan
>>
>
>
> --
> ------------- Codito, ergo sum - "I code, therefore I am" --------------
> The Rasterman (Carsten Haitzler)    ras...@rasterman.com
>
>



-- 
Regards
HariHaraSudhan

------------------------------------------------------------------------------
RSA(R) Conference 2012
Save $700 by Nov 18
Register now
http://p.sf.net/sfu/rsa-sfdev2dev1
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to