diff --git a/resources/bin/display_control b/resources/bin/display_control index d9ec650..ff657cd 100755 Binary files a/resources/bin/display_control and b/resources/bin/display_control differ diff --git a/scripts/display_control.m b/scripts/display_control.m index b71743e..43f6d4d 100644 --- a/scripts/display_control.m +++ b/scripts/display_control.m @@ -31,6 +31,17 @@ static int mirror_displays(void) { CGDirectDisplayID mainID = CGMainDisplayID(); + // Idempotency: if every secondary is already mirroring mainID, nothing to do. + CGDisplayCount alreadyMirrored = 0; + for (CGDisplayCount i = 0; i < numOnline; i++) { + if (onlineDspys[i] != mainID && CGDisplayMirrorsDisplay(onlineDspys[i]) == mainID) + alreadyMirrored++; + } + if (alreadyMirrored == numOnline - 1) { + printf("Displays already mirrored.\n"); + return 0; + } + CGDisplayConfigRef config; CGError err = CGBeginDisplayConfiguration(&config); if (err != kCGErrorSuccess) {