[vbox-dev] Regression with Qt 5.13 - guest steals focus
Larry.Finger at lwfinger.net
Thu Jul 4 17:16:16 UTC 2019
When a Linux host runs Qt 5.13, any VB guest will constantly steal the focus
making it nearly impossible to do anything with the host. The problem was
reported by an openSUSE user at https://bugzilla.suse.com/show_bug.cgi?id=1140084.
The bug is discussed at https://bugreports.qt.io/browse/QTBUG-76742. A fix that
reduces a focusinTimer timeout from 400 to 200 msec fixes the problem. A comment
in VB's captureKeyboard() helps explain why that works:
/* On X11, we do not grab the keyboard as soon as it is captured, but delay it
* for 300 milliseconds after the formal capture. We do this for several reasons:
* - First, when several windows are created they all try to capture the
* they get the focus. Due to the asynchronous nature of X11 the first window
* gets notified after the last is created, and there is a dance if they
* the notifications by grabbing the keyboard and trigger new focus changes
in the process.
* - Second, grabbing the keyboard immediately on focus change upsets some
* they give us the focus then try to grab the keyboard themselves, and sulk
if they fail
* by refusing to e.g. drag a window using its title bar.
* IMPORTANT! We do the same under all other hosts as well mainly to have the
* common behavior everywhere while X11 is forced to behave that way. */
The final statement shows why this 300 msec should not be changed in VB, thus
the problem needs to fixed in Qt 5.13.
While the Qt developers are deciding what the "correct" fix should be, openSUSE
has changed the Qt package in Tumbleweed to reduce the focusinTimer timeout from
400 to 200 msec. Thus far, no adverse effects have been noted.
To reiterate, no changes are needed for VirtualBox. I have posted this so that
other distro maintainers will be aware of the problem in case their distro
switches to Qt 5.13.
Thanks to SUSE's Fabian Vogt for his help in solving this problem.
More information about the vbox-dev