diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.h | 17 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.mm | 39 |
2 files changed, 53 insertions, 3 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h index 4b9232d670..87cd1717da 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.h +++ b/src/plugins/platforms/cocoa/qcocoawindow.h @@ -52,6 +52,20 @@ QT_BEGIN_NAMESPACE +@interface QNSWindow : NSWindow { + +} + +- (BOOL)canBecomeKeyWindow; + +@end + +@interface QNSPanel : QNSWindow { + +} + +@end + class QCocoaWindow : public QPlatformWindow { public: @@ -63,8 +77,9 @@ public: void setWindowTitle(const QString &title); void raise(); void lower(); - void propagateSizeHints(); + bool setKeyboardGrabEnabled(bool grab); + bool setMouseGrabEnabled(bool grab); WId winId() const; NSView *contentView() const; 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 |