User interface 什么是';客户端装饰';?

User interface 什么是';客户端装饰';?,user-interface,gtk,window-managers,User Interface,Gtk,Window Managers,我是一名学生,曾经做过一些web内容和一些命令行应用程序,现在尝试一下GUI。我读了这篇文章,无意中发现了这句话: 由于GTK+现在支持客户端装饰,因此可以使用GTK.HeaderBar代替标题栏(由窗口管理器渲染) 有人能解释一下什么是“客户端装饰”吗 从阅读中,我猜“客户端装饰”有点像主题。有人能解释一下窗口管理器是如何与GTK+交互的吗?为什么它被称为“客户端装饰”?什么是服务器端装饰?(或其他类型的装饰?传统上,GUI应用程序将负责其窗口的内容,但不负责标题栏、关闭按钮、边框、调整大小夹

我是一名学生,曾经做过一些web内容和一些命令行应用程序,现在尝试一下GUI。我读了这篇文章,无意中发现了这句话:

由于GTK+现在支持客户端装饰,因此可以使用GTK.HeaderBar代替标题栏(由窗口管理器渲染)

有人能解释一下什么是“客户端装饰”吗


从阅读中,我猜“客户端装饰”有点像主题。有人能解释一下窗口管理器是如何与GTK+交互的吗?为什么它被称为“客户端装饰”?什么是服务器端装饰?(或其他类型的装饰?

传统上,GUI应用程序将负责其窗口的内容,但不负责标题栏、关闭按钮、边框、调整大小夹点等。这些都将由窗口管理器添加,称为装饰

(窗口管理器的示例有TWM、Fluxbox、Metacity、Mutter等)

这是一个有点简化的解释,但这是如何实现桌面主题;由于窗口不知道其标题栏,因此窗口管理器会在其上放置一个与当前主题匹配的标题栏。如果用户更改了主题,那么窗口只会更改标题栏。您的应用程序不必在意

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

近年来,告诉窗口管理员“不,谢谢,我不要装饰”并呈现自己的标题栏已成为可能。这就是
GtkHeaderBar
的目的——通过在标题栏中放置自定义控件(如Chromium在其浏览器选项卡中所做的)来节省更多的屏幕空间。这称为客户端装饰

(从技术上讲,这总是可能的,但很容易出错,因为您必须以用户期望的方式自己模拟窗口装饰的所有功能。
GtkHeaderBar
为您做到这一点。)

这是一把双刃剑,因为使用客户端装饰,应用程序不会对窗口管理器主题的更改做出反应

至于client-side这个名称,它来自X术语,其中客户端是一个呈现窗口并将其发送到X服务器的应用程序