使用HeaderBar时保存和还原窗口的大小和位置

fqx*_*qxp 2 python gtk3

在我的应用程序中,我想在重启后恢复我的应用程序窗口的位置和大小。目前,我正在使用Gtk.Window.get_size()Gtk.Window.get_position()获取尺寸和位置,Gtk.Window.resize()以及对其Gtk.Window.move()进行还原。

这项工作起初有效,但是现在,我将应用程序更改为use Gtk.HeaderBar,并且位置和大小都不正确。

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

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

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

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

eba*_*ssi 5

已经有各种问题gtk_window_get_size()gtk_window_set_size()以及最近已固定的GTK + 3.20客户端装饰-看到了3.20版本的发行说明

如果要恢复窗口的大小,请确保使用的是最新的GTK +稳定版本,并且不要使用分配的大小,而应使用返回的大小gtk_window_get_size()。同样重要的是要注意,您不应在销毁期间查询窗口的状态,而应在状态本身发生任何变化时查询。例如,请参见GNOME Wiki上的保存”窗口状态页面

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

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