Имеется такой код
// Simulate mouse click
void click (Display *display, int button, int b)
{
	// Create and setting up the event
	XEvent event;
	memset (&event, 0, sizeof (event));
	event.xbutton.button = button;
	event.xbutton.same_screen = True;
	event.xbutton.subwindow = DefaultRootWindow (display);
	while (event.xbutton.subwindow)
	{
		event.xbutton.window = event.xbutton.subwindow;
		XQueryPointer (display, event.xbutton.window,
					   &event.xbutton.root, &event.xbutton.subwindow,
					   &event.xbutton.x_root, &event.xbutton.y_root,
					   &event.xbutton.x, &event.xbutton.y,
					   &event.xbutton.state);
	}
	printf(" ");
	// Press
	if(b) {
		event.type = ButtonPress;
		if (XSendEvent (display, PointerWindow, True, ButtonPressMask, &event) == 0)
			fprintf (stderr, "Error to send the event!\n");
		XFlush (display);
		usleep (1);
		printf("one");
	} else {
		// Release
		event.type = ButtonRelease;
		if (XSendEvent (display, PointerWindow, True, ButtonReleaseMask, &event) == 0)
			fprintf (stderr, "Error to send the event!\n");
		XFlush (display);
		usleep (1);
		printf("two");
	}
}
// Move mouse pointer
void move (Display *display, int x, int y)
{
	XWarpPointer (display, None, DefaultRootWindow(display), 0,0,0,0, x, y);
	XFlush (display);
	usleep (1);
}
int main (int argc, char *argv[])
{
	int x = 1;
	int y = 1;
	// Open X display
	Display *display = XOpenDisplay (NULL);
	if (display == NULL)
	{
		fprintf (stderr, "Can't open display!\n");
		return -1;
	}
	move(display, 500, 700);
	click (display, Button1, 1); // Press
	sleep(1);
	move(display, 550, 800);
	sleep(1);
	click(display, Button1, 0); // Release
	// Close X display and exit
	XCloseDisplay (display);
	return 0;
}Идея была выделить кусок текста. Но судя по всему происходит клик, но никак не нажатие-передвижение-отжатие. Кто то может объяснить вкратце как работать с этим дерьмом x11. Или подскажите какую то библиотеку/обвертку для работы с x11. Заранее спасибо. 


