summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/xprivate.cpp38
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";