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中的实现。

    (待续)

     
  • 相关阅读:
    内容敏感图像压缩
    线性筛素数
    一元三次方程
    holiday
    电话网络
    expect之初使用
    python基本数据类型
    Linux系统中的日志管理
    Linux计划任务(at,crontab)
    RHEL7 启动配置 加密
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167677.html
Copyright © 2011-2022 走看看