Dragging a tab to an edge zone (outer 25% of width/height) now splits
the pane in that direction instead of floating the tab. Dropping in
the centre zone, or on the tab header strip, merges the tab into the
target pane as before.
## What changed (DockPane.java only)
- Add DropZone enum (CENTER/LEFT/RIGHT/TOP/BOTTOM)
- DRAG_OVER registers as a capture-phase filter so drops onto
content-heavy panes (e.g. file browser) are accepted even when child
nodes consume the event; previously those drops would float the tab
- Tab header strip always maps to CENTER (merge, not split): boundary
measured via getBoundsInParent() and cached in handleTabChanges() to
avoid a repeated CSS scene-graph walk on every pointer-move event
- Directional blue border feedback via inline CSS: only the edge where
the new pane will appear is highlighted (LEFT/RIGHT/TOP/BOTTOM);
inline style is used because it sits at the highest cascade priority
and is not overridden by the application stylesheet
- mergeTabIntoPaneDeferred / splitAndPlaceTabAsync defer the remove+add
to the same UI pulse so the source pane is never transiently empty,
preventing spurious mergeEmptyAnonymousSplit calls that caused the
application close button to require two clicks
- mergeEmptyAnonymousSplit guards against running when the pane is no
longer empty by the time the deferred call executes
- split() restores setActiveDockPane(this) after constructing the new
empty pane, preventing a null active-item notification to listeners
during a live drag
- Window.requestFocus() after drop re-asserts window focus so the first
mouse action after a drag is not swallowed as a focus-click
Dragging a tab to an edge zone (outer 25% of width/height) now splits the pane in that direction instead of floating the tab. Dropping in the centre zone, or on the tab header strip, merges the tab into the target pane as before.
To float a tabs, drop it outside the Main Window, or use right click "Detach" on the tab context menu.
Colored outlines indicate the type of drop action (green rectangle = merge, blue edge = split).
What changed (DockPane.java only)
The new behavior was tested manually by trigin to cover most or all use cases.