From e3410908a2f81309dd31cc7389443623c3af61d2 Mon Sep 17 00:00:00 2001 From: Morten Sorvig Date: Thu, 9 Jun 2011 11:18:27 +0200 Subject: [PATCH] Add QEventDispatcherMac. Create it directly in QGuiApplication for now, later on we'll move it to the cocoa plugin. --- src/corelib/kernel/qcoreapplication.h | 1 + src/gui/kernel/kernel.pri | 8 ++ src/gui/kernel/qeventdispatcher_qpa.cpp | 2 + src/gui/kernel/qguiapplication.cpp | 9 +- src/plugins/platforms/cocoa/cocoa.pro | 2 - .../platforms/cocoa/qcocoaeventloopintegration.h | 65 ------------ .../platforms/cocoa/qcocoaeventloopintegration.mm | 109 --------------------- src/plugins/platforms/cocoa/qcocoaintegration.h | 1 - src/plugins/platforms/cocoa/qcocoaintegration.mm | 6 -- 9 files changed, 19 insertions(+), 184 deletions(-) delete mode 100644 src/plugins/platforms/cocoa/qcocoaeventloopintegration.h delete mode 100644 src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm diff --git a/src/corelib/kernel/qcoreapplication.h b/src/corelib/kernel/qcoreapplication.h index 1ccc84b..1dea357 100644 --- a/src/corelib/kernel/qcoreapplication.h +++ b/src/corelib/kernel/qcoreapplication.h @@ -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; diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index 7d31401..f166e4f 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -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 diff --git a/src/gui/kernel/qeventdispatcher_qpa.cpp b/src/gui/kernel/qeventdispatcher_qpa.cpp index b3f41bf..1a67fee 100644 --- a/src/gui/kernel/qeventdispatcher_qpa.cpp +++ b/src/gui/kernel/qeventdispatcher_qpa.cpp @@ -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); } diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 468e8c3..8112447 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -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 #include @@ -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() diff --git a/src/plugins/platforms/cocoa/cocoa.pro b/src/plugins/platforms/cocoa/cocoa.pro index 5a980a8..9ad9197 100644 --- a/src/plugins/platforms/cocoa/cocoa.pro +++ b/src/plugins/platforms/cocoa/cocoa.pro @@ -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 index 5765483..0000000 --- a/src/plugins/platforms/cocoa/qcocoaeventloopintegration.h +++ /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 - -#include - - -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 index b4dc01e..0000000 --- a/src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm +++ /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 - -#include "qcocoaautoreleasepool.h" - -#include - -void wakeupCallback ( void * ) { - QPlatformEventLoopIntegration::processEvents(); -} - -void timerCallback( CFRunLoopTimerRef timer, void *info) -{ - QPlatformEventLoopIntegration::processEvents(); - QCocoaEventLoopIntegration *eventLoopIntegration = - static_cast(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); -} - diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.h b/src/plugins/platforms/cocoa/qcocoaintegration.h index 809e912..3e705e7 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.h +++ b/src/plugins/platforms/cocoa/qcocoaintegration.h @@ -84,7 +84,6 @@ public: QPlatformFontDatabase *fontDatabase() const; - QPlatformEventLoopIntegration *createEventLoopIntegration() const; QPlatformNativeInterface *nativeInterface() const; private: QList mScreens; diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm index a3cda6b..42ec268 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.mm +++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm @@ -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(); -- 2.7.4