X11 mouse-buttons auf Desktop



  • Hallo!

    Ich habe folgendes Problem:
    Mit Hilfe von X11 möchte ich feststellen, wann auf dem Desktop bzw. root window die mouse buttons gedrückt werden.

    Der entsprechende Quelltext sieht so aus:

    void grab()
    {
    	Display *display = XOpenDisplay(NULL);
    	if (!display) {
    		return;
    	}
    
    	Window rootWnd;
    	rootWnd = DefaultRootWindow(display);
    
    	XGrabButton(display, Button3, AnyModifier, rootWnd, True,
    		ButtonPressMask | ButtonReleaseMask, GrabModeSync, GrabModeSync,
    		rootWnd, None);
    
    	// grab pointer buttons
    	while (true) {
    		XEvent evt;
    		XNextEvent(display, &evt);
    
    		XAllowEvents(display, ReplayPointer, CurrentTime);
    
    		switch (evt.type) {
    		case ButtonPress:
    			cout << "press" << endl;
    			break;
    		case ButtonRelease:
    			cout << "release" << endl;
    			break;
    		}
    
    	}
    	XUngrabButton(display, Button3, AnyModifier, rootWnd);
    	XCloseDisplay(display);
    }
    

    Ich bekomme nur das 'ButtonPress' und nicht das 'ButtonRelease' mit. Hat jemand eine Idee, was ich falsch mache?



  • So wie ich ReplayPointer verstanden habe, löst er den Grab nach dem Event auf. Daher bekommst du vielleicht kein zweites Event. Aber ich würde nicht Xlib direkt programmieren. Wenn du schon X11 direkt programmieren willst, dann schau dir lieber XCB an

    http://www.x.org/releases/current/doc/libxcb/tutorial/index.html
    http://xcb.freedesktop.org/


Anmelden zum Antworten