Fixed problem in idle(), causing events to stack up.
The problem was that idle() was set on a zero-ms timer (using idleTimer->start(0)), and the time is then self-regulated by returning early if it's not time yet.
Because of this, Qt stays perpetually in the timer servicing, instead of processing events. This causes keys and menu items to be delayed if the user drags the mouse before activating them, especially at low frame rates. It also causes very-delayed multitouch response.

The fix I've applied is to reset the idle timer after servicing the idle. I've set it to 2ms because I noticed that 1ms didn't always clear out all of the events. We can tune it to whatever we need, or even calculate it based on the time it took us to service the idle.