Как я могу помешать GNOME представить два окна при выполнении Alt-Tab? (приложение C ++ QT)

StackOverflow https://stackoverflow.com/questions/3553428

Вопрос

(см. редактирование)

Я разрабатываю приложение 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) с недавно созданным пользователем: image proof on answer to question #3553428.

Если это не то, что вы хотели, то пожалуйста, назовите программное обеспечение, которое работает правильно, или вы можете проверить это самостоятельно. Сделать этот бег 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top