(1) install ubuntu-clock app
(2) modify /usr/share/gnome-session/sessions/ubuntu.session to remove the 'compiz;' entry so compiz gets started by upstart instead of gnome-session
(3) modify /usr/share/upstart/session/unity7.conf to add the following lines in the pre-start script stanza:
initctl set-env --global GEIS_DEBUG=3
initctl set-env --global GRAIL_DEBUG=-1
(4) log in to Unity, start the clock app and touch it anywhere in the window
The .cache/upstart/unity7.log contains the following.
[CLOCK] ClockPage loaded
[CLOCK] Saved Current Location: Merrickville
[CLOCK] Saved Current Location Coordinates: -75.8333,44.9167
[CLOCK] Alarm Database loaded
[CLOCK] MainView loaded
[CLOCK] Retrieving Sunrise/Sunset times from disk
GEIS(debug)-geis_backend_multiplexor_pump:414 activity 0x1 on fd 18 callback_info=0x1e62f50
GEIS(debug)-geis_backend_multiplexor_pump:414 activity 0x1 on fd 19 callback_info=0x1e655e0
GRAIL DEBUG (regular-recognizer.cpp:ProcessFrameEvent:54): new event 0x4997c80 with time 161447105
GRAIL DEBUG (regular-recognizer.cpp:ProcessTouches:95): touch 1 began with start time 161447105
GRAIL DEBUG (regular-recognizer.cpp:ProcessTouches:98): touch 1 has been added to all_touches_
GRAIL DEBUG (regular-recognizer.cpp:ProcessTouches:99): touch 1 has been added to free_touches_
GRAIL DEBUG (regular-recognizer.cpp:ProcessFrameEvent:54): new event 0x42edc80 with time 161447108
GRAIL DEBUG (touch.cpp:Update:65): touch 1 is owned
GEIS(debug)-geis_backend_multiplexor_pump:414 activity 0x1 on fd 18 callback_info=0x1e62f50
GRAIL DEBUG (handle.cpp:UpdateTime:197): client updating time to 161447165
GRAIL DEBUG (recognizer.cpp:UpdateTime:304): Updating time to 161447165
GRAIL DEBUG (recognizer.cpp:RejectOverdueGesturesAndTouches:288): touch 1 has been removed from free_touches_ because it is older than the gesture composition time (time: 161447165, touch start time: 161447105)
GRAIL DEBUG (recognizer.cpp:RejectOverdueGesturesAndTouches:292): touch 1 has been erased from free_touches_
GRAIL DEBUG (touch.cpp:~Touch:80): rejecting touch 1
GRAIL DEBUG (recognizer.cpp:UpdateTime:304): Updating time to 161447165
GEIS(warning)-_x11_fd_callback:1160 failed to get X generic event data
GEIS(warning)-_x11_fd_callback:1160 failed to get X generic event data
GEIS(debug)-geis_backend_multiplexor_pump:414 activity 0x1 on fd 19 callback_info=0x1e655e0
GRAIL DEBUG (regular-recognizer.cpp:ProcessFrameEvent:54): new event 0x42edc80 with time 161447166
GRAIL DEBUG (regular-recognizer.cpp:ProcessTouches:126): touch 1 has been erased from all_touches_
From this log you can see that the single touch is reported to Unity and gets rejected because additional touches do not begin within the gesture setup period.
According to the XInput2 documentation, this should forward the TouchBegin to the clock, which should then do with it what it will. The clock should not be receiving emulated pointer events, because according to the XInput2 documentation, if Touch events are explicitly selected, pointer emulation is disabled for that client.
It looks like either (a) the X server is in pointer emulation mode and never leaves, or (b) the client is doing some sort of grab on the touch (there is no evidence of this in the code) and not releasing it.
Deeper analysis of the client-server conversations is required to further analyse the exact combination of sequences here.
Here is a test setup:
(1) install ubuntu-clock app gnome-session/ sessions/ ubuntu. session to remove the 'compiz;' entry so compiz gets started by upstart instead of gnome-session upstart/ session/ unity7. conf to add the following lines in the pre-start script stanza:
(2) modify /usr/share/
(3) modify /usr/share/
initctl set-env --global GEIS_DEBUG=3
initctl set-env --global GRAIL_DEBUG=-1
(4) log in to Unity, start the clock app and touch it anywhere in the window
The .cache/ upstart/ unity7. log contains the following.
[CLOCK] ClockPage loaded -geis_backend_ multiplexor_ pump:414 activity 0x1 on fd 18 callback_ info=0x1e62f50 -geis_backend_ multiplexor_ pump:414 activity 0x1 on fd 19 callback_ info=0x1e655e0 recognizer. cpp:ProcessFram eEvent: 54): new event 0x4997c80 with time 161447105 recognizer. cpp:ProcessTouc hes:95) : touch 1 began with start time 161447105 recognizer. cpp:ProcessTouc hes:98) : touch 1 has been added to all_touches_ recognizer. cpp:ProcessTouc hes:99) : touch 1 has been added to free_touches_ recognizer. cpp:ProcessFram eEvent: 54): new event 0x42edc80 with time 161447108 cpp:Update: 65): touch 1 is owned -geis_backend_ multiplexor_ pump:414 activity 0x1 on fd 18 callback_ info=0x1e62f50 cpp:UpdateTime: 197): client updating time to 161447165 cpp:UpdateTime: 304): Updating time to 161447165 cpp:RejectOverd ueGesturesAndTo uches:288) : touch 1 has been removed from free_touches_ because it is older than the gesture composition time (time: 161447165, touch start time: 161447105) cpp:RejectOverd ueGesturesAndTo uches:292) : touch 1 has been erased from free_touches_ cpp:~Touch: 80): rejecting touch 1 cpp:UpdateTime: 304): Updating time to 161447165 -_x11_fd_ callback: 1160 failed to get X generic event data -_x11_fd_ callback: 1160 failed to get X generic event data -geis_backend_ multiplexor_ pump:414 activity 0x1 on fd 19 callback_ info=0x1e655e0 recognizer. cpp:ProcessFram eEvent: 54): new event 0x42edc80 with time 161447166 recognizer. cpp:ProcessTouc hes:126) : touch 1 has been erased from all_touches_
[CLOCK] Saved Current Location: Merrickville
[CLOCK] Saved Current Location Coordinates: -75.8333,44.9167
[CLOCK] Alarm Database loaded
[CLOCK] MainView loaded
[CLOCK] Retrieving Sunrise/Sunset times from disk
GEIS(debug)
GEIS(debug)
GRAIL DEBUG (regular-
GRAIL DEBUG (regular-
GRAIL DEBUG (regular-
GRAIL DEBUG (regular-
GRAIL DEBUG (regular-
GRAIL DEBUG (touch.
GEIS(debug)
GRAIL DEBUG (handle.
GRAIL DEBUG (recognizer.
GRAIL DEBUG (recognizer.
GRAIL DEBUG (recognizer.
GRAIL DEBUG (touch.
GRAIL DEBUG (recognizer.
GEIS(warning)
GEIS(warning)
GEIS(debug)
GRAIL DEBUG (regular-
GRAIL DEBUG (regular-
From this log you can see that the single touch is reported to Unity and gets rejected because additional touches do not begin within the gesture setup period.
According to the XInput2 documentation, this should forward the TouchBegin to the clock, which should then do with it what it will. The clock should not be receiving emulated pointer events, because according to the XInput2 documentation, if Touch events are explicitly selected, pointer emulation is disabled for that client.
It looks like either (a) the X server is in pointer emulation mode and never leaves, or (b) the client is doing some sort of grab on the touch (there is no evidence of this in the code) and not releasing it.
Deeper analysis of the client-server conversations is required to further analyse the exact combination of sequences here.