Кража фокуса (по уважительной причине)

Я работаю над клоном Yakuake и, если бы вы использовали его, вы бы знали, что одной из его особенностей является кража фокуса для легкости.

По сути, вы нажимаете горячую клавишу «показать», появляется приложение, и вы можете писать на нем.
Вы можете делать что угодно с любым приложением (будучи скрытым Yakuake), но как только вы нажимаете горячую клавишу, появляется Yakuake и захватывает фокус. Я хочу сделать то же самое с моим приложением.

Я знаю, что есть некоторые правила оконного менеджера, которые не позволяют приложениям делать это, но Yakuake делает это, почему я не могу это сделать?

Кроме того, это приложение предназначено для совместимости с Windows, Linux и Mac, поэтому ни KDE, ни Gnome, ни < insert_your_favourite_window_manager_here> hacks; Я не пойду по пути обнаружения-WM-and-do-hack.

PS: я делаю это приложение на C ++ и Qt4.

РЕДАКТИРОВАТЬ:

Просто чтобы прояснить это, я не прошу никакого кода (но если у вас есть какой-то пример, я оцениваю его). Я прошу способ сделать это. Что я должен сделать, чтобы заставить WM назначить фокус моему приложению. Есть ли стандартный способ сделать это?

2

Решение

Здесь Qt::WindowStaysOnTopHint….

1

Другие решения

Решение проще, чем я думал. Я сделал анимацию с длительностью 0 с, и в конце анимации я просто сделал фокус. Это сделало работу.

1

Если вы хотите сделать это с помощью «горячей» клавиши или ярлыка, вам нужно создать и использовать хук на клавиатуре.

Qt не предоставляет такие вещи, поэтому вам придется сделать это самостоятельно.

Вы можете взглянуть на этот пост: QT фоновый процесс

Я не знаю для других ОС.

Когда вы получите правильное событие клавиатуры от своего хука, вы можете создать окно с «подсказкой allwas on top», и это должно быть хорошо.

0
По вопросам рекламы [email protected]