<feed xmlns='http://www.w3.org/2005/Atom'>
<title>yasl.git/tests/common, branch one-loop</title>
<subtitle>[no description]</subtitle>
<id>https://git.wsap.dev/yasl.git/atom?h=one-loop</id>
<link rel='self' href='https://git.wsap.dev/yasl.git/atom?h=one-loop'/>
<link rel='alternate' type='text/html' href='https://git.wsap.dev/yasl.git/'/>
<updated>2026-10-16T10:23:25+00:00</updated>
<entry>
<title>Leave fullscreen before minimizing in the request test</title>
<updated>2026-10-16T10:23:25+00:00</updated>
<author>
<name>Berke Güzel</name>
<email>wenekar1@gmail.com</email>
</author>
<published>2026-10-16T10:23:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.wsap.dev/yasl.git/commit/?id=12d2735115528d741ebf47b6738c88b7c182b85b'/>
<id>urn:sha1:12d2735115528d741ebf47b6738c88b7c182b85b</id>
<content type='text'>
Weston 15 configures a minimized fullscreen window at 0 x 0 and then
rejects every frame with a protocol error. The test sent fullscreen,
maximize and minimize in one burst, so it failed whenever a frame landed
after that configure. It now waits for the window to enter and leave
fullscreen before it maximizes and minimizes.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Pace frame requests by the frame presented after them</title>
<updated>2026-10-16T06:33:39+00:00</updated>
<author>
<name>Berke Güzel</name>
<email>wenekar1@gmail.com</email>
</author>
<published>2026-10-16T06:33:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.wsap.dev/yasl.git/commit/?id=a075a2941f8fcdae155495da634cf63368c950b7'/>
<id>urn:sha1:a075a2941f8fcdae155495da634cf63368c950b7</id>
<content type='text'>
A frame request now only records intent. Each loop step resolves it after
the callbacks that present, so a request made before the present waits for
that frame. An animation that asked first got two REFRESH events per frame
on X11 and with GL.

With no frame in flight, the REFRESH comes one refresh interval after the
last present or answer, so a request without a present cannot spin.

Queued events now go before an owed REFRESH. Input reaches the application
before it draws, and a queued REFRESH pays an owed one for the same surface.

The loop prepare only peeks at a lost event, so deliver can report it as a
final loss. A failed push from another thread wakes the loop.

Signals and posts run at the end of a step, after descriptors and timers.
A signal handler now sees the output that came with it.

A render-thread GL swap counts as in flight on Wayland.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Make the loop public and let the display drive it</title>
<updated>2026-10-15T17:38:14+00:00</updated>
<author>
<name>Berke Güzel</name>
<email>wenekar1@gmail.com</email>
</author>
<published>2026-10-15T17:38:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.wsap.dev/yasl.git/commit/?id=c2832a63547e6328afde25bb3b8145267eadef47'/>
<id>urn:sha1:c2832a63547e6328afde25bb3b8145267eadef47</id>
<content type='text'>
An application that has its own descriptors and timers needed a second
loop next to yasl's, and could not see yasl's key-repeat timer, clipboard
pipes or reconnect timer. Now there is one wait: the application owns a
yasl_loop, and yasl_init can run the display on it.

- Public yasl_loop_*: descriptors, timers and signals. Descriptor
  callbacks return void. Timer IDs are 64 bits and never reused; a zero
  delay runs in the next step. A nested step or run fails with EBUSY, a
  step off the loop's thread with EPERM, and a quit made before a run ends
  it at once. An interrupted wait keeps its deadline. Creating a loop
  fails when it cannot make its wake pipe.
- The display drives the loop through prepare, wait and check hooks
  instead of wrapping its step. Wayland finishes its read before any
  callback runs, so loop callbacks may create surfaces and do roundtrips.
  Readiness (queued events, an owed REFRESH) is derived in the step, so
  the wait never blocks over pending work. A draw that cannot proceed for
  want of a buffer is no longer counted as work.
- yasl_init takes struct yasl_options. With loop and on_event, each step
  delivers events to on_event and yasl_wait_event fails with EBUSY.
  EALREADY only for the same options, EBUSY for others.
- yasl_surface_request_frame: a REFRESH once the window can show a new
  frame, for pacing animation.
- DISPLAY_LOST reports whether the display reconnects. Pull waits still
  fail with ENOTCONN after a final loss.
- Events pushed from another thread wake the loop.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Make the surface test robust on a live desktop</title>
<updated>2026-10-14T11:33:43+00:00</updated>
<author>
<name>Berke Güzel</name>
<email>wenekar1@gmail.com</email>
</author>
<published>2026-10-14T11:33:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.wsap.dev/yasl.git/commit/?id=9c851d0fbb346467bbd92f8b5ba95b9b6eb73052'/>
<id>urn:sha1:9c851d0fbb346467bbd92f8b5ba95b9b6eb73052</id>
<content type='text'>
On a real compositor, input from the user and focus-stealing
prevention reach the test window. Drain real events before checking
the order of pushed ones, check only that gaining focus does not reset
input, and accept ESTALE for a primary selection offered while the new
window lacks keyboard focus.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Require presses in X11 and integration tests</title>
<updated>2026-10-14T11:22:52+00:00</updated>
<author>
<name>Berke Güzel</name>
<email>wenekar1@gmail.com</email>
</author>
<published>2026-10-14T11:22:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.wsap.dev/yasl.git/commit/?id=f277e6540b4183010b859f9e8e91941c14cf592f'/>
<id>urn:sha1:f277e6540b4183010b859f9e8e91941c14cf592f</id>
<content type='text'>
Integration tests now expect ESTALE from move, resize, window menu,
drag and popups when nothing presses a button, and the X11 input test
expects the same from the window menu and move.

Resolving the previous commit's merge also made the direct SHM path
check the window's own visual (possibly 32-bit ARGB) and dropped the
held-button check from place_under_pointer, which yasl.h never asked
for.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Count touch as a press, report a missing bell, and test X11 INCR</title>
<updated>2026-10-14T11:21:13+00:00</updated>
<author>
<name>Berke Güzel</name>
<email>wenekar1@gmail.com</email>
</author>
<published>2026-10-14T11:21:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.wsap.dev/yasl.git/commit/?id=7ad4f86f2aac75935a52d31383593c1327204729'/>
<id>urn:sha1:7ad4f86f2aac75935a52d31383593c1327204729</id>
<content type='text'>
- Wayland: a touch contact is a press for move, resize, menu and drag
  again, and a compositor without xdg-system-bell reports ENOTSUP.
- yasl_surface_set_cursor no longer reports a stale errno.
- The X11 input test expects the TIMESTAMP and MULTIPLE targets and
  drives an INCR transfer instead of expecting INCR to be rejected.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Test pre-init public API, header portability and integration requests</title>
<updated>2026-10-14T11:07:58+00:00</updated>
<author>
<name>Berke Güzel</name>
<email>wenekar1@gmail.com</email>
</author>
<published>2026-10-14T11:07:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.wsap.dev/yasl.git/commit/?id=04616d5cff135a3f2fa0dcd99c3d756b67312daa'/>
<id>urn:sha1:04616d5cff135a3f2fa0dcd99c3d756b67312daa</id>
<content type='text'>
Add tests/common/test_public_api.c: before yasl_init, argument errors are reported first, owner-thread calls fail with ENODEV, queries return their documented fallbacks, yasl_drop_next_path parses a crafted text/uri-list, yasl_get_system_string follows its length and NUL rules, and yasl_wake is a no-op with no display.

Build tests/test_header_c11.c as strict C11 and C17 with -pedantic-errors.

Extend the surface integration test, run on weston and Xwayland, with title, window requests, bell, desktop queries, drag cancel, input-less move/menu/drag calls, a popup (its parent's destroy must also remove it, checked through the display's surface list), and a clipboard round trip.

Run tests/x11/test_input.c in the X11 phase of run_surfaces.py through an optional trailing argument.

Co-Authored-By: Claude Haiku 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Simplify the public API into one dense header</title>
<updated>2026-10-14T10:56:48+00:00</updated>
<author>
<name>Berke Güzel</name>
<email>wenekar1@gmail.com</email>
</author>
<published>2026-10-14T10:56:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.wsap.dev/yasl.git/commit/?id=87279f6903343e621c0446b20d1e7d6a495f1125'/>
<id>urn:sha1:87279f6903343e621c0446b20d1e7d6a495f1125</id>
<content type='text'>
yasl.h now holds everything except Vulkan: 45 functions instead of 62,
and three installed headers instead of ten.

- One constructor: yasl_surface_create takes CPU, GL or NATIVE, with
  zero-initialized GL options meaning 3.2 core, RGBA8, D24S8.
- Events carry action, mods, x, y and text at the top level; pen
  positions are now logical like pointer positions.
- yasl_cpu_pixels/yasl_cpu_present draw into one persistent canvas,
  cutting three full-frame copies per frame.
- yasl_surface_get_info, yasl_surface_request, YASL_CURSOR_LOCKED,
  yasl_surface_set_text_input, yasl_surface_begin_move_resize and
  yasl_surface_get_native replace groups of narrower calls.
- Interactive calls drop the decorative trigger event argument.
- yasl_wait_event returns 0 only on timeout or yasl_wake, the refresh
  callback runs only in native modal loops, focus loss sends
  INPUT_RESET, and a lost event no longer fails every later wait.
- Unsupported operations and bad arguments report ENOTSUP and EINVAL
  instead of EIO; the keycodes header no longer needs C23.
- The shared library gets a versioned SONAME and version macros.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Redefine public and rendering APIs with explicit contracts</title>
<updated>2026-10-14T10:13:52+00:00</updated>
<author>
<name>Berke Güzel</name>
<email>wenekar1@gmail.com</email>
</author>
<published>2026-10-14T10:13:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.wsap.dev/yasl.git/commit/?id=1ab3e5a123109704789c2768e11a4f9af515821d'/>
<id>urn:sha1:1ab3e5a123109704789c2768e11a4f9af515821d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Remove deprecated Cocoa OpenGL and private compatibility APIs</title>
<updated>2026-10-14T06:38:31+00:00</updated>
<author>
<name>Berke Güzel</name>
<email>berke.guzel@gdh.digital</email>
</author>
<published>2026-10-14T06:38:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.wsap.dev/yasl.git/commit/?id=5ef6ca21ab9e1cf4f69254234d190a634b777d52'/>
<id>urn:sha1:5ef6ca21ab9e1cf4f69254234d190a634b777d52</id>
<content type='text'>
</content>
</entry>
</feed>
