[viewer] Pop-out floaters: detach UI windows (script editor, chat, inventory, ...) into their own OS window for another monitor #1013

Open
opened 2026-10-24 04:09:06 +00:00 by sky_line · 0 comments
Owner

Allow certain floaters to be popped out of the viewer window into a self-contained OS window that can be moved to another monitor, resized and maximised on its own, and docked back later.

First candidates: script editor (LSL / SLua), Conversations / IM, inventory, people / contacts, the map, notecards, the debug console / frame timings.

UX

  • A pop-out button in the floater title bar (next to dock / minimise / close), plus a right-click title-bar menu entry.
  • The popped-out window keeps the floater's title and the app icon, and appears in the taskbar.
  • Closing the OS window docks the floater back (or closes it, per floater: follow its normal close behaviour).
  • Remember per floater: popped-out or not, the monitor, position, size and maximised state. Restore on next open; if that monitor is gone, fall back to the main window.
  • Keyboard focus, copy / paste and IME work in the popped-out window. The viewer's global shortcuts still work there where it makes sense (and never steal keys typed into its text fields).

Technical outline

  • SDL3 supports multiple windows. Each popped-out window gets its own Vulkan surface and swapchain, and the UI renderer draws that floater's view tree into it (same LLRender / UI path, separate target and viewport, its own DPI / scale for mixed-DPI monitors).
  • The world is not rendered there: UI only, so the cost is small. Present without vsync coupling to the main window (or at a lower rate when idle).
  • Input: route SDL events by window id to the floater's view tree (mouse, keyboard, text input, wheel, drag-and-drop between windows, e.g. inventory item into a popped-out IM).
  • Ownership: the floater stays the same LLFloater instance (re-parented to a per-window root view), so its state and callbacks are unchanged.
  • Platforms: Windows, X11 and Wayland (Wayland: no absolute positions; restore the size and let the compositor place it).

Note: this complements, not replaces, the planned external script editor integration.

Allow certain floaters to be **popped out** of the viewer window into a self-contained OS window that can be moved to another monitor, resized and maximised on its own, and **docked back** later. **First candidates:** script editor (LSL / SLua), Conversations / IM, inventory, people / contacts, the map, notecards, the debug console / frame timings. **UX** - A pop-out button in the floater title bar (next to dock / minimise / close), plus a right-click title-bar menu entry. - The popped-out window keeps the floater's title and the app icon, and appears in the taskbar. - Closing the OS window docks the floater back (or closes it, per floater: follow its normal close behaviour). - Remember per floater: popped-out or not, the monitor, position, size and maximised state. Restore on next open; if that monitor is gone, fall back to the main window. - Keyboard focus, copy / paste and IME work in the popped-out window. The viewer's global shortcuts still work there where it makes sense (and never steal keys typed into its text fields). **Technical outline** - SDL3 supports multiple windows. Each popped-out window gets its own Vulkan surface and swapchain, and the UI renderer draws that floater's view tree into it (same LLRender / UI path, separate target and viewport, its own DPI / scale for mixed-DPI monitors). - The world is not rendered there: UI only, so the cost is small. Present without vsync coupling to the main window (or at a lower rate when idle). - Input: route SDL events by window id to the floater's view tree (mouse, keyboard, text input, wheel, drag-and-drop between windows, e.g. inventory item into a popped-out IM). - Ownership: the floater stays the same LLFloater instance (re-parented to a per-window root view), so its state and callbacks are unchanged. - Platforms: Windows, X11 and Wayland (Wayland: no absolute positions; restore the size and let the compositor place it). Note: this complements, not replaces, the planned external script editor integration.
sky_line added this to the Slipstream project 2026-10-24 04:09:06 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#1013
No description provided.