diff --git a/docs/configuration.md b/docs/configuration.md index 9a08d0c2bd3..fe8c22b93be 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -1203,6 +1203,31 @@ editing the `conf` file in a text editor. Use the examples as reference. + +### dd_config_revert_on_disconnect + + + + + + + + + + + + + + +
Description + When enabled, display configuration is reverted upon disconnect of all clients instead of app close or last session termination. + This can be useful for returning to physical usage of the host machine without closing the active app. + @warning{Some applications may not function properly when display configuration is changed while active.} + @note{Applies to Windows only.} +
Default@code{}disabled@endcode
Example@code{} + dd_config_revert_on_disconnect = enabled + @endcode
+ ### dd_mode_remapping diff --git a/src/config.cpp b/src/config.cpp index bdf719e0c93..0a4d7e5f0c4 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -504,6 +504,7 @@ namespace config { {}, // manual_refresh_rate video_t::dd_t::hdr_option_e::automatic, // hdr_option 3s, // config_revert_delay + {}, // config_revert_on_disconnect {}, // mode_remapping {} // wa }, // display_device @@ -1132,6 +1133,7 @@ namespace config { video.dd.config_revert_delay = std::chrono::milliseconds {value}; } } + bool_f(vars, "dd_config_revert_on_disconnect", video.dd.config_revert_on_disconnect); generic_f(vars, "dd_mode_remapping", video.dd.mode_remapping, dd::mode_remapping_from_view); bool_f(vars, "dd_wa_hdr_toggle", video.dd.wa.hdr_toggle); diff --git a/src/config.h b/src/config.h index 34e673d150b..7b06e234fbb 100644 --- a/src/config.h +++ b/src/config.h @@ -132,6 +132,7 @@ namespace config { std::string manual_refresh_rate; ///< Manual refresh rate in case `refresh_rate_option == refresh_rate_option_e::manual`. hdr_option_e hdr_option; std::chrono::milliseconds config_revert_delay; ///< Time to wait until settings are reverted (after stream ends/app exists). + bool config_revert_on_disconnect; ///< Specify whether to revert display configuration on client disconnect. mode_remapping_t mode_remapping; workarounds_t wa; } dd; diff --git a/src/stream.cpp b/src/stream.cpp index 5d84c4844cd..b42bd3049f5 100644 --- a/src/stream.cpp +++ b/src/stream.cpp @@ -1882,11 +1882,17 @@ namespace stream { // If this is the last session, invoke the platform callbacks if (--running_sessions == 0) { + bool revert_display_config {config::video.dd.config_revert_on_disconnect}; if (proc::proc.running()) { #if defined SUNSHINE_TRAY && SUNSHINE_TRAY >= 1 system_tray::update_tray_pausing(proc::proc.get_last_run_app_name()); #endif } else { + // We have no app running and also no clients anymore. + revert_display_config = true; + } + + if (revert_display_config) { display_device::revert_configuration(); } diff --git a/src_assets/common/assets/web/config.html b/src_assets/common/assets/web/config.html index d5ada9469e3..5fb7e3ccf74 100644 --- a/src_assets/common/assets/web/config.html +++ b/src_assets/common/assets/web/config.html @@ -175,6 +175,7 @@

{{ $t('config.configuration') }}

"dd_manual_refresh_rate": "", "dd_hdr_option": "auto", "dd_config_revert_delay": 3000, + "dd_config_revert_on_disconnect": "disabled", "dd_mode_remapping": {"mixed": [], "resolution_only": [], "refresh_rate_only": []}, "dd_wa_hdr_toggle": "disabled", "min_fps_factor": 1, diff --git a/src_assets/common/assets/web/configs/tabs/audiovideo/DisplayDeviceOptions.vue b/src_assets/common/assets/web/configs/tabs/audiovideo/DisplayDeviceOptions.vue index ee2951733a7..c7981fc7d20 100644 --- a/src_assets/common/assets/web/configs/tabs/audiovideo/DisplayDeviceOptions.vue +++ b/src_assets/common/assets/web/configs/tabs/audiovideo/DisplayDeviceOptions.vue @@ -151,6 +151,15 @@ function addRemappingEntry() { + +
+ +
+