QT_BEGIN_NAMESPACE
+@interface QNSWindow : NSWindow {
+
+}
+
+- (BOOL)canBecomeKeyWindow;
+
+@end
+
+@interface QNSPanel : QNSWindow {
+
+}
+
+@end
+
class QCocoaWindow : public QPlatformWindow
{
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;
#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)
}
}
+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);
break;
}
- panel = [[NSPanel alloc] initWithContentRect:frame
+ panel = [[QNSPanel alloc] initWithContentRect:frame
styleMask:m_windowAttributes
backing:NSBackingStoreBuffered
defer:NO]; // see window case below
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