Come posso evitare Gnome dal mostrare due finestre quando si fa alt-tab? (C ++ qt app)
Domanda
(vedi modifiche)
sto sviluppando a / c ++ applicazione QT sotto gnome.
L'applicazione una finestra principale e finestra figlia QListBox.
Entrambe queste finestre appaiono come finestre principali separati quando ho alt-tab di distanza dall'applicazione.
Come posso fare in modo che solo una finestra è mostrata quando (o successivo l'utente) gli usi alt-tab?
Sono indovinando questo comportamento viene perché una finestra principale non ritaglia la finestra secondaria - la sottofinestra estende il limite della finestra principale. GNOME è cattivo comportamento alt-tab per un certo numero di altre applicazioni, che mostra le finestre di dialogo modale separatamente dalle finestre principali. Ma nel caso della mia app, questo è davvero fastidioso.
Sto pensando che potrei fare una finestra trasparente gigante che comprende entrambe le finestre esistenti. Ma sarebbe bello per trovare una soluzione "pulita".
(l'ipotesi più logica è, infatti, che ha qualcosa a che fare con le bandiere delle finestre Ho provato ogni ragionevole combinazione di bandiere potrei pensare ai tipi di finestre sono descritti qui )
Modifica: L'applicazione ha un QWidget come finestra principale (non QMainWindow), QListView è contenuto nell'oggetto QWidget e realizzato facendo passare un punto alla finestra principale. è in stile con Qt :: strumento | Qt :: FramelessWindowHint.
Edit2: Lo stile Qt :: X11BypassWindowManagerHint ha il lavoro per rimuovere la finestra dalla lista alt-tab. Il problema è che rende anche la finestra "non gestito" in modo da coprire le altre finestre. Potrei manaully nascondere ogni volta che perdere la concentrazione - Premio adesso per una soluzione migliore.
Soluzione
Quando si crea una finestra per la finestra QListBox
impostato una finestra bandiera Qt::Tool
nel suo costruttore o successiva con chiamata di funzione setWindowFlags
. Ecco alcuni frammento di codice (ho omesso le intestazioni):
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(); }
Ho provato questo sulla mia Debian scatola (Gnome 2.30, metacity 2.30.1) con l'utente appena creato SID: .
Se questo non è quello che si voleva, quindi si prega di citarne il software che funziona correttamente o si può controllare voi stessi. Per fare questo xprop
corsa nel finestra di terminale e cliccare sulla finestra che ti interessa. L'uscita conterrà le bandiere delle finestre. Quello che ci interessa è _NET_WM_WINDOW_TYPE(ATOM)
. (. Cioè non elencati in alt-tab) per la finestra dello strumento questo flag è:
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_UTILITY, _NET_WM_WINDOW_TYPE_NORMAL
Se la finestra con queste bandiere non è una finestra toolbox, allora c'è qualcosa che non va con il vostro gestore di finestre o si è personalmente impostare un comportamento del genere.
Altri suggerimenti
Si può provare a mano con lo strumento wmctrl. Con "qualcosa -b -r" è possibile modificare gli argomenti NET_WM ad esso. Prova questi in [1].
Se questo funziona, è possibile aggiungerli con Xlib-chiamate (Se si arriva a conoscere X11 Window Numero da Qt. Sono sicuro che tutto è possibile).
[1] http://standards.freedesktop.org/wm-spec/1.3/ar01s05.html