2010-08-24 14 views
6

(ver ediciones)¿Cómo puedo evitar que Gnome muestre dos ventanas al hacer alt-tab? (C++ qt aplicación)

estoy desarrollando un/C++ de QT en GNOME.

La aplicación tiene una ventana principal y una ventana secundaria QListBox.

Ambas ventanas se muestran como ventanas principales separadas cuando desactivo la aplicación.

¿Cómo puedo hacer para que solo se muestre una ventana cuando yo (o más adelante el usuario) use alt-tab?

Supongo que este comportamiento se produce porque una ventana principal no recorta la ventana secundaria: la ventana secundaria amplía el límite de la ventana principal. Gnome también tiene un mal comportamiento de tabulación alternativa para muchas otras aplicaciones, mostrando cuadros de diálogo modales separados de las ventanas principales. Pero en el caso de mi aplicación, esto es realmente molesto.

Estoy pensando que podría hacer una ventana transparente gigante que incluya ambas ventanas existentes. Pero sería mejor encontrar una solución "limpia".

(. La suposición más lógica es verdad que tiene algo que ver con las banderas de las ventanas que he probado todas las combinaciones razonables de las banderas que podría pensar en los tipos de ventanas se describen here.)

Editar: El la aplicación tiene un QWidget como ventana principal (No QMainWindow), QListView está contenida en el objeto QWidget y se crea al pasar un punto a la ventana principal. está diseñado con Qt :: Tool | Qt :: FramelessWindowHint.

Edit2: El estilo :: X11BypassWindowManagerHint Qt hace trabajo para quitar la ventana de la lista alt-tab. El problema es que también hace que la ventana "no sea administrada" por lo que cubre las otras ventanas. Podría esconderme siempre que pierda el foco, premio ahora por una mejor solución.

+1

Supongo que tiene algo que ver con las banderas de la ventana ... por ejemplo, si la convertiste en una ventana de herramientas, ¿agarraría ambas entonces? Cuando uso Open Office, por ejemplo, gnome no tabula a través de sus ventanas de herramientas flotantes, sino solo las principales. –

+0

Supongo que QListBox tiene su puntero de ventana principal establecido en QMainWindow? ¿Hay alguna posibilidad de que un código de código mínimo requerido genere este problema? – sleepynate

Respuesta

3

Al crear una ventana para su ventana QListBox configure un indicador de ventana Qt::Tool en su constructor o posterior con la 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 caja Debian sid (Gnome 2.30, metaciudad 2.30.1) con el usuario recién creado: image proof on answer to question #3553428.

Si esto no es lo que quería, entonces nombre el software que funciona correctamente o puede verificarlo usted mismo. Para hacerlo, ejecute xprop en la ventana de la terminal y haga clic en la ventana que le interese. La salida contendrá indicadores de ventana. El que le interesa es _NET_WM_WINDOW_TYPE(ATOM). Por la ventana de herramientas (es decir, que no figura en alt-tab) 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 ventana caja de herramientas entonces algo está mal con su gestor de ventanas o que ha configurado personalmente tal comportamiento .

+0

Bueno, tienes la única respuesta: el problema es que estás equivocado. Voy a esperar. Tal vez lo premie si edita para reflejar los comentarios en mi pregunta ... –

+0

Bueno, creo que la solución es como en mis ediciones; necesita usar el estilo Qt :: X11BypassWindowManagerHint con todos sus problemas. Pero hey, si te has metido en tantos problemas, estás más cerca que nadie ... –

+0

Pero el desbordamiento de la pila de frickin podría haber comido la ventaja ya que no puedo verlos aparecer. Mal SO. Este lugar no es lo que solía ser ... –

1

Puede probarlo a mano con la herramienta wmctrl. Con "-r -b ALGO" puede modificar los argumentos de NET_WM a él. Prueba esto en [1].

Si esto funciona, puede agregarlos con Xlib-Calls (si conoce el número de ventana X11 de Qt.Estoy seguro de que es posible).

[1] http://standards.freedesktop.org/wm-spec/1.3/ar01s05.html 
Cuestiones relacionadas