我正在使用X11 lib.是否有可能获得系统颜色?我的意思是从当前的用户主题,如脸部,突出颜色等.我不能使用GTK和QT库.存在以某种方式通过某些环境变量或freedesktop获取颜色?
问候
准备一些严重的痛苦,困惑和愤怒.它可能都是如此简单,不是Qt和GTK +/GNOME严重的NIH综合症病例.
在X11中有一个称为X资源数据库的系统,它实际上是一个键→值存储,其中键和值都是字符串并包含在根窗口的属性中.您可以使用该xrdb工具访问它.任何表现良好的X11程序都使用此X资源数据库将其外观调整为用户设置.
传统的X11工具包,Motif,Tk,Athena,Xaw3等都符合这一要求.一切都很顺利.而且因为设置了一套简单,毫不含糊的模式匹配规则,几乎每个方面和每个小部件都可以通过这种方式进行主题化.
当GTK +和Qt诞生时,他们也坚持使用Xrdb.但很快GTK +和Qt开发人员说"这不是我们的设计,我们按照自己的方式行事",因此GTK +和Qt从用户家庭目录中的dotfiles中检索他们的设置.并且出于兼容性原因,也尊重一些但不是全部,并且每个版本都有一组不同的Xrdb密钥.
当然桌面库应该协同工作,因此很多设置管理系统诞生了:Elektra,gconf,dconf,uconf,特别是X11 Xsettings.gconf,dconf,uconf当然不使用X11协议,而是使用支持IPC或DBus.DBus本身就是有缺陷的.
然而,Xsettings是一个充满矛盾的规范,并不像Xrdb那样有效.Xsettings存在的主要"原因"是,客户端可以了解更改,因为所有设置都不是根窗口上的属性,而是由Xsettings守护程序管理,通知屏幕上所有客户端发生更改.如果守护进程死亡,那么事情会回到默认状态,因为当Xsettings守护进程的InputOnly属性持有者窗口消失时,客户端应该注册发出的事件.我对Xsetting wahrrrgarrrbl只有一个字.
Xsettings的创建者显然从未想过改变窗口的属性会自动创建一个X事件,允许客户端监听设置更改.另外,仅了解设置更改是没有意义的,因为这需要所有客户端跟踪其本地设置状态,即使它们的某些内部设置仅间接依赖于某些设置.解析整个Xrdb更容易,更不容易出错,仅处理更改设置子集的理论开销节省与设置不会一直变化形成鲜明对比.
这是我的一个很长的TODO列表,剥离整个gconf,dconf,uconf,Xsettings和他们的propriatary配置dotfile混乱的Qt和GTK +并让他们使用Xrdb而不是别的.
| 归档时间: |
|
| 查看次数: |
404 次 |
| 最近记录: |