Page MenuHomePhabricator

Evas: Add support for per seat locks and modifiers.
ClosedPublic

Authored by iscaro on Nov 18 2016, 12:30 PM.

Details

Diff Detail

Repository
rEFL core/efl
Branch
locks_and_mods
Lint
No Linters Available
Unit
No Unit Test Coverage
Build Status
Buildable 2819
Build 2884: arc lint + arc unit
iscaro updated this revision to Diff 10128.Nov 18 2016, 12:30 PM
iscaro retitled this revision from to Evas: Add support for per seat locks and modifiers..

Hello, could you guys please take a look when possible?

Please wait until D4406 is merged to integrate this series.

cedric accepted this revision.Nov 28 2016, 11:04 AM
cedric edited edge metadata.

This look quite straight forward to me. I will let @bdilly tests and push whenever you guys fill ready.

This revision is now accepted and ready to land.Nov 28 2016, 11:04 AM
In D4415#74460, @cedric wrote:

This look quite straight forward to me. I will let @bdilly tests and push whenever you guys fill ready.

Thanks for your review @cedric. Since all my previous commits are now merged, I will send a new version rebased with master ASAP. It will be easier to review.

iscaro updated this revision to Diff 10178.Nov 28 2016, 11:33 AM
iscaro edited edge metadata.

Rebasing with master.

bdilly edited edge metadata.Nov 28 2016, 4:11 PM

Not sure if related to the inline comment, but the pointer in / out logic seems buggy at the moment.
I've done a few tests here with two seats with mouses going over a few different evas objects and changing focus between them on click.
At some points when clicking on other object with a seat generates a pointer,out for the other seat.
I'll try to post a comprehensible log later.

src/lib/evas/canvas/evas_events.c
817

The second parameter, "child". Does it should be child or eo_child?
If child, are you sure it shouldn't be below line 824:

child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);

Otherwise you'll get the child of last interaction or eventually an unitialized child...

In D4415#74503, @bdilly wrote:

Not sure if related to the inline comment, but the pointer in / out logic seems buggy at the moment.
I've done a few tests here with two seats with mouses going over a few different evas objects and changing focus between them on click.
At some points when clicking on other object with a seat generates a pointer,out for the other seat.
I'll try to post a comprehensible log later.

Thanks for the review I will wait for the logs.

src/lib/evas/canvas/evas_events.c
817

Oops, this is inverted. The data_scope_get should be placed before _evas_object_pointer_data_get()

pointer,in and pointer,out logic seems to be wrong.
Please test the following scenario with the recently added evas_multiseat_events example (using two seats with pointers):

Only use one pointer, move over the blue rectangle, click (it'll be focused), and move out.

You see he sends a pointer,in for the second seats (not used) when you click over this object - line 192.
And when you move out, pointer,out will be emitted for both seats - line 212.

[[ http://pastebin.com/KddutvUv

log ]]
In D4415#74637, @bdilly wrote:

pointer,in and pointer,out logic seems to be wrong.
Please test the following scenario with the recently added evas_multiseat_events example (using two seats with pointers):

Only use one pointer, move over the blue rectangle, click (it'll be focused), and move out.

You see he sends a pointer,in for the second seats (not used) when you click over this object - line 192.
And when you move out, pointer,out will be emitted for both seats - line 212.

[[ http://pastebin.com/KddutvUv

| log ]]

Apparently if I invert the seats, instead of using "whatever", I use the default seat, things work as expected.

iscaro updated this revision to Diff 10198.Nov 30 2016, 2:05 PM
iscaro edited edge metadata.

Changes since last version.

  • This fixes the problem pointer by @bdilly. The main reason for the bug,

was that some mouse move events were being generated with the incorrect
mouse device.

We're getting closer =D
But there is still an issue that you can easily reproduce using evas_multiseat_events example.

Using two seats with pointers:
1 - move the default seat pointer over the red rectangle
2 - move the extra seat pointer over the blue rectangle
3 - press the left button of default seat's mouse (don't release it yet)
4 - press the left button of extra seat's mouse
5 - release the button of extra seat (it'll print "pointer up" as expected)
6 - release the button of default seat

Error : it won't print "pointer up", actually _pointer_in_out_cb() won't even be called.

iscaro updated this revision to Diff 10215.Dec 2 2016, 4:38 AM

Changes since last version:

  • Adding a new commit (5ded9223315f067) which fixes the problem

pointed by @bdilly

bdilly accepted this revision.Dec 2 2016, 4:43 AM
bdilly closed this revision.
bdilly edited edge metadata.