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/

相关文章:

Rust 在窗口中绘制和更新

gtk - 为什么按钮和默认按钮的顺序会随着用户执行 PyGTK/GTK 程序而改变?

linux - xmonad 并稍后阅读

java - Java 中的 GUI 线程

jQuery UI - 可拖放的数据传输未定义

c++ - 如何将 QMap 存储到 QSetting 变量中

lua - 每个标签列表项都有不同的背景颜色 AwesomeWM

ios - 初始化程序不会覆盖其父类(super class) Swift 2.0 中的指定初始化程序

python - wxStaticBitmap 与 wxPtyhon 在 GTK+ 不工作

android - 无法从 WindowManager 中删除 View - 多线程