diff options
| -rw-r--r-- | gui/main.cpp | 37 | 
1 files changed, 35 insertions, 2 deletions
| diff --git a/gui/main.cpp b/gui/main.cpp index 16e08b6e..48fe8f74 100644 --- a/gui/main.cpp +++ b/gui/main.cpp @@ -1,11 +1,11 @@  #ifdef _WIN32 -#   include "opentrack-library-path.h" +#   include <cstdio>  #   include <stdlib.h>  #   include <vector> -#   include <cstring>  #   include <QCoreApplication>  #   include <QFile>  #   include <QString> +#   include <QtGlobal>  #else  #   include <unistd.h>  #endif @@ -46,6 +46,35 @@ void set_qt_style()  #ifdef _WIN32 +void qdebug_to_console(QtMsgType, const QMessageLogContext& ctx, const QString &msg) +{ +    const unsigned short* const str_ = msg.utf16(); +    auto str = reinterpret_cast<const wchar_t* const>(str_); +    static_assert(sizeof(*str_) == sizeof(*str), ""); + +    std::fflush(stderr); +    if (ctx.function) +        std::fprintf(stderr, "[%s]: %ls\n", ctx.function, str); +    else if (ctx.file) +        std::fprintf(stderr, "[%s:%d]: %ls\n", ctx.file, ctx.line, str); +    else +        std::fprintf(stderr, "%ls\n", str); +    std::fflush(stderr); +} + +void attach_parent_console() +{ +    if (AttachConsole(ATTACH_PARENT_PROCESS)) +    { +        // XXX c++ iostreams aren't reopened + +        _wfreopen(L"CON", L"w", stdout); +        _wfreopen(L"CON", L"w", stderr); +        _wfreopen(L"CON", L"r", stdin); +        qInstallMessageHandler(qdebug_to_console); +    } +} +  void add_win32_path()  {      // see https://software.intel.com/en-us/articles/limitation-to-the-length-of-the-system-path-variable @@ -105,6 +134,10 @@ WINAPI  #endif  main(int argc, char** argv)  { +#ifdef _WIN32 +    attach_parent_console(); +#endif +  #if QT_VERSION >= 0x050600 // flag introduced in QT 5.6. It is non-essential so might as well allow compilation on older systems.      QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);  #endif | 
