2016-04-27 31 views
0

Kann jemand bestimmen, welche Fenster in einer GTK-Anwendung "Top-Level-Fenster" sind. Was ich damit meine, sind Fenster, die normalerweise mit einem Rahmen (der einen Titel und einen Minimieren/Maximieren-Knopf sowie einen roten "x"/Schließen-Knopf enthält) in irgendeinem üblichen Fenstermanager, z.B. Text-Tool-Tipps würden kein Top-Level-Fenster sein, da diese nie Grenzen bekommen, trotzdem werden sie immer noch als Fenster in x11 betrachtet (oder zumindest in GTK, die sie sind). Ich habe eine GTK-Anwendung, die auf dem xvfb ohne Fenstermanager läuft, und ich habe bemerkt, dass jedes Fenster ein direktes Kind des Wurzelfensters aus irgendeinem Grund ist, das Finden der "obersten Fenster" schwierig zu finden.Ermitteln, ob das GTK-Fenster in xlib ein Unterfenster oder ein Fenster der obersten Ebene ist

Vielen Dank!

+0

Zum einen können Sie einfach verfolgen, welches Fenster die oberste Ebene ist, oder Sie könnten das übergeordnete Element von jedem Widget/Fenster erhalten, bis Sie das letzte Fensterobjekt erreichen. – oldtechaa

Antwort

1

Ein Popup, wie Sie es beschreiben, ist ein Fenster der obersten Ebene, genau weil es über dem Fenster schwebt, das das Popup generiert hat. Es kann kein Kind sein, denn dann wäre es abgeschnitten.

Was Sie überprüfen sollten, sind die Hinweise, die dem Fenstermanager, genauer gesagt dem _NET_WM_WINDOW_TYPE-Atom, gegeben werden. (siehe this link at freedesktop.org oder this one at gnome.org). Was jede Anwendung in diesen Tagen macht (oder tun sollte), ist dem Fenstermanager zu sagen "Hey, ich bin ein Fenster vom Typ X, bitte stelle sicher, dass ich richtig dekoriert werde." Ein 'normales' Fenster für eine Anwendung sollte die Eigenschaft auf _NET_WM_WINDOW_TYPE_NORMAL setzen, während ein Menü _NET_WM_TYPE_POPUP_MENU, einen Tooltip _NET_WM_TYPE_TOOLTIP usw. enthalten würde.

Auch wenn Sie keinen Window-Manager ausführen, wird die Anwendung trotzdem die Eigenschaft festlegen und Sie können sie weiterhin abfragen.

Beachten Sie, dass ein Fenster mehrere Typen haben kann, obwohl dies in der Praxis selten geschieht. Die Absicht war, einen bevorzugten Fenstertyp gefolgt von Fallback-Typ (en) zu haben, falls der Fenstermanager Ihren Fenstertyp nicht unterstützt. Wenn Sie die Liste der Typen erhalten, müssen Sie sie alle überprüfen. Ich bin mir nicht sicher, ob es einen Weg gibt zu bestimmen, welchen Typ der Fenstermanager letztendlich benutzt. Zumindest Ihr 'normales' Fenster sollte einen unterstützten Typ haben.