2016-05-24 5 views
0

Ich mache eine Cross-Plattform-Fensterschicht. Als ich Fenster-Beziehungs-Sachen machte, bekam ich Probleme mit der Fenstermodalität.Was ist das erwartete Verhalten von _NET_WM_STATE_MODAL?

Ich habe die offizielle Spezifikation gelesen: Application Window Properties, und einige verwandte Themen wie folgt: X11 modal dialog. Es scheint nicht ausreichend zu sein, nur transient-for zu setzen, sondern _NET_WM_STATE_MODAL ist ebenfalls erforderlich. Also habe ich versucht, kleine Programme zu erstellen, die diese Eigenschaft zusammen mit transient-for anwenden.

Zuerst habe ich das Programm erstellt, das das Fenster mit SDL2 erstellt, und X11-Dateien mit dem abgerufenen nativen Fensterhandle verwenden. Aber ich habe keine Verhaltensänderung beobachtet, nachdem das Attribut _NET_WM_STATE_MODAL gesetzt wurde: Das Fenster "transient - for target" empfängt weiterhin Maustastenereignisse, was nicht wie ein modalblockiertes Elternfenster ist, das vom Benutzer nicht bedient werden kann.

Um mögliche schlimme Fehler durch SDL2 zu vermeiden, habe ich das Testprogramm mit GDK3 erstellt, das fertige Wrapper-Funktionen zur Verfügung stellt. Das Verhalten ist dasselbe wie das SDL2-Programm.

Da ich keine Änderungen vor/nach der Einstellung von _NET_WM_STATE_MODAL beobachtet habe, was ist das erwartete Verhalten dieser Eigenschaft?

Antwort

1

Da ich keine Änderung vor/nach der Einstellung von _NET_WM_STATE_MODAL beobachtet habe, was ist das erwartete Verhalten dieser Eigenschaft?

Das ist eine Frage, die wir nicht beantworten können. Es ist ein Hinweis darauf, dass der Fenstermanager die Modalität angibt, aber wie in den meisten Fällen liegt es am Fenstermanager zu entscheiden, was mit diesem Hinweis geschehen soll.

Mit anderen Worten hängt das Verhalten vollständig vom Fenstermanager ab und Sie haben nicht angegeben, mit welchem ​​Fenstermanager Sie getestet haben.

Darüber hinaus erfordert dieser Hinweis, dass der Fenstermanager EWMH-konform ist, was nicht alle sind oder nicht vollständig sind. Sie können _NET_SUPPORTED im Hauptfenster verwenden, um eine Liste von Atomen zu sehen, die der Fenstermanager angeblich unterstützt. Wenn _NET_WM_STATE_MODAL dort nicht aufgeführt ist, besteht die Möglichkeit, dass der Fenstermanager diesen Hinweis überhaupt nicht implementiert. Wenn es aufgelistet ist, behauptet der Window Manager , um es zu unterstützen, aber a) es könnte lügen (lassen Sie uns nicht davon ausgehen, dass) und b) Verhalten ist bis zu dem Fenstermanager.

+0

Obwohl es WM-spezifisch ist, gibt es irgendwelche "gemeinsamen" Erwartungen an diese Eigenschaft? – jiandingzhe

+0

@jiandingzhe Aus der EWMH-Spezifikation: "Andere Dialoge müssen geschlossen werden, bevor der Benutzer im Hauptfenster weiterarbeiten kann. Diese Eigenschaft heißt Modalität." –

+0

Wenn also diese Funktion nicht garantiert ist, sollte ich sie immer in der Ebene meiner Fensterebene implementieren? – jiandingzhe