我有一个基于SDL 1.2.15的应用程序,我想包括多点触控功能。所以我试图像{SDL2}那样,通过XISelectEvents
做这样的事情:
/* Set up MPX events */
XIEventMask eventmask;
eventmask.deviceid = XIAllMasterDevices;
eventmask.mask_len = XIMaskLen(XI_LASTEVENT);
eventmask.mask = (unsigned char*) calloc(eventmask.mask_len, sizeof(char));
/* Events we want to listen for */
XISetMask(eventmask.mask, XI_TouchBegin);
XISetMask(eventmask.mask, XI_TouchUpdate);
XISetMask(eventmask.mask, XI_TouchEnd);
/* Register events on the window */
XISelectEvents(display, win, &eventmask, 1);
此代码在一个简单的X11应用程序上正常运行,我正在为多点触控GenericEvent
获取X11事件。
所以这鼓励我在SDL_x11video.c的static int X11_CreateWindow
函数末尾包含下一个代码:
XIEventMask eventmask;
eventmask.deviceid = XIAllMasterDevices;
eventmask.mask_len = XIMaskLen(XI_LASTEVENT);
eventmask.mask = (unsigned char*) calloc(eventmask.mask_len, sizeof(char));
// Events we want to listen for
XISetMask(eventmask.mask, XI_TouchBegin);
XISetMask(eventmask.mask, XI_TouchUpdate);
XISetMask(eventmask.mask, XI_TouchEnd);
printf( "Goto register on XISelectEvents\n");
printf("XISelectEvents: %d, %d\n", __LINE__, SDL_Display);
// Register events on the window
if (XISelectEvents(SDL_Display, SDL_Window, &eventmask, 1) != Success)
{
printf( "Impossible to run XISelectEvents\n");
}
printf( "register on XISelectEvents DONE\n");
关键是,虽然XISelectEvents看起来像是正常工作,但是当我使用与鼠标相关的触笔X11事件(ButtonPress
,ButtonRelease
,MotionNotify
)而不是{{ 1}}期待。
作为限制,我无法更改为SDL2,迁移任务可能会很大。
有什么建议吗?