diff options
Diffstat (limited to 'src/main/engine/ui/x11/ui.c')
-rw-r--r-- | src/main/engine/ui/x11/ui.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/main/engine/ui/x11/ui.c b/src/main/engine/ui/x11/ui.c index 7a325ce..cd35edf 100644 --- a/src/main/engine/ui/x11/ui.c +++ b/src/main/engine/ui/x11/ui.c @@ -35,7 +35,7 @@ static int close_window = 0; void (*on_loop_event)(); void (*on_expose_event)(); void (*on_resize_event)(UIEventResize *); -void (*on_mouse_press_event)(); +void (*on_mouse_press_event)(UIMouseButtonPressed *); void (*on_generic_event)(int); void cleanup(void); @@ -156,11 +156,27 @@ ui_on_keypress(XEvent event) } static void +ui_get_mouse_position(Display *display, Window window, int *x, int *y) { + Window root_return, child_return; + int root_x, root_y; + unsigned int mask_return; + + XQueryPointer(display, window, &root_return, &child_return, + &root_x, &root_y, x, y, &mask_return); +} + +static void ui_on_mouse_press(XEvent event) { if (event.type != ButtonPress) return; if (on_mouse_press_event != NULL) { - on_mouse_press_event(); + UIMouseButtonPressed *mbp = malloc(sizeof(UIMouseButtonPressed)); + if (mbp == NULL) { + log_error("Error allocating UIMouseButtonPressed"); + exit(EXIT_FAILURE); + } + ui_get_mouse_position(display, window, &mbp->x, &mbp->y); + on_mouse_press_event(mbp); } } @@ -197,7 +213,7 @@ ui_set_resize_listener(void (*resize_event)(UIEventResize *)) } void -ui_set_mouse_press_listener(void (*mouse_press_event)()) +ui_set_mouse_press_listener(void (*mouse_press_event)(UIMouseButtonPressed *)) { on_mouse_press_event = mouse_press_event; } |