diff options
author | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2014-12-10 07:58:06 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2014-12-10 07:58:06 +0100 |
commit | 015002fec9abff6a4c1bb3fa4b9de87279a079c3 (patch) | |
tree | ad93af535a503d0a49d6c6367e990a8fbca163d3 /src/widgets/kernel | |
parent | f1e00262321cc8daa3c7506153653453e2779886 (diff) | |
parent | b9547af45ea2bbbc634722c1ef41afdb54216ce2 (diff) |
Merge remote-tracking branch 'origin/5.4' into dev
Conflicts:
doc/global/template/style/online.css
mkspecs/android-g++/qmake.conf
Change-Id: Ib39ea7bd42f5ae12e82a3bc59a66787a16bdfc61
Diffstat (limited to 'src/widgets/kernel')
-rw-r--r-- | src/widgets/kernel/qapplication.cpp | 33 | ||||
-rw-r--r-- | src/widgets/kernel/qapplication_p.h | 1 | ||||
-rw-r--r-- | src/widgets/kernel/qlayout.cpp | 3 | ||||
-rw-r--r-- | src/widgets/kernel/qstandardgestures.cpp | 23 |
4 files changed, 11 insertions, 49 deletions
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index 500e812e28..943abd1f1a 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -53,7 +53,6 @@ #include "qtranslator.h" #include "qvariant.h" #include "qwidget.h" -#include "qgraphicssceneevent.h" #include "private/qdnd_p.h" #include "private/qguiapplication_p.h" #include "qcolormap.h" @@ -2292,31 +2291,6 @@ QWidget *QApplicationPrivate::focusNextPrevChild_helper(QWidget *toplevel, bool return w; } -Qt::MouseEventSource QApplicationPrivate::mouseEventSource(const QEvent *e) -{ - switch (e->type()) { - case QEvent::NonClientAreaMouseButtonDblClick: - case QEvent::NonClientAreaMouseButtonPress: - case QEvent::NonClientAreaMouseButtonRelease: - case QEvent::NonClientAreaMouseMove: - case QEvent::MouseButtonDblClick: - case QEvent::MouseButtonPress: - case QEvent::MouseButtonRelease: - case QEvent::MouseMove: - return static_cast<const QMouseEvent *>(e)->source(); -#ifndef QT_NO_GRAPHICSVIEW - case QEvent::GraphicsSceneMouseDoubleClick: - case QEvent::GraphicsSceneMousePress: - case QEvent::GraphicsSceneMouseRelease: - case QEvent::GraphicsSceneMouseMove: - return static_cast<const QGraphicsSceneMouseEvent *>(e)->source(); -#endif // !QT_NO_GRAPHICSVIEW - default: - break; - } - return Qt::MouseEventNotSynthesized; -} - /*! \fn void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave, const QPointF &globalPosF) \internal @@ -4179,11 +4153,13 @@ void QApplicationPrivate::giveFocusAccordingToFocusPolicy(QWidget *widget, QEven { const bool setFocusOnRelease = QGuiApplication::styleHints()->setFocusOnTouchRelease(); Qt::FocusPolicy focusPolicy = Qt::ClickFocus; + static QPointer<QWidget> focusedWidgetOnTouchBegin = 0; switch (event->type()) { case QEvent::MouseButtonPress: case QEvent::MouseButtonDblClick: case QEvent::TouchBegin: + focusedWidgetOnTouchBegin = QApplication::focusWidget(); if (setFocusOnRelease) return; break; @@ -4191,6 +4167,11 @@ void QApplicationPrivate::giveFocusAccordingToFocusPolicy(QWidget *widget, QEven case QEvent::TouchEnd: if (!setFocusOnRelease) return; + if (focusedWidgetOnTouchBegin != QApplication::focusWidget()) { + // Focus widget was changed while delivering press/move events. + // To not interfere with application logic, we leave focus as-is + return; + } break; case QEvent::Wheel: focusPolicy = Qt::WheelFocus; diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h index 809c7ccd66..10f81a403a 100644 --- a/src/widgets/kernel/qapplication_p.h +++ b/src/widgets/kernel/qapplication_p.h @@ -168,7 +168,6 @@ public: static void setFocusWidget(QWidget *focus, Qt::FocusReason reason); static QWidget *focusNextPrevChild_helper(QWidget *toplevel, bool next, bool *wrappingOccurred = 0); - static Qt::MouseEventSource mouseEventSource(const QEvent *e); #ifndef QT_NO_GRAPHICSVIEW // Maintain a list of all scenes to ensure font and palette propagation to diff --git a/src/widgets/kernel/qlayout.cpp b/src/widgets/kernel/qlayout.cpp index 46cab90ab4..f124f1ed8e 100644 --- a/src/widgets/kernel/qlayout.cpp +++ b/src/widgets/kernel/qlayout.cpp @@ -576,11 +576,12 @@ void QLayoutPrivate::doResize(const QSize &r) int mbh = menuBarHeightForWidth(menubar, r.width()); QWidget *mw = q->parentWidget(); QRect rect = mw->testAttribute(Qt::WA_LayoutOnEntireRect) ? mw->rect() : mw->contentsRect(); + const int mbTop = rect.top(); rect.setTop(rect.top() + mbh); q->setGeometry(rect); #ifndef QT_NO_MENUBAR if (menubar) - menubar->setGeometry(0,0,r.width(), mbh); + menubar->setGeometry(rect.left(), mbTop, r.width(), mbh); #endif } diff --git a/src/widgets/kernel/qstandardgestures.cpp b/src/widgets/kernel/qstandardgestures.cpp index 53e5d091fa..6656903e70 100644 --- a/src/widgets/kernel/qstandardgestures.cpp +++ b/src/widgets/kernel/qstandardgestures.cpp @@ -38,7 +38,6 @@ #include "qwidget.h" #include "qabstractscrollarea.h" #include <qgraphicssceneevent.h> -#include <QtGui/QTouchDevice> #include "qdebug.h" #ifndef QT_NO_GESTURES @@ -68,26 +67,8 @@ static QPointF panOffset(const QList<QTouchEvent::TouchPoint> &touchPoints, int return result / qreal(count); } -// ### fixme: Remove this -// Use single finger pan to scroll QPlainTextEdit/QTextEdit -// by changing the number of pan points to 1 for these classes. -// This used to be Qt 4's behavior on Windows which was achieved using native -// Windows gesture recognizers for these classes. -// The other classes inheriting QScrollArea still use standard 2 finger pan. -// In the long run, they should also use single finger pan to -// scroll on touch screens, however, this requires a distinct Tap&Hold-followed-by-pan -// type gesture to avoid clashes with item view selection and DnD. - -static inline int panTouchPoints(const QTouchEvent *event, const QObject *object, - int defaultTouchPoints) -{ - return event->device()->type() == QTouchDevice::TouchScreen && object && object->parent() - && (object->parent()->inherits("QPlainTextEdit") || object->parent()->inherits("QTextEdit")) - ? 1 : defaultTouchPoints; -} - QGestureRecognizer::Result QPanGestureRecognizer::recognize(QGesture *state, - QObject *object, + QObject *, QEvent *event) { QPanGesture *q = static_cast<QPanGesture *>(state); @@ -100,7 +81,7 @@ QGestureRecognizer::Result QPanGestureRecognizer::recognize(QGesture *state, result = QGestureRecognizer::MayBeGesture; QTouchEvent::TouchPoint p = ev->touchPoints().at(0); d->lastOffset = d->offset = QPointF(); - d->pointCount = panTouchPoints(ev, object, m_pointCount); + d->pointCount = m_pointCount; break; } case QEvent::TouchEnd: { |