zoukankan      html  css  js  c++  java
  • X Window研究笔记(12)

    X Window研究笔记(12)

    转载时请注明出处和作者联系方式
    作者联系方式:李先静 <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中的实现。

    (待续)

     
  • 相关阅读:
    BZOJ 1257 余数之和
    BZOJ 1251 序列终结者
    BZOJ 2716 [Violet 3]天使玩偶
    BZOJ 2648 SJY摆棋子
    HDU 1007 Quoit Design
    BZOJ 3504 危桥
    BZOJ 1877 晨跑
    玩转Web之SSH--Heibernate (一)---第一个demo
    网页信息抓取进阶 支持Js生成数据 Jsoup的不足之处
    2013-09-16 构建C1000K的服务器(1) – 基础
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167677.html
Copyright © 2011-2022 走看看