| Age | Commit message (Collapse) | Author |
|
Without yasl_app_desc.event, a close request had nowhere to go and the
window stayed open. The runner now stops instead, so hello drops its
event callback.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The game assumed yasl_surface_set_pointer_mode() always succeeded, so on
backends without relative mode it believed the pointer was captured.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
yasl_surface_set_pointer_mode(YASL_POINTER_RELATIVE) now takes a
persistent zwp_locked_pointer_v1 on the surface and hides its cursor.
While the compositor keeps the lock engaged, zwp_relative_pointer_v1
motion is pushed as POINTER_MOTION with pos frozen and delta in device
pixels. When the lock disengages, as on focus loss, motion is absolute
again with a delta derived by the input queue.
The lock follows the pointer's seat: it moves to another seat when its
seat loses the pointer, and is released on NORMAL and on surface
destruction. Compositors without both protocols return false.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Generated with wayland-scanner 1.26.0 from wayland-protocols' unstable
relative-pointer-unstable-v1 and pointer-constraints-unstable-v1.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
hello no longer needs an init callback: main passes its window spec
through yasl_app_desc.window.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
A new optional yasl_app_desc.window spec makes yasl_run() create that
toplevel and request its first frame before init(), which is now
optional too. If creation fails, yasl_run() closes the display and
returns an error without calling init().
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
hello only tracked a failure flag, so keep it as a file-scope static like
simple_window and leave yasl_app_desc.userdata unset.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Port backend, input, tablet and app tests from yasl_input_event and
YASL_INPUT_* to struct yasl_event and YASL_EVENT_*. The input allocation
test links input.c on its own, so it stubs yasl_loop_now_ns() for the new
event timestamps.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
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/yasl.h>: 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 <noreply@anthropic.com>
|
|
|
|
|
|
|
|
|
|
The test pushes two key events into a Wayland surface's queue. The
first event's callback destroys the surface. The run must end cleanly,
without delivering the second event. Before 71091ca, ASan reported a
heap-use-after-free in app_runner_dispatch_input_events. The test
skips when WAYLAND_DISPLAY is unset.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
app_runner_unregister_surface freed the runner's entry at once. A frame
or event callback that destroyed its own surface returned into code that
still read that entry: app_runner_surface_draw read as->pacing, and the
input loop read as->surface and as->next. yasl-app-test hit this under
ASan.
Unregister now only clears the entry's surface. The run loop frees dead
entries before each iteration and at shutdown, when no callback runs.
The unused frame_in_progress flag is removed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
|
|
date/time, word wrap, zoom, and mouse word/line selection
|
|
|
|
and drag-and-drop
|
|
advertise YASL_CAP_CSD
|
|
mirrored text
|
|
game examples
|
|
|
|
|
|
|
|
- Implement MIT-SHM shared memory zero-copy presentation fallback
- Install global XSetErrorHandler to suppress fatal BadWindow/BadDrawable crashes
- Avoid event starvation by flushing and checking XEventsQueued in dispatch_timeout
- Cache standard and hidden X11 cursors across pointer motion
- Clamp popups to active monitor bounds via XRandR (XRRGetMonitors)
- Fast-path DnD surface lookup via in-process surface tree
- Modernize keycode resolution with XKB and ignore Lock/Mod2 mask state
|
|
|
|
|
|
handle caching
|
|
|
|
|
|
|
|
|
|
|
|
yasl_surface_del_timer zeroed its entry and kept it. A one-shot surface
timer that fired stayed in the surface's id list until the surface was
destroyed. A client that re-arms a one-shot timer, such as a cursor
blink, grew the list without bound, and each delete scanned all of it.
Delete now removes the entry. Before the list grows, add drops the ids
that the loop has retired. The list holds only armed timers.
Delete now returns false for a timer that already retired, as
yasl_loop_del_timer does.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Resolve gaps identified in yasl-gaps-report.md:
- X11:
- Add XDND v5 file drop support and text/uri-list parsing (YASL_INPUT_DROP_FILES)
- Dispatch surface drop-target events (YASL_DRAG_OVER, YASL_DRAG_LEAVE, YASL_DRAG_DROP, YASL_DROP_OVER, YASL_DROP_LEAVE)
- Implement override-redirect popups (surface_create_popup, surface_popup_reposition)
- Support drag images with override-redirect icon window
- Set YASL_CAP_POPUPS capability
- Handle XIHierarchyChanged reset cleanly
- Cocoa:
- Dispatch surface drop-target events for internal drags and external NSDraggingDestination
- Implement child window popups (cocoa_surface_create_popup, cocoa_surface_popup_reposition)
- Implement primary selection via dedicated pasteboard
- Support drag images with floating borderless NSWindow
- Track pointer buttons and push YASL_INPUT_RESET on focus loss
- Set YASL_CAP_POPUPS and YASL_CAP_PRIMARY_SELECTION capabilities
- Tests:
- Add comprehensive unit test suite in tests/x11/test_tablet.c
|
|
|
|
Pad groups arrive as new objects with the group event. yasl ignored
them, so the proxies were never destroyed and leaked on every pad.
Destroy each group when it arrives.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
|
|
|
- Add include/yasl/native/{wayland,cocoa,x11}.h with type-safe handle accessors.
- Unify drag-and-drop and window carry support across Wayland, X11, and Cocoa.
- Preserve full ABI compatibility for capability flags.
- Install native headers conditionally based on enabled backend.
- Include missing tablet example and backend test suites.
|
|
|
|
Separate loop/timer and native interoperability APIs from the portable surface header. Unify dispatch, geometry queries, and timer callbacks; keep framebuffer bookkeeping and frame clocks private, and hide implementation symbols.
Update backends, documentation, examples, and API/integration coverage. Verify exports, strict C/C++ installed consumers, and normal plus ASan/UBSan suites.
|
|
and Cocoa
|
|
|
|
- Implement runtime backend selection (Wayland, X11, Cocoa)
- Add native X11 backend with clipboard, keyboard, mouse, and placement
- Integrate multi-backend integration tests running under Weston and Xwayland
- Retain zero-hole struct packing, branchless ALU/LUT primitives, and paced event loop
|
|
|
|
- Hook up Cocoa tablet, stylus, and Force Touch pressure/tilt to push_pointer
- Ensure Wayland tablet tool pressure resets cleanly on tool up
- Visualize pressure-sensitive brush scaling and telemetry in simple_window
|
|
yasl_surface
- Compact yasl_mouse_event from 36B to 32B (half a cacheline, 0 holes)
- Compact yasl_input_event from 56B to 48B (0 holes)
- Reduce yasl_surface by 2,048 bytes (shaving 32 full cachelines per surface)
- Optimize UTF-8 sanitize with vectorized validation fast-path
- Fast-path MIME prefix match in clipboard transfers
|
|
- Replace buffer allocation branching loop with compile-time locked 24-byte LUT indexed by (cur & 3)
- Use hardware lrint rounding and array-indexed pointer offsets for scroll axes
- Replace press queue button/kind conditionals with branchless bitmasking and 1:1 identity casting
- Make display_has_immediate_work evaluate state flags with bitwise ALU instead of short-circuit branches
|
|
- Fix Wayland event loop lockout by properly decoupling read arming and adding poll-backed dispatching
- Support standalone display lifecycle without requiring caller to manage a loop
- Eliminate alignment holes across yasl_surface, yasl_display, seat, touch_point, and conn_drag using pahole
- Replace branching state/button decoders with compile-time locked LUTs and branchless bitwise operations
- Accelerate UTF-8 validation with 64-bit word scanning for ASCII runs
|