簡體   English   中英

QT:在X11EventFilter中未獲取XIDeviceEvent數據

[英]QT: Not getting XIDeviceEvent data in X11EventFilter

我有一個Qt應用程序,可以在Ubuntu 14.04和Ubuntu 12.04上正常工作,我需要將Touch和按鈕XEvents重定向到我的應用程序。 做到這一點的代碼如下:

XIEventMask eventmask;
eventmask.deviceid = XIAllMasterDevices;
eventmask.mask_len = XIMaskLen(XI_LASTEVENT);
eventmask.mask = (unsigned char*) calloc(eventmask.mask_len, sizeof(char));
XISetMask(eventmask.mask, XI_TouchBegin);
XISetMask(eventmask.mask, XI_TouchUpdate);
XISetMask(eventmask.mask, XI_TouchEnd);
XISetMask(eventmask.mask, XI_ButtonPress);
XISetMask(eventmask.mask, XI_ButtonRelease);
XISetMask(eventmask.mask, XI_Motion);
printf("Return value from XISelectevents: %d\n",XISelectEvents(QX11Info::display(), viewer->winId(), &eventmask, 1));

XISelectEvents()函數返回0,我認為這是成功的返回值。 然后,我有一個oveeride函數bool MainApplication::x11EventFilter(XEvent *event)處理事件。

XEvent ev = *event;
if (ev.xcookie.type == GenericEvent)
{
    //printf("event: %d\n", ev.xcookie.evtype);
    XIDeviceEvent* evData = (XIDeviceEvent*)(ev.xcookie.data);

    int id = 0;
    if(evData != 0)
        id = evData->detail;
    else{
        printf("Device Event data not coming\n");
       // return false;
    }
...

上面的代碼在Ubuntu上可以正常工作,但在Debian 8上, (XIDeviceEvent*)(ev.xcookie.data)值為0。是否有任何原因不能在Debian 8上使用?

我需要調用XGetEventData(QX11Info::display(),ev.xcookie)以獲得事件數據。 這是我進行一些挖掘后發現的。 Cookie只是每個事件的唯一ID。 XGenericEventCookie數據結構如下-

typedef struct
{
    int            type;         /* of event. Always GenericEvent */
    unsigned long  serial;       /* # of last request processed */
    Bool           send_event;   /* true if from SendEvent request */
    Display        *display;     /* Display the event was read from */
    int            extension;    /* major opcode of extension that caused the event */
    int            evtype;       /* actual event type. */
    unsigned int   cookie;       /* unique event cookie */
    void           *data;        /* actual event data */
} XGenericEventCookie;

事實證明,簡單地檢索事件將使用數據指針NULL檢索事件cookie。 必須調用XGetEventData才能實際聲明cookie。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM