summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@digia.com>2013-05-21 15:09:28 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-05-23 12:49:39 +0200
commit602bd9873786ccadcb67da3036329f3122555cf8 (patch)
tree49cee7b06178f5e3b514bdd82e34d900325a3cf5 /src/plugins
parentf610814b058b4639ef0d4d2592a8bcc3f81c974d (diff)
Make QWindow update its screen when moved to a different one
Also implements the Cocoa backend for that. Change-Id: I32977e12a04e1cf48b12333442482746c69ce133 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm16
-rw-r--r--src/plugins/platforms/cocoa/qcocoaintegration.h1
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm10
3 files changed, 26 insertions, 1 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
index f676d613bc..c40ae3d81d 100644
--- a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
+++ b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
@@ -100,11 +100,23 @@ static void cleanupCocoaApplicationDelegate()
- (id)init
{
self = [super init];
- if (self)
+ if (self) {
inLaunch = true;
+ [[NSNotificationCenter defaultCenter]
+ addObserver:self
+ selector:@selector(updateScreens:)
+ name:NSApplicationDidChangeScreenParametersNotification
+ object:NSApp];
+ }
return self;
}
+- (void)updateScreens:(NSNotification *)notification
+{
+ if (QCocoaIntegration *ci = dynamic_cast<QCocoaIntegration *>(QGuiApplicationPrivate::platformIntegration()))
+ ci->updateScreens();
+}
+
- (void)dealloc
{
sharedCocoaApplicationDelegate = nil;
@@ -114,6 +126,8 @@ static void cleanupCocoaApplicationDelegate()
[NSApp setDelegate:reflectionDelegate];
[reflectionDelegate release];
}
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+
[super dealloc];
}
diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.h b/src/plugins/platforms/cocoa/qcocoaintegration.h
index 6e690dd51e..7831888da1 100644
--- a/src/plugins/platforms/cocoa/qcocoaintegration.h
+++ b/src/plugins/platforms/cocoa/qcocoaintegration.h
@@ -125,6 +125,7 @@ public:
QList<int> possibleKeys(const QKeyEvent *event) const;
void updateScreens();
+ QCocoaScreen *screenAtIndex(int index) const { return mScreens.at(index); }
private:
diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm
index 6fd5cf59e1..0916a1faa8 100644
--- a/src/plugins/platforms/cocoa/qnsview.mm
+++ b/src/plugins/platforms/cocoa/qnsview.mm
@@ -58,6 +58,7 @@
#include <private/qguiapplication_p.h>
#include "qcocoabackingstore.h"
#include "qcocoaglcontext.h"
+#include "qcocoaintegration.h"
#ifdef QT_COCOA_ENABLE_ACCESSIBILITY_INSPECTOR
#include <accessibilityinspector.h>
@@ -276,6 +277,15 @@ static QTouchDevice *touchDevice = 0;
m_platformWindow->obscureWindow();
} else if ([notificationName isEqualToString: @"NSWindowDidOrderOnScreenAndFinishAnimatingNotification"]) {
m_platformWindow->exposeWindow();
+ } else if (notificationName == NSWindowDidChangeScreenNotification) {
+ if (m_window) {
+ QCocoaIntegration *ci = static_cast<QCocoaIntegration *>(QGuiApplicationPrivate::platformIntegration());
+ NSUInteger screenIndex = [[NSScreen screens] indexOfObject:self.window.screen];
+ if (screenIndex != NSNotFound) {
+ QCocoaScreen *cocoaScreen = ci->screenAtIndex(screenIndex);
+ QWindowSystemInterface::handleWindowScreenChanged(m_window, cocoaScreen->screen());
+ }
+ }
} else {
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7