D
struct XDisplay
{
Display* display;
Window rootwin;
XDisplay()
{
if(!(display = XOpenDisplay(":0.0"))) // TODO
assert(!"XOpenDisplay");
rootwin = DefaultRootWindow(display);
}
~XDisplay()
{
XCloseDisplay(display);
}
Point query_pointer()
{
int x, y, dummy;
Window dummywin;
XQueryPointer(display, rootwin, &dummywin, &dummywin, &x, &y,
&dummy, &dummy, (unsigned*)&dummy);
return Point(x, y);
}
void warp_pointer(const Point& p) {
XWarpPointer(display, 0, rootwin, 0, 0, 0, 0, p.x, p.y);
}
};
kann sein das dummy auch null sein kann. Der Code ist älter, aber ich vermute ich hatte meine Gründe. Mit dem letzten Parameter von XQueryPointer müsstest du auch die Buttons feststellen können.