2016-08-01 20 views
2

In meiner Anwendung möchte ich die Position und die Größe meiner Anwendungsfenster nach dem Neustart wiederherstellen. Derzeit verwende ich Gtk.Window.get_size() und Gtk.Window.get_position(), um die Größe und Position zu erhalten, und Gtk.Window.resize() und Gtk.Window.move(), um sie wiederherzustellen.Speichern und Wiederherstellen von Fenstergröße und -position bei Verwendung von HeaderBar

Dies funktionierte zuerst, aber jetzt habe ich die Anwendung geändert, um Gtk.HeaderBar zu verwenden, und weder Position noch Größe sind mehr korrekt.

Die Dokumentation für Gtk.Window.get_position()states, dass dies erwartetes Verhalten ist. Es sagt

Der richtige Mechanismus ist, das Session-Management-Protokoll zu unterstützen (siehe zum Beispiel das "GnomeClient" -Objekt in den GNOME-Bibliotheken) und erlauben dem Fenstermanager, Ihre Fenstergrößen und Positionen zu speichern.

aber ich weiß nicht, wie das funktioniert oder wie es zu implementieren ist. Wie kann ich die Fensterposition und -größe speichern und wiederherstellen, wenn HeaderBar verwendet wird? Eine portable Lösung wäre am besten, aber mindestens X11 und wahrscheinlich Wayland sollten unterstützt werden.

Antwort

4

Es gab verschiedene Probleme mit gtk_window_get_size(), gtk_window_set_size() und clientseitigen Dekorationen, die vor kurzem für GTK + 3.20 behoben wurden - siehe the release notes for the 3.20 version.

Stellen Sie sicher, dass Sie die neueste stabile Version von GTK + verwenden, wenn Sie die Größe des Fensters wiederherstellen möchten und niemals die zugewiesene Größe, sondern die von gtk_window_get_size() zurückgegebene Größe verwenden. Es ist auch wichtig zu beachten, dass Sie den Status des Fensters während der Zerstörung nicht abfragen sollten, sondern immer dann, wenn sich der Status selbst ändert. Siehe zum Beispiel die Saving window state page on the GNOME wiki.

Für die Position: Sie sollten beachten, dass globale Koordinatensysteme auf Wayland (und Mir) nicht verfügbar sind und Sie daher die Position Ihres Fensters auf dem Bildschirm weder abfragen noch manuell auf diesem Fenstersystem festlegen können.

Die GnomeClient-API ist schon lange nicht mehr unterstützt, und das Speichern des Status als Teil der Sitzungsverwaltung funktioniert nicht wirklich. Die Dokumentation muss korrigiert werden.