Cocoa: correct QDesktopWidget::availableGeometry()

Since 10.9, System Preferences->Mission Control->Displays have separate
Spaces settings needs to be followed.

Task-number: QTBUG-47030
Change-Id: I1c1cf326246bd5609090ce5ac3212d963d562593
Reviewed-by: Jake Petroules <jake.petroules@theqtcompany.com>
This commit is contained in:
Liang Qi 2015-08-24 12:22:52 +02:00
parent 6413ceeccf
commit 1a5cc2a868

View File

@ -86,9 +86,17 @@ void QCocoaScreen::updateGeometry()
NSRect frameRect = [nsScreen frame];
if (m_screenIndex == 0) {
// Since Mavericks, there is a setting, System Preferences->Mission Control->
// Displays have separate Spaces.
BOOL spansDisplays = NO;
#if QT_OSX_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_9)
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_9)
spansDisplays = [NSScreen screensHaveSeparateSpaces];
#endif
if (spansDisplays || m_screenIndex == 0) {
m_geometry = QRect(frameRect.origin.x, frameRect.origin.y, frameRect.size.width, frameRect.size.height);
// This is the primary screen, the one that contains the menubar. Its origin should be
// Displays have separate Spaces setting is on or this is the primary screen,
// the one that contains the menubar. Its origin should be
// (0, 0), and it's the only one whose available geometry differs from its full geometry.
NSRect visibleRect = [nsScreen visibleFrame];
m_availableGeometry = QRect(visibleRect.origin.x,