¿Cómo puedo evitar que Gnome de mostrar dos ventanas al hacer alt-tab? (C ++ qt app)
Pregunta
(ver ediciones)
Estoy desarrollando un / C ++ de QT en GNOME.
La aplicación de una ventana principal y la ventana niño QListBox.
Estos dos ventanas se muestran como ventanas principales separadas cuando alt-tab lejos de la aplicación.
¿Cómo puedo hacerlo de modo que sólo se muestra una ventana cuando (o posterior al usuario) utiliza alt-tab?
Estoy adivinando este comportamiento viene porque una ventana principal no recorta la subventana - la subventana extiende el límite de la ventana principal. Gnome tiene mal comportamiento alt-tab para una serie de otras aplicaciones también, mostrando cuadros de diálogo modales por separado de las ventanas principales. Pero en el caso de mi aplicación, esto es muy molesto.
Estoy pensando que podría hacer una ventana transparente gigante que incluye tanto las ventanas existentes. Sin embargo, sería más agradable para encontrar una solución "limpia".
(la suposición más lógica es verdad que tiene algo que ver con banderas ventana He intentado todas las combinaciones razonables de las banderas que se me ocurrieron Se describen los tipos de ventana aquí )
Editar: La aplicación tiene una QWidget como su ventana principal (no QMainWindow), QListView está contenida en el objeto QWidget y creado por pasa por un punto a la ventana principal. es de estilo con Qt :: Herramienta | Qt :: FramelessWindowHint.
Edit2: El estilo Qt :: X11BypassWindowManagerHint hace el trabajo para eliminar la ventana de la lista alt-tab. El problema es que también hace que la ventana "administrado" por lo que cubre las otras ventanas. Me manaully podía ocultar cada vez que pierde el foco - premio ahora para una mejor solución.
Solución
Al crear una ventana para la ventana QListBox
establece un indicador ventana Qt::Tool
en su constructor o posterior con llamada a la función setWindowFlags
. Aquí hay alguna fragmento de código (omití las cabeceras):
int main(int argc, char** argv) { QApplication app(argc, argv); QMainWindow mw; mw.show(); QWidget toolWindow(&mw, Qt::Window|Qt::Tool); QHBoxLayout layout(&toolWindow); toolWindow.setLayout(&layout); QListView lv(&toolWindow); layout.addWidget(&lv); toolWindow.show(); return app.exec(); }
He probado esto en mi Debian caja (Gnome 2.30, metaciudad 2.30.1) con el usuario recién creado sid: .
Si esto no es lo que quería, a continuación, indique el nombre del software que funciona correctamente o que lo busque. Para ello xprop
carrera en la ventana de terminal y haga clic en la ventana que le interesa. La salida contendrá banderas ventana. El único que les interesa es _NET_WM_WINDOW_TYPE(ATOM)
. (. Es decir que no figura en alt-tab) para la ventana de la herramienta esta bandera es:
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_UTILITY, _NET_WM_WINDOW_TYPE_NORMAL
Si la ventana con estas banderas no es una caja de herramientas ventana entonces algo está mal con su gestor de ventanas o que ha configurado personalmente tal comportamiento.
Otros consejos
Puede probar a mano con la herramienta wmctrl. Con "algo -b-r" puede modificar los argumentos de NET_WM a ella. Pruebe estas en [1].
Si esto funciona, puede añadirlos en la Xlib-Calls (Si se llega a conocer X11 Ventana Número de Qt. Estoy seguro de que eso es posible).
[1] http://standards.freedesktop.org/wm-spec/1.3/ar01s05.html