From a3027cce6f5f7753147edc49aa4403a013338c3d Mon Sep 17 00:00:00 2001 From: Alessandro Iezzi Date: Sat, 17 May 2025 01:34:25 +0200 Subject: Add mouse listener --- src/main/ui/x11/ui.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'src/main/ui/x11/ui.c') diff --git a/src/main/ui/x11/ui.c b/src/main/ui/x11/ui.c index 1c04fd4..fc59e4e 100644 --- a/src/main/ui/x11/ui.c +++ b/src/main/ui/x11/ui.c @@ -32,6 +32,7 @@ static GLXContext gl_context; static int close_window = 0; void (*on_loop_event)(); +void (*on_mouse_press_event)(); void cleanup(void); @@ -66,7 +67,7 @@ ui_get_attributes(Window root, XVisualInfo *vi) Colormap colormap = XCreateColormap(display, root, vi->visual, AllocNone); XSetWindowAttributes swa; swa.colormap = colormap; - swa.event_mask = ExposureMask | KeyPressMask | StructureNotifyMask; + swa.event_mask = ExposureMask | KeyPressMask | StructureNotifyMask | ButtonPressMask | ButtonReleaseMask; return swa; } @@ -127,12 +128,33 @@ ui_on_keypress(XEvent event) close_window = 1; } +static void +ui_on_mouse_press(XEvent event) +{ + if (event.type != ButtonPress) return; + if (on_mouse_press_event != NULL) { + on_mouse_press_event(); + } +} + +static void +ui_on_mouse_release(XEvent event) +{ + if (event.type != ButtonRelease) return; +} + void ui_set_loop_listener(void (*loop_event)()) { on_loop_event = loop_event; } +void +ui_set_mouse_press_listener(void (*mouse_press_event)()) +{ + on_mouse_press_event = mouse_press_event; +} + void ui_loop(void) { @@ -143,6 +165,8 @@ ui_loop(void) ui_on_expose(event); ui_on_resize(event); ui_on_keypress(event); + ui_on_mouse_press(event); + ui_on_mouse_release(event); } on_loop_event(); -- cgit v1.2.3