diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2011-05-04 12:50:14 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@nokia.com> | 2011-05-04 12:50:14 +0200 |
commit | 401f078386a8b5a87a58e237de7be9a2f9a045ba (patch) | |
tree | 462d6e4b6b7ca0d79166f34524c1661471bc68eb /src/gui/kernel/qguiapplication.cpp | |
parent | 004700532ab635cf8e5240c5674b2aaeeb601b95 (diff) |
split kernel/ up according to the future library split
Create a guikernel/ directory that contains the files that'll go
into libQtGui. What remains in kernel/ will go into QtWidgets.
In addition to that image/, painting/ and text will end up
int QtGui.
Diffstat (limited to 'src/gui/kernel/qguiapplication.cpp')
-rw-r--r-- | src/gui/kernel/qguiapplication.cpp | 925 |
1 files changed, 0 insertions, 925 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp deleted file mode 100644 index 52303b929f..0000000000 --- a/src/gui/kernel/qguiapplication.cpp +++ /dev/null @@ -1,925 +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 QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, 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. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qguiapplication.h" - -#include "private/qguiapplication_p.h" -#include "private/qplatformintegrationfactory_qpa_p.h" -#include "private/qevent_p.h" - -#if !defined(QT_NO_GLIB) -#include "qeventdispatcher_glib_qpa_p.h" -#endif -#include "qeventdispatcher_qpa_p.h" - -#include <QtCore/QAbstractEventDispatcher> -#include <QtCore/private/qcoreapplication_p.h> -#include <QtCore/private/qabstracteventdispatcher_p.h> -#include <QtCore/qmutex.h> -#include <QtDebug> - -#include <QtGui/QPlatformIntegration> -#include <QtGui/QGenericPluginFactory> - -#include <QWindowSystemInterface> -#include "private/qwindowsysteminterface_qpa_p.h" -#include "private/qwindow_p.h" -#include "private/qkeymapper_p.h" - -#ifndef QT_NO_CLIPBOARD -#include <QtGui/QClipboard> -#endif - -QT_BEGIN_NAMESPACE - -Qt::MouseButtons QGuiApplicationPrivate::mouse_buttons = Qt::NoButton; -Qt::KeyboardModifiers QGuiApplicationPrivate::modifier_buttons = Qt::NoModifier; - -int QGuiApplicationPrivate::keyboard_input_time = 0; -int QGuiApplicationPrivate::mouse_double_click_time = 0; - -QPlatformIntegration *QGuiApplicationPrivate::platform_integration = 0; - -QWidget *qt_button_down = 0; // widget got last button-down - -bool QGuiApplicationPrivate::app_do_modal = false; - -int qt_last_x = 0; -int qt_last_y = 0; -QPointer<QWidget> QGuiApplicationPrivate::qt_last_mouse_receiver = 0; - -QWidgetList QGuiApplicationPrivate::qt_modal_stack; - -Qt::MouseButtons QGuiApplicationPrivate::buttons = Qt::NoButton; -ulong QGuiApplicationPrivate::mousePressTime = 0; -Qt::MouseButton QGuiApplicationPrivate::mousePressButton = Qt::NoButton; -int QGuiApplicationPrivate::mousePressX = 0; -int QGuiApplicationPrivate::mousePressY = 0; -int QGuiApplicationPrivate::mouse_double_click_distance = 5; - -static Qt::LayoutDirection layout_direction = Qt::LeftToRight; -static bool force_reverse = false; - -QGuiApplicationPrivate *QGuiApplicationPrivate::self = 0; - -#ifndef QT_NO_CLIPBOARD -QClipboard *QGuiApplicationPrivate::qt_clipboard = 0; -#endif - -Q_GLOBAL_STATIC(QMutex, applicationFontMutex) -QFont *QGuiApplicationPrivate::app_font = 0; - -static bool qt_detectRTLLanguage() -{ - return force_reverse ^ - (QApplication::tr("QT_LAYOUT_DIRECTION", - "Translate this string to the string 'LTR' in left-to-right" - " languages or to 'RTL' in right-to-left languages (such as Hebrew" - " and Arabic) to get proper widget layout.") == QLatin1String("RTL")); -} - - -QGuiApplication::QGuiApplication(int &argc, char **argv, int flags) - : QCoreApplication(*new QGuiApplicationPrivate(argc, argv, flags)) -{ - d_func()->init(); - - QCoreApplicationPrivate::eventDispatcher->startingUp(); -} - -QGuiApplication::QGuiApplication(QGuiApplicationPrivate &p) - : QCoreApplication(p) -{ - d_func()->init(); -} - -QGuiApplication::~QGuiApplication() -{ - Q_D(QGuiApplication); - // flush clipboard contents - if (QGuiApplicationPrivate::qt_clipboard) { - QEvent event(QEvent::Clipboard); - QGuiApplication::sendEvent(QGuiApplicationPrivate::qt_clipboard, &event); - } - - d->eventDispatcher->closingDown(); - d->eventDispatcher = 0; - - delete QGuiApplicationPrivate::qt_clipboard; - QGuiApplicationPrivate::qt_clipboard = 0; -} - -QGuiApplicationPrivate::QGuiApplicationPrivate(int &argc, char **argv, int flags) - : QCoreApplicationPrivate(argc, argv, flags) -{ - self = this; -} - -static void init_platform(const QString &name, const QString &platformPluginPath) -{ - QGuiApplicationPrivate::platform_integration = QPlatformIntegrationFactory::create(name, platformPluginPath); - if (!QGuiApplicationPrivate::platform_integration) { - QStringList keys = QPlatformIntegrationFactory::keys(platformPluginPath); - QString fatalMessage = - QString::fromLatin1("Failed to load platform plugin \"%1\". Available platforms are: \n").arg(name); - foreach(QString key, keys) { - fatalMessage.append(key + QString::fromLatin1("\n")); - } - qFatal("%s", fatalMessage.toLocal8Bit().constData()); - - } - -} - -static void init_plugins(const QList<QByteArray> pluginList) -{ - for (int i = 0; i < pluginList.count(); ++i) { - QByteArray pluginSpec = pluginList.at(i); - qDebug() << "init_plugins" << i << pluginSpec; - int colonPos = pluginSpec.indexOf(':'); - QObject *plugin; - if (colonPos < 0) - plugin = QGenericPluginFactory::create(QLatin1String(pluginSpec), QString()); - else - plugin = QGenericPluginFactory::create(QLatin1String(pluginSpec.mid(0, colonPos)), - QLatin1String(pluginSpec.mid(colonPos+1))); - qDebug() << " created" << plugin; - } -} - -void QGuiApplicationPrivate::createEventDispatcher() -{ - Q_Q(QGuiApplication); -#if !defined(QT_NO_GLIB) - if (qgetenv("QT_NO_GLIB").isEmpty() && QEventDispatcherGlib::versionSupported()) - eventDispatcher = new QPAEventDispatcherGlib(q); - else -#endif - eventDispatcher = new QEventDispatcherQPA(q); -} - -void QGuiApplicationPrivate::init() -{ - QList<QByteArray> pluginList; - QString platformPluginPath = QLatin1String(qgetenv("QT_QPA_PLATFORM_PLUGIN_PATH")); - QByteArray platformName; -#ifdef QT_QPA_DEFAULT_PLATFORM_NAME - platformName = QT_QPA_DEFAULT_PLATFORM_NAME; -#endif - QByteArray platformNameEnv = qgetenv("QT_QPA_PLATFORM"); - if (!platformNameEnv.isEmpty()) { - platformName = platformNameEnv; - } - - // Get command line params - - int j = argc ? 1 : 0; - for (int i=1; i<argc; i++) { - if (argv[i] && *argv[i] != '-') { - argv[j++] = argv[i]; - continue; - } - QByteArray arg = argv[i]; - if (arg == "-platformpluginpath") { - if (++i < argc) - platformPluginPath = QLatin1String(argv[i]); - } else if (arg == "-platform") { - if (++i < argc) - platformName = argv[i]; - } else if (arg == "-plugin") { - if (++i < argc) - pluginList << argv[i]; - } else if (arg == "-reverse") { - force_reverse = true; - QGuiApplication::setLayoutDirection(Qt::RightToLeft); - } else { - argv[j++] = argv[i]; - } - } - - argv[j] = 0; - argc = j; - -#if 0 - QByteArray pluginEnv = qgetenv("QT_QPA_PLUGINS"); - if (!pluginEnv.isEmpty()) { - pluginList.append(pluginEnv.split(';')); - } -#endif - - init_platform(QLatin1String(platformName), platformPluginPath); - init_plugins(pluginList); - - QFont::initialize(); - - is_app_running = true; -} - -QGuiApplicationPrivate::~QGuiApplicationPrivate() -{ - delete platform_integration; - platform_integration = 0; - - is_app_closing = true; - is_app_running = false; - - QFont::cleanup(); - - layout_direction = Qt::LeftToRight; -} - -#if 0 -#ifndef QT_NO_CURSOR -QCursor *overrideCursor(); -void setOverrideCursor(const QCursor &); -void changeOverrideCursor(const QCursor &); -void restoreOverrideCursor(); -#endif - -static QFont font(); -static QFont font(const QWidget*); -static QFont font(const char *className); -static void setFont(const QFont &, const char* className = 0); -static QFontMetrics fontMetrics(); - -#ifndef QT_NO_CLIPBOARD -static QClipboard *clipboard(); -#endif -#endif - -Qt::KeyboardModifiers QGuiApplication::keyboardModifiers() -{ - return QGuiApplicationPrivate::modifier_buttons; -} - -Qt::MouseButtons QGuiApplication::mouseButtons() -{ - return QGuiApplicationPrivate::mouse_buttons; -} - -void QGuiApplication::setDoubleClickInterval(int ms) -{ - QGuiApplicationPrivate::mouse_double_click_time = ms; -} - -int QGuiApplication::doubleClickInterval() -{ - return QGuiApplicationPrivate::mouse_double_click_time; -} - -void QGuiApplication::setKeyboardInputInterval(int ms) -{ - QGuiApplicationPrivate::keyboard_input_time = ms; -} - -int QGuiApplication::keyboardInputInterval() -{ - return QGuiApplicationPrivate::keyboard_input_time; -} - -QPlatformNativeInterface *QGuiApplication::platformNativeInterface() -{ - QPlatformIntegration *pi = QGuiApplicationPrivate::platformIntegration(); - return pi->nativeInterface(); -} - -int QGuiApplication::exec() -{ - return QCoreApplication::exec(); -} - -bool QGuiApplication::notify(QObject *object, QEvent *event) -{ - return QCoreApplication::notify(object, event); -} - -bool QGuiApplication::event(QEvent *e) -{ - if(e->type() == QEvent::LanguageChange) { - setLayoutDirection(qt_detectRTLLanguage()?Qt::RightToLeft:Qt::LeftToRight); - } - return QCoreApplication::event(e); -} - -bool QGuiApplication::compressEvent(QEvent *event, QObject *receiver, QPostEventList *postedEvents) -{ - return QCoreApplication::compressEvent(event, receiver, postedEvents); -} - -void QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *e) -{ - switch(e->type) { - case QWindowSystemInterfacePrivate::Mouse: - QGuiApplicationPrivate::processMouseEvent(static_cast<QWindowSystemInterfacePrivate::MouseEvent *>(e)); - break; - case QWindowSystemInterfacePrivate::Wheel: - QGuiApplicationPrivate::processWheelEvent(static_cast<QWindowSystemInterfacePrivate::WheelEvent *>(e)); - break; - case QWindowSystemInterfacePrivate::Key: - QGuiApplicationPrivate::processKeyEvent(static_cast<QWindowSystemInterfacePrivate::KeyEvent *>(e)); - break; - case QWindowSystemInterfacePrivate::Touch: - QGuiApplicationPrivate::processTouchEvent(static_cast<QWindowSystemInterfacePrivate::TouchEvent *>(e)); - break; - case QWindowSystemInterfacePrivate::GeometryChange: - QGuiApplicationPrivate::processGeometryChangeEvent(static_cast<QWindowSystemInterfacePrivate::GeometryChangeEvent*>(e)); - break; - case QWindowSystemInterfacePrivate::Enter: - QGuiApplicationPrivate::processEnterEvent(static_cast<QWindowSystemInterfacePrivate::EnterEvent *>(e)); - break; - case QWindowSystemInterfacePrivate::Leave: - QGuiApplicationPrivate::processLeaveEvent(static_cast<QWindowSystemInterfacePrivate::LeaveEvent *>(e)); - break; - case QWindowSystemInterfacePrivate::ActivatedWindow: - QGuiApplicationPrivate::processActivatedEvent(static_cast<QWindowSystemInterfacePrivate::ActivatedWindowEvent *>(e)); - break; - case QWindowSystemInterfacePrivate::Close: - QGuiApplicationPrivate::processCloseEvent( - static_cast<QWindowSystemInterfacePrivate::CloseEvent *>(e)); - break; - case QWindowSystemInterfacePrivate::ScreenCountChange: - QGuiApplicationPrivate::reportScreenCount( - static_cast<QWindowSystemInterfacePrivate::ScreenCountEvent *>(e)); - break; - case QWindowSystemInterfacePrivate::ScreenGeometry: - QGuiApplicationPrivate::reportGeometryChange( - static_cast<QWindowSystemInterfacePrivate::ScreenGeometryEvent *>(e)); - break; - case QWindowSystemInterfacePrivate::ScreenAvailableGeometry: - QGuiApplicationPrivate::reportAvailableGeometryChange( - static_cast<QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent *>(e)); - break; - default: - qWarning() << "Unknown user input event type:" << e->type; - break; - } -} - -void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent *e) -{ - // qDebug() << "handleMouseEvent" << tlw << ev.pos() << ev.globalPos() << hex << ev.buttons(); - static QWeakPointer<QWidget> implicit_mouse_grabber; - - QEvent::Type type; - // move first - Qt::MouseButtons stateChange = e->buttons ^ buttons; - if (e->globalPos != QPoint(qt_last_x, qt_last_y) && (stateChange != Qt::NoButton)) { - QWindowSystemInterfacePrivate::MouseEvent * newMouseEvent = - new QWindowSystemInterfacePrivate::MouseEvent(e->window.data(), e->timestamp, e->localPos, e->globalPos, e->buttons); - QWindowSystemInterfacePrivate::windowSystemEventQueue.prepend(newMouseEvent); // just in case the move triggers a new event loop - stateChange = Qt::NoButton; - } - - QWindow *window = e->window.data(); - - QWidget * tlw = 0;//window ? window->widget() : 0; - - QPoint localPoint = e->localPos; - QPoint globalPoint = e->globalPos; - QWidget *mouseWindow = tlw; - - Qt::MouseButton button = Qt::NoButton; - - if (qt_last_x != globalPoint.x() || qt_last_y != globalPoint.y()) { - type = QEvent::MouseMove; - qt_last_x = globalPoint.x(); - qt_last_y = globalPoint.y(); - if (qAbs(globalPoint.x() - mousePressX) > mouse_double_click_distance|| - qAbs(globalPoint.y() - mousePressY) > mouse_double_click_distance) - mousePressButton = Qt::NoButton; - } - else { // check to see if a new button has been pressed/released - for (int check = Qt::LeftButton; - check <= Qt::XButton2; - check = check << 1) { - if (check & stateChange) { - button = Qt::MouseButton(check); - break; - } - } - if (button == Qt::NoButton) { - // Ignore mouse events that don't change the current state - return; - } - buttons = e->buttons; - if (button & e->buttons) { - if ((e->timestamp - mousePressTime) < static_cast<ulong>(QGuiApplication::doubleClickInterval()) && button == mousePressButton) { - type = QEvent::MouseButtonDblClick; - mousePressButton = Qt::NoButton; - } - else { - type = QEvent::MouseButtonPress; - mousePressTime = e->timestamp; - mousePressButton = button; - mousePressX = qt_last_x; - mousePressY = qt_last_y; - } - } - else - type = QEvent::MouseButtonRelease; - } - - - if (window && !tlw) { - QMouseEvent ev(type, localPoint, globalPoint, button, buttons, QGuiApplication::keyboardModifiers()); - QGuiApplication::sendSpontaneousEvent(window, &ev); - return; - } - -#if 0 - if (self->inPopupMode()) { - //popup mouse handling is magical... - mouseWindow = qApp->activePopupWidget(); - - implicit_mouse_grabber.clear(); - //### how should popup mode and implicit mouse grab interact? - - } else if (tlw && app_do_modal && !qt_try_modal(tlw, QEvent::MouseButtonRelease) ) { - //even if we're blocked by modality, we should deliver the mouse release event.. - //### this code is not completely correct: multiple buttons can be pressed simultaneously - if (!(implicit_mouse_grabber && buttons == Qt::NoButton)) { - //qDebug() << "modal blocked mouse event to" << tlw; - return; - } - } -#endif - -#if 0 - // find the tlw if we didn't get it from the plugin - if (!mouseWindow) { - mouseWindow = QGuiApplication::topLevelAt(globalPoint); - } - - if (!mouseWindow && !implicit_mouse_grabber) - mouseWindow = QGuiApplication::desktop(); - - if (mouseWindow && mouseWindow != tlw) { - //we did not get a sensible localPoint from the window system, so let's calculate it - localPoint = mouseWindow->mapFromGlobal(globalPoint); - } -#endif - - // which child should have it? - QWidget *mouseWidget = mouseWindow; - if (mouseWindow) { - QWidget *w = mouseWindow->childAt(localPoint); - if (w) { - mouseWidget = w; - } - } - - //handle implicit mouse grab - if (type == QEvent::MouseButtonPress && !implicit_mouse_grabber) { - implicit_mouse_grabber = mouseWidget; - - Q_ASSERT(mouseWindow); - mouseWindow->activateWindow(); //focus - } else if (implicit_mouse_grabber) { - mouseWidget = implicit_mouse_grabber.data(); - mouseWindow = mouseWidget->window(); -#if 0 - if (mouseWindow != tlw) - localPoint = mouseWindow->mapFromGlobal(globalPoint); -#endif - } - - if (!mouseWidget) - return; - - Q_ASSERT(mouseWidget); - - //localPoint is local to mouseWindow, but it needs to be local to mouseWidget - localPoint = mouseWidget->mapFrom(mouseWindow, localPoint); - - if (buttons == Qt::NoButton) { - //qDebug() << "resetting mouse grabber"; - implicit_mouse_grabber.clear(); - } - -#if 0 - if (mouseWidget != qt_last_mouse_receiver) { -// dispatchEnterLeave(mouseWidget, qt_last_mouse_receiver); - qt_last_mouse_receiver = mouseWidget; - } -#endif - - // Remember, we might enter a modal event loop when sending the event, - // so think carefully before adding code below this point. - - // qDebug() << "sending mouse ev." << ev.type() << localPoint << globalPoint << ev.button() << ev.buttons() << mouseWidget << "mouse grabber" << implicit_mouse_grabber; - - QMouseEvent ev(type, localPoint, globalPoint, button, buttons, QGuiApplication::keyboardModifiers()); - -#if 0 - QList<QWeakPointer<QPlatformCursor> > cursors = QPlatformCursorPrivate::getInstances(); - foreach (QWeakPointer<QPlatformCursor> cursor, cursors) { - if (cursor) - cursor.data()->pointerEvent(ev); - } -#endif - -// int oldOpenPopupCount = openPopupCount; - QGuiApplication::sendSpontaneousEvent(mouseWidget, &ev); - -#if 0 -#ifndef QT_NO_CONTEXTMENU - if (type == QEvent::MouseButtonPress && button == Qt::RightButton && (openPopupCount == oldOpenPopupCount)) { - QContextMenuEvent e(QContextMenuEvent::Mouse, localPoint, globalPoint, QGuiApplication::keyboardModifiers()); - QGuiApplication::sendSpontaneousEvent(mouseWidget, &e); - } -#endif // QT_NO_CONTEXTMENU -#endif -} - - -//### there's a lot of duplicated logic here -- refactoring required! - -void QGuiApplicationPrivate::processWheelEvent(QWindowSystemInterfacePrivate::WheelEvent *e) -{ -// QPoint localPoint = ev.pos(); - QPoint globalPoint = e->globalPos; -// bool trustLocalPoint = !!tlw; //is there something the local point can be local to? - - qt_last_x = globalPoint.x(); - qt_last_y = globalPoint.y(); - - QWindow *window = e->window.data(); - if (!window) - return; - - QWidget *mouseWidget = 0;//window ? window->widget() : 0; - - // find the tlw if we didn't get it from the plugin -#if 0 - if (!mouseWindow) { - mouseWindow = QGuiApplication::topLevelAt(globalPoint); - } -#endif - - if (!mouseWidget) { - QWheelEvent ev(e->localPos, e->globalPos, e->delta, buttons, QGuiApplication::keyboardModifiers(), - e->orient); - QGuiApplication::sendSpontaneousEvent(window, &ev); - return; - } - -#if 0 - if (app_do_modal && !qt_try_modal(mouseWindow, QEvent::Wheel) ) { - qDebug() << "modal blocked wheel event" << mouseWindow; - return; - } - QPoint p = mouseWindow->mapFromGlobal(globalPoint); - QWidget *w = mouseWindow->childAt(p); - if (w) { - mouseWidget = w; - p = mouseWidget->mapFromGlobal(globalPoint); - } -#endif - - QWheelEvent ev(e->localPos, e->globalPos, e->delta, buttons, QGuiApplication::keyboardModifiers(), - e->orient); - QGuiApplication::sendSpontaneousEvent(mouseWidget, &ev); -} - - - -// Remember, Qt convention is: keyboard state is state *before* - -void QGuiApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent *e) -{ - QWindow *window = e->window.data(); - if (!window) - return; - - QObject *target = window;//window->widget() ? static_cast<QObject *>(window->widget()) : static_cast<QObject *>(window); - -#if 0 - QWidget *focusW = 0; - if (self->inPopupMode()) { - QWidget *popupW = qApp->activePopupWidget(); - focusW = popupW->focusWidget() ? popupW->focusWidget() : popupW; - } - if (!focusW) - focusW = QGuiApplication::focusWidget(); - if (!focusW) - focusW = window->widget(); - if (!focusW) - focusW = QGuiApplication::activeWindow(); -#endif - - //qDebug() << "handleKeyEvent" << hex << e->key() << e->modifiers() << e->text() << "widget" << focusW; - -#if 0 - if (!focusW) - return; - if (app_do_modal && !qt_try_modal(focusW, e->keyType)) - return; -#endif - - if (e->nativeScanCode || e->nativeVirtualKey || e->nativeModifiers) { - QKeyEventEx ev(e->keyType, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount, - e->nativeScanCode, e->nativeVirtualKey, e->nativeModifiers); - QGuiApplication::sendSpontaneousEvent(target, &ev); - } else { - QKeyEvent ev(e->keyType, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount); - QGuiApplication::sendSpontaneousEvent(target, &ev); - } -} - -void QGuiApplicationPrivate::processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *) -{ -// QGuiApplicationPrivate::dispatchEnterLeave(e->enter.data(),0); -// qt_last_mouse_receiver = e->enter.data(); -} - -void QGuiApplicationPrivate::processLeaveEvent(QWindowSystemInterfacePrivate::LeaveEvent *) -{ -// QGuiApplicationPrivate::dispatchEnterLeave(0,qt_last_mouse_receiver); - -#if 0 - if (e->leave.data() && !e->leave.data()->isAncestorOf(qt_last_mouse_receiver)) //(???) this should not happen - QGuiApplicationPrivate::dispatchEnterLeave(0, e->leave.data()); -#endif - qt_last_mouse_receiver = 0; - -} - -void QGuiApplicationPrivate::processActivatedEvent(QWindowSystemInterfacePrivate::ActivatedWindowEvent *) -{ -// QGuiApplication::setActiveWindow(e->activated.data()); -} - -void QGuiApplicationPrivate::processGeometryChangeEvent(QWindowSystemInterfacePrivate::GeometryChangeEvent *e) -{ - if (e->tlw.isNull()) - return; - - QWindow *window = e->tlw.data(); - if (!window) - return; - - QWidget *tlw = 0;//window->widget(); - QObject *target = tlw ? static_cast<QObject *>(tlw) : static_cast<QObject *>(window); - - QRect newRect = e->newGeometry; - QRect cr = tlw ? tlw->geometry() : window->geometry(); - - bool isResize = cr.size() != newRect.size(); - bool isMove = cr.topLeft() != newRect.topLeft(); - - if (tlw && !tlw->isWindow()) - return; //geo of native child widgets is controlled by lighthouse - //so we already have sent the events; besides this new rect - //is not mapped to parent - - - if (tlw) - tlw->data->crect = newRect; - else - window->d_func()->geometry = newRect; - - if (isResize) { - QResizeEvent e(newRect.size(), cr.size()); - QGuiApplication::sendSpontaneousEvent(target, &e); - if (tlw) - tlw->update(); - } - - if (isMove) { - //### frame geometry - QMoveEvent e(newRect.topLeft(), cr.topLeft()); - QGuiApplication::sendSpontaneousEvent(target, &e); - } -} - -void QGuiApplicationPrivate::processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e) -{ - if (e->window.isNull()) - return; - - QCloseEvent event; - QGuiApplication::sendSpontaneousEvent(e->window.data(), &event); -} - -void QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::TouchEvent *) -{ -// translateRawTouchEvent(e->widget.data(), e->devType, e->points); -} - -void QGuiApplicationPrivate::reportScreenCount(QWindowSystemInterfacePrivate::ScreenCountEvent *) -{ - // This operation only makes sense after the QGuiApplication constructor runs - if (QCoreApplication::startingUp()) - return; - - //QGuiApplication::desktop()->d_func()->updateScreenList(); - // signal anything listening for creation or deletion of screens - //QDesktopWidget *desktop = QGuiApplication::desktop(); - //emit desktop->screenCountChanged(e->count); -} - -void QGuiApplicationPrivate::reportGeometryChange(QWindowSystemInterfacePrivate::ScreenGeometryEvent *) -{ - // This operation only makes sense after the QGuiApplication constructor runs - if (QCoreApplication::startingUp()) - return; - -#if 0 - QGuiApplication::desktop()->d_func()->updateScreenList(); - - // signal anything listening for screen geometry changes - QDesktopWidget *desktop = QGuiApplication::desktop(); - emit desktop->resized(e->index); - - // make sure maximized and fullscreen windows are updated - QWidgetList list = QGuiApplication::topLevelWidgets(); - for (int i = list.size() - 1; i >= 0; --i) { - QWidget *w = list.at(i); - if (w->isFullScreen()) - w->d_func()->setFullScreenSize_helper(); - else if (w->isMaximized()) - w->d_func()->setMaxWindowState_helper(); - } -#endif -} - -void QGuiApplicationPrivate::reportAvailableGeometryChange( - QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent *) -{ - // This operation only makes sense after the QGuiApplication constructor runs - if (QCoreApplication::startingUp()) - return; - -#if 0 - QGuiApplication::desktop()->d_func()->updateScreenList(); - - // signal anything listening for screen geometry changes - QDesktopWidget *desktop = QGuiApplication::desktop(); - emit desktop->workAreaResized(e->index); - - // make sure maximized and fullscreen windows are updated - QWidgetList list = QGuiApplication::topLevelWidgets(); - for (int i = list.size() - 1; i >= 0; --i) { - QWidget *w = list.at(i); - if (w->isFullScreen()) - w->d_func()->setFullScreenSize_helper(); - else if (w->isMaximized()) - w->d_func()->setMaxWindowState_helper(); - } -#endif -} - -#ifndef QT_NO_CLIPBOARD -QClipboard * QGuiApplication::clipboard() -{ - if (QGuiApplicationPrivate::qt_clipboard == 0) { - if (!qApp) { - qWarning("QApplication: Must construct a QApplication before accessing a QClipboard"); - return 0; - } - QGuiApplicationPrivate::qt_clipboard = new QClipboard(0); - } - return QGuiApplicationPrivate::qt_clipboard; -} -#endif - -QFont QGuiApplication::font() -{ - QMutexLocker locker(applicationFontMutex()); - if (!QGuiApplicationPrivate::app_font) - QGuiApplicationPrivate::app_font = new QFont(QLatin1String("Helvetica")); - return *QGuiApplicationPrivate::app_font; -} - -void QGuiApplication::setFont(const QFont &font) -{ - QMutexLocker locker(applicationFontMutex()); - if (!QGuiApplicationPrivate::app_font) - QGuiApplicationPrivate::app_font = new QFont(font); - else - *QGuiApplicationPrivate::app_font = font; -} - -/*! - \fn bool QGuiApplication::isRightToLeft() - - Returns true if the application's layout direction is - Qt::RightToLeft; otherwise returns false. - - \sa layoutDirection(), isLeftToRight() -*/ - -/*! - \fn bool QGuiApplication::isLeftToRight() - - Returns true if the application's layout direction is - Qt::LeftToRight; otherwise returns false. - - \sa layoutDirection(), isRightToLeft() -*/ - -void QGuiApplicationPrivate::notifyLayoutDirectionChange() -{ -} - -/*! - \property QGuiApplication::layoutDirection - \brief the default layout direction for this application - - On system start-up, the default layout direction depends on the - application's language. - - \sa QWidget::layoutDirection, isLeftToRight(), isRightToLeft() - */ - -void QGuiApplication::setLayoutDirection(Qt::LayoutDirection direction) -{ - if (layout_direction == direction || direction == Qt::LayoutDirectionAuto) - return; - - layout_direction = direction; - - QGuiApplicationPrivate::self->notifyLayoutDirectionChange(); -} - -Qt::LayoutDirection QGuiApplication::layoutDirection() -{ - return layout_direction; -} - -/*! - \since 4.2 - - Returns the current keyboard input locale. -*/ -QLocale QGuiApplication::keyboardInputLocale() -{ - if (!QGuiApplicationPrivate::checkInstance("keyboardInputLocale")) - return QLocale::c(); - return qt_keymapper_private()->keyboardInputLocale; -} - -/*! - \since 4.2 - - Returns the current keyboard input direction. -*/ -Qt::LayoutDirection QGuiApplication::keyboardInputDirection() -{ - if (!QGuiApplicationPrivate::checkInstance("keyboardInputDirection")) - return Qt::LeftToRight; - return qt_keymapper_private()->keyboardInputDirection; -} - -/*! - \since 4.5 - \fn void QGuiApplication::fontDatabaseChanged() - - This signal is emitted when application fonts are loaded or removed. - - \sa QFontDatabase::addApplicationFont(), - QFontDatabase::addApplicationFontFromData(), - QFontDatabase::removeAllApplicationFonts(), - QFontDatabase::removeApplicationFont() -*/ - - -QT_END_NAMESPACE |