如何在 Vala 中设置一个 widget 来拖动一个未修饰的 Window?

How to set a widget to drag an undecorated Window in Vala?

这似乎是一个简单的问题。我是 Gtk 和 Vala 编程的初学者。我也是初学者。我从 Vala Gtk GUI 开始,现在我有一个不可拖动的未修饰 Window。 我需要设置一个自定义 titlebar-like 小部件来拖动 window。我读过它是可行的,并且使用 Python 看到了它的实际效果,但不是 Vala。

我想让添加和关闭之间的区域可拖动 - 它是一个 Gtk 水平框。

我需要帮助在 Vala 中实现它。请帮助。

提前致谢。

GTK+ 确实支持 client-side 装饰,这意味着您提供 window 装饰而不是 window 管理器。这是通过 gtk_window_set_titlebar() 完成的,它将任意 GtkWidget 用作标题栏。

GTK+ 提供了 GtkHeaderBar,一个完整的标题栏,您可以向其中添加任意小部件(与 GtkBox 的方式相同)。您可能已经看到许多 GNOME 程序已经在使用它们。您的屏幕截图看起来像是 GtkHeaderBar 的工作,添加按钮打包到开头,关闭按钮打包到结尾。只需将其设置为 GtkWindow 的标题栏,您就可以开始了。 (您可能还需要删除标准的 minimize/maximize/close 按钮;也有一个 GtkHeaderBar 方法可以做到这一点。)

当然,默认情况下 GtkHeaderBar 看起来像标准的 window 管理器装饰。您可以使用 CSS 更改外观,甚至可以更改标题栏内按钮的外观(仅)。您在评论中的屏幕截图显示您已经这样做了;干得好!