macros/src/read_events.c
2022-12-05 03:05:39 +01:00

89 lines
1.8 KiB
C

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <X11/Xlib.h>
#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
}