-
Notifications
You must be signed in to change notification settings - Fork 20
Multi window Editing
Signex v0.7 rebuilt on top of iced::daemon — every undocked tab, panel,
and modal can become a real OS window. You can have the root sheet open on
one monitor, a child sheet on a second monitor, and the Preferences dialog
floating on top, all at once.
Drag a tab out of the tab bar. The tab detaches automatically as soon as the cursor crosses the main window's boundary by more than ~12 px — you don't have to complete a drop. There's a small dead zone so an accidental graze past the edge doesn't flip the tab out.
Or right-click the tab → Open In New Window. Same result, no drag. The entry greys out once that tab already has its own window.
- The new window has native OS decorations (title bar, close/min/max).
- The tab leaves the main window's tab bar.
- A tab that's already undocked won't detach a second time.
- Each window keeps its own pan, zoom, selection, and render cache.
Re-dock: close the undocked window.
This part is for the curious. You can skip if you don't care.
-
DocumentState::engines: HashMap<PathBuf, Engine>— one engine per open document, keyed by its path. Every open schematic — the active one, a background tab, or one parked in an undocked window — has a live entry. Save-as rekeys the entry. -
InteractionState::canvases: HashMap<window::Id, SchematicCanvas>— one canvas per undocked-tab window. Canvas state (pan / zoom / selection / render cache) is per-window. Detached modals and panels have no canvas. -
WindowKindnames each non-main window's role:UndockedTab { path, title },DetachedModal(ModalId),DetachedPanel(PanelKind), orComponentEditor { library_path, table, row_id }. An undocked tab stores the file path rather than a tab index, so the mapping survives tab reordering and unrelated tabs closing.
Tabs are partitioned across windows, not duplicated. The main window renders every tab that isn't currently owned by an undocked window; each undocked window renders exactly its one tab. Undocking moves a tab — it does not give you a second view of the same schematic.
Open several tabs and drag each out. Now you have N windows, each editing a different file. Useful for:
- Working on two schematics at once (a main board and a daughterboard)
- Copying symbols or subcircuits between designs across windows
- Parking a reference sheet on a second monitor while you work on another
Undo is per document, not per window. The engine — and therefore the undo history — is keyed by file path, so it travels with the document when you undock it and is still there when you re-dock. There is no separate per-window undo stack.
Preferences, the ERC dialog, the Annotate dialog, and the Net Color palette open as real OS windows. The big modals detach the moment they open — no in-window overlay, no drag-off dance. Smaller in-window modals auto-detach on the same ~12 px boundary rule if you drag their header past the window edge.
Detached modal windows are borderless — they carry their own header with a drag region and an X, rather than an OS title bar. Undocked tab windows are the ones that keep native OS chrome.
Dock panels can also be undocked: drag a panel out of its dock region to float it, then drag it past the main window edge to promote it to a real OS window. Closing that window re-docks the panel to the right column — not necessarily where it started, so a panel you detached from the left comes back on the right.
See Docking and Panels for the full mechanics.
The main window has borderless chrome (custom title bar). decorations: false removes WS_THICKFRAME on Windows, so the OS frame no longer
handles resizing — Signex overlays its own edge-resize hit zones. That's
why the cursor changes to a resize arrow near an edge even though the
window looks frameless.
Undocked tab windows keep native OS decorations, so they skip the overlay entirely and resize the normal OS way.
On Windows 11 (build 22000+), Signex asks the Desktop Window Manager to
round the main window's corners via DwmSetWindowAttribute with
DWMWA_WINDOW_CORNER_PREFERENCE = DWMWCP_ROUND. DWM does the work, so
there's no per-frame rendering cost. It's a silent no-op on Windows 10 and
earlier and on non-Windows platforms.
- No cross-window drag of objects. Dragging a symbol from one window onto another window's canvas isn't supported.
- No window-arrangement memory across sessions. Undocked windows don't come back on next launch. Signex starts with no documents open at all — only the panel layout is restored from the previous session.
- Child sheets open in the main window. Opening a child sheet adds a tab to the shared tab list, and an undocked window only ever renders its own one tab — so the child lands in the main window's tab bar, not next to the parent you opened it from.
- Docking and Panels — panel undock/redock mechanics
- Hierarchical Sheets — how sheet navigation interacts with windows
- Keyboard Shortcuts — tab switching, and the configurable shortcut profiles added in v0.14
Signex v0.14.0 · Apache-2.0 · Issues · Discussions · Website