Bug 78365 - Weston-simple-touch touch_paint does not work when output seat is specified in weston.ini
Summary: Weston-simple-touch touch_paint does not work when output seat is specified i...
Status: VERIFIED FIXED
Alias: None
Product: Wayland
Classification: Unclassified
Component: weston (show other bugs)
Version: unspecified
Hardware: Other All
: medium normal
Assignee: Wayland bug list
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-05-07 00:12 UTC by Anu Reddy
Modified: 2014-05-14 21:46 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments

Description Anu Reddy 2014-05-07 00:12:47 UTC
Weston-simple-touch does not paint the touch events when output seat is specified in weston.ini. Although it works fine when touch device is unplugged and plugged back. 

Few observations made during this test, I would like to mention them here. Touch works fine in this case. If I launch weston-terminal(or any client), I am able to switch between weston-terminal and weston-simple-touch via touch. 


Steps to reproduce:
1. Configure Weston.ini with output seat=back0

Example:
Output
name=HDMI2
seat=back0

2. Launch Weston
3. Execute : weston-simple-touch
4. Drag fingers on weston-simple-touch to paint 
4. Observe touch is not painted on weston-simple-touch.


Software stack:
wayland (HEAD) 1.4.92-0-g4a4523f
drm (HEAD) libdrm-2.4.52-0-g46d451c
mesa (HEAD) remotes/origin/10.1-0-g340ebdb
libva (HEAD) libva-1.2.1-0-g88ed1eb
intel-driver (HEAD) 1.2.2-0-g121e70d
cairo (HEAD) heads/1.12-0-g59e2a93
libinput (HEAD) remotes/origin/HEAD-0-g97af5c3
weston (HEAD) 1.4.92-0-gd7d71e8
Comment 1 Neil Roberts 2014-05-07 13:24:35 UTC
Thanks for the bug report.

I think the problem is just that weston-simple-touch is not designed to handle multiple seats. Whenever a seat is advertised via wl_global that seat replaces the one and only seat that it keeps track of. It will listen for capability events on that seat and if there is a touch device available then it will listen for events on that. If there is no touch device then it will destroy any touch device it had and stop listening. That means if if there are two seats and the seat without a touch device is second it will cause simple-touch to stop listening for events on the first seat. That explains why unplugging the touch device makes it work again because it will get the capability event again and start listening for events again.

It would probably be good to fix this so that simple-touch remains a good example of how to use touch but I guess it's not massively urgent because it's not really a bug in Weston or Wayland.
Comment 2 Neil Roberts 2014-05-07 14:02:35 UTC
Actually I went ahead and made a little patch anyway:

http://lists.freedesktop.org/archives/wayland-devel/2014-May/014690.html
Comment 3 Kristian Høgsberg 2014-05-09 19:52:29 UTC
commit c3f03f557b49f701c13557f266a57e0aa0ecf310
Author: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Date:   Wed May 7 11:57:27 2014 +0300

    simple-touch: Handle multiple seats properly
    
    If simple-touch ran on a compositor with multiple seats, and the first
    one happened to have the touch capability while the second one didn't,
    the handler for seat capabilities would destroy the wl_touch device it
    created on the first call for the first seat when it was called a again
    for the second seat that has not touch capabilities.
    
    Fix this problem by creating a separate struct for each seat.
    
    https://bugs.freedesktop.org/show_bug.cgi?id=78365


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.