Add QEventDispatcherMac.
authorMorten Sorvig <morten.sorvig@nokia.com>
Thu, 9 Jun 2011 09:18:27 +0000 (11:18 +0200)
committerMorten Sorvig <morten.sorvig@nokia.com>
Thu, 9 Jun 2011 09:19:12 +0000 (11:19 +0200)
Create it directly in QGuiApplication for now,
later on we'll move it to the cocoa plugin.

src/corelib/kernel/qcoreapplication.h
src/gui/kernel/kernel.pri
src/gui/kernel/qeventdispatcher_qpa.cpp
src/gui/kernel/qguiapplication.cpp
src/plugins/platforms/cocoa/cocoa.pro
src/plugins/platforms/cocoa/qcocoaeventloopintegration.h [deleted file]
src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm [deleted file]
src/plugins/platforms/cocoa/qcocoaintegration.h
src/plugins/platforms/cocoa/qcocoaintegration.mm

index 1ccc84b..1dea357 100644 (file)
@@ -217,6 +217,7 @@ private:
     friend class QWidget;
     friend class QWidgetWindow;
     friend class QWidgetPrivate;
+    friend class QEventDispatcherMacPrivate;
     friend bool qt_sendSpontaneousEvent(QObject*, QEvent*);
     friend Q_CORE_EXPORT QString qAppName();
     friend class QClassFactory;
index 7d31401..f166e4f 100644 (file)
@@ -90,4 +90,12 @@ qpa {
        }
 }
 
+mac {
+    HEADERS += \
+        kernel/qeventdispatcher_mac_p.h
+    OBJECTIVE_SOURCES += \
+        kernel/qeventdispatcher_mac.mm
+    LIBS += -framework CoreFoundation -framework Cocoa -framework Carbon
+}
+
 win32:HEADERS+=kernel/qwindowdefs_win.h
index b3f41bf..1a67fee 100644 (file)
@@ -111,12 +111,14 @@ bool QEventDispatcherQPA::processEvents(QEventLoop::ProcessEventsFlags flags)
         delete event;
     }
 
+#ifdef Q_OS_MAC // (inverted inheritance on mac: QEventDispatcherMac calls QEventDispatcherQPA)
     if (!d->interrupt) {
         if (EVENTDISPATCHERBASE::processEvents(flags)) {
             EVENTDISPATCHERBASE::processEvents(flags);
             return true;
         }
     }
+#endif
     return (nevents > 0);
 }
 
index 468e8c3..8112447 100644 (file)
@@ -50,6 +50,9 @@
 #include "qeventdispatcher_glib_qpa_p.h"
 #endif
 #include "qeventdispatcher_qpa_p.h"
+#ifdef Q_OS_MAC
+#include "qeventdispatcher_mac_p.h"
+#endif
 
 #include <QtCore/QAbstractEventDispatcher>
 #include <QtCore/private/qcoreapplication_p.h>
@@ -245,7 +248,11 @@ void QGuiApplicationPrivate::createEventDispatcher()
         eventDispatcher = new QPAEventDispatcherGlib(q);
     else
 #endif
-    eventDispatcher = new QEventDispatcherQPA(q);
+#ifdef Q_OS_MAC
+        eventDispatcher = new QEventDispatcherMac(q);
+#else
+        eventDispatcher = new QEventDispatcherQPA(q);
+#endif
 }
 
 void QGuiApplicationPrivate::init()
index 5a980a8..9ad9197 100644 (file)
@@ -7,7 +7,6 @@ OBJECTIVE_SOURCES = main.mm \
     qcocoawindowsurface.mm \
     qcocoawindow.mm \
     qnsview.mm \
-    qcocoaeventloopintegration.mm \
     qcocoaautoreleasepool.mm \
     qnswindowdelegate.mm \
     qcocoaglcontext.mm \
@@ -18,7 +17,6 @@ OBJECTIVE_HEADERS = qcocoaintegration.h \
     qcocoawindowsurface.h \
     qcocoawindow.h \
     qnsview.h \
-    qcocoaeventloopintegration.h \
     qcocoaautoreleasepool.h \
     qnswindowdelegate.h \
     qcocoaglcontext.h \
diff --git a/src/plugins/platforms/cocoa/qcocoaeventloopintegration.h b/src/plugins/platforms/cocoa/qcocoaeventloopintegration.h
deleted file mode 100644 (file)
index 5765483..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QCOCAEVENTLOOPINTEGRATION_H
-#define QCOCAEVENTLOOPINTEGRATION_H
-
-#include <Cocoa/Cocoa.h>
-
-#include <QPlatformEventLoopIntegration>
-
-
-class QCocoaEventLoopIntegration : public QPlatformEventLoopIntegration
-{
-public:
-    QCocoaEventLoopIntegration();
-    void startEventLoop();
-    void quitEventLoop();
-    void qtNeedsToProcessEvents();
-
-private:
-    CFRunLoopSourceContext m_sourceContext;
-    CFRunLoopTimerContext m_timerContext;
-    CFRunLoopSourceRef m_source;
-};
-
-#endif // QCOCAEVENTLOOPINTEGRATION_H
-
diff --git a/src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm b/src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm
deleted file mode 100644 (file)
index b4dc01e..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qcocoaeventloopintegration.h"
-
-#import <Cocoa/Cocoa.h>
-
-#include "qcocoaautoreleasepool.h"
-
-#include <QtCore/QElapsedTimer>
-
-void wakeupCallback ( void * ) {
-    QPlatformEventLoopIntegration::processEvents();
-}
-
-void timerCallback( CFRunLoopTimerRef timer, void *info)
-{
-    QPlatformEventLoopIntegration::processEvents();
-    QCocoaEventLoopIntegration *eventLoopIntegration =
-            static_cast<QCocoaEventLoopIntegration *>(info);
-    qint64 nextTime = eventLoopIntegration->nextTimerEvent();
-    CFAbsoluteTime nexttime = CFAbsoluteTimeGetCurrent();
-    nexttime = nexttime + (double(nextTime)/1000);
-    CFRunLoopTimerSetNextFireDate(timer,nexttime);
-}
-
-QCocoaEventLoopIntegration::QCocoaEventLoopIntegration() :
-    QPlatformEventLoopIntegration()
-{
-    [NSApplication sharedApplication];
-    m_sourceContext.version = 0;
-    m_sourceContext.info = this;
-    m_sourceContext.retain = 0;
-    m_sourceContext.release = 0;
-    m_sourceContext.copyDescription = 0;
-    m_sourceContext.equal = 0;
-    m_sourceContext.hash = 0;
-    m_sourceContext.schedule = 0;
-    m_sourceContext.cancel = 0;
-    m_sourceContext.perform = wakeupCallback;
-
-    m_source = CFRunLoopSourceCreate(0,0,&m_sourceContext);
-    CFRunLoopAddSource(CFRunLoopGetMain(),m_source,kCFRunLoopCommonModes);
-
-    m_timerContext.version = 0;
-    m_timerContext.info = this;
-    m_timerContext.retain = 0;
-    m_timerContext.release = 0;
-    m_timerContext.copyDescription = 0;
-    CFAbsoluteTime fireDate = CFAbsoluteTimeGetCurrent ();
-    CFTimeInterval interval = 30;
-
-    CFRunLoopTimerRef m_timerSource = CFRunLoopTimerCreate(0,fireDate,interval,0,0,timerCallback,&m_timerContext);
-    CFRunLoopAddTimer(CFRunLoopGetMain(),m_timerSource,kCFRunLoopCommonModes);
-}
-
-void QCocoaEventLoopIntegration::startEventLoop()
-{
-    [[NSApplication sharedApplication] run];
-}
-
-void QCocoaEventLoopIntegration::quitEventLoop()
-{
-    [[NSApplication sharedApplication] terminate:nil];
-}
-
-void QCocoaEventLoopIntegration::qtNeedsToProcessEvents()
-{
-    CFRunLoopSourceSignal(m_source);
-}
-
index 809e912..3e705e7 100644 (file)
@@ -84,7 +84,6 @@ public:
 
     QPlatformFontDatabase *fontDatabase() const;
 
-    QPlatformEventLoopIntegration *createEventLoopIntegration() const;
     QPlatformNativeInterface *nativeInterface() const;
 private:
     QList<QPlatformScreen *> mScreens;
index a3cda6b..42ec268 100644 (file)
@@ -43,7 +43,6 @@
 
 #include "qcocoawindow.h"
 #include "qcocoawindowsurface.h"
-#include "qcocoaeventloopintegration.h"
 #include "qcocoanativeinterface.h"
 
 #include "qbasicunixfontdatabase.h"
@@ -124,11 +123,6 @@ QPlatformFontDatabase *QCocoaIntegration::fontDatabase() const
     return mFontDb;
 }
 
-QPlatformEventLoopIntegration *QCocoaIntegration::createEventLoopIntegration() const
-{
-    return new QCocoaEventLoopIntegration();
-}
-
 QPlatformNativeInterface *QCocoaIntegration::nativeInterface() const
 {
     return new QCocoaNativeInterface();