文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>X Window研究笔记(12)-截取点

X Window研究笔记(12)-截取点

时间:2009-08-07  来源:lixianjing

X Window研究笔记(12)-截取点

转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静 <xianjimli at hotmail dot com>

12.X Window扩展机制--截取点

XWindow提供了另外一种扩展机制,可以在一些关键位置设置截取点,换句话说,你可以在这些关键位置插入自己的回调函数,当程序执行到这里时,注册的回调函数就会被调用。主要的截取点包括:

1. ClientStateCallback 在创建,连接和关闭client等时候被调用。调用代码在dix/dispatch.c文件中。
2. FlushCallback 在函数FlushAllOutput中被调用,调用代码在os/io.c文件中。
3. DeviceEventCallback 在有输入事件时被调用,调用代码在dix/events.c文件中。
4. EventCallback 在事件被发送到客户端时被调用,与DeviceEventCallback不同的是,这里的事件除了输入事件之外还包括GUI的事件。调用代码在dix/events.c文件中。
5. ReplyCallback 在回应客户端时(WriteToClient)时被调用,调用代码在os/io.c文件中。
6. GSkippedRequestsCallback 在SkipRequests里被调用,不过没有发现SkipRequests被调用的地方。
7. ServerGrabCallback 在ServerGrabCallback/ServerGrabCallback里被调用,调用代码在dix/dispatch.c文件中。

以上每个截取点都有一个回调函数链表,从理论上讲,回调函数的个数是没有限制的,可以在自己的模块中根据需要注册回调函数,X Window提供了下列函数,用于管理回调函数链表。

AddCallback向回调函数链表中注册回调函数。

Bool
AddCallback(pcbl, callback, data)
CallbackListPtr *pcbl;
CallbackProcPtr callback;
pointer data;

DeleteCallback从回调函数链表中注销回调函数。

Bool
DeleteCallback(pcbl, callback, data)
CallbackListPtr *pcbl;
CallbackProcPtr callback;
pointer data;

CallCallbacks 调用回调函数链表中的函数。

void
CallCallbacks(pcbl, call_data)
CallbackListPtr *pcbl;
pointer call_data;

DeleteCallbackList 销毁回调函数链表

void
DeleteCallbackList(pcbl)
CallbackListPtr *pcbl;

示例可以参考Xext/security.c中的实现。

相关阅读 更多 +
排行榜 更多 +
空闲的鲨鱼世界

空闲的鲨鱼世界

休闲益智 下载
枪手跑酷手机版

枪手跑酷手机版

休闲益智 下载
割绳子大师

割绳子大师

休闲益智 下载