summaryrefslogtreecommitdiffstats
path: root/src/widgets/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/kernel')
-rw-r--r--src/widgets/kernel/qapplication.cpp139
-rw-r--r--src/widgets/kernel/qapplication_p.h5
-rw-r--r--src/widgets/kernel/qboxlayout.cpp2
-rw-r--r--src/widgets/kernel/qdesktopwidget.cpp1
-rw-r--r--src/widgets/kernel/qformlayout.cpp2
-rw-r--r--src/widgets/kernel/qgesturemanager.cpp4
-rw-r--r--src/widgets/kernel/qgridlayout.cpp2
-rw-r--r--src/widgets/kernel/qlayout.cpp2
-rw-r--r--src/widgets/kernel/qopenglwidget.cpp2
-rw-r--r--src/widgets/kernel/qshortcut.cpp2
-rw-r--r--src/widgets/kernel/qsizepolicy.cpp2
-rw-r--r--src/widgets/kernel/qstackedlayout.cpp2
-rw-r--r--src/widgets/kernel/qwidget.cpp3
-rw-r--r--src/widgets/kernel/qwidget.h52
-rw-r--r--src/widgets/kernel/qwidget_p.h3
-rw-r--r--src/widgets/kernel/qwidgetbackingstore.cpp2
-rw-r--r--src/widgets/kernel/qwidgetwindow.cpp4
-rw-r--r--src/widgets/kernel/qwindowcontainer.cpp2
18 files changed, 161 insertions, 70 deletions
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index 2d23bb61a2..2e68c7888f 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -424,7 +424,7 @@ QWidget *QApplicationPrivate::hidden_focus_widget = 0; // will get keyboard inpu
QWidget *QApplicationPrivate::active_window = 0; // toplevel with keyboard focus
#ifndef QT_NO_WHEELEVENT
int QApplicationPrivate::wheel_scroll_lines; // number of lines to scroll
-QWidget *QApplicationPrivate::wheel_widget = Q_NULLPTR;
+QPointer<QWidget> QApplicationPrivate::wheel_widget;
#endif
bool qt_in_tab_key_event = false;
int qt_antialiasing_threshold = -1;
@@ -569,13 +569,18 @@ QApplication::QApplication(int &argc, char **argv)
QApplication::QApplication(int &argc, char **argv, int _internal)
#endif
: QGuiApplication(*new QApplicationPrivate(argc, argv, _internal))
-{ Q_D(QApplication); d->construct(); }
+{
+ Q_D(QApplication);
+ d->init();
+}
/*!
\internal
*/
-void QApplicationPrivate::construct()
+void QApplicationPrivate::init()
{
+ QGuiApplicationPrivate::init();
+
initResources();
qt_is_gui_used = (application_type != QApplicationPrivate::Tty);
@@ -3319,9 +3324,32 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
const bool spontaneous = wheel->spontaneous();
const Qt::ScrollPhase phase = wheel->phase();
- if (phase == Qt::NoScrollPhase || phase == Qt::ScrollBegin
- || (phase == Qt::ScrollUpdate && !QApplicationPrivate::wheel_widget)) {
-
+ // Ideally, we should lock on a widget when it starts receiving wheel
+ // events. This avoids other widgets to start receiving those events
+ // as the mouse cursor hovers them. However, given the way common
+ // wheeled mice work, there's no certain way of connecting different
+ // wheel events as a stream. This results in the NoScrollPhase case,
+ // where we just send the event from the original receiver and up its
+ // hierarchy until the event gets accepted.
+ //
+ // In the case of more evolved input devices, like Apple's trackpad or
+ // Magic Mouse, we receive the scroll phase information. This helps us
+ // connect wheel events as a stream and therefore makes it easier to
+ // lock on the widget onto which the scrolling was initiated.
+ //
+ // We assume that, when supported, the phase cycle follows the pattern:
+ //
+ // ScrollBegin (ScrollUpdate* ScrollEnd)+
+ //
+ // This means that we can have scrolling sequences (starting with ScrollBegin)
+ // or partial sequences (after a ScrollEnd and starting with ScrollUpdate).
+ // If wheel_widget is null because it was deleted, we also take the same
+ // code path as an initial sequence.
+ if (phase == Qt::NoScrollPhase || phase == Qt::ScrollBegin || !QApplicationPrivate::wheel_widget) {
+
+ // A system-generated ScrollBegin event starts a new user scrolling
+ // sequence, so we reset wheel_widget in case no one accepts the event
+ // or if we didn't get (or missed) a ScrollEnd previously.
if (spontaneous && phase == Qt::ScrollBegin)
QApplicationPrivate::wheel_widget = Q_NULLPTR;
@@ -3331,7 +3359,7 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
QApplicationPrivate::giveFocusAccordingToFocusPolicy(w, e, relpos);
QWheelEvent we(relpos, wheel->globalPos(), wheel->pixelDelta(), wheel->angleDelta(), wheel->delta(), wheel->orientation(), wheel->buttons(),
- wheel->modifiers(), phase, wheel->source());
+ wheel->modifiers(), phase, wheel->source(), wheel->inverted());
bool eventAccepted;
while (w) {
we.spont = spontaneous && w == receiver;
@@ -3339,7 +3367,10 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
res = d->notify_helper(w, &we);
eventAccepted = we.isAccepted();
if (res && eventAccepted) {
- if (spontaneous && phase != Qt::NoScrollPhase)
+ // A new scrolling sequence or partial sequence starts and w has accepted
+ // the event. Therefore, we can set wheel_widget, but only if it's not
+ // the end of a sequence.
+ if (spontaneous && (phase == Qt::ScrollBegin || phase == Qt::ScrollUpdate))
QApplicationPrivate::wheel_widget = w;
break;
}
@@ -3350,25 +3381,27 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
w = w->parentWidget();
}
wheel->setAccepted(eventAccepted);
- } else if (QApplicationPrivate::wheel_widget) {
- if (!spontaneous) {
- // wheel_widget may forward the wheel event to a delegate widget,
- // either directly or indirectly (e.g. QAbstractScrollArea will
- // forward to its QScrollBars through viewportEvent()). In that
- // case, the event will not be spontaneous but synthesized, so
- // we can send it straigth to the receiver.
- d->notify_helper(w, wheel);
- } else {
- const QPoint &relpos = QApplicationPrivate::wheel_widget->mapFromGlobal(wheel->globalPos());
- QWheelEvent we(relpos, wheel->globalPos(), wheel->pixelDelta(), wheel->angleDelta(), wheel->delta(), wheel->orientation(), wheel->buttons(),
- wheel->modifiers(), wheel->phase(), wheel->source());
- we.spont = true;
- we.ignore();
- d->notify_helper(QApplicationPrivate::wheel_widget, &we);
- wheel->setAccepted(we.isAccepted());
- if (phase == Qt::ScrollEnd)
- QApplicationPrivate::wheel_widget = Q_NULLPTR;
- }
+ } else if (!spontaneous) {
+ // wheel_widget may forward the wheel event to a delegate widget,
+ // either directly or indirectly (e.g. QAbstractScrollArea will
+ // forward to its QScrollBars through viewportEvent()). In that
+ // case, the event will not be spontaneous but synthesized, so
+ // we can send it straight to the receiver.
+ d->notify_helper(w, wheel);
+ } else {
+ // The phase is either ScrollUpdate or ScrollEnd, and wheel_widget
+ // is set. Since it accepted the wheel event previously, we continue
+ // sending those events until we get a ScrollEnd, which signifies
+ // the end of the natural scrolling sequence.
+ const QPoint &relpos = QApplicationPrivate::wheel_widget->mapFromGlobal(wheel->globalPos());
+ QWheelEvent we(relpos, wheel->globalPos(), wheel->pixelDelta(), wheel->angleDelta(), wheel->delta(), wheel->orientation(), wheel->buttons(),
+ wheel->modifiers(), wheel->phase(), wheel->source());
+ we.spont = true;
+ we.ignore();
+ d->notify_helper(QApplicationPrivate::wheel_widget, &we);
+ wheel->setAccepted(we.isAccepted());
+ if (phase == Qt::ScrollEnd)
+ QApplicationPrivate::wheel_widget = Q_NULLPTR;
}
}
break;
@@ -3546,6 +3579,10 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
QApplicationPrivate::giveFocusAccordingToFocusPolicy(widget, e, localPos);
}
+#ifndef QT_NO_GESTURES
+ QPointer<QWidget> gesturePendingWidget;
+#endif
+
while (widget) {
// first, try to deliver the touch event
acceptTouchEvents = widget->testAttribute(Qt::WA_AcceptTouchEvents);
@@ -3563,14 +3600,16 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
touchEvent->spont = false;
if (res && eventAccepted) {
// the first widget to accept the TouchBegin gets an implicit grab.
- for (int i = 0; i < touchEvent->touchPoints().count(); ++i) {
- const QTouchEvent::TouchPoint &touchPoint = touchEvent->touchPoints().at(i);
- d->activeTouchPoints[QGuiApplicationPrivate::ActiveTouchPointsKey(touchEvent->device(), touchPoint.id())].target = widget;
- }
- break;
- } else if (p.isNull() || widget->isWindow() || widget->testAttribute(Qt::WA_NoMousePropagation)) {
+ d->activateImplicitTouchGrab(widget, touchEvent);
break;
}
+#ifndef QT_NO_GESTURES
+ if (gesturePendingWidget.isNull() && widget && QGestureManager::gesturePending(widget))
+ gesturePendingWidget = widget;
+#endif
+ if (p.isNull() || widget->isWindow() || widget->testAttribute(Qt::WA_NoMousePropagation))
+ break;
+
QPoint offset = widget->pos();
widget = widget->parentWidget();
touchEvent->setTarget(widget);
@@ -3584,9 +3623,27 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
}
}
+#ifndef QT_NO_GESTURES
+ if (!eventAccepted && !gesturePendingWidget.isNull()) {
+ // the first widget subscribed to a gesture gets an implicit grab
+ d->activateImplicitTouchGrab(gesturePendingWidget, touchEvent);
+ }
+#endif
+
touchEvent->setAccepted(eventAccepted);
break;
}
+ case QEvent::TouchUpdate:
+ case QEvent::TouchEnd:
+ {
+ QWidget *widget = static_cast<QWidget *>(receiver);
+ // We may get here if the widget is subscribed to a gesture,
+ // but has not accepted TouchBegin. Propagate touch events
+ // only if TouchBegin has been accepted.
+ if (widget && widget->testAttribute(Qt::WA_WState_AcceptedTouchBeginEvent))
+ res = d->notify_helper(widget, e);
+ break;
+ }
case QEvent::RequestSoftwareInputPanel:
inputMethod()->show();
break;
@@ -4327,6 +4384,17 @@ QWidget *QApplicationPrivate::findClosestTouchPointTarget(QTouchDevice *device,
return static_cast<QWidget *>(closestTarget);
}
+void QApplicationPrivate::activateImplicitTouchGrab(QWidget *widget, QTouchEvent *touchEvent)
+{
+ if (touchEvent->type() != QEvent::TouchBegin)
+ return;
+
+ for (int i = 0, tc = touchEvent->touchPoints().count(); i < tc; ++i) {
+ const QTouchEvent::TouchPoint &touchPoint = touchEvent->touchPoints().at(i);
+ activeTouchPoints[QGuiApplicationPrivate::ActiveTouchPointsKey(touchEvent->device(), touchPoint.id())].target = widget;
+ }
+}
+
bool QApplicationPrivate::translateRawTouchEvent(QWidget *window,
QTouchDevice *device,
const QList<QTouchEvent::TouchPoint> &touchPoints,
@@ -4457,10 +4525,11 @@ bool QApplicationPrivate::translateRawTouchEvent(QWidget *window,
|| QGestureManager::gesturePending(widget)
#endif
) {
- if (touchEvent.type() == QEvent::TouchEnd)
- widget->setAttribute(Qt::WA_WState_AcceptedTouchBeginEvent, false);
if (QApplication::sendSpontaneousEvent(widget, &touchEvent) && touchEvent.isAccepted())
accepted = true;
+ // widget can be deleted on TouchEnd
+ if (touchEvent.type() == QEvent::TouchEnd && !widget.isNull())
+ widget->setAttribute(Qt::WA_WState_AcceptedTouchBeginEvent, false);
}
break;
}
diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h
index 0482f83a8a..3358cce744 100644
--- a/src/widgets/kernel/qapplication_p.h
+++ b/src/widgets/kernel/qapplication_p.h
@@ -156,7 +156,7 @@ public:
bool notify_helper(QObject *receiver, QEvent * e);
- void construct(
+ void init(
#ifdef Q_DEAD_CODE_FROM_QT4_X11
Display *dpy = 0, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0
#endif
@@ -208,7 +208,7 @@ public:
static QWidget *active_window;
#ifndef QT_NO_WHEELEVENT
static int wheel_scroll_lines;
- static QWidget *wheel_widget;
+ static QPointer<QWidget> wheel_widget;
#endif
static int enabledAnimations; // Combination of QPlatformTheme::UiEffect
@@ -288,6 +288,7 @@ public:
QWidget *findClosestTouchPointTarget(QTouchDevice *device, const QTouchEvent::TouchPoint &touchPoint);
void appendTouchPoint(const QTouchEvent::TouchPoint &touchPoint);
void removeTouchPoint(int touchPointId);
+ void activateImplicitTouchGrab(QWidget *widget, QTouchEvent *touchBeginEvent);
static bool translateRawTouchEvent(QWidget *widget,
QTouchDevice *device,
const QList<QTouchEvent::TouchPoint> &touchPoints,
diff --git a/src/widgets/kernel/qboxlayout.cpp b/src/widgets/kernel/qboxlayout.cpp
index d167690468..f2e3df5314 100644
--- a/src/widgets/kernel/qboxlayout.cpp
+++ b/src/widgets/kernel/qboxlayout.cpp
@@ -1354,3 +1354,5 @@ QVBoxLayout::~QVBoxLayout()
}
QT_END_NAMESPACE
+
+#include "moc_qboxlayout.cpp"
diff --git a/src/widgets/kernel/qdesktopwidget.cpp b/src/widgets/kernel/qdesktopwidget.cpp
index 488665ff5f..fceb061867 100644
--- a/src/widgets/kernel/qdesktopwidget.cpp
+++ b/src/widgets/kernel/qdesktopwidget.cpp
@@ -274,3 +274,4 @@ void QDesktopWidget::resizeEvent(QResizeEvent *)
QT_END_NAMESPACE
#include "moc_qdesktopwidget.cpp"
+#include "moc_qdesktopwidget_p.cpp"
diff --git a/src/widgets/kernel/qformlayout.cpp b/src/widgets/kernel/qformlayout.cpp
index 2ee7716ac3..9b346a2c50 100644
--- a/src/widgets/kernel/qformlayout.cpp
+++ b/src/widgets/kernel/qformlayout.cpp
@@ -2114,3 +2114,5 @@ void QFormLayout::dump() const
#endif
QT_END_NAMESPACE
+
+#include "moc_qformlayout.cpp"
diff --git a/src/widgets/kernel/qgesturemanager.cpp b/src/widgets/kernel/qgesturemanager.cpp
index 9a3e9291bf..8af3516d4b 100644
--- a/src/widgets/kernel/qgesturemanager.cpp
+++ b/src/widgets/kernel/qgesturemanager.cpp
@@ -555,9 +555,9 @@ bool QGestureManager::filterEvent(QObject *receiver, QEvent *event)
if (widgetWindow)
return filterEvent(widgetWindow->widget(), event);
- if (!m_gestureToRecognizer.contains(static_cast<QGesture *>(receiver)))
+ QGesture *state = qobject_cast<QGesture *>(receiver);
+ if (!state || !m_gestureToRecognizer.contains(state))
return false;
- QGesture *state = static_cast<QGesture *>(receiver);
QMultiMap<QObject *, Qt::GestureType> contexts;
contexts.insert(state, state->gestureType());
return filterEventThroughContexts(contexts, event);
diff --git a/src/widgets/kernel/qgridlayout.cpp b/src/widgets/kernel/qgridlayout.cpp
index f3d294bd77..b58e7fdc9e 100644
--- a/src/widgets/kernel/qgridlayout.cpp
+++ b/src/widgets/kernel/qgridlayout.cpp
@@ -1692,3 +1692,5 @@ void QGridLayout::invalidate()
}
QT_END_NAMESPACE
+
+#include "moc_qgridlayout.cpp"
diff --git a/src/widgets/kernel/qlayout.cpp b/src/widgets/kernel/qlayout.cpp
index 6c94d81e43..240f525722 100644
--- a/src/widgets/kernel/qlayout.cpp
+++ b/src/widgets/kernel/qlayout.cpp
@@ -1477,3 +1477,5 @@ QSize QLayout::closestAcceptableSize(const QWidget *widget, const QSize &size)
}
QT_END_NAMESPACE
+
+#include "moc_qlayout.cpp"
diff --git a/src/widgets/kernel/qopenglwidget.cpp b/src/widgets/kernel/qopenglwidget.cpp
index f3c86ea306..5071c56763 100644
--- a/src/widgets/kernel/qopenglwidget.cpp
+++ b/src/widgets/kernel/qopenglwidget.cpp
@@ -1349,3 +1349,5 @@ bool QOpenGLWidget::event(QEvent *e)
}
QT_END_NAMESPACE
+
+#include "moc_qopenglwidget.cpp"
diff --git a/src/widgets/kernel/qshortcut.cpp b/src/widgets/kernel/qshortcut.cpp
index 77efaf1632..bf162249d0 100644
--- a/src/widgets/kernel/qshortcut.cpp
+++ b/src/widgets/kernel/qshortcut.cpp
@@ -658,3 +658,5 @@ bool QShortcut::event(QEvent *e)
#endif // QT_NO_SHORTCUT
QT_END_NAMESPACE
+
+#include "moc_qshortcut.cpp"
diff --git a/src/widgets/kernel/qsizepolicy.cpp b/src/widgets/kernel/qsizepolicy.cpp
index 63024fcf42..66fa350f81 100644
--- a/src/widgets/kernel/qsizepolicy.cpp
+++ b/src/widgets/kernel/qsizepolicy.cpp
@@ -512,3 +512,5 @@ QDebug operator<<(QDebug dbg, const QSizePolicy &p)
#endif
QT_END_NAMESPACE
+
+#include "moc_qsizepolicy.cpp"
diff --git a/src/widgets/kernel/qstackedlayout.cpp b/src/widgets/kernel/qstackedlayout.cpp
index 05f7f39f0f..006b3e8588 100644
--- a/src/widgets/kernel/qstackedlayout.cpp
+++ b/src/widgets/kernel/qstackedlayout.cpp
@@ -596,3 +596,5 @@ void QStackedLayout::setStackingMode(StackingMode stackingMode)
}
QT_END_NAMESPACE
+
+#include "moc_qstackedlayout.cpp"
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index a5b64e5bfc..598991bd98 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -1892,7 +1892,6 @@ void QWidgetPrivate::deleteTLSysExtra()
if (extra->topextra->window) {
extra->topextra->window->destroy();
}
- setWinId(0);
delete extra->topextra->window;
extra->topextra->window = 0;
@@ -7244,7 +7243,7 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove)
if (q->isVisible())
hide_sys();
data.crect = QRect(x, y, w, h);
- } else if (q->isVisible() && q->testAttribute(Qt::WA_OutsideWSRange)) {
+ } else if (q->testAttribute(Qt::WA_OutsideWSRange)) {
q->setAttribute(Qt::WA_OutsideWSRange, false);
needsShow = true;
}
diff --git a/src/widgets/kernel/qwidget.h b/src/widgets/kernel/qwidget.h
index cce31e4011..43ca76ac7c 100644
--- a/src/widgets/kernel/qwidget.h
+++ b/src/widgets/kernel/qwidget.h
@@ -612,43 +612,43 @@ Q_SIGNALS:
protected:
// Event handlers
- bool event(QEvent *) Q_DECL_OVERRIDE;
- virtual void mousePressEvent(QMouseEvent *);
- virtual void mouseReleaseEvent(QMouseEvent *);
- virtual void mouseDoubleClickEvent(QMouseEvent *);
- virtual void mouseMoveEvent(QMouseEvent *);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ virtual void mousePressEvent(QMouseEvent *event);
+ virtual void mouseReleaseEvent(QMouseEvent *event);
+ virtual void mouseDoubleClickEvent(QMouseEvent *event);
+ virtual void mouseMoveEvent(QMouseEvent *event);
#ifndef QT_NO_WHEELEVENT
- virtual void wheelEvent(QWheelEvent *);
-#endif
- virtual void keyPressEvent(QKeyEvent *);
- virtual void keyReleaseEvent(QKeyEvent *);
- virtual void focusInEvent(QFocusEvent *);
- virtual void focusOutEvent(QFocusEvent *);
- virtual void enterEvent(QEvent *);
- virtual void leaveEvent(QEvent *);
- virtual void paintEvent(QPaintEvent *);
- virtual void moveEvent(QMoveEvent *);
- virtual void resizeEvent(QResizeEvent *);
- virtual void closeEvent(QCloseEvent *);
+ virtual void wheelEvent(QWheelEvent *event);
+#endif
+ virtual void keyPressEvent(QKeyEvent *event);
+ virtual void keyReleaseEvent(QKeyEvent *event);
+ virtual void focusInEvent(QFocusEvent *event);
+ virtual void focusOutEvent(QFocusEvent *event);
+ virtual void enterEvent(QEvent *event);
+ virtual void leaveEvent(QEvent *event);
+ virtual void paintEvent(QPaintEvent *event);
+ virtual void moveEvent(QMoveEvent *event);
+ virtual void resizeEvent(QResizeEvent *event);
+ virtual void closeEvent(QCloseEvent *event);
#ifndef QT_NO_CONTEXTMENU
- virtual void contextMenuEvent(QContextMenuEvent *);
+ virtual void contextMenuEvent(QContextMenuEvent *event);
#endif
#ifndef QT_NO_TABLETEVENT
- virtual void tabletEvent(QTabletEvent *);
+ virtual void tabletEvent(QTabletEvent *event);
#endif
#ifndef QT_NO_ACTION
- virtual void actionEvent(QActionEvent *);
+ virtual void actionEvent(QActionEvent *event);
#endif
#ifndef QT_NO_DRAGANDDROP
- virtual void dragEnterEvent(QDragEnterEvent *);
- virtual void dragMoveEvent(QDragMoveEvent *);
- virtual void dragLeaveEvent(QDragLeaveEvent *);
- virtual void dropEvent(QDropEvent *);
+ virtual void dragEnterEvent(QDragEnterEvent *event);
+ virtual void dragMoveEvent(QDragMoveEvent *event);
+ virtual void dragLeaveEvent(QDragLeaveEvent *event);
+ virtual void dropEvent(QDropEvent *event);
#endif
- virtual void showEvent(QShowEvent *);
- virtual void hideEvent(QHideEvent *);
+ virtual void showEvent(QShowEvent *event);
+ virtual void hideEvent(QHideEvent *event);
virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result);
// Misc. protected functions
diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h
index fe5b3cc85d..91af7a4cb0 100644
--- a/src/widgets/kernel/qwidget_p.h
+++ b/src/widgets/kernel/qwidget_p.h
@@ -74,7 +74,6 @@ QT_BEGIN_NAMESPACE
// Extra QWidget data
// - to minimize memory usage for members that are seldom used.
// - top-level widgets have extra extra data to reduce cost further
-class QWidgetWindow;
class QPaintEngine;
class QPixmap;
class QWidgetBackingStore;
@@ -160,7 +159,7 @@ struct QTLWExtra {
QWidgetBackingStoreTracker backingStoreTracker;
QBackingStore *backingStore;
QPainter *sharedPainter;
- QWidgetWindow *window;
+ QWindow *window;
QOpenGLContext *shareContext;
// Implicit pointers (shared_null).
diff --git a/src/widgets/kernel/qwidgetbackingstore.cpp b/src/widgets/kernel/qwidgetbackingstore.cpp
index e925475b79..7a4a6d862d 100644
--- a/src/widgets/kernel/qwidgetbackingstore.cpp
+++ b/src/widgets/kernel/qwidgetbackingstore.cpp
@@ -1630,3 +1630,5 @@ void QWidgetPrivate::repaint_sys(const QRegion &rgn)
QT_END_NAMESPACE
+
+#include "moc_qwidgetbackingstore_p.cpp"
diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp
index 6a3785ea03..c22841dd56 100644
--- a/src/widgets/kernel/qwidgetwindow.cpp
+++ b/src/widgets/kernel/qwidgetwindow.cpp
@@ -776,7 +776,7 @@ void QWidgetWindow::handleWheelEvent(QWheelEvent *event)
QPoint mapped = widget->mapFrom(rootWidget, pos);
- QWheelEvent translated(mapped, event->globalPos(), event->pixelDelta(), event->angleDelta(), event->delta(), event->orientation(), event->buttons(), event->modifiers(), event->phase(), event->source());
+ QWheelEvent translated(mapped, event->globalPos(), event->pixelDelta(), event->angleDelta(), event->delta(), event->orientation(), event->buttons(), event->modifiers(), event->phase(), event->source(), event->inverted());
QGuiApplication::sendSpontaneousEvent(widget, &translated);
}
@@ -1007,3 +1007,5 @@ void QWidgetWindow::updateObjectName()
}
QT_END_NAMESPACE
+
+#include "moc_qwidgetwindow_p.cpp"
diff --git a/src/widgets/kernel/qwindowcontainer.cpp b/src/widgets/kernel/qwindowcontainer.cpp
index 462a41ce5d..d7f4b1f989 100644
--- a/src/widgets/kernel/qwindowcontainer.cpp
+++ b/src/widgets/kernel/qwindowcontainer.cpp
@@ -403,3 +403,5 @@ void QWindowContainer::parentWasLowered(QWidget *parent)
}
QT_END_NAMESPACE
+
+#include "moc_qwindowcontainer_p.cpp"