From ee1933037495d398e82f53208b26ddc76c19b439 Mon Sep 17 00:00:00 2001 From: Bernard Niset Date: Sun, 12 Jun 2016 17:33:27 +0200 Subject: [PATCH 1/3] Added .gitignore. --- .gitignore | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..45a2c66 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +cg_utils.o +dmgroot/ +pkgroot/ +screenresolution +screenresolution-1.7dev.dmg +screenresolution-1.7dev.pkg +screenresolution.dmg +screenresolution.pkg +version-tmpl.h +version.h +*.swp From 1ba4123c6c8cfd61a917f480261c4f15f1fdd4af Mon Sep 17 00:00:00 2001 From: Bernard Niset Date: Sun, 12 Jun 2016 17:33:49 +0200 Subject: [PATCH 2/3] Support for retina resolutions. --- cg_utils.c | 11 ++++++++++- main.c | 12 ++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/cg_utils.c b/cg_utils.c index 4fef025..e51db46 100644 --- a/cg_utils.c +++ b/cg_utils.c @@ -46,10 +46,19 @@ size_t bitDepth(CGDisplayModeRef mode) { unsigned int configureDisplay(CGDirectDisplayID display, struct config *config, int displayNum) { unsigned int returncode = 1; - CFArrayRef allModes = CGDisplayCopyAllDisplayModes(display, NULL); + + int value = 1; + CFNumberRef number = CFNumberCreate( kCFAllocatorDefault, kCFNumberIntType, &value ); + CFStringRef key = kCGDisplayShowDuplicateLowResolutionModes; + CFDictionaryRef options = CFDictionaryCreate( kCFAllocatorDefault, (const void **)&key, (const void **)&number, 1, NULL, NULL ); + + CFArrayRef allModes = CGDisplayCopyAllDisplayModes(display, options); if (allModes == NULL) { NSLog(CFSTR("Error: failed trying to look up modes for display %u"), displayNum); } + CFRelease(number); + CFRelease(options); + CGDisplayModeRef newMode = NULL; CGDisplayModeRef possibleMode; diff --git a/main.c b/main.c index 339dd42..80b9b31 100644 --- a/main.c +++ b/main.c @@ -135,7 +135,12 @@ unsigned int listAvailableModes(CGDirectDisplayID display, int displayNum) { int numModes = 0; int i; - CFArrayRef allModes = CGDisplayCopyAllDisplayModes(display, NULL); + int value = 1; + CFNumberRef number = CFNumberCreate( kCFAllocatorDefault, kCFNumberIntType, &value ); + CFStringRef key = kCGDisplayShowDuplicateLowResolutionModes; + CFDictionaryRef options = CFDictionaryCreate( kCFAllocatorDefault, (const void **)&key, (const void **)&number, 1, NULL, NULL ); + + CFArrayRef allModes = CGDisplayCopyAllDisplayModes(display, options); if (allModes == NULL) { returncode = 0; } @@ -149,6 +154,9 @@ unsigned int listAvailableModes(CGDirectDisplayID display, int displayNum) { allModes ); + CFRelease(number); + CFRelease(options); + CFArraySortValues( allModesSorted, CFRangeMake(0, CFArrayGetCount(allModesSorted)), @@ -185,7 +193,7 @@ unsigned int listAvailableModes(CGDirectDisplayID display, int displayNum) { } char modestr [50]; - sprintf(modestr, "%4lux%4lux%lu@%.0f", + sprintf(modestr, "%lux%lux%lu@%.0f", CGDisplayModeGetWidth(mode), CGDisplayModeGetHeight(mode), bitDepth(mode), From 7124fa9cca9db2c9904786c5a9424ab375da64dd Mon Sep 17 00:00:00 2001 From: Bernard Niset Date: Sun, 19 Aug 2018 22:45:58 +0200 Subject: [PATCH 3/3] Fixed compile/link problem with MIN/MAX. --- main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/main.c b/main.c index 80b9b31..eae9384 100644 --- a/main.c +++ b/main.c @@ -20,6 +20,7 @@ #include "version.h" #include "cg_utils.h" +#include // Number of modes to list per line. #define MODES_PER_LINE 3