fix preferred Resolution and new config file location
[lilass.git] / screen.py
index e161fcc74521c291a86363c642da57c9f6872b9e..b096fb120382832979595c6f81d1bf9984f3d46d 100644 (file)
--- 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):