通过_XSETTINGS_SETTINGS完成XWindow程序间通信的原理

Selections:是X11定义的最基本的用来在X Client间交换信息的机制,例如,在两个窗口间进行数据的剪切和粘贴。在X Server上可以有任意多个SelectionsSelectionatom来标识,在server范围内有效。每个Selection被一个client拥有,并和一个窗口相关联。Selections用来在ownerrequestor间通信,owner保存有selection的数据,requestor会接收数据。一个requestor通过提供以下数据来获得selection的数据:

1、  selection的名字

2、  属性名

3、  窗口

4、  数据类型(用atom描述)

5、  一些参数(可选)

如果selectionowner,则owner会收到一个事件,并需要完成以下过程:

1、  selection的内容转换成被请求的数据类型

2、  将数据放在指定窗口的指定属性里

3、  requestor发送一个事件通知属性已经准备好

 

一个Client通过SetSelectionOwner函数来获得一个selection的所有权。指定该selectionowner为一个窗口。

实现_XSETTINGS_SETTINGS机制的两个selection分别是_XSETTINGS_SETTINGS_XSETTING_SN

1、  _XSETTINGS_SNowner设置成一个窗口,所有关心_XSETTINGS_SETTINGS的程序通过GetSelectionOwner函数获取_XSETTINGS_SN的窗口ID,然后通过XSelectInput函数订阅在该窗口上的PropertyNotify事件

2、  需要修改_XSETTINGS_SETTINGS属性的client,通过XChangeProperty修改_XSETTINGS_SNowner窗口上的_XSETTINGS_SETTINGS属性,这样,所有订阅了该窗口的PropertyNotify事件的client都会接收到该事件,

3、  ,当接收到该窗口的PropertyNotify事件后,通过XGetWindowProperty获取到修改后的_XSETTINGS_SETTINGS属性并应用

 

综上所述:_XSETTINGS_SN的主要作用是为不同的SCREEN提供一个owner窗口,所有关心_XSETTINGS_SETTINGSclient都能通过获取_XSETTINGS_SNowner窗口来订阅同一个窗口上的PropertyNotify事件。而修改_XSETTINGS_SETTINGSclient也会通过修改在该窗口上的属性来通知所有其他窗口应用设置。

_XSETTINGS_SETTINGS原理图

 

Property:窗口属性,是一个字符串,用atom来标识

XChangeProperty可以用来修改属性,也可以用来创建属性

Xprop可以查看一个窗口的属性

AtomAtom是一个ID,标识一个字符串,该字符串存在于X Server上,因为字符串长度不固定,并且可能会很长,在客户端和服务器间传递会很不方便,因此,使用atom来标识,atom实际上是一个32位值。XInternAtom函数用来创建一个字符串,并返回标识该字符串的atom

xlsatom命令可以查看所有的atom

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值