diff --git a/client/SDL/SDL3/dialogs/sdl_connection_dialog_wrapper.cpp b/client/SDL/SDL3/dialogs/sdl_connection_dialog_wrapper.cpp index 647e34b2b..57e7e8523 100644 --- a/client/SDL/SDL3/dialogs/sdl_connection_dialog_wrapper.cpp +++ b/client/SDL/SDL3/dialogs/sdl_connection_dialog_wrapper.cpp @@ -20,17 +20,27 @@ #include +#include +#include +#include + #include "../sdl_utils.hpp" #include "sdl_connection_dialog.hpp" #include "sdl_connection_dialog_wrapper.hpp" -SdlConnectionDialogWrapper::SdlConnectionDialogWrapper() = default; +SdlConnectionDialogWrapper::SdlConnectionDialogWrapper(wLog* log) : _log(log) +{ +} SdlConnectionDialogWrapper::~SdlConnectionDialogWrapper() = default; void SdlConnectionDialogWrapper::create(rdpContext* context) { - _connection_dialog = std::make_unique(context); + const auto enabled = + freerdp_settings_get_bool(context->settings, FreeRDP_UseCommonStdioCallbacks); + _connection_dialog.reset(); + if (!enabled) + _connection_dialog = std::make_unique(context); } void SdlConnectionDialogWrapper::destroy() @@ -154,10 +164,7 @@ void SdlConnectionDialogWrapper::handleShow() auto arg = _queue.front(); _queue.pop(); - if (!_connection_dialog) - continue; - - if (arg.hasTitle()) + if (arg.hasTitle() && _connection_dialog) { _connection_dialog->setTitle(arg.title().c_str()); } @@ -167,20 +174,29 @@ void SdlConnectionDialogWrapper::handleShow() switch (arg.type()) { case SdlConnectionDialogWrapper::MSG_INFO: - _connection_dialog->showInfo(arg.message().c_str()); + if (_connection_dialog) + _connection_dialog->showInfo(arg.message().c_str()); + else + WLog_Print(_log, WLOG_INFO, "%s", arg.message().c_str()); break; case SdlConnectionDialogWrapper::MSG_WARN: - _connection_dialog->showWarn(arg.message().c_str()); + if (_connection_dialog) + _connection_dialog->showWarn(arg.message().c_str()); + else + WLog_Print(_log, WLOG_WARN, "%s", arg.message().c_str()); break; case SdlConnectionDialogWrapper::MSG_ERROR: - _connection_dialog->showError(arg.message().c_str()); + if (_connection_dialog) + _connection_dialog->showError(arg.message().c_str()); + else + WLog_Print(_log, WLOG_ERROR, "%s", arg.message().c_str()); break; default: break; } } - if (arg.hasVisibility()) + if (arg.hasVisibility() && _connection_dialog) { if (arg.visible()) _connection_dialog->show(); diff --git a/client/SDL/SDL3/dialogs/sdl_connection_dialog_wrapper.hpp b/client/SDL/SDL3/dialogs/sdl_connection_dialog_wrapper.hpp index 231006dba..1ba3259df 100644 --- a/client/SDL/SDL3/dialogs/sdl_connection_dialog_wrapper.hpp +++ b/client/SDL/SDL3/dialogs/sdl_connection_dialog_wrapper.hpp @@ -25,6 +25,7 @@ #include #include +#include #include #include @@ -44,7 +45,7 @@ class SdlConnectionDialogWrapper MSG_DISCARD }; - SdlConnectionDialogWrapper(); + explicit SdlConnectionDialogWrapper(wLog* log); ~SdlConnectionDialogWrapper(); SdlConnectionDialogWrapper(const SdlConnectionDialogWrapper& other) = delete; @@ -115,6 +116,7 @@ class SdlConnectionDialogWrapper void push(EventArg&& arg); mutable std::mutex _mux; - std::unique_ptr _connection_dialog; - std::queue _queue; + std::unique_ptr _connection_dialog{}; + std::queue _queue{}; + wLog* _log = nullptr; }; diff --git a/client/SDL/SDL3/sdl_freerdp.cpp b/client/SDL/SDL3/sdl_freerdp.cpp index ad1c17927..0adb4ab67 100644 --- a/client/SDL/SDL3/sdl_freerdp.cpp +++ b/client/SDL/SDL3/sdl_freerdp.cpp @@ -1744,7 +1744,7 @@ bool SdlContext::update_resizeable(bool enable) SdlContext::SdlContext(rdpContext* context) : _context(context), log(WLog_Get(SDL_TAG)), disp(this), input(this), clip(this), - primary(nullptr, SDL_DestroySurface), rdp_thread_running(false) + primary(nullptr, SDL_DestroySurface), rdp_thread_running(false), dialog(log) { WINPR_ASSERT(context);