]> git.donarmstrong.com Git - deb_pkgs/autorandr.git/commitdiff
Merge pull request #145 from theperfidious/master
authorPhillip Berndt <phillip.berndt@googlemail.com>
Sat, 4 May 2019 15:49:19 +0000 (17:49 +0200)
committerGitHub <noreply@github.com>
Sat, 4 May 2019 15:49:19 +0000 (17:49 +0200)
Add crtc value in the config file

1  2 
autorandr.py

diff --combined autorandr.py
index e9bf2086f7fbc7324938f112046ff5ebb941bb0c,b18ce7b4d0ad61c456f9e062430a070ea29c0d1b..0c1c942b7392f6bdb7b219ba1eb8342082e038a8
@@@ -161,6 -161,7 +161,7 @@@ 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
          else:
              edid = "%s-%s" % (XrandrOutput.EDID_UNAVAILABLE, match["output"])
  
 -        if not match["connected"] or not match["width"]:
 +        # 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"]:
              options["off"] = None
          else:
              if match["mode_name"]:
                  options["mode"] = "%sx%s" % (match["mode_width"], match["mode_height"])
              else:
                  if match["rotate"] not in ("left", "right"):
 -                    options["mode"] = "%sx%s" % (match["width"], match["height"])
 +                    options["mode"] = "%sx%s" % (match["width"] or 0, match["height"] or 0)
                  else:
 -                    options["mode"] = "%sx%s" % (match["height"], match["width"])
 -            options["rotate"] = match["rotate"]
 +                    options["mode"] = "%sx%s" % (match["height"] or 0, match["width"] or 0)
 +            if match["rotate"]:
 +                options["rotate"] = match["rotate"]
              if match["primary"]:
                  options["primary"] = None
              if match["reflect"] == "X":
                  # 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"]
  
@@@ -579,17 -575,6 +582,17 @@@ def profile_blocked(profile_path, meta_
      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)
@@@ -1207,11 -1192,6 +1210,11 @@@ 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)