summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinQt/Main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/DolphinQt/Main.cpp')
-rw-r--r--Source/Core/DolphinQt/Main.cpp25
1 files changed, 20 insertions, 5 deletions
diff --git a/Source/Core/DolphinQt/Main.cpp b/Source/Core/DolphinQt/Main.cpp
index b223819e7a..86947ccf1b 100644
--- a/Source/Core/DolphinQt/Main.cpp
+++ b/Source/Core/DolphinQt/Main.cpp
@@ -120,12 +120,27 @@ static bool QtMsgAlertHandler(const char* caption, const char* text, bool yes_no
int main(int argc, char* argv[])
{
#ifdef _WIN32
- const bool console_attached = AttachConsole(ATTACH_PARENT_PROCESS) != FALSE;
- HANDLE stdout_handle = ::GetStdHandle(STD_OUTPUT_HANDLE);
- if (console_attached && stdout_handle)
+ const HANDLE stdout_handle = ::GetStdHandle(STD_OUTPUT_HANDLE);
+ const HANDLE stderr_handle = ::GetStdHandle(STD_ERROR_HANDLE);
+
+ const bool is_invalid_stdout_handle =
+ stdout_handle == nullptr || stdout_handle == INVALID_HANDLE_VALUE;
+ const bool is_invalid_stderr_handle =
+ stderr_handle == nullptr || stderr_handle == INVALID_HANDLE_VALUE;
+
+ // If we already have a console don't try to use one from our parent. This happens when running
+ // Dolphin using `Git Bash`.
+ if (is_invalid_stdout_handle && is_invalid_stderr_handle)
{
- freopen("CONOUT$", "w", stdout);
- freopen("CONOUT$", "w", stderr);
+ // See if the parent process has a console we can use (which happens when Dolphin is launched
+ // via `Command Prompt` or `PowerShell`). If this fails Dolphin was probably launched via the
+ // GUI, in which case we don't want a console anyway.
+ const bool attached_to_parent_console = AttachConsole(ATTACH_PARENT_PROCESS) != FALSE;
+ if (attached_to_parent_console)
+ {
+ static_cast<void>(freopen("CONOUT$", "w", stdout));
+ static_cast<void>(freopen("CONOUT$", "w", stderr));
+ }
}
#endif