So. Compiz does indeed grab all the keys, which is why its hard to reproduce. The problem is for some reason in unityshell.cpp when alt tab terminates it ends up eventually doing XUngrabKey() on all the arrow keys!! So to correctly reproduce this:
1) Alt+Tab (just open the switcher and close it)
2) Attempt a alt+<arrow_key>
The offending code is here:
bool UnityScreen::altTabTerminateCommon(....)
{
....
screen->removeAction(&optionGetAltTabRight ());
screen->removeAction(&optionGetAltTabDetailStart ());
screen->removeAction(&optionGetAltTabDetailStop ());
screen->removeAction(&optionGetAltTabLeft ());
...
}
So before I push a branch i have to track down what that code is for...or what it was really fixing (don't want another regression).
It ends up ungrabbing these keycodes:
111 <- Up arrow
113 <- Left arrow
114 <- Right arrow
116 <- Down arrow
Ill attempt to get a branch out for this next week!
Yay found the problem....
So. Compiz does indeed grab all the keys, which is why its hard to reproduce. The problem is for some reason in unityshell.cpp when alt tab terminates it ends up eventually doing XUngrabKey() on all the arrow keys!! So to correctly reproduce this:
1) Alt+Tab (just open the switcher and close it)
2) Attempt a alt+<arrow_key>
The offending code is here: :altTabTerminat eCommon( ....) >removeAction( &optionGetAltTa bRight ()); >removeAction( &optionGetAltTa bDetailStart ()); >removeAction( &optionGetAltTa bDetailStop ()); >removeAction( &optionGetAltTa bLeft ());
bool UnityScreen:
{
....
screen-
screen-
screen-
screen-
...
}
So before I push a branch i have to track down what that code is for...or what it was really fixing (don't want another regression).
It ends up ungrabbing these keycodes:
111 <- Up arrow
113 <- Left arrow
114 <- Right arrow
116 <- Down arrow
Ill attempt to get a branch out for this next week!