2016-08-01 5 views
2

私のアプリケーションでは、再起動後にアプリケーションウィンドウの位置とサイズを復元したいと思います。現在、私はGtk.Window.get_size()Gtk.Window.get_position()を使ってサイズと位置を取得しており、Gtk.Window.resize()Gtk.Window.move()を復元しています。HeaderBarを使用したときのウィンドウのサイズと位置の保存と復元

これは最初はうまくいきましたが、今ではGtk.HeaderBarを使用するようにアプリケーションを変更しました。位置もサイズも正しくありません。

Gtk.Window.get_position()statesのドキュメントは、これが予想される動作であることを示しています。それは正しいメカニズムは、セッション管理プロトコルをサポートする(例えばGNOMEライブラリで「GnomeClient」オブジェクトを参照)、ウィンドウマネージャは、あなたのウィンドウのサイズと位置を保存できるようにすることです

言います。

しかし、どのように動作するのか、それを実装する方法はわかりません。

HeaderBarを使用すると、ウィンドウの位置とサイズを保存して復元するにはどうすればよいですか?移植可能なソリューションが最適ですが、少なくともX11とおそらくWaylandはサポート可能でなければなりません。

答えて

4

gtk_window_get_size(),gtk_window_set_size()、およびGTK + 3.20用に最近修正されたクライアントサイドの装飾に関するさまざまな問題がありました。the release notes for the 3.20 versionを参照してください。

ウィンドウのサイズを復元し、割り当てられたサイズを使用しないで、サイズがgtk_window_get_size()である場合は、GTK +の最新の安定版を使用していることを確認してください。また、破棄中にウィンドウの状態を照会すべきではなく、状態自体が変更されるたびに照会すべきであることに注意することも重要です。たとえば、Saving window state page on the GNOME wikiを参照してください。

位置については、グローバル座標系はWayland(およびMir)では利用できないので、画面上のウィンドウの位置を照会することも、そのウインドウシステムで手動で設定することもできません。

GnomeClient APIは長期間使用されなくなっており、セッション管理の一部としての状態保存は実際には機能しません。ドキュメントは修正する必要があります。

関連する問題