diff options
author | Morten Sorvig <morten.sorvig@nokia.com> | 2011-11-09 10:35:11 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-09 12:16:58 +0100 |
commit | 2fd3dbb00cc69c71d9d32d1103f095134ae9ce9d (patch) | |
tree | 7aa0addb12654045a9a3214fdc80b8272a9a59e1 /src/plugins/platforms/cocoa/qcocoawindow.mm | |
parent | 260416393e83fe91bcd81546649877b810418a4e (diff) |
Cocoa: Implement mouse and keyboard grab.
Change-Id: Id53ff19d43213d79aaf8f1a6617a06ef9d0cfb4b
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@nokia.com>
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoawindow.mm')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.mm | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 091c2651dd..3c0c730cff 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -54,6 +54,23 @@ #include <QDebug> +@implementation QNSWindow + +- (BOOL)canBecomeKeyWindow +{ + + // The default implementation returns NO for title-bar less windows, + // override and return yes here to make sure popup windows such as + // the combobox popup can become the key window. + return YES; +} + +@end + +@implementation QNSPanel + +@end + QCocoaWindow::QCocoaWindow(QWindow *tlw) : QPlatformWindow(tlw) , m_windowAttributes(0) @@ -163,6 +180,24 @@ void QCocoaWindow::propagateSizeHints() } } +bool QCocoaWindow::setKeyboardGrabEnabled(bool grab) +{ + if (grab && ![m_nsWindow isKeyWindow]) + [m_nsWindow makeKeyWindow]; + else if (!grab && [m_nsWindow isKeyWindow]) + [m_nsWindow resignKeyWindow]; + return true; +} + +bool QCocoaWindow::setMouseGrabEnabled(bool grab) +{ + if (grab && ![m_nsWindow isKeyWindow]) + [m_nsWindow makeKeyWindow]; + else if (!grab && [m_nsWindow isKeyWindow]) + [m_nsWindow resignKeyWindow]; + return true; +} + WId QCocoaWindow::winId() const { return WId(m_nsWindow); @@ -343,7 +378,7 @@ NSWindow * QCocoaWindow::createWindow() break; } - panel = [[NSPanel alloc] initWithContentRect:frame + panel = [[QNSPanel alloc] initWithContentRect:frame styleMask:m_windowAttributes backing:NSBackingStoreBuffered defer:NO]; // see window case below @@ -354,7 +389,7 @@ NSWindow * QCocoaWindow::createWindow() break; } default: - window = [[NSWindow alloc] initWithContentRect:frame + window = [[QNSWindow alloc] initWithContentRect:frame styleMask:(NSResizableWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSTitledWindowMask) backing:NSBackingStoreBuffered defer:NO]; // Deferring window creation breaks OpenGL (the GL context is set up |