From f2fa65e4bfa09da6e857cd8c333eec5b1a87d318 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Mon, 22 Apr 2013 13:50:18 +0200 Subject: Cocoa: Add setAlertState(), isAlertState(), beep() functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also, fix operator precedence error in QApplication::alert(). Change-Id: I140ccfba29638d24bc1c97f5f9a9611f66eb6b8f Reviewed-by: Friedemann Kleint Reviewed-by: Morten Johan Sørvig --- src/plugins/platforms/cocoa/qcocoanativeinterface.h | 2 ++ src/plugins/platforms/cocoa/qcocoanativeinterface.mm | 5 +++++ src/plugins/platforms/cocoa/qcocoawindow.h | 5 +++++ src/plugins/platforms/cocoa/qcocoawindow.mm | 18 ++++++++++++++++++ src/widgets/kernel/qapplication_qpa.cpp | 2 +- 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.h b/src/plugins/platforms/cocoa/qcocoanativeinterface.h index ca84312059..c344ebc42c 100644 --- a/src/plugins/platforms/cocoa/qcocoanativeinterface.h +++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.h @@ -65,6 +65,8 @@ public: NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource) Q_DECL_OVERRIDE; + Q_INVOKABLE void beep(); + static void *cglContextForContext(QOpenGLContext *context); static void *nsOpenGLContextForContext(QOpenGLContext* context); diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm index 84261ad273..daceb1e8ad 100644 --- a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm +++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm @@ -124,6 +124,11 @@ QPlatformNativeInterface::NativeResourceForIntegrationFunction QCocoaNativeInter return 0; } +void QCocoaNativeInterface::beep() +{ + NSBeep(); +} + QPlatformPrinterSupport *QCocoaNativeInterface::createPlatformPrinterSupport() { #ifndef QT_NO_WIDGETS diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h index e1de5f0add..ff7f99f96a 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.h +++ b/src/plugins/platforms/cocoa/qcocoawindow.h @@ -106,6 +106,8 @@ public: void setWindowTitle(const QString &title); void setWindowFilePath(const QString &filePath); void setWindowIcon(const QIcon &icon); + void setAlertState(bool enabled); + bool isAlertState() const; void raise(); void lower(); bool isExposed() const; @@ -190,6 +192,9 @@ public: // for QNSView bool m_frameStrutEventsEnabled; bool m_isExposed; int m_registerTouchCount; + + static const int NoAlertRequest; + NSInteger m_alertRequest; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index e726c1e4fd..e3cd791930 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -188,6 +188,8 @@ static bool isMouseEvent(NSEvent *ev) @end +const int QCocoaWindow::NoAlertRequest = -1; + QCocoaWindow::QCocoaWindow(QWindow *tlw) : QPlatformWindow(tlw) , m_nsWindow(0) @@ -202,6 +204,7 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw) , m_frameStrutEventsEnabled(false) , m_isExposed(false) , m_registerTouchCount(0) + , m_alertRequest(NoAlertRequest) { #ifdef QT_COCOA_ENABLE_WINDOW_DEBUG qDebug() << "QCocoaWindow::QCocoaWindow" << this; @@ -496,6 +499,21 @@ void QCocoaWindow::setWindowIcon(const QIcon &icon) } } +void QCocoaWindow::setAlertState(bool enabled) +{ + if (m_alertRequest == NoAlertRequest && enabled) { + m_alertRequest = [NSApp requestUserAttention:NSCriticalRequest]; + } else if (m_alertRequest != NoAlertRequest && !enabled) { + [NSApp cancelUserAttentionRequest:m_alertRequest]; + m_alertRequest = NoAlertRequest; + } +} + +bool QCocoaWindow::isAlertState() const +{ + return m_alertRequest != NoAlertRequest; +} + void QCocoaWindow::raise() { //qDebug() << "raise" << this; diff --git a/src/widgets/kernel/qapplication_qpa.cpp b/src/widgets/kernel/qapplication_qpa.cpp index 6567ef5c2f..2761c84a8d 100644 --- a/src/widgets/kernel/qapplication_qpa.cpp +++ b/src/widgets/kernel/qapplication_qpa.cpp @@ -415,7 +415,7 @@ void QApplication::beep() void QApplication::alert(QWidget *widget, int duration) { if (widget) { - if (widget->window()->isActiveWindow()&& !widget->window()->windowState() & Qt::WindowMinimized) + if (widget->window()->isActiveWindow() && !(widget->window()->windowState() & Qt::WindowMinimized)) return; if (QWindow *window= QApplicationPrivate::windowForWidget(widget)) window->alert(duration); -- cgit v1.2.3