allow overriding where we get the xrandr info from
[lilass.git] / screen.py
index a95d45dc8d19cd4f8a39715baa2332e323899786..133e333c659c602f03684933afbdc83482b00aad 100644 (file)
--- a/screen.py
+++ b/screen.py
@@ -87,7 +87,9 @@ class Resolution:
     def __str__(self):
         # get ratio
         ratio = int(round(16.0*self.height/self.width))
     def __str__(self):
         # get ratio
         ratio = int(round(16.0*self.height/self.width))
-        if ratio == 12: # 16:12 = 4:3
+        if ratio == 11: # 16:10.66 = 3:2
+            strRatio = "3:2"
+        elif ratio == 12: # 16:12 = 4:3
             strRatio = '4:3'
         elif ratio == 13: # 16:12.8 = 5:4
             strRatio = '5:4'
             strRatio = '4:3'
         elif ratio == 13: # 16:12.8 = 5:4
             strRatio = '5:4'
@@ -196,11 +198,11 @@ class ScreenSituation:
     previousSetup = None # None or the ScreenSetup used the last time this external screen was connected
     
     '''Represents the "screen situation" a machine can be in: Which connectors exist, which resolutions do they have, what are the names for the internal and external screen'''
     previousSetup = None # None or the ScreenSetup used the last time this external screen was connected
     
     '''Represents the "screen situation" a machine can be in: Which connectors exist, which resolutions do they have, what are the names for the internal and external screen'''
-    def __init__(self, internalConnectorNames, externalConnectorNames = None):
+    def __init__(self, internalConnectorNames, externalConnectorNames = None, xrandrSource = None):
         '''Both arguments are lists of connector names. The first one which exists and has a screen attached is chosen for that class. <externalConnectorNames> can be None to
            just choose any remaining connector.'''
         # which connectors are there?
         '''Both arguments are lists of connector names. The first one which exists and has a screen attached is chosen for that class. <externalConnectorNames> can be None to
            just choose any remaining connector.'''
         # which connectors are there?
-        self._getXrandrInformation()
+        self._getXrandrInformation(xrandrSource)
         # figure out which is the internal connector
         self.internalConnector = self._findAvailableConnector(internalConnectorNames)
         if self.internalConnector is None:
         # figure out which is the internal connector
         self.internalConnector = self._findAvailableConnector(internalConnectorNames)
         if self.internalConnector is None:
@@ -216,9 +218,11 @@ class ScreenSituation:
         print("Detected external connector:",self.externalConnector)
     
     # Run xrandr and fill the dict of connector names mapped to lists of available resolutions.
         print("Detected external connector:",self.externalConnector)
     
     # Run xrandr and fill the dict of connector names mapped to lists of available resolutions.
-    def _getXrandrInformation(self):
+    def _getXrandrInformation(self, xrandrSource = None):
         connector = None # current connector
         readingEdid = False
         connector = None # current connector
         readingEdid = False
+        if xrandrSource is None:
+            xrandrSource = processOutputGen("xrandr", "-q", "--verbose")
         for line in processOutputGen("xrandr", "-q", "--verbose"):
             if readingEdid:
                 m = re.match(r'^\s*([0-9a-f]+)\s*$', line)
         for line in processOutputGen("xrandr", "-q", "--verbose"):
             if readingEdid:
                 m = re.match(r'^\s*([0-9a-f]+)\s*$', line)