Unity-Technologies/UnityCsReference · error · ArgumentException

Cannot create more than one main window.

Error message

Cannot create more than one main window.

What it means

ArgumentException thrown by ContainerWindow.ShowPopupWithMode when the requested mode is ShowMode.MainWindow. Popups (tooltips, context menus) must not be created as the main window; the main window is a singleton created through the dedicated path, so ShowPopupWithMode explicitly refuses MainWindow.

Source

Thrown at Editor/Mono/ContainerWindow.cs:149

        internal bool isPopup => IsPopup((ShowMode)m_ShowMode);

        internal void ShowPopup()
        {
            ShowPopupWithMode(ShowMode.PopupMenu, true);
        }

        internal void ShowTooltip()
        {
            ShowPopupWithMode(ShowMode.Tooltip, false);
        }

        internal void ShowPopupWithMode(ShowMode mode, bool giveFocus)
        {
            try
            {
                if (mode == ShowMode.MainWindow)
                    throw new ArgumentException("Cannot create more than one main window.");

                m_ShowMode = (int)mode;
                Internal_Show(m_PixelRect, m_ShowMode, m_MinSize, m_MaxSize);
                if (m_RootView)
                    m_RootView.SetWindowRecurse(this);
                Internal_SetTitle(m_Title);
                Save();

                // System windows that come from the OS (like a context menu from search) need theming
                SetBackgroundColor(skinBackgroundColor);

                //  only set focus if mode is a popupMenu.
                Internal_BringLiveAfterCreation(true, giveFocus, false);

                // Fit window to screen - needs to be done after bringing the window live
                position = FitRectToScreen(m_PixelRect, m_PixelRect.center, true, this);
                rootView.position = new Rect(0, 0, GUIUtility.RoundToPixelGrid(m_PixelRect.width), GUIUtility.RoundToPixelGrid(m_PixelRect.height));
                rootView.Reflow();

View on GitHub (pinned to 225b0fbdb5)

Solutions

  1. Do not pass ShowMode.MainWindow to ShowPopupWithMode; use the appropriate popup/aux mode.
  2. Guard the mode argument and route MainWindow through the correct creation path (Show with ShowMode.MainWindow).
  3. Validate the mode is a popup-class mode before calling.

Example fix

// before
window.ShowPopupWithMode(ShowMode.MainWindow, true);

// after
window.ShowPopupWithMode(ShowMode.PopupMenu, true);
Defensive patterns

Strategy: validation

Validate before calling

if (mode == ShowMode.MainWindow) throw new InvalidOperationException("Use Show for the main window, not ShowPopupWithMode.");
window.ShowPopupWithMode(mode, giveFocus);

Prevention

When it happens

Trigger: Calling ShowPopupWithMode(ShowMode.MainWindow, giveFocus) directly. This is almost always a programming error — passing the wrong ShowMode enum value into a popup-creation routine.

Common situations: Miscopying a ShowMode argument; generic window-show helpers that forward an arbitrary mode into ShowPopupWithMode without filtering MainWindow.

Related errors


AI-assisted analysis of Unity-Technologies/UnityCsReference@225b0fbdb5 (2026-08-13). Data as JSON: /api/errors/9f6746d12375f2dc. Report an issue: GitHub.