Условия для возникновения бага:
- Запустить несколько приложений (к примеру MS Explorer).
- Минимизировать их (нужно минимизировать ВСЕ окна).
- Запустить в полноэкранном режиме SDL-приложение.
- Нажать Alt+Tab.
Курсор перемещается в координату 0,0. Попытка активировать мышью минимизированное приложение приводит к тому, что курсор снова перемещается в 0,0. Переключиться на минимизированное приложение можно только с помощью Alt+Tab.
Гугл указал на SDL (XP and Vista) window management bugs, со схожей проблемой.
В качестве решения предлагается пропатчить и пересобрать SDL. Я списался с Michael Kurinnoy и он подтвердил, что это 100% рабочее решение.
Сделав небольшое тестовое приложение, я заметил, что этот баг возникает в случае SDL_ShowCursor(0).
Решение напросилось само собой:
SDL_Event evt;
while(SDL_PollEvent(&evt)) {
switch(evt.type) {
case SDL_ACTIVEEVENT:
if(evt.active.state != SDL_APPMOUSEFOCUS) {
if(evt.active.gain == 1) {
SDL_ShowCursor(0);
}
else {
SDL_ShowCursor(1);
}
}
break;
}
}
Естественно, что в коде стоит учитывать был ли курсор спрятан и восстанавливать его в предыдущее состояние.