您的位置:首页 > 其它

X Window研究笔记(13)

2007-09-27 21:44 337 查看
X Window研究笔记(13)

转载时请注明出处和作者联系方式
作者联系方式:李先静 <xianjimli at hotmail dot com>

13.X Window扩展机制--客户端勾子函数

扩展模块是X Window的主要扩展方式,前面我们介绍它在X Server中的实现。其实在客户端,X Window也为扩展模块扩展提供了方便,以此可以hook一些重要的功能,很多扩展模块都利用了这种机制。hook接口如下:




typedef struct _XExtensionHooks ...{


int (*create_gc)(




Display* /**//* display */,




GC /**//* gc */,




XExtCodes* /**//* codes */


);


int (*copy_gc)(




Display* /**//* display */,




GC /**//* gc */,




XExtCodes* /**//* codes */


);


int (*flush_gc)(




Display* /**//* display */,




GC /**//* gc */,




XExtCodes* /**//* codes */


);


int (*free_gc)(




Display* /**//* display */,




GC /**//* gc */,




XExtCodes* /**//* codes */


);


int (*create_font)(




Display* /**//* display */,




XFontStruct* /**//* fs */,




XExtCodes* /**//* codes */


);


int (*free_font)(




Display* /**//* display */,




XFontStruct* /**//* fs */,




XExtCodes* /**//* codes */


);


int (*close_display)(




Display* /**//* display */,




XExtCodes* /**//* codes */


);


Bool (*wire_to_event)(




Display* /**//* display */,




XEvent* /**//* re */,




xEvent* /**//* event */


);


Status (*event_to_wire)(




Display* /**//* display */,




XEvent* /**//* re */,




xEvent* /**//* event */


);


int (*error)(




Display* /**//* display */,




xError* /**//* err */,




XExtCodes* /**//* codes */,




int* /**//* ret_code */


);


char *(*error_string)(




Display* /**//* display */,




int /**//* code */,




XExtCodes* /**//* codes */,




char* /**//* buffer */,




int /**//* nbytes */


);


} XExtensionHooks;

在上面这些函数中,close_display(关闭DISPLAY时被调用),wire_to_event(发现事件时被调用)和 event_to_wire(发出事件时被调用)三个函数使用最为频繁。

示例可以参考lib/Xext中的代码。

(待续)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: