views:

6

answers:

0

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??

    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];
                         char* name = '\0';
                         status = XFetchName(dis, w, &name);
                         if (status >= Success)
                         {
                                     XSelectInput (dis, wev, KeyPressMask |PointerMotionMask |ButtonReleaseMask);
                                     printf("Found: %u  %s\n", w, name);
                         }
                        XFree(name);

                }
                XFree(data);
        }
    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;                

        }
    }
}