]> git.donarmstrong.com Git - deb_pkgs/autorandr.git/blobdiff - autorandr.py
New upstream version 1.8.1
[deb_pkgs/autorandr.git] / autorandr.py
index cc1a25a0a40fd383c528538e075afdff581a674a..cf9b0c8ec0f08c7584830f000c6abd6260bcff42 100755 (executable)
@@ -161,7 +161,6 @@ class XrandrOutput(object):
         (?:[\ \t]*border\ (?P<border>(?:[0-9]+/){3}[0-9]+))?                            # Border information
         (?:\s*(?:                                                                       # Properties of the output
             Gamma: (?P<gamma>(?:inf|[0-9\.: e])+) |                                     # Gamma value
-            CRTC:\s*(?P<crtc>[0-9]) |                                                   # CRTC value
             Transform: (?P<transform>(?:[\-0-9\. ]+\s+){3}) |                           # Transformation matrix
             EDID: (?P<edid>\s*?(?:\\n\\t\\t[0-9a-f]+)+) |                               # EDID of the output
             (?![0-9])[^:\s][^:\n]+:.*(?:\s\\t[\\t ].+)*                                 # Other properties
@@ -318,13 +317,7 @@ class XrandrOutput(object):
         else:
             edid = "%s-%s" % (XrandrOutput.EDID_UNAVAILABLE, match["output"])
 
-        # An output can be disconnected but still have a mode configured. This can only happen
-        # as a residual situation after a disconnect, you cannot associate a mode with an disconnected
-        # output.
-        #
-        # This code needs to be careful not to mix the two. An output should only be configured to
-        # "off" if it doesn't have a mode associated with it, which is modelled as "not a width" here.
-        if not match["width"]:
+        if not match["connected"] or not match["width"]:
             options["off"] = None
         else:
             if match["mode_name"]:
@@ -333,11 +326,10 @@ class XrandrOutput(object):
                 options["mode"] = "%sx%s" % (match["mode_width"], match["mode_height"])
             else:
                 if match["rotate"] not in ("left", "right"):
-                    options["mode"] = "%sx%s" % (match["width"] or 0, match["height"] or 0)
+                    options["mode"] = "%sx%s" % (match["width"], match["height"])
                 else:
-                    options["mode"] = "%sx%s" % (match["height"] or 0, match["width"] or 0)
-            if match["rotate"]:
-                options["rotate"] = match["rotate"]
+                    options["mode"] = "%sx%s" % (match["height"], match["width"])
+            options["rotate"] = match["rotate"]
             if match["primary"]:
                 options["primary"] = None
             if match["reflect"] == "X":
@@ -371,8 +363,6 @@ class XrandrOutput(object):
                 # so we approximate by 1e-10.
                 gamma = ":".join([str(max(1e-10, round(1. / float(x), 3))) for x in gamma.split(":")])
                 options["gamma"] = gamma
-            if match["crtc"]:
-                options["crtc"] = match["crtc"]
             if match["rate"]:
                 options["rate"] = match["rate"]
 
@@ -582,17 +572,6 @@ def profile_blocked(profile_path, meta_information=None):
     return not exec_scripts(profile_path, "block", meta_information)
 
 
-def check_configuration_pre_save(configuration):
-    "Check that a configuration is safe for saving."
-    outputs = sorted(configuration.keys(), key=lambda x: configuration[x].sort_key)
-    for output in outputs:
-        if "off" not in configuration[output].options and not configuration[output].edid:
-            return ("`%(o)s' is not off (has a mode configured) but is disconnected (does not have an EDID).\n"
-                    "This typically means that it has been recently unplugged and then not properly disabled\n"
-                    "by the user. Please disable it (e.g. using `xrandr --output %(o)s --off`) and then rerun\n"
-                    "this command.") % {"o": output}
-
-
 def output_configuration(configuration, config):
     "Write a configuration file"
     outputs = sorted(configuration.keys(), key=lambda x: configuration[x].sort_key)
@@ -660,10 +639,7 @@ def get_fb_dimensions(configuration):
         if "off" in output.options or not output.edid:
             continue
         # This won't work with all modes -- but it's a best effort.
-        match = re.search("[0-9]{3,}x[0-9]{3,}", output.options["mode"])
-        if not match:
-            return None
-        o_mode = match.group(0)
+        o_mode = re.search("[0-9]{3,}x[0-9]{3,}", output.options["mode"]).group(0)
         o_width, o_height = map(int, o_mode.split("x"))
         if "transform" in output.options:
             a, b, c, d, e, f, g, h, i = map(float, output.options["transform"].split(","))
@@ -1213,11 +1189,6 @@ def main(argv):
         if options["--save"] in (x[0] for x in virtual_profiles):
             raise AutorandrException("Cannot save current configuration as profile '%s':\n"
                                      "This configuration name is a reserved virtual configuration." % options["--save"])
-        error = check_configuration_pre_save(config)
-        if error:
-            print("Cannot save current configuration as profile '%s':" % options["--save"])
-            print(error)
-            sys.exit(1)
         try:
             profile_folder = os.path.join(profile_path, options["--save"])
             save_configuration(profile_folder, config)