Как я могу помешать GNOME представить два окна при выполнении Alt-Tab? (приложение C ++ QT)
Вопрос
(см. редактирование)
Я разрабатываю приложение QT / C ++ под Gnome.
Приложение главное окно и qlistbox дочернее окно.
Оба этих Windows отображаются как отдельные основные окна, когда я Alt-вкладка от приложения.
Как я могу сделать это, чтобы только одно окно отображалось, когда я (или позже пользователь) использует Alt-Tab?
Я догадаюсь, что это поведение приходит, потому что одно главное окно не закреплено подстрижению - подпунктом расширяет границу главного окна. GNOME имеет плохое поведение Alt-Tab для ряда других приложений, показывая модальные диалоговые окна отдельно от основных окон. Но в случае моего приложения это действительно раздражает.
Я думаю, что могу сделать гигантское прозрачное окно, которое включает в себя как существующие окна. Но было бы приятнее найти «чистое» решение.
(Самое логическое предположение действительно, что у него есть что делать с флагами окна. Я пробовал каждую разумную комбинацию флагов, о которых я мог подумать. Типы окна описаны здесь)
Редактировать: приложение имеет QWidget в качестве главного окна (не QMainWindow), QListView содержится в объекте QWidget и создается путем передачи точки к главному окну. Стиль с Qt :: Tool | Qt :: FrammessWindowHint.
Редактировать2: QT :: стиль X11BINTWINDOWManagerHint делает Работа для удаления окна из списка Alt-Tab. Проблема в том, что он также делает окно «неуправляемо», поэтому охватывает другие окна. Я мог спрятаться в мануле, когда я теряю фокус - приз сейчас для лучшего решения.
Решение
При создании окна для вашего QListBox
Установите окно А. Qt::Tool
флаг окна в своем конструкторе или позже с setWindowFlags
Функциональный вызов. Вот какой-то фрагмент кода (я опущел заголовки):
INT MAIN (INT ARGC, CHAR ** ARGV) {kapplication App (ARGC, ARGV); QmainWindow MW; mw.show (); Qwidget Toolwindow (& MW, QT :: Окно | Qt :: Инструмент); Qhboxlayout layout (& toolwindow); Toolwindow.etlayout (& layout); QListView LV (& Toolwindow); layout.addwidget (& lv); Toolwindow.show (); return app.exec (); }
Я проверил это на моем ящике Debian Sid (Gnome 2.30, Metacity 2.30.1) с недавно созданным пользователем: .
Если это не то, что вы хотели, то пожалуйста, назовите программное обеспечение, которое работает правильно, или вы можете проверить это самостоятельно. Сделать этот бег xprop
В окне терминала и нажмите на окно, которое вас интересует. Вывод будет содержать флаги окон. Тот, который вас интересует, это _NET_WM_WINDOW_TYPE(ATOM)
. Отказ Для окна инструмента (т.е. не указано в Alt-Tab) Этот флаг:
_Net_wm_window_type (атом) = _net_wm_window_type_utility, _net_wm_window_type_nommal
Если окно с этими флагами не является окном панели инструментов, то что-то не так с вашим диспетчером окон или лично установить такое поведение.
Другие советы
Вы можете попробовать его вручную с помощью инструмента WMCTRL. С «-R -b что-то» вы можете изменить аргументы Net_WM к нему. Попробуйте их в [1].
Если это работает, вы можете добавить их с xlib-calls (если вы узнаете номер окна X11 из Qt. Я уверен, что это возможно).
[1] http://standards.freedesktop.org/wm-spec/1.3/ar01s05.html