Я думаю, что вы можете добиться этого, изменив исходный код Unity 7 . Просто следуйте шагам, описанным на сайте разработчика, но прежде чем начать процесс сборки, откройте: ./trunk/plugins/unityshell/src/unityshell.cpp
и посмотрите на SetUpAndShowSwitcher
функцию:
void UnityScreen::SetUpAndShowSwitcher(switcher::ShowMode show_mode)
{
RaiseInputWindows();
if (!optionGetAltTabBiasViewport())
{
if (show_mode == switcher::ShowMode::CURRENT_VIEWPORT)
show_mode = switcher::ShowMode::ALL;
else
show_mode = switcher::ShowMode::CURRENT_VIEWPORT;
}
auto results = launcher_controller_->GetAltTabIcons(show_mode == switcher::ShowMode::CURRENT_VIEWPORT,
switcher_controller_->show_desktop_disabled());
if (switcher_controller_->CanShowSwitcher(results))
switcher_controller_->Show(show_mode, switcher::SortMode::FOCUS_ORDER, results);
}
Здесь вы можете ясно увидеть, что это именно та функция, которую мы искали. Верхняя часть отвечает за переключение режимов просмотра:
Это переключение появляется каждый раз, когда мы переходим в группу приложений или если мы выходим из группы. optionGetAltTabBiasViewport
указывает, когда это произойдет. Затем GetAltTabIcons
участвует, чтобы получить правильные значки. И, наконец, вызывается Show
функция с SortMode::FOCUS_ORDER
отображением отсортированных значков. SortMode - это перечисление:
enum class SortMode
{
LAUNCHER_ORDER,
FOCUS_ORDER,
};
и изменение FOCUS_ORDER
в LAUNCHER_ORDER
должно решить вашу проблему. Вы можете вставить дополнительный оператор if перед вызовом, Show
чтобы предотвратить сортировку порядка запуска в ShowMode::ALL
случае.
Обратите внимание, что исходный код Unity 8 выглядит совершенно иначе. Так что это решение может работать только для Unity 7. После получаса исправления отсутствующих зависимостей и после еще одного часа борьбы с cmake я решил не разрушать мою систему и завтра попробовать ее в ВМ;)