From 487c16de32149050af28a721a15023d97988b140 Mon Sep 17 00:00:00 2001 From: Bassel Emam Date: Tue, 19 May 2026 00:15:44 +0300 Subject: [PATCH] Preserve user-selected advanced fan curve across profile switches When a user enables Advanced fan control (custom curve), setUserMode() was unconditionally overwriting fan_mode back to auto_fan_mode. This happens implicitly via on_ChargerStateChange() whenever AC state is detected or changes (including at MCC startup), silently disabling the user's curve. Skip the setFanMode() call inside setUserMode() when the user has fanModeAdvanced=true persisted, so manual fan curves survive AC/DC auto-profile transitions and PPD-driven mode switches. --- src/operate.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/operate.cpp b/src/operate.cpp index ecaacce..7460e28 100644 --- a/src/operate.cpp +++ b/src/operate.cpp @@ -418,7 +418,11 @@ void Operate::setUserMode(user_mode userMode) const { } if (msiEcHelper.hasFanMode()) { - msiEcHelper.setFanMode(fanMode); + Settings s; + bool advancedActive = s.isValueExist(settingsGroup + "fanModeAdvanced") && + s.getValue(settingsGroup + "fanModeAdvanced").toBool(); + if (!advancedActive) + msiEcHelper.setFanMode(fanMode); } if (msiEcHelper.hasSuperBattery()) {