def apply_configuration(new_configuration, current_configuration, dry_run=False):
"Apply a configuration"
+ require_xrandr_fix = True
outputs = sorted(new_configuration.keys(), key=lambda x: new_configuration[x].sort_key)
if dry_run:
base_argv = ["echo", "xrandr"]
except ValueError:
pass
- enable_outputs.append(option_vector)
+ if new_configuration[output].options.get("pos", "0x0") == "0x0":
+ enable_outputs.insert(0, option_vector)
+ require_xrandr_fix = False
+ else:
+ enable_outputs.append(option_vector)
# Perform pe-change auxiliary changes
if auxiliary_changes_pre:
if call_and_retry(argv, dry_run=dry_run) != 0:
raise AutorandrException("Command failed: %s" % " ".join(argv))
+ # Fix all outputs if no 0x0 output has been found as xrandr will shift them
+ if require_xrandr_fix:
+ for index in range(0, len(enable_outputs), 2):
+ argv = base_argv + list(chain.from_iterable(enable_outputs[index:index + 2]))
+ if call_and_retry(argv, dry_run=dry_run) != 0:
+ raise AutorandrException("Command failed: %s" % " ".join(argv))
+
def is_equal_configuration(source_configuration, target_configuration):
"""