2016-08-01 87 views
2

在我的應用程序中,我想在重新啓動後恢復應用程序窗口的位置和大小。目前,我使用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應該是可以支持的。

回答

4

對於最近爲GTK + 3.20修復的gtk_window_get_size(),gtk_window_set_size()和客戶端裝飾有各種問題 - 請參閱the release notes for the 3.20 version

確保您使用GTK +的最新的穩定版本,如果你想恢復窗口的大小,而你從來不使用分配的大小,而是由gtk_window_get_size()返回的大小。同樣重要的是要注意,你不應該在銷燬期間查詢窗口的狀態,而是每當狀態本身發生變化時。例如參見Saving window state page on the GNOME wiki

至於位置:您應該知道Wayland(和Mir)上沒有全局座標系,因此您無法在屏幕上查詢窗口的位置,也無法在該窗口系統上手動設置它。

GnomeClient API早已被棄用,而作爲會話管理一部分的狀態保存並不真正起作用。文檔需要修復。