summaryrefslogtreecommitdiff
path: root/src/main/engine/ui/x11/ui.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/engine/ui/x11/ui.c')
-rw-r--r--src/main/engine/ui/x11/ui.c22
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;
}