Touch/pointer input focus on multi-seat

Jacobo Aragunde Pérez jaragunde at igalia.com
Wed Apr 19 10:51:42 EDT 2017


I see! Thanks for the quick response. Still, I haven't been able to get
touch input in one of the screens so I wonder if somebody has actually
tested a similar configuration :)

I'm trying two Lilliput touchscreens and the first one (screen 0, part
of seat_1) is sending touch input properly to the application, but the
other isn't. According to my tests, events from the second touchscreen
don't actually reach the application.

Find below all the relevant data (I think).

# cat /etc/udev/rules.d/seats.rules
ATTRS{name}=="Logitech USB Keyboard", ENV{WL_SEAT}="seat_1"
ATTRS{name}=="Dell Dell USB Keyboard", ENV{WL_SEAT}="seat_2"
#using phys because both touchscreens have same name
ATTRS{phys}=="usb-0000:00:14.0-3.2/input0", ENV{WL_SEAT}="seat_1"
ATTRS{phys}=="usb-0000:00:14.0-2/input0", ENV{WL_SEAT}="seat_2"

# LayerManagerControl get input device seat_1 capabilities
keyboard
touch
# LayerManagerControl get input device seat_2 capabilities
keyboard
touch
# LayerManagerControl get surface 10651 input acceptance
seat_1
# LayerManagerControl get surface 10653 input acceptance
seat_2

# LayerManagerControl get scene
screen 0 (0x0)
---------------------------------------
- resolution:           x=1024, y=768
- hardware layer count: 0
- layer render order:   1000(0x3e8),

    layer 1000 (0x3e8)
    ---------------------------------------
    - created by pid:       0
    - original size:        x=1024, y=768
    - destination region:   x=0, y=0, w=1024, h=768
    - source region:        x=0, y=0, w=1024, h=768
    - orientation:          0 (up is top)
    - opacity:              1
    - visibility:           1
    - type:                 0 (unknown)
    - surface render order: 10651(0x299b),
    - on screen:            0(0x0)

        surface 10651 (0x299b)
        ---------------------------------------
        - created by pid:       1651
        - original size:      x=806, y=491
        - destination region: x=0, y=0, w=806, h=491
        - source region:      x=0, y=0, w=806, h=491
        - orientation:        0 (up is top)
        - opacity:            1
        - visibility:         1
        - pixel format:       0 (R-8)
        - native surface:     0
        - counters:           frame=0, draw=0, update=0
        - on layer:           1000(0x3e8)

screen 1 (0x1)
---------------------------------------
- resolution:           x=1280, y=720
- hardware layer count: 0
- layer render order:   2000(0x7d0),

    layer 2000 (0x7d0)
    ---------------------------------------
    - created by pid:       0
    - original size:        x=1280, y=720
    - destination region:   x=0, y=0, w=1280, h=720
    - source region:        x=0, y=0, w=1280, h=720
    - orientation:          0 (up is top)
    - opacity:              1
    - visibility:           1
    - type:                 0 (unknown)
    - surface render order: 10653(0x299d),
    - on screen:            1(0x1)

        surface 10653 (0x299d)
        ---------------------------------------
        - created by pid:       1653
        - original size:      x=806, y=491
        - destination region: x=0, y=0, w=806, h=491
        - source region:      x=0, y=0, w=806, h=491
        - orientation:        0 (up is top)
        - opacity:            1
        - visibility:         1
        - pixel format:       0 (R-8)
        - native surface:     0
        - counters:           frame=0, draw=0, update=0
        - on layer:           2000(0x7d0)


Thanks again,
-- 
Jacobo Aragunde
Software Engineer at Igalia


On 19/04/17 14:43, Ucan, Emre (ADITG/SW1) wrote:
> Hi,
> 
> If you have two touchscreens, you should also have two different touch devices.
> Then you can basically assign the touch device of screen 0 to seat 1 and touch device of screen 1 to seat 2.
> 
> You do not need to set focus for touch devices. It set automatically when you touch a surface.
> 
> Best regards
> 
> Emre Ucan
> Software Group I (ADITG/SW1)
> 
> Tel. +49 5121 49 6937
> 
>> -----Original Message-----
>> From: genivi-ivi-layer-management [mailto:genivi-ivi-layer-management-
>> bounces at lists.genivi.org] On Behalf Of Jacobo Aragunde Pérez
>> Sent: Mittwoch, 19. April 2017 14:38
>> To: genivi-ivi-layer-management at lists.genivi.org
>> Cc: genivi-projects at lists.genivi.org
>> Subject: Touch/pointer input focus on multi-seat
>>
>> Hi!
>>
>> Here I am again, pushing the boundaries of the multi-seat implementation :)
>>
>> The goal is to be able to run two browser windows on separate screens
>> and each with their own set of input devices. Imagine I have a board
>> connected to two touch screens and two keyboards, and the following seat
>> setup:
>>
>> * seat_1: keyboard A, touch input on screen 0
>> * seat_2: keyboard B, touch input on screen 1
>>
>> Then I create two browser windows, and assign them to screens and seats
>> like this:
>>
>> * surface id 7001: visible on screen 0, input acceptance to seat_1
>> * surface id 7002: visible on screen 1, input acceptance to seat_2
>>
>> Now I give both surfaces the keyboard focus; with the work I've done so
>> far in the browser, each surface will receive keystrokes from their own
>> keyboard. So far so good :)
>>
>> Unfortunately, when I try to do the same with the touch focus, it's
>> impossible to do. This is the error message I get:
>>
>> ```
>> # LayerManagerControl set surfaces 7002,7001 input focus touch
>> setting input focus in LayerManagerControl
>> Cannot set pointer or touch focus for multiple surfaces
>> LayerManagerService returned: failed
>> Failed to set input focus
>> ```
>>
>> So it looks it's not possible by design. Any ideas how to do this setup?
>>
>> Thank you in advance!
>> --
>> Jacobo




More information about the genivi-projects mailing list