什么是 'client side decoration'?

What is 'client side decoration'?

我是一名学生,做过一些 Web 内容和一些命令行应用程序,现在尝试使用 GUI。我读了http://python-gtk-3-tutorial.readthedocs.org/en/latest/layout.html,无意中发现了这句话:

Since GTK+ now supports Client Side Decoration, a Gtk.HeaderBar can be used in place of the title bar (which is rendered by the Window Manager).

有人可以解释一下 "client side decoration" 是什么吗?

根据阅读 http://blogs.gnome.org/mclasen/2014/01/13/client-side-decorations-continued/ 我猜想 "client side decoration" 类似于主题。有人可以解释一下 window 管理器如何与 GTK+ 交互吗?为什么叫'client边饰'?什么是服务器端装饰? (或另一种装饰?)

传统上,GUI 应用程序将负责其 window 的内容,但不负责标题栏、关闭按钮、边框、调整大小手柄等。这些都将由 window经理,被称为decorations.

(window 管理器的例子有 TWM、Fluxbox、Metacity、Mutter 等)

这是一个简化的解释,但这是桌面主题的实现方式;因为 window 不知道它的标题栏,所以 window 管理器在上面放了一个与当前主题相匹配的标题栏。如果用户更改主题,那么 window 只会更改标题栏。您的应用程序不必关心。

另一方面,这意味着您的应用程序完全不可能以任何方式自定义标题栏。

近年来,可以告诉 window 经理 "no thank you, I don't want decorations," 并改为呈现自己的标题栏。这就是 GtkHeaderBar 的用途——通过在标题栏中放置自定义控件来节省更多的屏幕空间,例如 Chromium 对其浏览器选项卡所做的那样。这叫client-side装修.

(从技术上讲,这总是可行的,但很容易出错,因为您必须自己模拟 window 装饰的所有功能,以用户期望的方式工作。GtkHeaderBar 确实给你的。)

这是一把 double-edged 剑,因为带有 client-side 装饰,您的应用程序不会对 window 管理器主题的更改做出反应。

至于名称client-side,它来自X术语,其中client是一个应用程序,它呈现一个window 并将其发送到 X 服务器.