mirror of
https://github.com/sol1/rustguac.git
synced 2026-09-10 09:35:45 +00:00
2be5bfd849
guacd (patch-008): composite multiple SPICE display channels into one framebuffer. A Windows/PVE guest exposes each head as a separate QXL device (a separate display channel with its own primary surface); the previous code tracked a single display channel and shared surface, so a second head clobbered it and the session showed black or dropped. Now each channel is tracked by id, tiled left-to-right into the combined default layer, and the multimon layout enumerates every head with its offset. The SPICE pointer is mapped from the combined coordinate to the owning head's local coordinate (clamped to bounds so an edge value maps to the correct head). client: the main window now crops to monitor 0 instead of showing the whole combined framebuffer, and rescales to fit on resize. Secondary monitors open in their own window that fills and rescales; that window's pointer uses native mouse events mapped from the canvas's live rect, because Guacamole.Mouse does not track the X axis correctly in a popup window. The per-frame blit clamps to the source framebuffer bounds so a resize cannot read past it and produce a corrupt image. Validated on a Windows PVE console (VMID 300): both heads render composited, clicks land on target on both monitors, and resizing the second monitor is stable.