From 537b2d768b31deb0f95c5122e0d562e4406ae9a0 Mon Sep 17 00:00:00 2001 From: Berke Güzel Date: Tue, 13 Oct 2026 15:41:39 +0300 Subject: Unify core and runner events into struct yasl_event The core input queue and the yasl_run() runner each had their own event type, and the runner translated one into the other. Both now share struct yasl_event in : yasl_surface_poll_event() returns the same events the app event callback receives, so the runner forwards them unchanged. Pointer input becomes POINTER_DOWN/UP/MOTION/SCROLL/LEAVE with a named yasl_pointer_button and a motion delta computed in the input queue. TEXT, PASTE and DROP share one text payload, scale changes fold into WINDOW_RESIZE, and every event carries a monotonic time_ns. yasl_surface_set_mouse_mode() is replaced by yasl_surface_set_pointer_mode(); no backend implements relative mode yet. The export check now only counts YASL_API declarations, so function pointer fields returning enum yasl_app_result are not mistaken for exports. Co-Authored-By: Claude Opus 5.5 --- src/common/input.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src/common/input.h') diff --git a/src/common/input.h b/src/common/input.h index d7264f6..ffd1663 100644 --- a/src/common/input.h +++ b/src/common/input.h @@ -5,15 +5,23 @@ /* Each queued string and the last successfully polled string are owned here. */ struct input_queue { - struct yasl_input_event *events; + struct yasl_event *events; size_t head, count, capacity; char *last_text; + /* Last pointer position, for computing absolute-mode motion deltas. */ + struct yasl_vector2i last_pos; + bool has_last_pos; + /* Set by backends while YASL_POINTER_RELATIVE is active: keep pushed deltas. */ + bool relative; struct yasl_surface *reset_surface; bool reset_pending; }; -bool input_queue_push(struct input_queue *q, const struct yasl_input_event *ev); -bool input_queue_pop(struct input_queue *q, struct yasl_input_event *ev); +/* Copies text payloads and stamps time_ns when zero. Unless q->relative is set, + * POINTER_MOTION delta is computed from the previous position; otherwise the + * backend-supplied delta is kept. Leave and reset clear the position history. */ +bool input_queue_push(struct input_queue *q, const struct yasl_event *ev); +bool input_queue_pop(struct input_queue *q, struct yasl_event *ev); void input_queue_clear(struct input_queue *q); #endif -- cgit v1.2.3