CB-11510 OSX app doesn't properly span all vertical displays
diff --git a/CordovaLib/CordovaLib/Classes/Commands/CDVWindowSizeCommand.m b/CordovaLib/CordovaLib/Classes/Commands/CDVWindowSizeCommand.m
index a8c9307..69abc92 100644
--- a/CordovaLib/CordovaLib/Classes/Commands/CDVWindowSizeCommand.m
+++ b/CordovaLib/CordovaLib/Classes/Commands/CDVWindowSizeCommand.m
@@ -31,7 +31,7 @@
  */
 + (void) makeFullScreen:(NSWindow*) window {
     NSRect fullScreenRect = [NSScreen fullScreenRect];
-    NSLog(@"Full screen resolution: %.1f x %.1f", fullScreenRect.size.width, fullScreenRect.size.height);
+    NSLog(@"Full screen resolution: %.f x %.f", fullScreenRect.size.width, fullScreenRect.size.height);
     [window setStyleMask:window.styleMask & ~NSTitledWindowMask];
     [window setHidesOnDeactivate:YES];
     [window setLevel:NSMainMenuWindowLevel + 1];
@@ -61,7 +61,7 @@
 }
 
 + (void) setSizeOfWindow:(NSWindow*) window size:(NSSize) size {
-    NSLog(@"Set window size to %.1f x %.1f", size.width, size.height);
+    NSLog(@"Set window size to %.f x %.f", size.width, size.height);
     NSRect frameRect = window.frame;
     frameRect.size = size;
     [window setFrame:frameRect display:YES];
diff --git a/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.h b/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.h
index 8a48090..6ac73b6 100644
--- a/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.h
+++ b/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.h
@@ -21,10 +21,6 @@
 
 @interface NSScreen (Utils)
 
-+ (NSArray*) sortedScreens;
-
-+ (NSArray*) sortedScreenRects;
-
 + (NSRect) fullScreenRect;
 
 @end
diff --git a/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.m b/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.m
index 30a0da3..0255149 100644
--- a/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.m
+++ b/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.m
@@ -18,56 +18,57 @@
  */
 
 #import "NSScreen+Utils.h"
+#import <IOKit/graphics/IOGraphicsLib.h>
+
+NSString* screenNameForDisplay(CGDirectDisplayID displayID) {
+    NSString *screenName = nil;
+
+    NSDictionary *deviceInfo = (__bridge NSDictionary *) IODisplayCreateInfoDictionary(CGDisplayIOServicePort(displayID), kIODisplayOnlyPreferredName);
+    NSDictionary *localizedNames = deviceInfo[[NSString stringWithUTF8String:kDisplayProductName]];
+
+    if ([localizedNames count] > 0) {
+        screenName = localizedNames[[localizedNames allKeys][0]];
+    }
+
+    return screenName;
+}
 
 @implementation NSScreen (Utils)
 
-+ (NSArray*) sortedScreens {
-    NSArray* sortedScreens = [[NSScreen screens] sortedArrayUsingComparator:^NSComparisonResult(NSScreen* screen1, NSScreen* screen2) {
-        if (screen1.frame.origin.x > screen2.frame.origin.x) {
-            return (NSComparisonResult) NSOrderedDescending;
-        }
-
-        if (screen1.frame.origin.x < screen2.frame.origin.x) {
-            return (NSComparisonResult) NSOrderedAscending;
-        }
-
-        return (NSComparisonResult) NSOrderedSame;
-    }];
-    return sortedScreens;
-}
-
-+ (NSArray*) sortedScreenRects {
-    NSMutableArray* screenWidths = [[NSMutableArray alloc] init];
-    NSRect mainScreenRect;
-
-    mainScreenRect = [[NSScreen mainScreen] frame];
-    [screenWidths addObject:[NSValue valueWithRect:mainScreenRect]];
-
-    NSArray* sortedScreens = [self sortedScreens];
-
-    for (NSScreen* screen in sortedScreens) {
-        if ([screen isNotEqualTo:[NSScreen mainScreen]] &&
-                screen.frame.origin.y + screen.frame.size.height == mainScreenRect.origin.y + mainScreenRect.size.height &&
-                screen.frame.origin.x > mainScreenRect.origin.x) {
-            [screenWidths addObject:[NSValue valueWithRect:screen.frame]];
-        }
-    }
-
-    return screenWidths;
-}
-
 + (NSRect) fullScreenRect {
-    NSArray* screenRects = [self sortedScreenRects];
-    NSRect rect = [[NSScreen mainScreen] frame];
-    CGFloat finalWidth = 0.0f;
+    CGFloat x0 = 0.0f;
+    CGFloat y0 = 0.0f;
+    CGFloat x1 = 0.0f;
+    CGFloat y1 = 0.0f;
 
-    for (NSValue* rectValue in screenRects) {
-        finalWidth += [rectValue rectValue].size.width;
+    NSArray* screens = [NSScreen screens];
+    NSLog(@"Detected %lu display%s:", screens.count, screens.count > 1 ? "s" : "");
+    for (NSScreen* screen in [NSScreen screens]) {
+        NSNumber* screenID = [screen.deviceDescription objectForKey:@"NSScreenNumber"];
+        CGDirectDisplayID aID = [screenID unsignedIntValue];
+        NSLog(@"- %@ at: %.lf,%.lf size: %.lf x %.lf", screenNameForDisplay(aID),
+                screen.frame.origin.x, screen.frame.origin.y,
+                screen.frame.size.width, screen.frame.size.height);
+
+        if (NSMinX(screen.frame) < x0) {
+            x0 = NSMinX(screen.frame);
+        };
+        if (NSMinY(screen.frame) < y0) {
+            y0 = NSMinY(screen.frame);
+        };
+        if (NSMaxX(screen.frame) > x1) {
+            x1 = NSMaxX(screen.frame);
+        };
+        if (NSMaxY(screen.frame) > y1) {
+            y1 = NSMaxY(screen.frame);
+        };
+    }
+    if ([NSScreen screensHaveSeparateSpaces] && screens.count > 1) {
+        NSLog(@"Fullscreen only possible to cover main screen. Disable 'Displays have separate Spaces' in 'System Preferences -> Mission Control' to span all displays.");
+        return [NSScreen mainScreen].frame;
     }
 
-    rect.size.width = finalWidth;
-
-    return rect;
+    return NSMakeRect(x0, y0, x1-x0, y1-y0);
 }
 
 @end