Cocoa: Add setAlertState(), isAlertState(), beep() functions

Also, fix operator precedence error in QApplication::alert().

Change-Id: I140ccfba29638d24bc1c97f5f9a9611f66eb6b8f
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
This commit is contained in:
Gabriel de Dietrich 2013-04-22 13:50:18 +02:00 committed by The Qt Project
parent 1f6ab6a661
commit f2fa65e4bf
5 changed files with 31 additions and 1 deletions

View File

@ -65,6 +65,8 @@ public:
NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource) Q_DECL_OVERRIDE; NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource) Q_DECL_OVERRIDE;
Q_INVOKABLE void beep();
static void *cglContextForContext(QOpenGLContext *context); static void *cglContextForContext(QOpenGLContext *context);
static void *nsOpenGLContextForContext(QOpenGLContext* context); static void *nsOpenGLContextForContext(QOpenGLContext* context);

View File

@ -124,6 +124,11 @@ QPlatformNativeInterface::NativeResourceForIntegrationFunction QCocoaNativeInter
return 0; return 0;
} }
void QCocoaNativeInterface::beep()
{
NSBeep();
}
QPlatformPrinterSupport *QCocoaNativeInterface::createPlatformPrinterSupport() QPlatformPrinterSupport *QCocoaNativeInterface::createPlatformPrinterSupport()
{ {
#ifndef QT_NO_WIDGETS #ifndef QT_NO_WIDGETS

View File

@ -106,6 +106,8 @@ public:
void setWindowTitle(const QString &title); void setWindowTitle(const QString &title);
void setWindowFilePath(const QString &filePath); void setWindowFilePath(const QString &filePath);
void setWindowIcon(const QIcon &icon); void setWindowIcon(const QIcon &icon);
void setAlertState(bool enabled);
bool isAlertState() const;
void raise(); void raise();
void lower(); void lower();
bool isExposed() const; bool isExposed() const;
@ -190,6 +192,9 @@ public: // for QNSView
bool m_frameStrutEventsEnabled; bool m_frameStrutEventsEnabled;
bool m_isExposed; bool m_isExposed;
int m_registerTouchCount; int m_registerTouchCount;
static const int NoAlertRequest;
NSInteger m_alertRequest;
}; };
QT_END_NAMESPACE QT_END_NAMESPACE

View File

@ -188,6 +188,8 @@ static bool isMouseEvent(NSEvent *ev)
@end @end
const int QCocoaWindow::NoAlertRequest = -1;
QCocoaWindow::QCocoaWindow(QWindow *tlw) QCocoaWindow::QCocoaWindow(QWindow *tlw)
: QPlatformWindow(tlw) : QPlatformWindow(tlw)
, m_nsWindow(0) , m_nsWindow(0)
@ -202,6 +204,7 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw)
, m_frameStrutEventsEnabled(false) , m_frameStrutEventsEnabled(false)
, m_isExposed(false) , m_isExposed(false)
, m_registerTouchCount(0) , m_registerTouchCount(0)
, m_alertRequest(NoAlertRequest)
{ {
#ifdef QT_COCOA_ENABLE_WINDOW_DEBUG #ifdef QT_COCOA_ENABLE_WINDOW_DEBUG
qDebug() << "QCocoaWindow::QCocoaWindow" << this; 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() void QCocoaWindow::raise()
{ {
//qDebug() << "raise" << this; //qDebug() << "raise" << this;

View File

@ -415,7 +415,7 @@ void QApplication::beep()
void QApplication::alert(QWidget *widget, int duration) void QApplication::alert(QWidget *widget, int duration)
{ {
if (widget) { if (widget) {
if (widget->window()->isActiveWindow()&& !widget->window()->windowState() & Qt::WindowMinimized) if (widget->window()->isActiveWindow() && !(widget->window()->windowState() & Qt::WindowMinimized))
return; return;
if (QWindow *window= QApplicationPrivate::windowForWidget(widget)) if (QWindow *window= QApplicationPrivate::windowForWidget(widget))
window->alert(duration); window->alert(duration);