void (@NotNull IdeFrameImpl frame, @NotNull CoroutineScope coroutineScope) { getDockManager().register(new DockContainer() { private Disposable myPaintDisposable; private AbstractPainter myDropPainter; @Override public @NotNull RelativeRectangle getAcceptArea() { return new RelativeRectangle(frame.getComponent()); } @Override public @NotNull ContentResponse getContentResponse(@NotNull DockableContent<?> _content, RelativePoint point) { return _content instanceof WindowFrameDockableContent content && !content.isInFullScreen() && MacWinTabsHandlerV2.isTabsNotVisible(frame) && !frame.isInFullScreen() ? ContentResponse.ACCEPT_MOVE : ContentResponse.DENY; } @Override public @NotNull JComponent getContainerComponent() { return frame.getComponent(); } @Override public @Nullable Image startDropOver(@NotNull DockableContent<?> content, RelativePoint point) { myPaintDisposable = Disposer.newDisposable("GlassPaneListeners"); myDropPainter = new WindowDropAreaPainter(frame); JComponent component = frame.getComponent(); IdeGlassPaneUtil.find(component).addPainter(component, myDropPainter, myPaintDisposable); return null; } @Override public void resetDropOver(@NotNull DockableContent<?> content) { Disposer.dispose(myPaintDisposable); myPaintDisposable = null; myDropPainter = null; } @Override public void add(@NotNull DockableContent<?> content, @Nullable RelativePoint dropTarget) { moveTabToWindow(((WindowFrameDockableContent)content).getKey(), frame); } @Override public boolean isEmpty() { return false; } @Override public boolean isDisposeWhenEmpty() { return false; } }, coroutineScope); }