QGuiApplication refactor in progress.
Things are a bit broken now... At least wiggly runs :) (cherry picked from commit 6cdcf395ffe1e051d109a45ecd71141173a4a4c0)
This commit is contained in:
parent
dd34255948
commit
0d12e17d25
@ -575,23 +575,6 @@ void QCoreApplication::flush()
|
|||||||
\a argc must be greater than zero and \a argv must contain at least
|
\a argc must be greater than zero and \a argv must contain at least
|
||||||
one valid character string.
|
one valid character string.
|
||||||
*/
|
*/
|
||||||
QCoreApplication::QCoreApplication(int &argc, char **argv)
|
|
||||||
: QObject(*new QCoreApplicationPrivate(argc, argv, 0x040000))
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
QCoreApplicationPrivate::eventDispatcher->startingUp();
|
|
||||||
#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_LIBRARY)
|
|
||||||
// Refresh factoryloader, as text codecs are requested during lib path
|
|
||||||
// resolving process and won't be therefore properly loaded.
|
|
||||||
// Unknown if this is symbian specific issue.
|
|
||||||
QFactoryLoader::refreshAll();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_SYSTEMLOCALE)
|
|
||||||
d_func()->symbianInit();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
QCoreApplication::QCoreApplication(int &argc, char **argv, int _internal)
|
QCoreApplication::QCoreApplication(int &argc, char **argv, int _internal)
|
||||||
: QObject(*new QCoreApplicationPrivate(argc, argv, _internal))
|
: QObject(*new QCoreApplicationPrivate(argc, argv, _internal))
|
||||||
{
|
{
|
||||||
|
@ -84,16 +84,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(QT_BUILD_CORE_LIB) || defined(qdoc)
|
QCoreApplication(int &argc, char **argv, int = ApplicationFlags);
|
||||||
QCoreApplication(int &argc, char **argv); // ### Qt5 remove
|
|
||||||
#endif
|
|
||||||
#if !defined(qdoc)
|
|
||||||
QCoreApplication(int &argc, char **argv, int
|
|
||||||
#if !defined(QT_BUILD_CORE_LIB)
|
|
||||||
= ApplicationFlags
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
~QCoreApplication();
|
~QCoreApplication();
|
||||||
|
|
||||||
@ -217,6 +208,8 @@ private:
|
|||||||
friend class QEventDispatcherUNIXPrivate;
|
friend class QEventDispatcherUNIXPrivate;
|
||||||
friend class QApplication;
|
friend class QApplication;
|
||||||
friend class QApplicationPrivate;
|
friend class QApplicationPrivate;
|
||||||
|
friend class QGuiApplication;
|
||||||
|
friend class QGuiApplicationPrivate;
|
||||||
friend class QETWidget;
|
friend class QETWidget;
|
||||||
friend class Q3AccelManager;
|
friend class Q3AccelManager;
|
||||||
friend class QShortcutMap;
|
friend class QShortcutMap;
|
||||||
|
@ -228,6 +228,8 @@ qpa {
|
|||||||
kernel/qplatformclipboard_qpa.h \
|
kernel/qplatformclipboard_qpa.h \
|
||||||
kernel/qplatformnativeinterface_qpa.h \
|
kernel/qplatformnativeinterface_qpa.h \
|
||||||
kernel/qwindowformat_qpa.h \
|
kernel/qwindowformat_qpa.h \
|
||||||
|
kernel/qguiapplication_qpa.h \
|
||||||
|
kernel/qguiapplication_qpa_p.h \
|
||||||
kernel/qwindow_qpa.h
|
kernel/qwindow_qpa.h
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
@ -255,6 +257,7 @@ qpa {
|
|||||||
kernel/qplatformnativeinterface_qpa.cpp \
|
kernel/qplatformnativeinterface_qpa.cpp \
|
||||||
kernel/qsessionmanager_qpa.cpp \
|
kernel/qsessionmanager_qpa.cpp \
|
||||||
kernel/qwindowformat_qpa.cpp \
|
kernel/qwindowformat_qpa.cpp \
|
||||||
|
kernel/qguiapplication_qpa.cpp \
|
||||||
kernel/qwindow_qpa.cpp
|
kernel/qwindow_qpa.cpp
|
||||||
|
|
||||||
contains(QT_CONFIG, glib) {
|
contains(QT_CONFIG, glib) {
|
||||||
|
@ -172,7 +172,7 @@ bool QApplicationPrivate::autoSipEnabled = true;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
QApplicationPrivate::QApplicationPrivate(int &argc, char **argv, QApplication::Type type, int flags)
|
QApplicationPrivate::QApplicationPrivate(int &argc, char **argv, QApplication::Type type, int flags)
|
||||||
: QCoreApplicationPrivate(argc, argv, flags)
|
: QGuiApplicationPrivate(argc, argv, flags)
|
||||||
{
|
{
|
||||||
application_type = type;
|
application_type = type;
|
||||||
qt_appType = type;
|
qt_appType = type;
|
||||||
@ -454,9 +454,6 @@ QPalette *QApplicationPrivate::sys_pal = 0; // default system palette
|
|||||||
QPalette *QApplicationPrivate::set_pal = 0; // default palette set by programmer
|
QPalette *QApplicationPrivate::set_pal = 0; // default palette set by programmer
|
||||||
|
|
||||||
QGraphicsSystem *QApplicationPrivate::graphics_system = 0; // default graphics system
|
QGraphicsSystem *QApplicationPrivate::graphics_system = 0; // default graphics system
|
||||||
#if defined(Q_WS_QPA)
|
|
||||||
QPlatformIntegration *QApplicationPrivate::platform_integration = 0;
|
|
||||||
#endif
|
|
||||||
QString QApplicationPrivate::graphics_system_name; // graphics system id - for delayed initialization
|
QString QApplicationPrivate::graphics_system_name; // graphics system id - for delayed initialization
|
||||||
bool QApplicationPrivate::runtime_graphics_system = false;
|
bool QApplicationPrivate::runtime_graphics_system = false;
|
||||||
|
|
||||||
@ -729,11 +726,11 @@ void QApplicationPrivate::process_cmdline()
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
QApplication::QApplication(int &argc, char **argv)
|
QApplication::QApplication(int &argc, char **argv)
|
||||||
: QCoreApplication(*new QApplicationPrivate(argc, argv, GuiClient, 0x040000))
|
: QGuiApplication(*new QApplicationPrivate(argc, argv, GuiClient, 0x040000))
|
||||||
{ Q_D(QApplication); d->construct(); }
|
{ Q_D(QApplication); d->construct(); }
|
||||||
|
|
||||||
QApplication::QApplication(int &argc, char **argv, int _internal)
|
QApplication::QApplication(int &argc, char **argv, int _internal)
|
||||||
: QCoreApplication(*new QApplicationPrivate(argc, argv, GuiClient, _internal))
|
: QGuiApplication(*new QApplicationPrivate(argc, argv, GuiClient, _internal))
|
||||||
{ Q_D(QApplication); d->construct(); }
|
{ Q_D(QApplication); d->construct(); }
|
||||||
|
|
||||||
|
|
||||||
@ -763,11 +760,11 @@ QApplication::QApplication(int &argc, char **argv, int _internal)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
QApplication::QApplication(int &argc, char **argv, bool GUIenabled )
|
QApplication::QApplication(int &argc, char **argv, bool GUIenabled )
|
||||||
: QCoreApplication(*new QApplicationPrivate(argc, argv, GUIenabled ? GuiClient : Tty, 0x040000))
|
: QGuiApplication(*new QApplicationPrivate(argc, argv, GUIenabled ? GuiClient : Tty, 0x040000))
|
||||||
{ Q_D(QApplication); d->construct(); }
|
{ Q_D(QApplication); d->construct(); }
|
||||||
|
|
||||||
QApplication::QApplication(int &argc, char **argv, bool GUIenabled , int _internal)
|
QApplication::QApplication(int &argc, char **argv, bool GUIenabled , int _internal)
|
||||||
: QCoreApplication(*new QApplicationPrivate(argc, argv, GUIenabled ? GuiClient : Tty, _internal))
|
: QGuiApplication(*new QApplicationPrivate(argc, argv, GUIenabled ? GuiClient : Tty, _internal))
|
||||||
{ Q_D(QApplication); d->construct();}
|
{ Q_D(QApplication); d->construct();}
|
||||||
|
|
||||||
|
|
||||||
@ -786,11 +783,11 @@ QApplication::QApplication(int &argc, char **argv, bool GUIenabled , int _intern
|
|||||||
\c -qws option).
|
\c -qws option).
|
||||||
*/
|
*/
|
||||||
QApplication::QApplication(int &argc, char **argv, Type type)
|
QApplication::QApplication(int &argc, char **argv, Type type)
|
||||||
: QCoreApplication(*new QApplicationPrivate(argc, argv, type, 0x040000))
|
: QGuiApplication(*new QApplicationPrivate(argc, argv, type, 0x040000))
|
||||||
{ Q_D(QApplication); d->construct(); }
|
{ Q_D(QApplication); d->construct(); }
|
||||||
|
|
||||||
QApplication::QApplication(int &argc, char **argv, Type type , int _internal)
|
QApplication::QApplication(int &argc, char **argv, Type type , int _internal)
|
||||||
: QCoreApplication(*new QApplicationPrivate(argc, argv, type, _internal))
|
: QGuiApplication(*new QApplicationPrivate(argc, argv, type, _internal))
|
||||||
{ Q_D(QApplication); d->construct(); }
|
{ Q_D(QApplication); d->construct(); }
|
||||||
|
|
||||||
#if defined(Q_WS_X11) && !defined(QT_NO_EGL)
|
#if defined(Q_WS_X11) && !defined(QT_NO_EGL)
|
||||||
@ -897,7 +894,7 @@ static char *aargv[] = { (char*)"unknown", 0 };
|
|||||||
This function is only available on X11.
|
This function is only available on X11.
|
||||||
*/
|
*/
|
||||||
QApplication::QApplication(Display* dpy, Qt::HANDLE visual, Qt::HANDLE colormap)
|
QApplication::QApplication(Display* dpy, Qt::HANDLE visual, Qt::HANDLE colormap)
|
||||||
: QCoreApplication(*new QApplicationPrivate(aargc, aargv, GuiClient, 0x040000))
|
: QGuiApplication(*new QApplicationPrivate(aargc, aargv, GuiClient, 0x040000))
|
||||||
{
|
{
|
||||||
if (! dpy)
|
if (! dpy)
|
||||||
qWarning("QApplication: Invalid Display* argument");
|
qWarning("QApplication: Invalid Display* argument");
|
||||||
@ -906,7 +903,7 @@ QApplication::QApplication(Display* dpy, Qt::HANDLE visual, Qt::HANDLE colormap)
|
|||||||
}
|
}
|
||||||
|
|
||||||
QApplication::QApplication(Display* dpy, Qt::HANDLE visual, Qt::HANDLE colormap, int _internal)
|
QApplication::QApplication(Display* dpy, Qt::HANDLE visual, Qt::HANDLE colormap, int _internal)
|
||||||
: QCoreApplication(*new QApplicationPrivate(aargc, aargv, GuiClient, _internal))
|
: QGuiApplication(*new QApplicationPrivate(aargc, aargv, GuiClient, _internal))
|
||||||
{
|
{
|
||||||
if (! dpy)
|
if (! dpy)
|
||||||
qWarning("QApplication: Invalid Display* argument");
|
qWarning("QApplication: Invalid Display* argument");
|
||||||
@ -931,7 +928,7 @@ QApplication::QApplication(Display* dpy, Qt::HANDLE visual, Qt::HANDLE colormap,
|
|||||||
*/
|
*/
|
||||||
QApplication::QApplication(Display *dpy, int &argc, char **argv,
|
QApplication::QApplication(Display *dpy, int &argc, char **argv,
|
||||||
Qt::HANDLE visual, Qt::HANDLE colormap)
|
Qt::HANDLE visual, Qt::HANDLE colormap)
|
||||||
: QCoreApplication(*new QApplicationPrivate(argc, argv, GuiClient, 0x040000))
|
: QGuiApplication(*new QApplicationPrivate(argc, argv, GuiClient, 0x040000))
|
||||||
{
|
{
|
||||||
if (! dpy)
|
if (! dpy)
|
||||||
qWarning("QApplication: Invalid Display* argument");
|
qWarning("QApplication: Invalid Display* argument");
|
||||||
@ -941,7 +938,7 @@ QApplication::QApplication(Display *dpy, int &argc, char **argv,
|
|||||||
|
|
||||||
QApplication::QApplication(Display *dpy, int &argc, char **argv,
|
QApplication::QApplication(Display *dpy, int &argc, char **argv,
|
||||||
Qt::HANDLE visual, Qt::HANDLE colormap, int _internal)
|
Qt::HANDLE visual, Qt::HANDLE colormap, int _internal)
|
||||||
: QCoreApplication(*new QApplicationPrivate(argc, argv, GuiClient, _internal))
|
: QGuiApplication(*new QApplicationPrivate(argc, argv, GuiClient, _internal))
|
||||||
{
|
{
|
||||||
if (! dpy)
|
if (! dpy)
|
||||||
qWarning("QApplication: Invalid Display* argument");
|
qWarning("QApplication: Invalid Display* argument");
|
||||||
@ -1316,7 +1313,7 @@ bool QApplication::compressEvent(QEvent *event, QObject *receiver, QPostEventLis
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return QCoreApplication::compressEvent(event, receiver, postedEvents);
|
return QApplicationBase::compressEvent(event, receiver, postedEvents);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -2521,7 +2518,7 @@ bool QApplication::event(QEvent *e)
|
|||||||
d->toolTipFallAsleep.stop();
|
d->toolTipFallAsleep.stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return QCoreApplication::event(e);
|
return QApplicationBase::event(e);
|
||||||
}
|
}
|
||||||
#if !defined(Q_WS_X11)
|
#if !defined(Q_WS_X11)
|
||||||
|
|
||||||
@ -2898,6 +2895,7 @@ bool QApplicationPrivate::isBlockedByModal(QWidget *widget)
|
|||||||
if (QApplication::activePopupWidget() == widget)
|
if (QApplication::activePopupWidget() == widget)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
#if 0
|
||||||
for (int i = 0; i < qt_modal_stack->size(); ++i) {
|
for (int i = 0; i < qt_modal_stack->size(); ++i) {
|
||||||
QWidget *modalWidget = qt_modal_stack->at(i);
|
QWidget *modalWidget = qt_modal_stack->at(i);
|
||||||
|
|
||||||
@ -2976,6 +2974,7 @@ bool QApplicationPrivate::isBlockedByModal(QWidget *widget)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3753,7 +3752,7 @@ int QApplication::exec()
|
|||||||
#ifndef QT_NO_ACCESSIBILITY
|
#ifndef QT_NO_ACCESSIBILITY
|
||||||
QAccessible::setRootObject(qApp);
|
QAccessible::setRootObject(qApp);
|
||||||
#endif
|
#endif
|
||||||
return QCoreApplication::exec();
|
return QApplicationBase::exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \reimp
|
/*! \reimp
|
||||||
@ -5486,7 +5485,7 @@ uint QApplicationPrivate::currentPlatform(){
|
|||||||
|
|
||||||
bool qt_sendSpontaneousEvent(QObject *receiver, QEvent *event)
|
bool qt_sendSpontaneousEvent(QObject *receiver, QEvent *event)
|
||||||
{
|
{
|
||||||
return QCoreApplication::sendSpontaneousEvent(receiver, event);
|
return QApplicationBase::sendSpontaneousEvent(receiver, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,6 +58,9 @@
|
|||||||
# include <QtGui/qrgb.h>
|
# include <QtGui/qrgb.h>
|
||||||
# include <QtGui/qtransportauth_qws.h>
|
# include <QtGui/qtransportauth_qws.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef Q_WS_QPA
|
||||||
|
# include <QtGui/qguiapplication_qpa.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
QT_BEGIN_HEADER
|
QT_BEGIN_HEADER
|
||||||
|
|
||||||
@ -93,8 +96,13 @@ class QApplicationPrivate;
|
|||||||
#endif
|
#endif
|
||||||
#define qApp (static_cast<QApplication *>(QCoreApplication::instance()))
|
#define qApp (static_cast<QApplication *>(QCoreApplication::instance()))
|
||||||
|
|
||||||
|
#ifdef Q_WS_QPA
|
||||||
|
#define QApplicationBase QGuiApplication
|
||||||
|
#else
|
||||||
|
#define QApplicationBase QCoreApplication
|
||||||
|
#endif
|
||||||
|
|
||||||
class Q_GUI_EXPORT QApplication : public QCoreApplication
|
class Q_GUI_EXPORT QApplication : public QApplicationBase
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection)
|
Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection)
|
||||||
|
@ -80,6 +80,7 @@
|
|||||||
#include <QWindowSystemInterface>
|
#include <QWindowSystemInterface>
|
||||||
#include "qwindowsysteminterface_qpa_p.h"
|
#include "qwindowsysteminterface_qpa_p.h"
|
||||||
#include "QtGui/qplatformintegration_qpa.h"
|
#include "QtGui/qplatformintegration_qpa.h"
|
||||||
|
#include "QtGui/private/qguiapplication_qpa_p.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
@ -294,7 +295,11 @@ FontHash *qt_app_fonts_hash();
|
|||||||
typedef QHash<QByteArray, QPalette> PaletteHash;
|
typedef QHash<QByteArray, QPalette> PaletteHash;
|
||||||
PaletteHash *qt_app_palettes_hash();
|
PaletteHash *qt_app_palettes_hash();
|
||||||
|
|
||||||
|
#ifdef Q_WS_QPA
|
||||||
|
class Q_GUI_EXPORT QApplicationPrivate : public QGuiApplicationPrivate
|
||||||
|
#else
|
||||||
class Q_GUI_EXPORT QApplicationPrivate : public QCoreApplicationPrivate
|
class Q_GUI_EXPORT QApplicationPrivate : public QCoreApplicationPrivate
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
Q_DECLARE_PUBLIC(QApplication)
|
Q_DECLARE_PUBLIC(QApplication)
|
||||||
public:
|
public:
|
||||||
@ -325,14 +330,6 @@ public:
|
|||||||
{ return graphics_system; }
|
{ return graphics_system; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(Q_WS_QPA)
|
|
||||||
static QPlatformIntegration *platformIntegration()
|
|
||||||
{ return platform_integration; }
|
|
||||||
|
|
||||||
static QAbstractEventDispatcher *qt_qpa_core_dispatcher()
|
|
||||||
{ return QCoreApplication::instance()->d_func()->threadData->eventDispatcher; }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void createEventDispatcher();
|
void createEventDispatcher();
|
||||||
QString appName() const;
|
QString appName() const;
|
||||||
static void dispatchEnterLeave(QWidget *enter, QWidget *leave);
|
static void dispatchEnterLeave(QWidget *enter, QWidget *leave);
|
||||||
@ -433,9 +430,6 @@ public:
|
|||||||
static QGraphicsSystem *graphics_system;
|
static QGraphicsSystem *graphics_system;
|
||||||
static QString graphics_system_name;
|
static QString graphics_system_name;
|
||||||
static bool runtime_graphics_system;
|
static bool runtime_graphics_system;
|
||||||
#ifdef Q_WS_QPA
|
|
||||||
static QPlatformIntegration *platform_integration;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static QFont *app_font; // private for a reason! Always use QApplication::font() instead!
|
static QFont *app_font; // private for a reason! Always use QApplication::font() instead!
|
||||||
@ -493,32 +487,6 @@ public:
|
|||||||
static bool qt_mac_apply_settings();
|
static bool qt_mac_apply_settings();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Q_WS_QPA
|
|
||||||
static void processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent *e);
|
|
||||||
static void processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent *e);
|
|
||||||
static void processWheelEvent(QWindowSystemInterfacePrivate::WheelEvent *e);
|
|
||||||
static void processTouchEvent(QWindowSystemInterfacePrivate::TouchEvent *e);
|
|
||||||
|
|
||||||
static void processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e);
|
|
||||||
|
|
||||||
static void processGeometryChangeEvent(QWindowSystemInterfacePrivate::GeometryChangeEvent *e);
|
|
||||||
|
|
||||||
static void processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *e);
|
|
||||||
static void processLeaveEvent(QWindowSystemInterfacePrivate::LeaveEvent *e);
|
|
||||||
|
|
||||||
static void processActivatedEvent(QWindowSystemInterfacePrivate::ActivatedWindowEvent *e);
|
|
||||||
|
|
||||||
static void processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *e);
|
|
||||||
|
|
||||||
// static void reportScreenCount(int count);
|
|
||||||
static void reportScreenCount(QWindowSystemInterfacePrivate::ScreenCountEvent *e);
|
|
||||||
// static void reportGeometryChange(int screenIndex);
|
|
||||||
static void reportGeometryChange(QWindowSystemInterfacePrivate::ScreenGeometryEvent *e);
|
|
||||||
// static void reportAvailableGeometryChange(int screenIndex);
|
|
||||||
static void reportAvailableGeometryChange(QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent *e);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef Q_WS_QWS
|
#ifdef Q_WS_QWS
|
||||||
QPointer<QWSManager> last_manager;
|
QPointer<QWSManager> last_manager;
|
||||||
QWSServerCleaner qwsServerCleaner;
|
QWSServerCleaner qwsServerCleaner;
|
||||||
|
@ -71,71 +71,6 @@ QT_BEGIN_NAMESPACE
|
|||||||
static QString appName;
|
static QString appName;
|
||||||
static QString appFont;
|
static QString appFont;
|
||||||
|
|
||||||
QWidget *qt_button_down = 0; // widget got last button-down
|
|
||||||
|
|
||||||
static bool app_do_modal = false;
|
|
||||||
extern QWidgetList *qt_modal_stack; // stack of modal widgets
|
|
||||||
|
|
||||||
int qt_last_x = 0;
|
|
||||||
int qt_last_y = 0;
|
|
||||||
QPointer<QWidget> qt_last_mouse_receiver = 0;
|
|
||||||
|
|
||||||
static Qt::MouseButtons buttons = Qt::NoButton;
|
|
||||||
static ulong mousePressTime;
|
|
||||||
static Qt::MouseButton mousePressButton = Qt::NoButton;
|
|
||||||
static int mousePressX;
|
|
||||||
static int mousePressY;
|
|
||||||
static int mouse_double_click_distance = 5;
|
|
||||||
|
|
||||||
void QApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *e)
|
|
||||||
{
|
|
||||||
switch(e->type) {
|
|
||||||
case QWindowSystemInterfacePrivate::Mouse:
|
|
||||||
QApplicationPrivate::processMouseEvent(static_cast<QWindowSystemInterfacePrivate::MouseEvent *>(e));
|
|
||||||
break;
|
|
||||||
case QWindowSystemInterfacePrivate::Wheel:
|
|
||||||
QApplicationPrivate::processWheelEvent(static_cast<QWindowSystemInterfacePrivate::WheelEvent *>(e));
|
|
||||||
break;
|
|
||||||
case QWindowSystemInterfacePrivate::Key:
|
|
||||||
QApplicationPrivate::processKeyEvent(static_cast<QWindowSystemInterfacePrivate::KeyEvent *>(e));
|
|
||||||
break;
|
|
||||||
case QWindowSystemInterfacePrivate::Touch:
|
|
||||||
QApplicationPrivate::processTouchEvent(static_cast<QWindowSystemInterfacePrivate::TouchEvent *>(e));
|
|
||||||
break;
|
|
||||||
case QWindowSystemInterfacePrivate::GeometryChange:
|
|
||||||
QApplicationPrivate::processGeometryChangeEvent(static_cast<QWindowSystemInterfacePrivate::GeometryChangeEvent*>(e));
|
|
||||||
break;
|
|
||||||
case QWindowSystemInterfacePrivate::Enter:
|
|
||||||
QApplicationPrivate::processEnterEvent(static_cast<QWindowSystemInterfacePrivate::EnterEvent *>(e));
|
|
||||||
break;
|
|
||||||
case QWindowSystemInterfacePrivate::Leave:
|
|
||||||
QApplicationPrivate::processLeaveEvent(static_cast<QWindowSystemInterfacePrivate::LeaveEvent *>(e));
|
|
||||||
break;
|
|
||||||
case QWindowSystemInterfacePrivate::ActivatedWindow:
|
|
||||||
QApplicationPrivate::processActivatedEvent(static_cast<QWindowSystemInterfacePrivate::ActivatedWindowEvent *>(e));
|
|
||||||
break;
|
|
||||||
case QWindowSystemInterfacePrivate::Close:
|
|
||||||
QApplicationPrivate::processCloseEvent(
|
|
||||||
static_cast<QWindowSystemInterfacePrivate::CloseEvent *>(e));
|
|
||||||
break;
|
|
||||||
case QWindowSystemInterfacePrivate::ScreenCountChange:
|
|
||||||
QApplicationPrivate::reportScreenCount(
|
|
||||||
static_cast<QWindowSystemInterfacePrivate::ScreenCountEvent *>(e));
|
|
||||||
break;
|
|
||||||
case QWindowSystemInterfacePrivate::ScreenGeometry:
|
|
||||||
QApplicationPrivate::reportGeometryChange(
|
|
||||||
static_cast<QWindowSystemInterfacePrivate::ScreenGeometryEvent *>(e));
|
|
||||||
break;
|
|
||||||
case QWindowSystemInterfacePrivate::ScreenAvailableGeometry:
|
|
||||||
QApplicationPrivate::reportAvailableGeometryChange(
|
|
||||||
static_cast<QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent *>(e));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
qWarning() << "Unknown user input event type:" << e->type;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QApplicationPrivate::appName() const
|
QString QApplicationPrivate::appName() const
|
||||||
{
|
{
|
||||||
return QT_PREPEND_NAMESPACE(appName);
|
return QT_PREPEND_NAMESPACE(appName);
|
||||||
@ -190,14 +125,17 @@ static bool qt_try_modal(QWidget *widget, QEvent::Type type)
|
|||||||
|
|
||||||
void QApplicationPrivate::enterModal_sys(QWidget *widget)
|
void QApplicationPrivate::enterModal_sys(QWidget *widget)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
if (!qt_modal_stack)
|
if (!qt_modal_stack)
|
||||||
qt_modal_stack = new QWidgetList;
|
qt_modal_stack = new QWidgetList;
|
||||||
qt_modal_stack->insert(0, widget);
|
qt_modal_stack->insert(0, widget);
|
||||||
app_do_modal = true;
|
app_do_modal = true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void QApplicationPrivate::leaveModal_sys(QWidget *widget )
|
void QApplicationPrivate::leaveModal_sys(QWidget *widget )
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
if (qt_modal_stack && qt_modal_stack->removeAll(widget)) {
|
if (qt_modal_stack && qt_modal_stack->removeAll(widget)) {
|
||||||
if (qt_modal_stack->isEmpty()) {
|
if (qt_modal_stack->isEmpty()) {
|
||||||
delete qt_modal_stack;
|
delete qt_modal_stack;
|
||||||
@ -205,11 +143,15 @@ void QApplicationPrivate::leaveModal_sys(QWidget *widget )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
app_do_modal = qt_modal_stack != 0;
|
app_do_modal = qt_modal_stack != 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QApplicationPrivate::modalState()
|
bool QApplicationPrivate::modalState()
|
||||||
{
|
{
|
||||||
|
return false;
|
||||||
|
#if 0
|
||||||
return app_do_modal;
|
return app_do_modal;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void QApplicationPrivate::closePopup(QWidget *popup)
|
void QApplicationPrivate::closePopup(QWidget *popup)
|
||||||
@ -450,45 +392,6 @@ QPlatformNativeInterface *QApplication::platformNativeInterface()
|
|||||||
return pi->nativeInterface();
|
return pi->nativeInterface();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_platform(const QString &name, const QString &platformPluginPath)
|
|
||||||
{
|
|
||||||
QApplicationPrivate::platform_integration = QPlatformIntegrationFactory::create(name, platformPluginPath);
|
|
||||||
if (!QApplicationPrivate::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 cleanup_platform()
|
|
||||||
{
|
|
||||||
delete QApplicationPrivate::platform_integration;
|
|
||||||
QApplicationPrivate::platform_integration = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef QT_NO_QWS_INPUTMETHODS
|
#ifndef QT_NO_QWS_INPUTMETHODS
|
||||||
class QDummyInputContext : public QInputContext
|
class QDummyInputContext : public QInputContext
|
||||||
{
|
{
|
||||||
@ -504,74 +407,12 @@ public:
|
|||||||
};
|
};
|
||||||
#endif // QT_NO_QWS_INPUTMETHODS
|
#endif // QT_NO_QWS_INPUTMETHODS
|
||||||
|
|
||||||
void qt_init(QApplicationPrivate *priv, int type)
|
void qt_init(QApplicationPrivate *, int type)
|
||||||
{
|
{
|
||||||
Q_UNUSED(type);
|
Q_UNUSED(type);
|
||||||
|
|
||||||
qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
|
qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
|
||||||
char *p;
|
|
||||||
char **argv = priv->argv;
|
|
||||||
int argc = priv->argc;
|
|
||||||
|
|
||||||
if (argv && *argv) { //apparently, we allow people to pass 0 on the other platforms
|
|
||||||
p = strrchr(argv[0], '/');
|
|
||||||
appName = QString::fromLocal8Bit(p ? p + 1 : argv[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
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 == "-fn" || arg == "-font") {
|
|
||||||
if (++i < argc)
|
|
||||||
appFont = QString::fromLocal8Bit(argv[i]);
|
|
||||||
} else 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 {
|
|
||||||
argv[j++] = argv[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (j < priv->argc) {
|
|
||||||
priv->argv[j] = 0;
|
|
||||||
priv->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);
|
|
||||||
|
|
||||||
QColormap::initialize();
|
QColormap::initialize();
|
||||||
QFont::initialize();
|
|
||||||
#ifndef QT_NO_CURSOR
|
#ifndef QT_NO_CURSOR
|
||||||
// QCursorData::initialize();
|
// QCursorData::initialize();
|
||||||
#endif
|
#endif
|
||||||
@ -585,13 +426,10 @@ void qt_init(QApplicationPrivate *priv, int type)
|
|||||||
|
|
||||||
void qt_cleanup()
|
void qt_cleanup()
|
||||||
{
|
{
|
||||||
cleanup_platform();
|
|
||||||
|
|
||||||
QPixmapCache::clear();
|
QPixmapCache::clear();
|
||||||
#ifndef QT_NO_CURSOR
|
#ifndef QT_NO_CURSOR
|
||||||
QCursorData::cleanup();
|
QCursorData::cleanup();
|
||||||
#endif
|
#endif
|
||||||
QFont::cleanup();
|
|
||||||
QColormap::cleanup();
|
QColormap::cleanup();
|
||||||
delete QApplicationPrivate::inputContext;
|
delete QApplicationPrivate::inputContext;
|
||||||
QApplicationPrivate::inputContext = 0;
|
QApplicationPrivate::inputContext = 0;
|
||||||
@ -610,356 +448,4 @@ void QApplication::setMainWidget(QWidget *mainWidget)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void QApplicationPrivate::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->widget.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;
|
|
||||||
}
|
|
||||||
|
|
||||||
QWidget * tlw = e->widget.data();
|
|
||||||
|
|
||||||
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>(QApplication::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 (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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// find the tlw if we didn't get it from the plugin
|
|
||||||
if (!mouseWindow) {
|
|
||||||
mouseWindow = QApplication::topLevelAt(globalPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mouseWindow && !implicit_mouse_grabber)
|
|
||||||
mouseWindow = QApplication::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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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 (mouseWindow != tlw)
|
|
||||||
localPoint = mouseWindow->mapFromGlobal(globalPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
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 (mouseWidget != qt_last_mouse_receiver) {
|
|
||||||
dispatchEnterLeave(mouseWidget, qt_last_mouse_receiver);
|
|
||||||
qt_last_mouse_receiver = mouseWidget;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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, QApplication::keyboardModifiers());
|
|
||||||
|
|
||||||
QList<QWeakPointer<QPlatformCursor> > cursors = QPlatformCursorPrivate::getInstances();
|
|
||||||
foreach (QWeakPointer<QPlatformCursor> cursor, cursors) {
|
|
||||||
if (cursor)
|
|
||||||
cursor.data()->pointerEvent(ev);
|
|
||||||
}
|
|
||||||
|
|
||||||
int oldOpenPopupCount = openPopupCount;
|
|
||||||
QApplication::sendSpontaneousEvent(mouseWidget, &ev);
|
|
||||||
|
|
||||||
#ifndef QT_NO_CONTEXTMENU
|
|
||||||
if (type == QEvent::MouseButtonPress && button == Qt::RightButton && (openPopupCount == oldOpenPopupCount)) {
|
|
||||||
QContextMenuEvent e(QContextMenuEvent::Mouse, localPoint, globalPoint, QApplication::keyboardModifiers());
|
|
||||||
QApplication::sendSpontaneousEvent(mouseWidget, &e);
|
|
||||||
}
|
|
||||||
#endif // QT_NO_CONTEXTMENU
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//### there's a lot of duplicated logic here -- refactoring required!
|
|
||||||
|
|
||||||
void QApplicationPrivate::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?
|
|
||||||
QWidget *mouseWidget;
|
|
||||||
|
|
||||||
qt_last_x = globalPoint.x();
|
|
||||||
qt_last_y = globalPoint.y();
|
|
||||||
|
|
||||||
QWidget *mouseWindow = e->widget.data();
|
|
||||||
|
|
||||||
// find the tlw if we didn't get it from the plugin
|
|
||||||
if (!mouseWindow) {
|
|
||||||
mouseWindow = QApplication::topLevelAt(globalPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mouseWindow)
|
|
||||||
return;
|
|
||||||
|
|
||||||
mouseWidget = mouseWindow;
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
QWheelEvent ev(p, globalPoint, e->delta, buttons, QApplication::keyboardModifiers(),
|
|
||||||
e->orient);
|
|
||||||
QApplication::sendSpontaneousEvent(mouseWidget, &ev);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Remember, Qt convention is: keyboard state is state *before*
|
|
||||||
|
|
||||||
void QApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent *e)
|
|
||||||
{
|
|
||||||
QWidget *focusW = 0;
|
|
||||||
if (self->inPopupMode()) {
|
|
||||||
QWidget *popupW = qApp->activePopupWidget();
|
|
||||||
focusW = popupW->focusWidget() ? popupW->focusWidget() : popupW;
|
|
||||||
}
|
|
||||||
if (!focusW)
|
|
||||||
focusW = QApplication::focusWidget();
|
|
||||||
if (!focusW) {
|
|
||||||
focusW = e->widget.data();
|
|
||||||
}
|
|
||||||
if (!focusW)
|
|
||||||
focusW = QApplication::activeWindow();
|
|
||||||
|
|
||||||
//qDebug() << "handleKeyEvent" << hex << e->key() << e->modifiers() << e->text() << "widget" << focusW;
|
|
||||||
|
|
||||||
if (!focusW)
|
|
||||||
return;
|
|
||||||
if (app_do_modal && !qt_try_modal(focusW, e->keyType))
|
|
||||||
return;
|
|
||||||
|
|
||||||
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);
|
|
||||||
QApplication::sendSpontaneousEvent(focusW, &ev);
|
|
||||||
} else {
|
|
||||||
QKeyEvent ev(e->keyType, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount);
|
|
||||||
QApplication::sendSpontaneousEvent(focusW, &ev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void QApplicationPrivate::processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *e)
|
|
||||||
{
|
|
||||||
QApplicationPrivate::dispatchEnterLeave(e->enter.data(),0);
|
|
||||||
qt_last_mouse_receiver = e->enter.data();
|
|
||||||
}
|
|
||||||
|
|
||||||
void QApplicationPrivate::processLeaveEvent(QWindowSystemInterfacePrivate::LeaveEvent *e)
|
|
||||||
{
|
|
||||||
QApplicationPrivate::dispatchEnterLeave(0,qt_last_mouse_receiver);
|
|
||||||
|
|
||||||
if (e->leave.data() && !e->leave.data()->isAncestorOf(qt_last_mouse_receiver)) //(???) this should not happen
|
|
||||||
QApplicationPrivate::dispatchEnterLeave(0, e->leave.data());
|
|
||||||
qt_last_mouse_receiver = 0;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void QApplicationPrivate::processActivatedEvent(QWindowSystemInterfacePrivate::ActivatedWindowEvent *e)
|
|
||||||
{
|
|
||||||
QApplication::setActiveWindow(e->activated.data());
|
|
||||||
}
|
|
||||||
|
|
||||||
void QApplicationPrivate::processGeometryChangeEvent(QWindowSystemInterfacePrivate::GeometryChangeEvent *e)
|
|
||||||
{
|
|
||||||
if (e->tlw.isNull())
|
|
||||||
return;
|
|
||||||
QWidget *tlw = e->tlw.data();
|
|
||||||
if (!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
|
|
||||||
|
|
||||||
QRect newRect = e->newGeometry;
|
|
||||||
QRect cr(tlw->geometry());
|
|
||||||
bool isResize = cr.size() != newRect.size();
|
|
||||||
bool isMove = cr.topLeft() != newRect.topLeft();
|
|
||||||
tlw->data->crect = newRect;
|
|
||||||
if (isResize) {
|
|
||||||
QResizeEvent e(tlw->data->crect.size(), cr.size());
|
|
||||||
QApplication::sendSpontaneousEvent(tlw, &e);
|
|
||||||
tlw->update();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isMove) {
|
|
||||||
//### frame geometry
|
|
||||||
QMoveEvent e(tlw->data->crect.topLeft(), cr.topLeft());
|
|
||||||
QApplication::sendSpontaneousEvent(tlw, &e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void QApplicationPrivate::processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e)
|
|
||||||
{
|
|
||||||
if (e->topLevel.isNull()) {
|
|
||||||
//qDebug() << "QApplicationPrivate::processCloseEvent NULL";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
e->topLevel.data()->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void QApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::TouchEvent *e)
|
|
||||||
{
|
|
||||||
translateRawTouchEvent(e->widget.data(), e->devType, e->points);
|
|
||||||
}
|
|
||||||
|
|
||||||
void QApplicationPrivate::reportScreenCount(QWindowSystemInterfacePrivate::ScreenCountEvent *e)
|
|
||||||
{
|
|
||||||
// This operation only makes sense after the QApplication constructor runs
|
|
||||||
if (QCoreApplication::startingUp())
|
|
||||||
return;
|
|
||||||
|
|
||||||
QApplication::desktop()->d_func()->updateScreenList();
|
|
||||||
// signal anything listening for creation or deletion of screens
|
|
||||||
QDesktopWidget *desktop = QApplication::desktop();
|
|
||||||
emit desktop->screenCountChanged(e->count);
|
|
||||||
}
|
|
||||||
|
|
||||||
void QApplicationPrivate::reportGeometryChange(QWindowSystemInterfacePrivate::ScreenGeometryEvent *e)
|
|
||||||
{
|
|
||||||
// This operation only makes sense after the QApplication constructor runs
|
|
||||||
if (QCoreApplication::startingUp())
|
|
||||||
return;
|
|
||||||
|
|
||||||
QApplication::desktop()->d_func()->updateScreenList();
|
|
||||||
|
|
||||||
// signal anything listening for screen geometry changes
|
|
||||||
QDesktopWidget *desktop = QApplication::desktop();
|
|
||||||
emit desktop->resized(e->index);
|
|
||||||
|
|
||||||
// make sure maximized and fullscreen windows are updated
|
|
||||||
QWidgetList list = QApplication::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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void QApplicationPrivate::reportAvailableGeometryChange(
|
|
||||||
QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent *e)
|
|
||||||
{
|
|
||||||
// This operation only makes sense after the QApplication constructor runs
|
|
||||||
if (QCoreApplication::startingUp())
|
|
||||||
return;
|
|
||||||
|
|
||||||
QApplication::desktop()->d_func()->updateScreenList();
|
|
||||||
|
|
||||||
// signal anything listening for screen geometry changes
|
|
||||||
QDesktopWidget *desktop = QApplication::desktop();
|
|
||||||
emit desktop->workAreaResized(e->index);
|
|
||||||
|
|
||||||
// make sure maximized and fullscreen windows are updated
|
|
||||||
QWidgetList list = QApplication::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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -87,7 +87,7 @@ static gboolean userEventSourceDispatch(GSource *s, GSourceFunc, gpointer)
|
|||||||
delete event;
|
delete event;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
QApplicationPrivate::processWindowSystemEvent(event);
|
QGuiApplicationPrivate::processWindowSystemEvent(event);
|
||||||
delete event;
|
delete event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,7 +236,7 @@ bool QEventDispatcherQPA::processEvents(QEventLoop::ProcessEventsFlags flags)
|
|||||||
}
|
}
|
||||||
nevents++;
|
nevents++;
|
||||||
|
|
||||||
QApplicationPrivate::processWindowSystemEvent(event);
|
QGuiApplicationPrivate::processWindowSystemEvent(event);
|
||||||
delete event;
|
delete event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
707
src/gui/kernel/qguiapplication_qpa.cpp
Normal file
707
src/gui/kernel/qguiapplication_qpa.cpp
Normal file
@ -0,0 +1,707 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** 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_qpa.h"
|
||||||
|
|
||||||
|
#include "private/qguiapplication_qpa_p.h"
|
||||||
|
#include "private/qplatformintegrationfactory_qpa_p.h"
|
||||||
|
#include "private/qevent_p.h"
|
||||||
|
|
||||||
|
#include <QtCore/private/qcoreapplication_p.h>
|
||||||
|
#include <QtDebug>
|
||||||
|
|
||||||
|
#include <QtGui/QPlatformIntegration>
|
||||||
|
#include <QtGui/QGenericPluginFactory>
|
||||||
|
|
||||||
|
#include <QWindowSystemInterface>
|
||||||
|
#include "private/qwindowsysteminterface_qpa_p.h"
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
QGuiApplicationPrivate *QGuiApplicationPrivate::self = 0;
|
||||||
|
|
||||||
|
QGuiApplication::QGuiApplication(int &argc, char **argv, int flags)
|
||||||
|
: QCoreApplication(*new QGuiApplicationPrivate(argc, argv, flags))
|
||||||
|
{
|
||||||
|
d_func()->init();
|
||||||
|
}
|
||||||
|
|
||||||
|
QGuiApplication::QGuiApplication(QGuiApplicationPrivate &p)
|
||||||
|
: QCoreApplication(p)
|
||||||
|
{
|
||||||
|
d_func()->init();
|
||||||
|
}
|
||||||
|
|
||||||
|
QGuiApplication::~QGuiApplication()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
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::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 {
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
QGuiApplicationPrivate::~QGuiApplicationPrivate()
|
||||||
|
{
|
||||||
|
delete platform_integration;
|
||||||
|
platform_integration = 0;
|
||||||
|
|
||||||
|
QFont::cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
|
#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)
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget * tlw = e->window.data() ? e->window.data()->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 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 (mouseWidget != qt_last_mouse_receiver) {
|
||||||
|
// dispatchEnterLeave(mouseWidget, qt_last_mouse_receiver);
|
||||||
|
qt_last_mouse_receiver = mouseWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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?
|
||||||
|
QWidget *mouseWidget;
|
||||||
|
|
||||||
|
qt_last_x = globalPoint.x();
|
||||||
|
qt_last_y = globalPoint.y();
|
||||||
|
|
||||||
|
QWidget *mouseWindow = e->window.data() ? e->window.data()->widget() : 0;
|
||||||
|
|
||||||
|
// find the tlw if we didn't get it from the plugin
|
||||||
|
#if 0
|
||||||
|
if (!mouseWindow) {
|
||||||
|
mouseWindow = QGuiApplication::topLevelAt(globalPoint);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!mouseWindow)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mouseWidget = mouseWindow;
|
||||||
|
|
||||||
|
#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);
|
||||||
|
}
|
||||||
|
|
||||||
|
QWheelEvent ev(p, globalPoint, e->delta, buttons, QGuiApplication::keyboardModifiers(),
|
||||||
|
e->orient);
|
||||||
|
QGuiApplication::sendSpontaneousEvent(mouseWidget, &ev);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Remember, Qt convention is: keyboard state is state *before*
|
||||||
|
|
||||||
|
void QGuiApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent *e)
|
||||||
|
{
|
||||||
|
QWidget *focusW = 0;
|
||||||
|
#if 0
|
||||||
|
if (self->inPopupMode()) {
|
||||||
|
QWidget *popupW = qApp->activePopupWidget();
|
||||||
|
focusW = popupW->focusWidget() ? popupW->focusWidget() : popupW;
|
||||||
|
}
|
||||||
|
if (!focusW)
|
||||||
|
focusW = QGuiApplication::focusWidget();
|
||||||
|
#endif
|
||||||
|
if (!focusW) {
|
||||||
|
focusW = e->window.data() ? e->window.data()->widget() : 0;
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
|
if (!focusW)
|
||||||
|
focusW = QGuiApplication::activeWindow();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//qDebug() << "handleKeyEvent" << hex << e->key() << e->modifiers() << e->text() << "widget" << focusW;
|
||||||
|
|
||||||
|
if (!focusW)
|
||||||
|
return;
|
||||||
|
#if 0
|
||||||
|
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(focusW, &ev);
|
||||||
|
} else {
|
||||||
|
QKeyEvent ev(e->keyType, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount);
|
||||||
|
QGuiApplication::sendSpontaneousEvent(focusW, &ev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QGuiApplicationPrivate::processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *e)
|
||||||
|
{
|
||||||
|
// QGuiApplicationPrivate::dispatchEnterLeave(e->enter.data(),0);
|
||||||
|
qt_last_mouse_receiver = e->enter.data() ? e->enter.data()->widget() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QGuiApplicationPrivate::processLeaveEvent(QWindowSystemInterfacePrivate::LeaveEvent *e)
|
||||||
|
{
|
||||||
|
// 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 *e)
|
||||||
|
{
|
||||||
|
// QGuiApplication::setActiveWindow(e->activated.data());
|
||||||
|
}
|
||||||
|
|
||||||
|
void QGuiApplicationPrivate::processGeometryChangeEvent(QWindowSystemInterfacePrivate::GeometryChangeEvent *e)
|
||||||
|
{
|
||||||
|
if (e->tlw.isNull())
|
||||||
|
return;
|
||||||
|
QWidget *tlw = e->tlw.data() ? e->tlw.data()->widget() : 0;
|
||||||
|
if (!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
|
||||||
|
|
||||||
|
QRect newRect = e->newGeometry;
|
||||||
|
QRect cr(tlw->geometry());
|
||||||
|
bool isResize = cr.size() != newRect.size();
|
||||||
|
bool isMove = cr.topLeft() != newRect.topLeft();
|
||||||
|
tlw->data->crect = newRect;
|
||||||
|
if (isResize) {
|
||||||
|
QResizeEvent e(tlw->data->crect.size(), cr.size());
|
||||||
|
QGuiApplication::sendSpontaneousEvent(tlw, &e);
|
||||||
|
tlw->update();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isMove) {
|
||||||
|
//### frame geometry
|
||||||
|
QMoveEvent e(tlw->data->crect.topLeft(), cr.topLeft());
|
||||||
|
QGuiApplication::sendSpontaneousEvent(tlw, &e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QGuiApplicationPrivate::processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e)
|
||||||
|
{
|
||||||
|
if (e->topLevel.isNull()) {
|
||||||
|
//qDebug() << "QGuiApplicationPrivate::processCloseEvent NULL";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// e->topLevel.data()->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::TouchEvent *e)
|
||||||
|
{
|
||||||
|
// translateRawTouchEvent(e->widget.data(), e->devType, e->points);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QGuiApplicationPrivate::reportScreenCount(QWindowSystemInterfacePrivate::ScreenCountEvent *e)
|
||||||
|
{
|
||||||
|
// 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 *e)
|
||||||
|
{
|
||||||
|
// 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 *e)
|
||||||
|
{
|
||||||
|
// 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
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
121
src/gui/kernel/qguiapplication_qpa.h
Normal file
121
src/gui/kernel/qguiapplication_qpa.h
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** 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$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef QGUIAPPLICATION_QPA_H
|
||||||
|
#define QGUIAPPLICATION_QPA_H
|
||||||
|
|
||||||
|
#include <QtCore/qcoreapplication.h>
|
||||||
|
#include <QtGui/qwindowdefs.h>
|
||||||
|
#include <QtCore/qpoint.h>
|
||||||
|
#include <QtCore/qsize.h>
|
||||||
|
|
||||||
|
QT_BEGIN_HEADER
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
QT_MODULE(Gui)
|
||||||
|
|
||||||
|
class QGuiApplicationPrivate;
|
||||||
|
class QPlatformNativeInterface;
|
||||||
|
|
||||||
|
class Q_GUI_EXPORT QGuiApplication : public QCoreApplication
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(int doubleClickInterval READ doubleClickInterval WRITE setDoubleClickInterval)
|
||||||
|
Q_PROPERTY(int keyboardInputInterval READ keyboardInputInterval WRITE setKeyboardInputInterval)
|
||||||
|
|
||||||
|
public:
|
||||||
|
QGuiApplication(int &argc, char **argv, int = ApplicationFlags);
|
||||||
|
virtual ~QGuiApplication();
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
#ifndef QT_NO_CURSOR
|
||||||
|
static QCursor *overrideCursor();
|
||||||
|
static void setOverrideCursor(const QCursor &);
|
||||||
|
static void changeOverrideCursor(const QCursor &);
|
||||||
|
static 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
|
||||||
|
|
||||||
|
static Qt::KeyboardModifiers keyboardModifiers();
|
||||||
|
static Qt::MouseButtons mouseButtons();
|
||||||
|
|
||||||
|
static void setDoubleClickInterval(int);
|
||||||
|
static int doubleClickInterval();
|
||||||
|
|
||||||
|
static void setKeyboardInputInterval(int);
|
||||||
|
static int keyboardInputInterval();
|
||||||
|
|
||||||
|
static QPlatformNativeInterface *platformNativeInterface();
|
||||||
|
|
||||||
|
static int exec();
|
||||||
|
bool notify(QObject *, QEvent *);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool event(QEvent *);
|
||||||
|
bool compressEvent(QEvent *, QObject *receiver, QPostEventList *);
|
||||||
|
|
||||||
|
QGuiApplication(QGuiApplicationPrivate &p);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Q_DISABLE_COPY(QGuiApplication)
|
||||||
|
Q_DECLARE_PRIVATE(QGuiApplication)
|
||||||
|
|
||||||
|
#ifndef QT_NO_GESTURES
|
||||||
|
friend class QGestureManager;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
QT_END_HEADER
|
||||||
|
|
||||||
|
#endif // QGUIAPPLICATION_QPA_H
|
127
src/gui/kernel/qguiapplication_qpa_p.h
Normal file
127
src/gui/kernel/qguiapplication_qpa_p.h
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** 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$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef QGUIAPPLICATION_QPA_P_H
|
||||||
|
#define QGUIAPPLICATION_QPA_P_H
|
||||||
|
|
||||||
|
#include <QtGui/qguiapplication_qpa.h>
|
||||||
|
|
||||||
|
#include <QtCore/private/qcoreapplication_p.h>
|
||||||
|
|
||||||
|
#include <QtCore/private/qthread_p.h>
|
||||||
|
|
||||||
|
#include <QWindowSystemInterface>
|
||||||
|
#include "private/qwindowsysteminterface_qpa_p.h"
|
||||||
|
#include "QtGui/qplatformintegration_qpa.h"
|
||||||
|
|
||||||
|
QT_BEGIN_HEADER
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
QT_MODULE(Gui)
|
||||||
|
|
||||||
|
class QPlatformIntegration;
|
||||||
|
|
||||||
|
class Q_GUI_EXPORT QGuiApplicationPrivate : public QCoreApplicationPrivate
|
||||||
|
{
|
||||||
|
Q_DECLARE_PUBLIC(QGuiApplication)
|
||||||
|
public:
|
||||||
|
QGuiApplicationPrivate(int &argc, char **argv, int flags);
|
||||||
|
~QGuiApplicationPrivate();
|
||||||
|
|
||||||
|
static int keyboard_input_time;
|
||||||
|
static int mouse_double_click_time;
|
||||||
|
|
||||||
|
static Qt::KeyboardModifiers modifier_buttons;
|
||||||
|
static Qt::MouseButtons mouse_buttons;
|
||||||
|
|
||||||
|
static QPlatformIntegration *platform_integration;
|
||||||
|
|
||||||
|
static QPlatformIntegration *platformIntegration()
|
||||||
|
{ return platform_integration; }
|
||||||
|
|
||||||
|
static QAbstractEventDispatcher *qt_qpa_core_dispatcher()
|
||||||
|
{ return QCoreApplication::instance()->d_func()->threadData->eventDispatcher; }
|
||||||
|
|
||||||
|
static void processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent *e);
|
||||||
|
static void processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent *e);
|
||||||
|
static void processWheelEvent(QWindowSystemInterfacePrivate::WheelEvent *e);
|
||||||
|
static void processTouchEvent(QWindowSystemInterfacePrivate::TouchEvent *e);
|
||||||
|
|
||||||
|
static void processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e);
|
||||||
|
|
||||||
|
static void processGeometryChangeEvent(QWindowSystemInterfacePrivate::GeometryChangeEvent *e);
|
||||||
|
|
||||||
|
static void processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *e);
|
||||||
|
static void processLeaveEvent(QWindowSystemInterfacePrivate::LeaveEvent *e);
|
||||||
|
|
||||||
|
static void processActivatedEvent(QWindowSystemInterfacePrivate::ActivatedWindowEvent *e);
|
||||||
|
|
||||||
|
static void processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *e);
|
||||||
|
|
||||||
|
static void reportScreenCount(QWindowSystemInterfacePrivate::ScreenCountEvent *e);
|
||||||
|
static void reportGeometryChange(QWindowSystemInterfacePrivate::ScreenGeometryEvent *e);
|
||||||
|
static void reportAvailableGeometryChange(QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent *e);
|
||||||
|
|
||||||
|
static bool app_do_modal;
|
||||||
|
|
||||||
|
static QPointer<QWidget> qt_last_mouse_receiver;
|
||||||
|
|
||||||
|
static QWidgetList qt_modal_stack;
|
||||||
|
|
||||||
|
static Qt::MouseButtons buttons;
|
||||||
|
static ulong mousePressTime;
|
||||||
|
static Qt::MouseButton mousePressButton;
|
||||||
|
static int mousePressX;
|
||||||
|
static int mousePressY;
|
||||||
|
static int mouse_double_click_distance;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void init();
|
||||||
|
|
||||||
|
static QGuiApplicationPrivate *self;
|
||||||
|
};
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
QT_END_HEADER
|
||||||
|
|
||||||
|
#endif // QGUIAPPLICATION_QPA_P_H
|
@ -43,10 +43,10 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
void *QPlatformNativeInterface::nativeResourceForWidget(const QByteArray &resource, QWidget *widget)
|
void *QPlatformNativeInterface::nativeResourceForWindow(const QByteArray &resource, QWindow *window)
|
||||||
{
|
{
|
||||||
Q_UNUSED(resource);
|
Q_UNUSED(resource);
|
||||||
Q_UNUSED(widget);
|
Q_UNUSED(window);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,12 +50,12 @@ QT_BEGIN_NAMESPACE
|
|||||||
|
|
||||||
QT_MODULE(Gui)
|
QT_MODULE(Gui)
|
||||||
|
|
||||||
class QWidget;
|
class QWindow;
|
||||||
|
|
||||||
class Q_GUI_EXPORT QPlatformNativeInterface
|
class Q_GUI_EXPORT QPlatformNativeInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void *nativeResourceForWidget(const QByteArray &resource, QWidget *widget);
|
virtual void *nativeResourceForWindow(const QByteArray &resource, QWindow *window);
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -113,7 +113,6 @@ void QPlatformWindow::setVisible(bool visible)
|
|||||||
*/
|
*/
|
||||||
Qt::WindowFlags QPlatformWindow::setWindowFlags(Qt::WindowFlags flags)
|
Qt::WindowFlags QPlatformWindow::setWindowFlags(Qt::WindowFlags flags)
|
||||||
{
|
{
|
||||||
Q_D(QPlatformWindow);
|
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,7 +173,7 @@ void QPlatformWindow::setOpacity(qreal level)
|
|||||||
*/
|
*/
|
||||||
void QPlatformWindow::requestActivateWindow()
|
void QPlatformWindow::requestActivateWindow()
|
||||||
{
|
{
|
||||||
QWindowSystemInterface::handleWindowActivated(window()->widget());
|
QWindowSystemInterface::handleWindowActivated(window());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -737,6 +737,8 @@ private:
|
|||||||
friend class QWidgetBackingStore;
|
friend class QWidgetBackingStore;
|
||||||
friend class QApplication;
|
friend class QApplication;
|
||||||
friend class QApplicationPrivate;
|
friend class QApplicationPrivate;
|
||||||
|
friend class QGuiApplication;
|
||||||
|
friend class QGuiApplicationPrivate;
|
||||||
friend class QBaseApplication;
|
friend class QBaseApplication;
|
||||||
friend class QPainter;
|
friend class QPainter;
|
||||||
friend class QPainterPrivate;
|
friend class QPainterPrivate;
|
||||||
|
@ -172,6 +172,9 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Q_DISABLE_COPY(QWindow)
|
Q_DISABLE_COPY(QWindow)
|
||||||
|
|
||||||
|
friend class QGuiApplication;
|
||||||
|
friend class QGuiApplicationPrivate;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -56,51 +56,37 @@ QTime QWindowSystemInterfacePrivate::eventTime;
|
|||||||
QList<QWindowSystemInterfacePrivate::WindowSystemEvent *> QWindowSystemInterfacePrivate::windowSystemEventQueue;
|
QList<QWindowSystemInterfacePrivate::WindowSystemEvent *> QWindowSystemInterfacePrivate::windowSystemEventQueue;
|
||||||
QMutex QWindowSystemInterfacePrivate::queueMutex;
|
QMutex QWindowSystemInterfacePrivate::queueMutex;
|
||||||
|
|
||||||
extern QPointer<QWidget> qt_last_mouse_receiver;
|
extern QPointer<QWindow> qt_last_mouse_receiver;
|
||||||
|
|
||||||
|
|
||||||
void QWindowSystemInterface::handleEnterEvent(QWidget *tlw)
|
void QWindowSystemInterface::handleEnterEvent(QWindow *tlw)
|
||||||
{
|
{
|
||||||
if (tlw) {
|
if (tlw) {
|
||||||
QWidgetData *data = qt_qwidget_data(tlw);
|
|
||||||
if (data->in_destructor)
|
|
||||||
return;
|
|
||||||
|
|
||||||
QWindowSystemInterfacePrivate::EnterEvent *e = new QWindowSystemInterfacePrivate::EnterEvent(tlw);
|
QWindowSystemInterfacePrivate::EnterEvent *e = new QWindowSystemInterfacePrivate::EnterEvent(tlw);
|
||||||
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWindowSystemInterface::handleLeaveEvent(QWidget *tlw)
|
void QWindowSystemInterface::handleLeaveEvent(QWindow *tlw)
|
||||||
{
|
{
|
||||||
if (tlw) {
|
|
||||||
QWidgetData *data = qt_qwidget_data(tlw);
|
|
||||||
if (data->in_destructor)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
QWindowSystemInterfacePrivate::LeaveEvent *e = new QWindowSystemInterfacePrivate::LeaveEvent(tlw);
|
QWindowSystemInterfacePrivate::LeaveEvent *e = new QWindowSystemInterfacePrivate::LeaveEvent(tlw);
|
||||||
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWindowSystemInterface::handleWindowActivated(QWidget *tlw)
|
void QWindowSystemInterface::handleWindowActivated(QWindow *tlw)
|
||||||
{
|
{
|
||||||
QWindowSystemInterfacePrivate::ActivatedWindowEvent *e = new QWindowSystemInterfacePrivate::ActivatedWindowEvent(tlw);
|
QWindowSystemInterfacePrivate::ActivatedWindowEvent *e = new QWindowSystemInterfacePrivate::ActivatedWindowEvent(tlw);
|
||||||
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWindowSystemInterface::handleGeometryChange(QWidget *tlw, const QRect &newRect)
|
void QWindowSystemInterface::handleGeometryChange(QWindow *tlw, const QRect &newRect)
|
||||||
{
|
{
|
||||||
if (tlw) {
|
|
||||||
QWidgetData *data = qt_qwidget_data(tlw);
|
|
||||||
if (data->in_destructor)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
QWindowSystemInterfacePrivate::GeometryChangeEvent *e = new QWindowSystemInterfacePrivate::GeometryChangeEvent(tlw,newRect);
|
QWindowSystemInterfacePrivate::GeometryChangeEvent *e = new QWindowSystemInterfacePrivate::GeometryChangeEvent(tlw,newRect);
|
||||||
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QWindowSystemInterface::handleCloseEvent(QWidget *tlw)
|
void QWindowSystemInterface::handleCloseEvent(QWindow *tlw)
|
||||||
{
|
{
|
||||||
if (tlw) {
|
if (tlw) {
|
||||||
QWindowSystemInterfacePrivate::CloseEvent *e =
|
QWindowSystemInterfacePrivate::CloseEvent *e =
|
||||||
@ -115,42 +101,31 @@ void QWindowSystemInterface::handleCloseEvent(QWidget *tlw)
|
|||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
void QWindowSystemInterface::handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) {
|
void QWindowSystemInterface::handleMouseEvent(QWindow *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) {
|
||||||
unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
|
unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
|
||||||
handleMouseEvent(w, time, local, global, b);
|
handleMouseEvent(w, time, local, global, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWindowSystemInterface::handleMouseEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b)
|
void QWindowSystemInterface::handleMouseEvent(QWindow *tlw, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b)
|
||||||
{
|
{
|
||||||
if (tlw) {
|
|
||||||
QWidgetData *data = qt_qwidget_data(tlw);
|
|
||||||
if (data->in_destructor)
|
|
||||||
tlw = 0;
|
|
||||||
}
|
|
||||||
QWindowSystemInterfacePrivate::MouseEvent * e =
|
QWindowSystemInterfacePrivate::MouseEvent * e =
|
||||||
new QWindowSystemInterfacePrivate::MouseEvent(tlw, timestamp, local, global, b);
|
new QWindowSystemInterfacePrivate::MouseEvent(tlw, timestamp, local, global, b);
|
||||||
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWindowSystemInterface::handleKeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text, bool autorep, ushort count) {
|
void QWindowSystemInterface::handleKeyEvent(QWindow *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text, bool autorep, ushort count) {
|
||||||
unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
|
unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
|
||||||
handleKeyEvent(w, time, t, k, mods, text, autorep, count);
|
handleKeyEvent(w, time, t, k, mods, text, autorep, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWindowSystemInterface::handleKeyEvent(QWidget *tlw, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text, bool autorep, ushort count)
|
void QWindowSystemInterface::handleKeyEvent(QWindow *tlw, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text, bool autorep, ushort count)
|
||||||
{
|
{
|
||||||
if (tlw) {
|
|
||||||
QWidgetData *data = qt_qwidget_data(tlw);
|
|
||||||
if (data->in_destructor)
|
|
||||||
tlw = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
QWindowSystemInterfacePrivate::KeyEvent * e =
|
QWindowSystemInterfacePrivate::KeyEvent * e =
|
||||||
new QWindowSystemInterfacePrivate::KeyEvent(tlw, timestamp, t, k, mods, text, autorep, count);
|
new QWindowSystemInterfacePrivate::KeyEvent(tlw, timestamp, t, k, mods, text, autorep, count);
|
||||||
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWindowSystemInterface::handleExtendedKeyEvent(QWidget *w, QEvent::Type type, int key, Qt::KeyboardModifiers modifiers,
|
void QWindowSystemInterface::handleExtendedKeyEvent(QWindow *w, QEvent::Type type, int key, Qt::KeyboardModifiers modifiers,
|
||||||
quint32 nativeScanCode, quint32 nativeVirtualKey,
|
quint32 nativeScanCode, quint32 nativeVirtualKey,
|
||||||
quint32 nativeModifiers,
|
quint32 nativeModifiers,
|
||||||
const QString& text, bool autorep,
|
const QString& text, bool autorep,
|
||||||
@ -161,38 +136,26 @@ void QWindowSystemInterface::handleExtendedKeyEvent(QWidget *w, QEvent::Type typ
|
|||||||
text, autorep, count);
|
text, autorep, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWindowSystemInterface::handleExtendedKeyEvent(QWidget *tlw, ulong timestamp, QEvent::Type type, int key,
|
void QWindowSystemInterface::handleExtendedKeyEvent(QWindow *tlw, ulong timestamp, QEvent::Type type, int key,
|
||||||
Qt::KeyboardModifiers modifiers,
|
Qt::KeyboardModifiers modifiers,
|
||||||
quint32 nativeScanCode, quint32 nativeVirtualKey,
|
quint32 nativeScanCode, quint32 nativeVirtualKey,
|
||||||
quint32 nativeModifiers,
|
quint32 nativeModifiers,
|
||||||
const QString& text, bool autorep,
|
const QString& text, bool autorep,
|
||||||
ushort count)
|
ushort count)
|
||||||
{
|
{
|
||||||
if (tlw) {
|
|
||||||
QWidgetData *data = qt_qwidget_data(tlw);
|
|
||||||
if (data->in_destructor)
|
|
||||||
tlw = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
QWindowSystemInterfacePrivate::KeyEvent * e =
|
QWindowSystemInterfacePrivate::KeyEvent * e =
|
||||||
new QWindowSystemInterfacePrivate::KeyEvent(tlw, timestamp, type, key, modifiers,
|
new QWindowSystemInterfacePrivate::KeyEvent(tlw, timestamp, type, key, modifiers,
|
||||||
nativeScanCode, nativeVirtualKey, nativeModifiers, text, autorep, count);
|
nativeScanCode, nativeVirtualKey, nativeModifiers, text, autorep, count);
|
||||||
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWindowSystemInterface::handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) {
|
void QWindowSystemInterface::handleWheelEvent(QWindow *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) {
|
||||||
unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
|
unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
|
||||||
handleWheelEvent(w, time, local, global, d, o);
|
handleWheelEvent(w, time, local, global, d, o);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWindowSystemInterface::handleWheelEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o)
|
void QWindowSystemInterface::handleWheelEvent(QWindow *tlw, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o)
|
||||||
{
|
{
|
||||||
if (tlw) {
|
|
||||||
QWidgetData *data = qt_qwidget_data(tlw);
|
|
||||||
if (data->in_destructor)
|
|
||||||
tlw = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
QWindowSystemInterfacePrivate::WheelEvent *e =
|
QWindowSystemInterfacePrivate::WheelEvent *e =
|
||||||
new QWindowSystemInterfacePrivate::WheelEvent(tlw, timestamp, local, global, d, o);
|
new QWindowSystemInterfacePrivate::WheelEvent(tlw, timestamp, local, global, d, o);
|
||||||
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
||||||
@ -229,12 +192,12 @@ void QWindowSystemInterfacePrivate::queueWindowSystemEvent(QWindowSystemInterfac
|
|||||||
dispatcher->wakeUp();
|
dispatcher->wakeUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWindowSystemInterface::handleTouchEvent(QWidget *w, QEvent::Type type, QTouchEvent::DeviceType devType, const QList<struct TouchPoint> &points) {
|
void QWindowSystemInterface::handleTouchEvent(QWindow *w, QEvent::Type type, QTouchEvent::DeviceType devType, const QList<struct TouchPoint> &points) {
|
||||||
unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
|
unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
|
||||||
handleTouchEvent(w, time, type, devType, points);
|
handleTouchEvent(w, time, type, devType, points);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWindowSystemInterface::handleTouchEvent(QWidget *tlw, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, const QList<struct TouchPoint> &points)
|
void QWindowSystemInterface::handleTouchEvent(QWindow *tlw, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, const QList<struct TouchPoint> &points)
|
||||||
{
|
{
|
||||||
if (!points.size()) // Touch events must have at least one point
|
if (!points.size()) // Touch events must have at least one point
|
||||||
return;
|
return;
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
#include <QtCore/QTime>
|
#include <QtCore/QTime>
|
||||||
#include <QtGui/qwindowdefs.h>
|
#include <QtGui/qwindowdefs.h>
|
||||||
#include <QtCore/QEvent>
|
#include <QtCore/QEvent>
|
||||||
#include <QtGui/QWidget>
|
#include <QtGui/QWindow>
|
||||||
#include <QtCore/QWeakPointer>
|
#include <QtCore/QWeakPointer>
|
||||||
#include <QtCore/QMutex>
|
#include <QtCore/QMutex>
|
||||||
#include <QtGui/QTouchEvent>
|
#include <QtGui/QTouchEvent>
|
||||||
@ -58,25 +58,25 @@ QT_MODULE(Gui)
|
|||||||
class Q_GUI_EXPORT QWindowSystemInterface
|
class Q_GUI_EXPORT QWindowSystemInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static void handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b);
|
static void handleMouseEvent(QWindow *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b);
|
||||||
static void handleMouseEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b);
|
static void handleMouseEvent(QWindow *w, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b);
|
||||||
|
|
||||||
static void handleKeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1);
|
static void handleKeyEvent(QWindow *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1);
|
||||||
static void handleKeyEvent(QWidget *w, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1);
|
static void handleKeyEvent(QWindow *w, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1);
|
||||||
|
|
||||||
static void handleExtendedKeyEvent(QWidget *w, QEvent::Type type, int key, Qt::KeyboardModifiers modifiers,
|
static void handleExtendedKeyEvent(QWindow *w, QEvent::Type type, int key, Qt::KeyboardModifiers modifiers,
|
||||||
quint32 nativeScanCode, quint32 nativeVirtualKey,
|
quint32 nativeScanCode, quint32 nativeVirtualKey,
|
||||||
quint32 nativeModifiers,
|
quint32 nativeModifiers,
|
||||||
const QString& text = QString(), bool autorep = false,
|
const QString& text = QString(), bool autorep = false,
|
||||||
ushort count = 1);
|
ushort count = 1);
|
||||||
static void handleExtendedKeyEvent(QWidget *w, ulong timestamp, QEvent::Type type, int key, Qt::KeyboardModifiers modifiers,
|
static void handleExtendedKeyEvent(QWindow *w, ulong timestamp, QEvent::Type type, int key, Qt::KeyboardModifiers modifiers,
|
||||||
quint32 nativeScanCode, quint32 nativeVirtualKey,
|
quint32 nativeScanCode, quint32 nativeVirtualKey,
|
||||||
quint32 nativeModifiers,
|
quint32 nativeModifiers,
|
||||||
const QString& text = QString(), bool autorep = false,
|
const QString& text = QString(), bool autorep = false,
|
||||||
ushort count = 1);
|
ushort count = 1);
|
||||||
|
|
||||||
static void handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o);
|
static void handleWheelEvent(QWindow *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o);
|
||||||
static void handleWheelEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o);
|
static void handleWheelEvent(QWindow *w, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o);
|
||||||
|
|
||||||
struct TouchPoint {
|
struct TouchPoint {
|
||||||
int id; // for application use
|
int id; // for application use
|
||||||
@ -87,14 +87,14 @@ public:
|
|||||||
Qt::TouchPointState state; //Qt::TouchPoint{Pressed|Moved|Stationary|Released}
|
Qt::TouchPointState state; //Qt::TouchPoint{Pressed|Moved|Stationary|Released}
|
||||||
};
|
};
|
||||||
|
|
||||||
static void handleTouchEvent(QWidget *w, QEvent::Type type, QTouchEvent::DeviceType devType, const QList<struct TouchPoint> &points);
|
static void handleTouchEvent(QWindow *w, QEvent::Type type, QTouchEvent::DeviceType devType, const QList<struct TouchPoint> &points);
|
||||||
static void handleTouchEvent(QWidget *w, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, const QList<struct TouchPoint> &points);
|
static void handleTouchEvent(QWindow *w, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, const QList<struct TouchPoint> &points);
|
||||||
|
|
||||||
static void handleGeometryChange(QWidget *w, const QRect &newRect);
|
static void handleGeometryChange(QWindow *w, const QRect &newRect);
|
||||||
static void handleCloseEvent(QWidget *w);
|
static void handleCloseEvent(QWindow *w);
|
||||||
static void handleEnterEvent(QWidget *w);
|
static void handleEnterEvent(QWindow *w);
|
||||||
static void handleLeaveEvent(QWidget *w);
|
static void handleLeaveEvent(QWindow *w);
|
||||||
static void handleWindowActivated(QWidget *w);
|
static void handleWindowActivated(QWindow *w);
|
||||||
|
|
||||||
// Changes to the screen
|
// Changes to the screen
|
||||||
static void handleScreenGeometryChange(int screenIndex);
|
static void handleScreenGeometryChange(int screenIndex);
|
||||||
|
@ -73,55 +73,55 @@ public:
|
|||||||
|
|
||||||
class CloseEvent : public WindowSystemEvent {
|
class CloseEvent : public WindowSystemEvent {
|
||||||
public:
|
public:
|
||||||
CloseEvent(QWidget *tlw)
|
CloseEvent(QWindow *tlw)
|
||||||
: WindowSystemEvent(Close), topLevel(tlw) { }
|
: WindowSystemEvent(Close), topLevel(tlw) { }
|
||||||
QWeakPointer<QWidget> topLevel;
|
QWeakPointer<QWindow> topLevel;
|
||||||
};
|
};
|
||||||
|
|
||||||
class GeometryChangeEvent : public WindowSystemEvent {
|
class GeometryChangeEvent : public WindowSystemEvent {
|
||||||
public:
|
public:
|
||||||
GeometryChangeEvent(QWidget *tlw, const QRect &newGeometry)
|
GeometryChangeEvent(QWindow *tlw, const QRect &newGeometry)
|
||||||
: WindowSystemEvent(GeometryChange), tlw(tlw), newGeometry(newGeometry)
|
: WindowSystemEvent(GeometryChange), tlw(tlw), newGeometry(newGeometry)
|
||||||
{ }
|
{ }
|
||||||
QWeakPointer<QWidget> tlw;
|
QWeakPointer<QWindow> tlw;
|
||||||
QRect newGeometry;
|
QRect newGeometry;
|
||||||
};
|
};
|
||||||
|
|
||||||
class EnterEvent : public WindowSystemEvent {
|
class EnterEvent : public WindowSystemEvent {
|
||||||
public:
|
public:
|
||||||
EnterEvent(QWidget *enter)
|
EnterEvent(QWindow *enter)
|
||||||
: WindowSystemEvent(Enter), enter(enter)
|
: WindowSystemEvent(Enter), enter(enter)
|
||||||
{ }
|
{ }
|
||||||
QWeakPointer<QWidget> enter;
|
QWeakPointer<QWindow> enter;
|
||||||
};
|
};
|
||||||
|
|
||||||
class LeaveEvent : public WindowSystemEvent {
|
class LeaveEvent : public WindowSystemEvent {
|
||||||
public:
|
public:
|
||||||
LeaveEvent(QWidget *leave)
|
LeaveEvent(QWindow *leave)
|
||||||
: WindowSystemEvent(Leave), leave(leave)
|
: WindowSystemEvent(Leave), leave(leave)
|
||||||
{ }
|
{ }
|
||||||
QWeakPointer<QWidget> leave;
|
QWeakPointer<QWindow> leave;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ActivatedWindowEvent : public WindowSystemEvent {
|
class ActivatedWindowEvent : public WindowSystemEvent {
|
||||||
public:
|
public:
|
||||||
ActivatedWindowEvent(QWidget *activatedWindow)
|
ActivatedWindowEvent(QWindow *activatedWindow)
|
||||||
: WindowSystemEvent(ActivatedWindow), activated(activatedWindow)
|
: WindowSystemEvent(ActivatedWindow), activated(activatedWindow)
|
||||||
{ }
|
{ }
|
||||||
QWeakPointer<QWidget> activated;
|
QWeakPointer<QWindow> activated;
|
||||||
};
|
};
|
||||||
|
|
||||||
class UserEvent : public WindowSystemEvent {
|
class UserEvent : public WindowSystemEvent {
|
||||||
public:
|
public:
|
||||||
UserEvent(QWidget * w, ulong time, EventType t)
|
UserEvent(QWindow * w, ulong time, EventType t)
|
||||||
: WindowSystemEvent(t), widget(w), timestamp(time) { }
|
: WindowSystemEvent(t), window(w), timestamp(time) { }
|
||||||
QWeakPointer<QWidget> widget;
|
QWeakPointer<QWindow> window;
|
||||||
unsigned long timestamp;
|
unsigned long timestamp;
|
||||||
};
|
};
|
||||||
|
|
||||||
class MouseEvent : public UserEvent {
|
class MouseEvent : public UserEvent {
|
||||||
public:
|
public:
|
||||||
MouseEvent(QWidget * w, ulong time, const QPoint & local, const QPoint & global, Qt::MouseButtons b)
|
MouseEvent(QWindow * w, ulong time, const QPoint & local, const QPoint & global, Qt::MouseButtons b)
|
||||||
: UserEvent(w, time, Mouse), localPos(local), globalPos(global), buttons(b) { }
|
: UserEvent(w, time, Mouse), localPos(local), globalPos(global), buttons(b) { }
|
||||||
QPoint localPos;
|
QPoint localPos;
|
||||||
QPoint globalPos;
|
QPoint globalPos;
|
||||||
@ -130,7 +130,7 @@ public:
|
|||||||
|
|
||||||
class WheelEvent : public UserEvent {
|
class WheelEvent : public UserEvent {
|
||||||
public:
|
public:
|
||||||
WheelEvent(QWidget *w, ulong time, const QPoint & local, const QPoint & global, int d, Qt::Orientation o)
|
WheelEvent(QWindow *w, ulong time, const QPoint & local, const QPoint & global, int d, Qt::Orientation o)
|
||||||
: UserEvent(w, time, Wheel), delta(d), localPos(local), globalPos(global), orient(o) { }
|
: UserEvent(w, time, Wheel), delta(d), localPos(local), globalPos(global), orient(o) { }
|
||||||
int delta;
|
int delta;
|
||||||
QPoint localPos;
|
QPoint localPos;
|
||||||
@ -140,11 +140,11 @@ public:
|
|||||||
|
|
||||||
class KeyEvent : public UserEvent {
|
class KeyEvent : public UserEvent {
|
||||||
public:
|
public:
|
||||||
KeyEvent(QWidget *w, ulong time, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1)
|
KeyEvent(QWindow *w, ulong time, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1)
|
||||||
:UserEvent(w, time, Key), key(k), unicode(text), repeat(autorep),
|
:UserEvent(w, time, Key), key(k), unicode(text), repeat(autorep),
|
||||||
repeatCount(count), modifiers(mods), keyType(t),
|
repeatCount(count), modifiers(mods), keyType(t),
|
||||||
nativeScanCode(0), nativeVirtualKey(0), nativeModifiers(0) { }
|
nativeScanCode(0), nativeVirtualKey(0), nativeModifiers(0) { }
|
||||||
KeyEvent(QWidget *w, ulong time, QEvent::Type t, int k, Qt::KeyboardModifiers mods,
|
KeyEvent(QWindow *w, ulong time, QEvent::Type t, int k, Qt::KeyboardModifiers mods,
|
||||||
quint32 nativeSC, quint32 nativeVK, quint32 nativeMods,
|
quint32 nativeSC, quint32 nativeVK, quint32 nativeMods,
|
||||||
const QString & text = QString(), bool autorep = false, ushort count = 1)
|
const QString & text = QString(), bool autorep = false, ushort count = 1)
|
||||||
:UserEvent(w, time, Key), key(k), unicode(text), repeat(autorep),
|
:UserEvent(w, time, Key), key(k), unicode(text), repeat(autorep),
|
||||||
@ -163,7 +163,7 @@ public:
|
|||||||
|
|
||||||
class TouchEvent : public UserEvent {
|
class TouchEvent : public UserEvent {
|
||||||
public:
|
public:
|
||||||
TouchEvent(QWidget *w, ulong time, QEvent::Type t, QTouchEvent::DeviceType d, const QList<QTouchEvent::TouchPoint> &p)
|
TouchEvent(QWindow *w, ulong time, QEvent::Type t, QTouchEvent::DeviceType d, const QList<QTouchEvent::TouchPoint> &p)
|
||||||
:UserEvent(w, time, Touch), devType(d), points(p), touchType(t) { }
|
:UserEvent(w, time, Touch), devType(d), points(p), touchType(t) { }
|
||||||
QTouchEvent::DeviceType devType;
|
QTouchEvent::DeviceType devType;
|
||||||
QList<QTouchEvent::TouchPoint> points;
|
QList<QTouchEvent::TouchPoint> points;
|
||||||
|
@ -167,7 +167,7 @@ break;
|
|||||||
{ \
|
{ \
|
||||||
event_t *e = (event_t *)event; \
|
event_t *e = (event_t *)event; \
|
||||||
if (QXcbWindow *platformWindow = platformWindowFromId(e->event)) \
|
if (QXcbWindow *platformWindow = platformWindowFromId(e->event)) \
|
||||||
m_keyboard->handler(platformWindow->window()->widget(), e); \
|
m_keyboard->handler(platformWindow->window(), e); \
|
||||||
} \
|
} \
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -913,7 +913,7 @@ QXcbKeyboard::~QXcbKeyboard()
|
|||||||
|
|
||||||
// #define XCB_KEYBOARD_DEBUG
|
// #define XCB_KEYBOARD_DEBUG
|
||||||
|
|
||||||
void QXcbKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keycode_t code, quint16 state, xcb_timestamp_t time)
|
void QXcbKeyboard::handleKeyEvent(QWindow *window, QEvent::Type type, xcb_keycode_t code, quint16 state, xcb_timestamp_t time)
|
||||||
{
|
{
|
||||||
int col = state & XCB_MOD_MASK_SHIFT ? 1 : 0;
|
int col = state & XCB_MOD_MASK_SHIFT ? 1 : 0;
|
||||||
|
|
||||||
@ -954,17 +954,17 @@ void QXcbKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keycod
|
|||||||
|
|
||||||
QString string = translateKeySym(sym, state, qtcode, modifiers, chars, count);
|
QString string = translateKeySym(sym, state, qtcode, modifiers, chars, count);
|
||||||
|
|
||||||
QWindowSystemInterface::handleExtendedKeyEvent(widget, time, type, qtcode, modifiers, code, 0, state, string.left(count));
|
QWindowSystemInterface::handleExtendedKeyEvent(window, time, type, qtcode, modifiers, code, 0, state, string.left(count));
|
||||||
}
|
}
|
||||||
|
|
||||||
void QXcbKeyboard::handleKeyPressEvent(QWidget *widget, const xcb_key_press_event_t *event)
|
void QXcbKeyboard::handleKeyPressEvent(QWindow *window, const xcb_key_press_event_t *event)
|
||||||
{
|
{
|
||||||
handleKeyEvent(widget, QEvent::KeyPress, event->detail, event->state, event->time);
|
handleKeyEvent(window, QEvent::KeyPress, event->detail, event->state, event->time);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QXcbKeyboard::handleKeyReleaseEvent(QWidget *widget, const xcb_key_release_event_t *event)
|
void QXcbKeyboard::handleKeyReleaseEvent(QWindow *window, const xcb_key_release_event_t *event)
|
||||||
{
|
{
|
||||||
handleKeyEvent(widget, QEvent::KeyRelease, event->detail, event->state, event->time);
|
handleKeyEvent(window, QEvent::KeyRelease, event->detail, event->state, event->time);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QXcbKeyboard::handleMappingNotifyEvent(const xcb_mapping_notify_event_t *event)
|
void QXcbKeyboard::handleMappingNotifyEvent(const xcb_mapping_notify_event_t *event)
|
||||||
|
@ -48,21 +48,23 @@
|
|||||||
|
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
|
|
||||||
|
class QWindow;
|
||||||
|
|
||||||
class QXcbKeyboard : public QXcbObject
|
class QXcbKeyboard : public QXcbObject
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QXcbKeyboard(QXcbConnection *connection);
|
QXcbKeyboard(QXcbConnection *connection);
|
||||||
~QXcbKeyboard();
|
~QXcbKeyboard();
|
||||||
|
|
||||||
void handleKeyPressEvent(QWidget *widget, const xcb_key_press_event_t *event);
|
void handleKeyPressEvent(QWindow *window, const xcb_key_press_event_t *event);
|
||||||
void handleKeyReleaseEvent(QWidget *widget, const xcb_key_release_event_t *event);
|
void handleKeyReleaseEvent(QWindow *window, const xcb_key_release_event_t *event);
|
||||||
|
|
||||||
void handleMappingNotifyEvent(const xcb_mapping_notify_event_t *event);
|
void handleMappingNotifyEvent(const xcb_mapping_notify_event_t *event);
|
||||||
|
|
||||||
Qt::KeyboardModifiers translateModifiers(int s);
|
Qt::KeyboardModifiers translateModifiers(int s);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keycode_t code, quint16 state, xcb_timestamp_t time);
|
void handleKeyEvent(QWindow *window, QEvent::Type type, xcb_keycode_t code, quint16 state, xcb_timestamp_t time);
|
||||||
|
|
||||||
int translateKeySym(uint key) const;
|
int translateKeySym(uint key) const;
|
||||||
QString translateKeySym(xcb_keysym_t keysym, uint xmodifiers,
|
QString translateKeySym(xcb_keysym_t keysym, uint xmodifiers,
|
||||||
|
@ -534,7 +534,7 @@ void QXcbWindow::handleClientMessageEvent(const xcb_client_message_event_t *even
|
|||||||
{
|
{
|
||||||
if (event->format == 32 && event->type == atom(QXcbAtom::WM_PROTOCOLS)) {
|
if (event->format == 32 && event->type == atom(QXcbAtom::WM_PROTOCOLS)) {
|
||||||
if (event->data.data32[0] == atom(QXcbAtom::WM_DELETE_WINDOW)) {
|
if (event->data.data32[0] == atom(QXcbAtom::WM_DELETE_WINDOW)) {
|
||||||
QWindowSystemInterface::handleCloseEvent(window()->widget());
|
QWindowSystemInterface::handleCloseEvent(window());
|
||||||
} else if (event->data.data32[0] == atom(QXcbAtom::_NET_WM_PING)) {
|
} else if (event->data.data32[0] == atom(QXcbAtom::_NET_WM_PING)) {
|
||||||
xcb_client_message_event_t reply = *event;
|
xcb_client_message_event_t reply = *event;
|
||||||
|
|
||||||
@ -570,7 +570,7 @@ void QXcbWindow::handleConfigureNotifyEvent(const xcb_configure_notify_event_t *
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
QPlatformWindow::setGeometry(rect);
|
QPlatformWindow::setGeometry(rect);
|
||||||
QWindowSystemInterface::handleGeometryChange(window()->widget(), rect);
|
QWindowSystemInterface::handleGeometryChange(window(), rect);
|
||||||
|
|
||||||
#if XCB_USE_DRI2
|
#if XCB_USE_DRI2
|
||||||
if (m_context)
|
if (m_context)
|
||||||
@ -618,7 +618,7 @@ void QXcbWindow::handleButtonPressEvent(const xcb_button_press_event_t *event)
|
|||||||
&& (modifiers & Qt::AltModifier))
|
&& (modifiers & Qt::AltModifier))
|
||||||
|| (event->detail == 6 || event->detail == 7));
|
|| (event->detail == 6 || event->detail == 7));
|
||||||
|
|
||||||
QWindowSystemInterface::handleWheelEvent(window()->widget(), event->time,
|
QWindowSystemInterface::handleWheelEvent(window(), event->time,
|
||||||
local, global, delta, hor ? Qt::Horizontal : Qt::Vertical);
|
local, global, delta, hor ? Qt::Horizontal : Qt::Vertical);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -649,22 +649,22 @@ void QXcbWindow::handleMouseEvent(xcb_button_t detail, uint16_t state, xcb_times
|
|||||||
|
|
||||||
buttons ^= button; // X event uses state *before*, Qt uses state *after*
|
buttons ^= button; // X event uses state *before*, Qt uses state *after*
|
||||||
|
|
||||||
QWindowSystemInterface::handleMouseEvent(window()->widget(), time, local, global, buttons);
|
QWindowSystemInterface::handleMouseEvent(window(), time, local, global, buttons);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QXcbWindow::handleEnterNotifyEvent(const xcb_enter_notify_event_t *)
|
void QXcbWindow::handleEnterNotifyEvent(const xcb_enter_notify_event_t *)
|
||||||
{
|
{
|
||||||
QWindowSystemInterface::handleEnterEvent(window()->widget());
|
QWindowSystemInterface::handleEnterEvent(window());
|
||||||
}
|
}
|
||||||
|
|
||||||
void QXcbWindow::handleLeaveNotifyEvent(const xcb_leave_notify_event_t *)
|
void QXcbWindow::handleLeaveNotifyEvent(const xcb_leave_notify_event_t *)
|
||||||
{
|
{
|
||||||
QWindowSystemInterface::handleLeaveEvent(window()->widget());
|
QWindowSystemInterface::handleLeaveEvent(window());
|
||||||
}
|
}
|
||||||
|
|
||||||
void QXcbWindow::handleFocusInEvent(const xcb_focus_in_event_t *)
|
void QXcbWindow::handleFocusInEvent(const xcb_focus_in_event_t *)
|
||||||
{
|
{
|
||||||
QWindowSystemInterface::handleWindowActivated(window()->widget());
|
QWindowSystemInterface::handleWindowActivated(window());
|
||||||
}
|
}
|
||||||
|
|
||||||
void QXcbWindow::handleFocusOutEvent(const xcb_focus_out_event_t *)
|
void QXcbWindow::handleFocusOutEvent(const xcb_focus_out_event_t *)
|
||||||
|
Loading…
Reference in New Issue
Block a user