#include #include #include #include #include #include "event.h" #include "read_events.h" void write_event(event *new_event, FILE *file) { fwrite(new_event, sizeof(event), 1, file); fflush(file); } int listen(FILE *file) { event *user_event = new_event(); Display *display = XOpenDisplay(0); Window root_window = DefaultRootWindow(display); XEvent event; int bytes; unsigned char data[3]; const char *pDevice = "/dev/input/mice"; int fd = open(pDevice, O_RDWR); if (fd == -1) { printf("ERROR Opening %s\n", pDevice); return -1; } int left = 0; int right = 0; int middle = 0; signed char x, y; while (!(left && right)) { // Read Mouse bytes = read(fd, data, sizeof(data)); if (bytes > 0) { left = data[0] & 0x1; right = data[0] & 0x2; middle = data[0] & 0x4; XQueryPointer( display, root_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("%d - %d\n", event.xmotion.x, event.xmotion.y); if ((left || right) && !(left && right)) { mouse_button type_button; if (left) type_button = LEFT; if (right) type_button = RIGHT; if (middle) type_button = MIDDLE; mouse_event_coord(user_event, type_button, event.xmotion.x, event.xmotion.y); write_event(user_event, file); } } } /* flush the middle button */ bytes = read(fd, data, sizeof(data)); bytes = read(fd, data, sizeof(data)); free(user_event); close(fd); XCloseDisplay(display); return 0; // TODO on ecoute la souris // TODO on repete ce qu'on a entre }