LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   some keyboard/mouse events cant be caught-xlib programming (https://www.linuxquestions.org/questions/programming-9/some-keyboard-mouse-events-cant-be-caught-xlib-programming-833940/)

hamedhsn 09-23-2010 02:09 AM

some keyboard/mouse events cant be caught-xlib programming
 
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;               
           
        }
    }
}



All times are GMT -5. The time now is 05:39 PM.