diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index 287898107878..f83029e662d3 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -1204,8 +1204,11 @@ void DisplayServerWindows::console_set_visible(bool p_enabled) { if (console_visible == p_enabled) { return; } - ShowWindow(GetConsoleWindow(), p_enabled ? SW_SHOW : SW_HIDE); - console_visible = p_enabled; + if (!((OS_Windows *)OS::get_singleton())->_is_win11_terminal()) { + // GetConsoleWindow is not supported by the Windows Terminal. + ShowWindow(GetConsoleWindow(), p_enabled ? SW_SHOW : SW_HIDE); + console_visible = p_enabled; + } } bool DisplayServerWindows::is_console_visible() const { diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index d7d78ff5dc3d..bb6a077a5d63 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -467,6 +467,16 @@ Error OS_Windows::execute(const String &p_path, const List &p_arguments, return OK; }; +bool OS_Windows::_is_win11_terminal() const { + HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD dwMode = 0; + if (GetConsoleMode(hStdOut, &dwMode)) { + return ((dwMode & ENABLE_VIRTUAL_TERMINAL_PROCESSING) == ENABLE_VIRTUAL_TERMINAL_PROCESSING); + } else { + return false; + } +} + Error OS_Windows::create_process(const String &p_path, const List &p_arguments, ProcessID *r_child_id) { String path = p_path.replace("/", "\\"); String command = _quote_command_line_argument(path); @@ -484,7 +494,8 @@ Error OS_Windows::create_process(const String &p_path, const List &p_arg #ifndef DEBUG_ENABLED dwCreationFlags |= CREATE_NO_WINDOW; #endif - if (p_path == get_executable_path() && GetConsoleWindow() != nullptr) { + if (p_path == get_executable_path() && GetConsoleWindow() != nullptr && _is_win11_terminal()) { + // Open a new terminal as a workaround for Windows Terminal bug. dwCreationFlags |= CREATE_NEW_CONSOLE; } diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h index 1342d95575ba..086f63eb3e39 100644 --- a/platform/windows/os_windows.h +++ b/platform/windows/os_windows.h @@ -157,6 +157,7 @@ class OS_Windows : public OS { void run(); + bool _is_win11_terminal() const; virtual bool _check_internal_feature_support(const String &p_feature) override; virtual void disable_crash_handler() override;