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() {
+
+
+
+
+
diff --git a/src_assets/common/assets/web/public/assets/locale/en.json b/src_assets/common/assets/web/public/assets/locale/en.json
index 57b8846eca8..3f6ddfc6b37 100644
--- a/src_assets/common/assets/web/public/assets/locale/en.json
+++ b/src_assets/common/assets/web/public/assets/locale/en.json
@@ -158,6 +158,8 @@
"dd_config_label": "Device configuration",
"dd_config_revert_delay": "Config revert delay",
"dd_config_revert_delay_desc": "Additional delay in milliseconds to wait before reverting configuration when the app has been closed or the last session terminated. Main purpose is to provide a smoother transition when quickly switching between apps.",
+ "dd_config_revert_on_disconnect": "Config revert on disconnect",
+ "dd_config_revert_on_disconnect_desc": "Revert configuration upon disconnect of all clients instead of app close or last session termination.",
"dd_config_verify_only": "Verify that the display is enabled (default)",
"dd_hdr_option": "HDR",
"dd_hdr_option_auto": "Switch on/off the HDR mode as requested by the client (default)",