私は gtk3 と gtkmm を使用しています。ウェイランドのウィンドウを移動したい。
しかし、それは不可能のようです。Gtk::Window::move
メソッドとメソッドを使ってみGdk::Window::move
ました。私もtype_hint
オンにGtk::Window
して電話しGtk::Window::set_transient_for
ました。これらはどれもウェイランドでは機能しませんでした。動かないだけです。また、「子ウィンドウ」を呼び出すGtk::Window::set_transient_for
と、「子ウィンドウ」がTYPE_HINT_DIALOG
メインウィンドウの上に留まらなくなります。これは、このメソッドを呼び出す前に機能していました。
しかし、私はgtkmm: Gdk::Window Class Referenceでこれを読みました:
トップレベル ウィンドウの場合、ウィンドウ マネージャは移動を無視または変更できます。GDK 関数を使用する代わりに、おそらくGtk::Window ウィジェットで
gtk_window_move()
1を使用する必要があります。子ウィンドウの場合、移動は確実に成功します
子ウィンドウの移動が機能すると言います。しかし、「子ウィンドウ」が何を意味するのか正確にはわかりません。
今私は知りたい:
- これは本当ですか?
- 子ウィンドウを移動するために、特定のウィンドウを別のウィンドウの子ウィンドウにするにはどうすればよいですか (そして
Gtk::Window::set_transient_for
、その方法です)。 - どうにかして(トップレベルの)ウィンドウをウェイランドでgtkで移動できますか(たとえば、サブサーフェスなどで)
注: C コード (gtk コード) も歓迎です!
編集:注意したい:アプリオプション「-platform wayland」を使用するQt5でも同じです。ウェイランドを使用している場合、Qt5 はウィンドウを移動しません。
1これはエラーだと思います。Gtk::Window::move(int x, int y)