summaryrefslogtreecommitdiffstats
path: root/src/widgets/kernel
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@theqtcompany.com>2014-12-10 07:58:06 +0100
committerSimon Hausmann <simon.hausmann@theqtcompany.com>2014-12-10 07:58:06 +0100
commit015002fec9abff6a4c1bb3fa4b9de87279a079c3 (patch)
treead93af535a503d0a49d6c6367e990a8fbca163d3 /src/widgets/kernel
parentf1e00262321cc8daa3c7506153653453e2779886 (diff)
parentb9547af45ea2bbbc634722c1ef41afdb54216ce2 (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.cpp33
-rw-r--r--src/widgets/kernel/qapplication_p.h1
-rw-r--r--src/widgets/kernel/qlayout.cpp3
-rw-r--r--src/widgets/kernel/qstandardgestures.cpp23
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: {