Wie man ein Fenster immer im Vordergrund ist?
Habe ich eine rahmenlose Qt/QML Fenster, und ich würde wirklich gerne wissen, jede programmatische Mittel, seine Einstellung "Always On Top" - system-Menü-flag. Klick auf ALT+SPACE kann ich das system-Menü für die rahmenlosen Fenster, und indem Sie auf die "Always On Top" - option, das Fenster nicht immer auf top, aber ich habe nicht gefunden, eine programmatische Möglichkeit, das gleiche zu tun. Die Qt.WindowStaysOnTopHint
nicht funktioniert, und versuchen wmctrl -r "window name" -b add,above
funktioniert auch nicht, obwohl wmctrl
funktioniert für andere windows. wmctrl
funktioniert nicht für meine Fenster von Interesse, hat offenbar etwas zu tun mit der N/A
für die Maschine Spalte "name" auf wmctrl -l
:
francisco@Ubuntu:~$ wmctrl -l
0x02600006 0 Ubuntu Área de trabalho
0x03c00002 0 Ubuntu XdndCollectionWindowImp
0x03c00005 0 Ubuntu unity-launcher
0x03c00008 0 Ubuntu unity-panel
0x03c0000b 0 Ubuntu unity-dash
0x03c0000c 0 Ubuntu Hud
0x046000b3 0 Ubuntu How to make a window aways on top? - Stack Overflow - Mozilla Firefox
0x0520000b 0 N/A Qt Creator
0x05002396 0 Ubuntu francisco@Ubuntu: ~
0x0540000b 0 N/A backlight
Habe ich auch Durchlaufen dieses Verfahren aber für den Benutzer zu Fragen, es ist nicht für mich arbeiten, entweder, dasselbe Verhalten. Die _NET_WM_STATE_ABOVE
festgelegt ist, sondern sich das Fenster und dann die überprüfung der Flagge wieder, es ist nicht mehr da, es ist klebrig, nur beim klicken durch das system-Menü.
Dies ist der QML: https://gist.github.com/oblitum/8050586
Verwandte askubuntu Frage: https://askubuntu.com/questions/394998
BEARBEITEN
Beachten Sie
In den zugehörigen askubuntu Frage, es wurde festgestellt, dass es ein Fehler auf wmctrl für die Ausrichtung auf bestimmte windows durch Ihre Namen. Mit wmctrl -i -r <window id> -b add,above
löst auch das Problem.
- Die Frage ist, ob die Einheit ordnungsgemäß implementiert dieses Verhalten. Hat Unity eine Möglichkeit bieten, um die user zu halten, ein Fenster immer im Vordergrund ist?
- Wie gesagt, es funktioniert mit der Einstellung "Immer Oben" auf das system-Menü. Ich würde gerne die gleichen programmgesteuert.
- Ich denke, Frank verstanden, dass, und er antwortete jeweils. 😉
- Ich bin nicht immer, ich bin ein Benutzer, den ich verwende Ubuntu mit Unity, und ich kann die Flagge mit der Maus, so?
- Also, er hatte verstanden, dass Sie möchten, um es programmatisch, keine Sorge. Dies war eine erste Validierung. Na ja, was bedeutet es, "Qt.WindowStaysOnTopHint funktioniert nicht"? Alles, was mehr als nur nichts ändert? Die Ausgabe der Konsole, etc? Haben Sie versucht, zu verfolgen, die Interna, die nach unten?
- Ich habe nicht fassen, dass noch.
- Nun, ich habe festgestellt, das Frage-und-Antwort wirklich nützlich, traurig, dass es downvoted...
- winctrl können dies tun, mit "wmctrl -i-r WIN_ID -b add,oben'
Du musst angemeldet sein, um einen Kommentar abzugeben.
der EWMH-Spezifikation besagt ausdrücklich, dass:
also window-Manager haben keine Verantwortung zur Achtung Anwendungen, die setzen Sie diese Eigenschaft direkt (ich.e von XChangeProperty) von selbst. diese Eigenschaft kann nur geändert werden, durch das senden einer client-Nachricht an den root-Fenster
die window-Manager überwacht.
ich weiß nicht wie es im high-level-gui-toolkits wie Qt, aber hier ist, wie es in plain X11.(siehe EWMH-Spezifikation, oder _wnck_change_state ein Beispiel für eine Implementierung).
beachten Sie auch, dass in einigen x11-Umgebung(z.B. compiz), system-Menüs werden durch einen eigenen decorator-Programm anstelle des compositing window manager.
XFlush
?In Gehen, das ist, wie Sie es tun:
wo
window.WinId()
ist die native X11-handle eines Fensters.Ich hoffe, dass ich das problem verstanden hatte, richtig wie Sie versucht haben zu starten, eine QML Blick in "Immer im Vordergrund" - Modus über eine Menü-option.
Habe ich versucht den folgenden code auf windows, in meinem Haupt, und es funktionierte für mich, um zu zeigen, das Fenster immer im Vordergrund, so glaube ich, dass das view-Objekt kann verändert werden, von der Menü-option.
Dank,
Zeeshan
WindowStaysOnTopHint
funktioniert nicht, die QML-Fenster startet mit diesem flag alrealdy gesetzt.mywindow->setFlags(mywindow->flags() | Qt::WindowStaysOnTopHint)
. Dies hat nicht funktioniert