X-Git-Url: https://git.ralfj.de/lilass.git/blobdiff_plain/1f558aaf1deb7511d8d70646cc1ea97cfb8fecbd..436dc315ae39dfac14edd1c208c26c7419e9f58e:/screen.py diff --git a/screen.py b/screen.py index e161fcc..b096fb1 100644 --- a/screen.py +++ b/screen.py @@ -18,7 +18,6 @@ import re, subprocess from enum import Enum -from functools import total_ordering ## utility functions @@ -130,6 +129,7 @@ class Connector: self.name = name # connector name, e.g. "HDMI1" self.edid = None # EDID string for the connector, or None if disconnected self.resolutions = set() # list of Resolution objects, empty if disconnected + self.preferredResolution = None def __str__(self): return str(self.name) @@ -150,6 +150,11 @@ class Connector: self.edid = s else: self.edid += s + + def getPreferredResolution(self): + if self.preferredResolution: + return self.preferredResolution + return max(self.resolutions, key=lambda r: r.pixelCount()) class ScreenSituation: connectors = [] # contains all the Connector objects @@ -210,6 +215,8 @@ class ScreenSituation: resolution = Resolution(int(m.group(1)), int(m.group(2))) assert connector is not None connector.addResolution(resolution) + if '+preferred' in line: + connector.preferredResolution = resolution continue # EDID? m = re.search(r'^\s*EDID:\s*$', line) @@ -241,7 +248,7 @@ class ScreenSituation: internalRes = self.internalResolutions() externalRes = self.externalResolutions() assert externalRes is not None - return sorted(set(res for res in externalRes if res in internalRes), key=lambda r: -r.pixelCount()) + return sorted(set(externalRes).intersection(internalRes), key=lambda r: -r.pixelCount()) # compute the xrandr call def forXrandr(self, setup):