user-interface - 什么是 'client side decoration' ?

标签 user-interface gtk window-managers

我是一名学生,做过一些网络工作和一些命令行应用程序,现在尝试使用 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).



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

来自阅读http://blogs.gnome.org/mclasen/2014/01/13/client-side-decorations-continued/我猜想“客户端装饰”类似于主题。有人可以解释窗口管理器如何与 GTK+ 交互吗?为什么称为“客户端装饰”?什么是服务器端装饰? (或者其他类型的装饰?)

最佳答案

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

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

这是一个简单的解释,但这就是桌面主题的实现方式;由于窗口不知道它的标题栏,窗口管理器会在其上放置一个与当前主题匹配的标题栏。如果用户改变了主题,那么窗口只会改变标题栏。您的应用程序不必关心。

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

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

(从技术上讲,这总是可能的,但很容易出错,因为您必须自己模拟 window 装饰的所有功能,就像用户期望它们工作的方式一样。GtkHeaderBar 为您做到了。)

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

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

关于user-interface - 什么是 'client side decoration' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28650646/

相关文章:

c# - Visual Studio 2010 中的 GTK#

gtk - 如何在 Cairo/Gtk 中绘制带圆角的图像?

c - 将二维数组传递给 C 中 GTK 中的函数

android - 我应该用什么代替 getWidth() 和 getHeight() 来知道什么时候宽度更大,什么时候高度更大

android - 添加到 WindowManager 的自定义 View 上的动画

java - 更改 TextView 的下划线颜色

php - 通过循环从多个PHP回显属性设置CSS x和y

c++ - Qt 背景图像显示在设计器中但不在发布中

vb.net - 如何在 VB.NET 中使用 FolderBrowserDialog 控件选择多个文件夹路径

ruby - (Ruby || Python) 窗口管理器