Add QEventDispatcherMac.

Create it directly in QGuiApplication for now, 
later on we'll move it to the cocoa plugin.
bb10
Morten Sorvig 2011-06-09 11:18:27 +02:00
parent 0a4c2eae4b
commit e3410908a2
9 changed files with 19 additions and 184 deletions

View 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;

View 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

View 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);
}

View 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()

View 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 \

View File

@ -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

View File

@ -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);
}

View File

@ -84,7 +84,6 @@ public:
QPlatformFontDatabase *fontDatabase() const;
QPlatformEventLoopIntegration *createEventLoopIntegration() const;
QPlatformNativeInterface *nativeInterface() const;
private:
QList<QPlatformScreen *> mScreens;

View 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();