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

    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中的代码。

    (待续)
     
  • 相关阅读:
    ACM学习历程—UESTC 1218 Pick The Sticks(动态规划)(2015CCPC D)
    ACM学习历程—UESTC 1217 The Battle of Chibi(递推 && 树状数组)(2015CCPC C)
    A*算法的实现
    codevs1011 数的计算 2001年NOIP全国联赛普及组
    一场ACM一场梦——我的一年
    HDU 4422 The Little Girl who Picks Mushrooms ( 模拟)
    HDU4277 USACO ORZ(dfs+set)
    HDU4272LianLianKan(dfs)
    HDU4268 Alice and Bob(贪心+multiset)
    hdu 5444 Elven Postman(二叉树)——2015 ACM/ICPC Asia Regional Changchun Online
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167674.html
Copyright © 2011-2022 走看看