使用HeaderBar时保存并恢复窗口大小和位置

时间:2016-08-01 17:22:32

标签: python gtk3

在我的应用程序中,我想在重启后恢复应用程序窗口的位置和大小。目前,我使用Gtk.Window.get_size()Gtk.Window.get_position()来获取尺寸和位置,Gtk.Window.resize()Gtk.Window.move()来恢复它们。

这首先起作用,但现在,我已将应用程序更改为使用Gtk.HeaderBar,并且位置和大小都不再正确。

Gtk.Window.get_position() states的文档,这是预期的行为。它说

  

正确的机制是支持会话管理协议(例如,参见GNOME库中的“GnomeClient”对象)并允许窗口管理器保存窗口大小和位置。

但我不知道它是如何工作的或如何实现它。

那么,在使用HeaderBar时如何保存和恢复窗口位置和大小?便携式解决方案是最好的,但至少X11和可能的Wayland应该是可支持的。

1 个答案:

答案 0 :(得分:5)

gtk_window_get_size()gtk_window_set_size()以及最近针对GTK + 3.20修复的客户端装饰存在各种问题 - 请参阅the release notes for the 3.20 version

如果要恢复窗口大小,确保使用最新稳定版本的GTK +,并且永远不要使用分配的大小,而是gtk_window_get_size()返回的大小。同样重要的是要注意,在破坏期间不应查询窗口的状态,而是在状态本身发生变化时。例如,请参阅Saving window state page on the GNOME wiki

至于位置:您应该知道Wayland(和Mir)上没有全局坐标系,因此您无法在屏幕上查询窗口的位置,也无法在该窗口系统上手动设置它。 / p>

GnomeClient API早已被弃用,作为会话管理的一部分进行状态保存并不真正起作用。文档需要修复。