Hi,

I have a strange problem with gobject.io_add_watch and a cairo widget in a pygtk program.
I'm reading joystick data from /dev/input/js0 with gobject.io_add_watch.
When data is read, a signal with the values is emitted and a widget draws the position on a cairo surface (see: http://imgur.com/YujKV).
This works as expected when the window is small.
But when I resize the window to fullscreen, the position indicator sometimes does not return to the center when I let the joystick go.
As if the cairo drawing routine is somehow interrupting the io_add_watch.
On a raspberry pi this even happens with small windows.
To debug the problem, I've added a timeout with gobject.timeout_add() that runs every 5 seconds and then reads from the opened joystick device. When this timeout occurs, the data is read and the indicator snaps back to the center. So this means there was data waiting on that handle which the io_add_watch somehow missed. The problem with the timeout is, when no data is waiting this timeout blocks the application until the stick is moved again so it's not a working workaround :( I've even tried streaming the joystick data over a network socket but the results were the same. When I disable the drawing operation everything works perfect and no data is skipped.
I'm new to GTK+ so maybe I'm missing something obvious here?

Thomas

_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

Reply via email to