diff options
| author | Berke Güzel <berke.guzel@gdh.digital> | 2026-10-14 09:38:31 +0300 |
|---|---|---|
| committer | Berke Güzel <berke.guzel@gdh.digital> | 2026-10-14 09:38:31 +0300 |
| commit | 5ef6ca21ab9e1cf4f69254234d190a634b777d52 (patch) | |
| tree | 974d3797a6d9487e54a811e224bf78a3f52dda85 /tests/x11/test_tablet.c | |
| parent | 563b23a33726289387193b85d90fb569631ee05f (diff) | |
Remove deprecated Cocoa OpenGL and private compatibility APIs
Diffstat (limited to 'tests/x11/test_tablet.c')
| -rw-r--r-- | tests/x11/test_tablet.c | 79 |
1 files changed, 48 insertions, 31 deletions
diff --git a/tests/x11/test_tablet.c b/tests/x11/test_tablet.c index be5da4c..8d9106e 100644 --- a/tests/x11/test_tablet.c +++ b/tests/x11/test_tablet.c @@ -24,31 +24,32 @@ struct drag_test_recorder { struct yasl_private_vector2i last_pos; }; -static void on_test_drag(struct yasl_surface *s, enum yasl_private_drag_event ev, - struct yasl_private_vector2i pos, void *ud) -{ - (void)s; - struct drag_test_recorder *rec = ud; - rec->last_pos = pos; - if (ev == YASL_PRIVATE_DRAG_OVER) rec->over_count++; - else if (ev == YASL_PRIVATE_DRAG_LEAVE) rec->leave_count++; - else if (ev == YASL_PRIVATE_DRAG_DROP) rec->drop_count++; -} - struct drop_test_recorder { int over_count; int leave_count; struct yasl_private_vector2i last_pos; }; -static void on_test_drop(struct yasl_surface *s, enum yasl_private_drop_event ev, - struct yasl_private_vector2i pos, void *ud) +static void collect(struct yasl_private_display *display, struct yasl_surface *first, + struct yasl_surface *second, struct drag_test_recorder *a, + struct drag_test_recorder *b, struct drop_test_recorder *drop) { - (void)s; - struct drop_test_recorder *rec = ud; - rec->last_pos = pos; - if (ev == YASL_PRIVATE_DROP_OVER) rec->over_count++; - else if (ev == YASL_PRIVATE_DROP_LEAVE) rec->leave_count++; + struct yasl_private_event event; + while (yasl_private_display_poll_event(display, &event)) { + if (event.type == YASL_PRIVATE_EVENT_DRAG) { + assert(event.surface == first || event.surface == second); + struct drag_test_recorder *rec = event.surface == first ? a : b; + rec->last_pos = event.drag.pos; + if (event.drag.action == YASL_PRIVATE_DRAG_OVER) rec->over_count++; + else if (event.drag.action == YASL_PRIVATE_DRAG_LEAVE) rec->leave_count++; + else if (event.drag.action == YASL_PRIVATE_DRAG_DROP) rec->drop_count++; + } else if (event.type == YASL_PRIVATE_EVENT_DROP_HOVER) { + assert(event.surface == first); + drop->last_pos = event.drop.pos; + if (event.drop.action == YASL_PRIVATE_DROP_OVER) drop->over_count++; + else if (event.drop.action == YASL_PRIVATE_DROP_LEAVE) drop->leave_count++; + } + } } static void on_test_drag_end(void *ud, enum yasl_private_drag_end how) @@ -81,7 +82,7 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) struct yasl_private_popup_spec valid_spec = { .size = {100, 120}, .anchor = {30, 40, 50, 60}, - .beside = false, + .anchor_edges = 6, .gravity = 8, .constraints = 15, .content_offset = {5, 10}, }; assert(popup_spec_valid(s, &valid_spec)); @@ -93,7 +94,7 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) /* Explicit XDG-style anchor/gravity stays exact unless a constraint allows a fit. */ struct yasl_private_popup_spec positioned = { - .positioner_explicit = true, + .anchor_edges = 2, /* bottom */ .gravity = 2, /* below */ .size = {100, 120}, .anchor = {100, 100, 40, 20}, @@ -118,7 +119,7 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) popup_calculate_position(d, s, &positioned, &x, &y, &actual_size); assert(x == 1920 - actual_size.x && actual_size.x == 20); - valid_spec.beside = true; + valid_spec.anchor_edges = 7; popup_calculate_position(d, s, &valid_spec, &x, &y, &actual_size); assert(x == 30 + 50 - 5); assert(y == 40 - 10); @@ -133,7 +134,7 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) struct yasl_private_popup_spec repo_spec = { .size = {150, 180}, .anchor = {10, 20, 30, 40}, - .beside = false, + .anchor_edges = 6, .gravity = 8, .constraints = 15, .content_offset = {0, 0}, }; assert(surface_popup_reposition(popup_base, &repo_spec)); @@ -149,10 +150,10 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) struct drag_test_recorder rec1 = {0}; struct drag_test_recorder rec2 = {0}; - struct yasl_private_window_cbs cbs1 = {.drag = on_test_drag}; - struct yasl_private_window_cbs cbs2 = {.drag = on_test_drag}; - set_callbacks(&s->base, &cbs1, &rec1); - set_callbacks(&s2.base, &cbs2, &rec2); + struct drop_test_recorder drec = {0}; + assert(yasl_private_events_open(&d->base)); + assert(yasl_private_events_register(&s->base)); + assert(yasl_private_events_register(&s2.base)); enum yasl_private_drag_end end_reason = (enum yasl_private_drag_end)-1; struct yasl_private_drag_listener l = {.end = on_test_drag_end}; @@ -163,6 +164,7 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) XIDeviceEvent mev = {.evtype = XI_Motion, .sourceid = 8, .event = 42, .event_x = 12.0, .event_y = 34.0}; XGenericEventCookie cookie = {.evtype = XI_Motion, .data = &mev}; xi_event(d, &cookie); + collect(&d->base, &s->base, &s2.base, &rec1, &rec2, &drec); assert(rec1.over_count == 1); assert(rec1.last_pos.x == 12 && rec1.last_pos.y == 34); @@ -171,6 +173,7 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) mev.event_x = 56.0; mev.event_y = 78.0; xi_event(d, &cookie); + collect(&d->base, &s->base, &s2.base, &rec1, &rec2, &drec); assert(rec1.leave_count == 1); assert(rec2.over_count == 1); assert(rec2.last_pos.x == 56 && rec2.last_pos.y == 78); @@ -179,6 +182,7 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) XIDeviceEvent rel = {.evtype = XI_ButtonRelease, .sourceid = 8, .event = 43, .detail = 1}; cookie = (XGenericEventCookie){.evtype = XI_ButtonRelease, .data = &rel}; xi_event(d, &cookie); + collect(&d->base, &s->base, &s2.base, &rec1, &rec2, &drec); assert(rec2.drop_count == 1); assert(end_reason == YASL_PRIVATE_DRAG_DROPPED); assert(!d->drag.active); @@ -188,8 +192,10 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) cookie = (XGenericEventCookie){.evtype = XI_Motion, .data = &mev}; mev.event = 42; xi_event(d, &cookie); + collect(&d->base, &s->base, &s2.base, &rec1, &rec2, &drec); assert(rec1.over_count == 2); drag_cancel(&d->base); + collect(&d->base, &s->base, &s2.base, &rec1, &rec2, &drec); assert(rec1.leave_count == 2); assert(end_reason == YASL_PRIVATE_DRAG_CANCELLED); assert(!d->drag.active); @@ -203,9 +209,13 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) assert(end_reason == YASL_PRIVATE_DRAG_CANCELLED); assert(!d->drag.active); struct yasl_private_event reset_ev; - assert(yasl_private_surface_poll_event(&s->base, &reset_ev)); + /* The display stream also carries the reset of the second surface. */ + do { assert(yasl_private_display_poll_event(&d->base, &reset_ev)); } + while (reset_ev.type != YASL_PRIVATE_EVENT_INPUT_RESET || reset_ev.surface != &s->base); assert(reset_ev.type == YASL_PRIVATE_EVENT_INPUT_RESET); + collect(&d->base, &s->base, &s2.base, &rec1, &rec2, &drec); + /* 4. Drag image parameter */ uint32_t pixels[16] = {0xFF00FF00}; struct yasl_private_drag_image img = {.pixels = pixels, .size = {4, 4}, .hotspot = {2, 2}}; @@ -214,6 +224,8 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) assert(drag_carry(&s->base, (struct yasl_private_vector2i){10, 10})); drag_cancel(&d->base); + collect(&d->base, &s->base, &s2.base, &rec1, &rec2, &drec); + /* 5. XDND drop-target events and URI parsing */ size_t out_len = 0; char *parsed = parse_file_uris("file:///tmp/doc.txt\r\n", 21, &out_len); @@ -236,9 +248,6 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) d->xdnd_drop = 13; d->uri_list = 20; - struct drop_test_recorder drec = {0}; - cbs1.drop = on_test_drop; - set_callbacks(&s->base, &cbs1, &drec); XClientMessageEvent enter_msg = { .type = ClientMessage, @@ -256,6 +265,7 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) .data.l = {99, 0, (100 << 16) | 200, 1000, 0}, }; handle_client_message(d, s, &pos_msg); + collect(&d->base, &s->base, &s2.base, &rec1, &rec2, &drec); assert(drec.over_count == 1); assert(drec.last_pos.x == 100 && drec.last_pos.y == 200); @@ -266,10 +276,12 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) .data.l = {99, 0, 0, 0, 0}, }; handle_client_message(d, s, &leave_msg); + collect(&d->base, &s->base, &s2.base, &rec1, &rec2, &drec); assert(drec.leave_count == 1); handle_client_message(d, s, &enter_msg); handle_client_message(d, s, &pos_msg); + collect(&d->base, &s->base, &s2.base, &rec1, &rec2, &drec); assert(drec.over_count == 2); XClientMessageEvent drop_msg = { @@ -279,17 +291,22 @@ static void test_x11_gaps(struct x11_display *d, struct x11_surface *s) .data.l = {99, 0, 1005, 0, 0}, }; handle_client_message(d, s, &drop_msg); + collect(&d->base, &s->base, &s2.base, &rec1, &rec2, &drec); assert(drec.leave_count == 2); assert(d->pending_drop.active); /* Push YASL_PRIVATE_EVENT_DROP */ push(s, (struct yasl_private_event){.type = YASL_PRIVATE_EVENT_DROP}, "file:///sample.png\r\n", 20); struct yasl_private_event drop_ev; - assert(yasl_private_surface_poll_event(&s->base, &drop_ev)); + assert(yasl_private_display_poll_event(&d->base, &drop_ev)); assert(drop_ev.type == YASL_PRIVATE_EVENT_DROP); assert(drop_ev.text.len == 20); assert(!strcmp(drop_ev.text.data, "file:///sample.png\r\n")); + yasl_private_events_unregister(&s->base); + yasl_private_events_unregister(&s2.base); + yasl_private_events_close(&d->base); + /* Clean up s2 */ s->next = NULL; input_queue_clear(&s->input); |
