hi ..
i have a problem with this program ,it lists the current window along with window id thet are running on the system,result is that for a particular window id that i enter i got odd result:
for application like firefox or gedit just motion notify event works,non of the other events work??
for my terminal(bash) everything works,key press,keyrelease,mouse notify,mouserelease,...
i dont know why??
//this part get the window id
Code:
Display * dis;
Display * dis;
Window w;
dis = XOpenDisplay (0);
w=XDefaultRootWindow(dis);
Atom a = XInternAtom(dis, "_NET_CLIENT_LIST" , 1);
Atom actualType;
int format;
unsigned long numItems, bytesAfter;
unsigned char *data =0;
int status = XGetWindowProperty(dis,w,a,0L,(~0L),0,AnyPropertyType,&actualType,&format,&numItems,&bytesAfter,&data);
if (status >= Success && numItems)
{
int *array = (int*) data;
int k;
for (k = 0; k < numItems; k++)
{
// get window Id:
Window w = (Window) array[k];
XSelectInput (dis, w, KeyPressMask |PointerMotionMask |ButtonReleaseMask);
char* name = '\0';
status = XFetchName(dis, w, &name);
if (status >= Success)
{
printf("Found: %u %s\n", w, name);
}
XFree(name);
}
XFree(data);
}
//Event handling for windows
Code:
XEvent event;
while (1) {
XNextEvent(dis, &event);
switch (event.type) {
//MOUSE LOCATION
case MotionNotify:
fprintf(stdout,"x: %d y:%d\n",event.xmotion.x,event.xmotion.y);
break;
//KEYBOARD KEY(it does not wok)
case KeyPress:
fprintf(stdout,"key: %d \n",event.xkey.keycode);
break;
//--------------------------------
//KEYBOARD KEY(it does not wok)
case KeyRelease:
fprintf(stdout,"key: %d \n",event.xkey.keycode);
break;
//--------------------------------
case ButtonRelease:
//show which button is released
if (event.xbutton.button==1)
fprintf(stdout,"mouse left click");
if (event.xbutton.button==2)
fprintf(stdout,"middle left click");
if (event.xbutton.button==3)
fprintf(stdout,"mouse right click");
break;
}
}
}