Added
Complete sxgui: a Win9x-style widget toolkit. From 5 basic controls to a full toolkit, keeping the allocation-free retained-mode model: focus traversal, a textfield with a real caret, scrollbar and scrolling listbox, action reasons (
CLICK/CHANGE/ACTIVATE), radio groups, a combobox drawn inside its own backbuffer, a menu bar withon_command(id), modal dialogs as a state machine in the same main loop, groupbox, progress bar and textview.The
sxgui_appapp frame. It encapsulates the gfx session and the main loop every widget app repeated (input polling, RESIZED, gated repaint, present, 16 ms throttle), with optionalon_key/on_paint/on_resizehooks.widgetsdemogrows into a reference gallery of the whole toolkit.
Changed
aboutappandfilesappported to sxgui. aboutapp becomes declarative; filesapp keeps its filesystem logic but delegates the list, preview, menu bar and status bar. Both lose their static 8 MiB backbuffer and manual event loop.The SDK's malloc arena drops from 48 MiB to 8 MiB by default. The static heap lives in the BSS and the kernel maps the whole BSS at exec, so each app cost ~50 MiB resident and three of them exhausted physical memory. External builds keep 48 MiB through
-DSX_HEAP_SIZEfor heavy apps like Doom.
Fixed
Physical memory leak on fork from section view pages.
vm::clone_address_spacecopied every present user page and only then discarded the section view ones, without freeing the copy. Since the desktop maps every client surface's view, each launch lost ~4 MiB per view and after a few of them noexecworked until reboot.desktop_client.pathstored the pointer received at launch, which for client-requested launches pointed at the request's stack buffer: the window title and the logs read dangling memory. The client now keeps its own copy.