diff options
| author | Ikalco <73481042+ikalco@users.noreply.github.com> | 2025-01-31 06:23:32 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-31 13:23:32 +0100 |
| commit | e6a9cfab9199788ee0dcefd8b1bda46f93e6a001 (patch) | |
| tree | 97e712c2e8c2dd9dc0e1c08e42044f94541eaaa8 /src | |
| parent | ef03f6911694413b1b06aba727ad9ab089a511f7 (diff) | |
monitor: preferred mode now tries first 3 modes if preferred fails before erroring (#9246)
Diffstat (limited to 'src')
| -rw-r--r-- | src/helpers/Monitor.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index fc3de3aa..9aa6efce 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -435,7 +435,7 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { // accumulate requested modes in reverse order (cause inesrting at front is inefficient) std::vector<SP<Aquamarine::SOutputMode>> requestedModes; - std::string requestedStr = "preferred"; + std::string requestedStr = "unknown"; // use sortFunc, add best 3 to requestedModes in reverse, since we test in reverse auto addBest3Modes = [&](auto const& sortFunc) { @@ -446,13 +446,24 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { requestedModes.insert(requestedModes.end(), sortedModes.rbegin(), sortedModes.rend()); }; - // last fallback is preferred mode, btw this covers resolution == Vector2D() + // last fallback is always preferred mode if (!output->preferredMode()) Debug::log(ERR, "Monitor {} has NO PREFERRED MODE", output->name); else requestedModes.push_back(output->preferredMode()); - if (RULE->resolution == Vector2D(-1, -1)) { + if (RULE->resolution == Vector2D()) { + requestedStr = "preferred"; + + // fallback to first 3 modes if preferred fails/doesn't exist + requestedModes = output->modes; + if (requestedModes.size() > 3) + requestedModes.erase(requestedModes.begin() + 3, requestedModes.end()); + std::ranges::reverse(requestedModes.begin(), requestedModes.end()); + + if (output->preferredMode()) + requestedModes.push_back(output->preferredMode()); + } else if (RULE->resolution == Vector2D(-1, -1)) { requestedStr = "highrr"; // sort prioritizing refresh rate 1st and resolution 2nd, then add best 3 |
