diff options
-rw-r--r-- | src/xprivate.cpp | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/src/xprivate.cpp b/src/xprivate.cpp index 3e7c3a2..62a4895 100644 --- a/src/xprivate.cpp +++ b/src/xprivate.cpp @@ -557,25 +557,25 @@ XRRModeInfo* XPrivate::getPreferredMode(const OutputInfo *oi, XRRModeInfo *fallb } else { // No preferred one, try some more or less clever fallback qDebug() << "No preferred mode for" << oi->outputName; - mode = None; - if (fallback != nullptr) { - mode = getOutputModeForResolution(oi->output, fallback->width, fallback->height); - } - if (mode == None) { - mode = getOutputModeForResolution(oi->output, 1920, 1080); - } - if (mode == None) { - mode = getOutputModeForResolution(oi->output, 1280, 720); - } - if (mode == None) { - mode = getOutputModeForResolution(oi->output, 1280, 800); - } - if (mode == None) { - mode = getOutputModeForResolution(oi->output, 1152, 864); - } - if (mode == None) { - mode = oi->output->modes[0]; - } + mode = None; + int maxX = 1920; + int maxY = 1080; + if (fallback != nullptr) { + maxX = int(fallback->width); + maxY = int(fallback->height); + mode = getOutputModeForResolution(oi->output, fallback->width, fallback->height); + } + static const std::vector<QSize> wanted = {QSize(1920, 1080), QSize(1280, 800), QSize(1280, 720), QSize(1152, 864), QSize(1024, 768)}; + for (const QSize s : wanted) { + if (mode != None) + break; + if (s.width() <= maxX && s.height() <= maxY) { + mode = getOutputModeForResolution(oi->output, s.width(), s.height()); + } + } + if (mode == None) { + mode = oi->output->modes[0]; + } } if (!_modeMap.contains(mode)) { qDebug() << "Could not pick a preferred mode"; |