Comment puis-je empêcher Gnome de montrer deux fenêtres lorsque vous faites Alt-Tab? (C ++ qt app)

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

Question

(voir les modifications)

Je développe une application QT / c ++ sous gnome.

L'application d'une fenêtre principale et la fenêtre de l'enfant QListBox.

Ces deux fenêtres apparaissent comme des fenêtres principales séparées quand je alt-tab loin de l'application.

Comment puis-je faire en sorte que seule fenêtre apparaît lorsque je (ou plus tard à l'utilisateur) utilise alt-tab?

Je devine que ce comportement est parce qu'une fenêtre principale ne coupe pas la subwindow - la subwindow étend la limite de la fenêtre principale. Gnome a un mauvais comportement alt-tab pour un certain nombre d'autres applications aussi, montrant les boîtes de dialogue modales séparément des fenêtres principales. Mais dans le cas de mon application, ce qui est vraiment gênant.

Je pense que je pourrais faire une fenêtre transparente géante qui comprend les deux fenêtres existantes. Mais il serait plus agréable de trouver une solution « propre ».

(la conjecture la plus logique est en effet qu'il a quelque chose à voir avec des drapeaux de la fenêtre, j'ai essayé toutes les combinaisons raisonnable de drapeaux que je pouvais penser Les types de fenêtre sont décrits )

Edit: L'application a une QWidget que sa fenêtre principale (Non QMainWindow), QListView est contenue dans l'objet QWidget et créé en faisant passer un point de la fenêtre principale.  est de style avec Qt :: outil | Qt :: FramelessWindowHint.

Edit2: Le style Qt :: X11BypassWindowManagerHint fait travail pour supprimer la fenêtre de la liste alt-tab. Le problème est que cela fait aussi la fenêtre « non géré » il couvre les autres fenêtres. Je pouvais manaully cacher chaque fois que je perdre le focus - prix maintenant une meilleure solution.

Était-ce utile?

La solution

Lors de la création d'une fenêtre pour la fenêtre de votre QListBox réglage d'une fenêtre Qt::Tool drapeau dans son constructeur ou plus tard avec appel de fonction setWindowFlags. Voici quelques extrait de code (j'omis les en-têtes):

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();
}

Je l'ai testé cela sur ma boîte Debian sid (Gnome 2.30, metacity 2.30.1) avec l'utilisateur fraîchement créé: preuve d'image sur la réponse à la question # 3553428.

Si ce n'est pas ce que vous vouliez, alors s'il vous plaît nommer le logiciel qui fonctionne correctement ou vous pouvez le vérifier vous-même. Pour ce faire, exécutez xprop dans la fenêtre du terminal et cliquez sur la fenêtre qui vous intéresse. La sortie contiendra des drapeaux de fenêtre. Celui qui vous intéresse est _NET_WM_WINDOW_TYPE(ATOM). (. I.e. ne figure pas dans Alt-Tab) pour la fenêtre de l'outil ce drapeau est:

_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_UTILITY, _NET_WM_WINDOW_TYPE_NORMAL

Si la fenêtre avec ces drapeaux ne sont pas une fenêtre de boîte à outils alors quelque chose ne va pas avec votre gestionnaire de fenêtre ou que vous avez personnellement mis un tel comportement.

Autres conseils

Vous pouvez essayer à la main avec l'outil wmctrl. vous pouvez modifier les arguments NET_WM à avec « -r -b CHOSE ». Essayez ces derniers dans [1].

Si cela fonctionne, vous pouvez les ajouter avec Xlib appels (Si vous apprenez à connaître X11 Window Nombre de Qt. Je suis sûr que ce soit possible).

[1] http://standards.freedesktop.org/wm-spec/1.3/ar01s05.html
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top