Comment 224 for bug 296167

Revision history for this message
In , Robert (robert-redhat-bugs-1) wrote :

First, here is a detailed description of how to recreate the failure,
at least in my case:

You need to have more than one monitor. I'm running xinerama so my
desktop is spanning between multiple monitors. Also, I believe you
need to have auto-raise set on (no proof of this). To set it on, do:
System->Preferences->Look and Feel->Windows, then check the box that
indicates "Select windows when the mouse moves over them". Also, set
a half-second delay, so check the box next to "Raise selected windows
after an interval", and an interval value of 0.5 seconds.
Next, open a few windows on each monitor. Then move your mouse cursor
back and forth a few times between the two monitors, briefly highlighting
the windows on each monitor.

Peter's description of the problem from a debug session earlier today:
"The server thinks that the sprite window is the root window, so it's
trying to deliver all events to the root window."

The Sprite window is the window underneath your mouse cursor. The root
window is the very first grey window, the initial one with "X" displayed
when x is starting.

My theory as to what's going on:
Suppose I have monitor #1 and monitor #2. Suppose I open a window on
monitor #2. When I move my mouse cursor over the window, the auto-raise
timer of 0.5 seconds starts ticking. During that time, I move my
mouse cursor to the other monitor. After 0.5 seconds, auto-raise
tries to raise the window I last hovered over. However, when it does,
the mouse cursor has been repositioned to monitor #1. In other words,
there is no more sprite window because the mouse cursor is on a
different monitor. So X loses track of the sprite window which appears
only on monitor #2. Unable to find a valid sprite window, it defaults
back to the root window. The root window cannot handle the mouse click
events, so they are ignored. This is just my theory.

We did find a viable circumvention:
If you encounter this problem, use the keyboard to navigate around
the screen. Use <alt><tab> to switch between windows. Once you've
gotten to a window, use <alt><F7> to move the window from one monitor
to the next. Then move it back again. This seems to allow X to
re-sync its sprite window and mouse clicks are then processed correctly.