XLIB的XSendEvent无效问题

Tom199818 2015-09-26 12:06:13
#include <X11/Xlib.h>

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <signal.h>

#include <time.h>

#include <sys/time.h>

int x=10,y=10;
struct _XDisplay *d;
int s;
Window w;
XEvent e;

void sigroutine(int signo){

/* send event */
XSendEvent(d, w, 1, ExposureMask, &e);
printf("Catch a signal -- SIGALRM \n");
signal(SIGALRM, sigroutine);
return;
}

int main()
{
struct itimerval value, ovalue;
/* open connection with the server */
d = XOpenDisplay(NULL);
if(d == NULL)
{
printf("Cannot open display\n");
exit(1);
}
s = DefaultScreen(d);

/* create window */
w = XCreateSimpleWindow(d,
RootWindow(d, s),
10,
10,
500,
500,
1,
BlackPixel(d, s),
WhitePixel(d, s));

/* select kind of events we are interested in */
XSelectInput(d, w, ExposureMask | KeyPressMask);

/* map (show) the window */
XMapWindow(d, w);

/* Set timer */
signal(SIGALRM, sigroutine);

value.it_value.tv_sec = 1;

value.it_value.tv_usec = 0;

value.it_interval.tv_sec = 1;

value.it_interval.tv_usec = 0;

setitimer(ITIMER_REAL, &value, &ovalue);

/* event loop */
while(1)
{
XNextEvent(d, &e);
/* draw or redraw the window */
if(e.type == Expose)
{
printf("Expose \n");
XFillRectangle(d, w, DefaultGC(d, s), x, y, 10, 10);
x+=10;
y+=10;
}
/* exit on key press */
if(e.type == KeyPress)

break;
}

/* close connection to server */
XCloseDisplay(d);

return 0;
}


代码如上,sigroutine函数可以正确执行,但是expose事件不能触发,求大神解决

...全文
392 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧