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?
Obwohl es WM-spezifisch ist, gibt es irgendwelche "gemeinsamen" Erwartungen an diese Eigenschaft? – jiandingzhe
@jiandingzhe Aus der EWMH-Spezifikation: "Andere Dialoge müssen geschlossen werden, bevor der Benutzer im Hauptfenster weiterarbeiten kann. Diese Eigenschaft heißt Modalität." –
Wenn also diese Funktion nicht garantiert ist, sollte ich sie immer in der Ebene meiner Fensterebene implementieren? – jiandingzhe