5635823e17
As in the past, to avoid rewriting various autotests that contain line-number information, an extra blank line has been inserted at the end of the license text to ensure that this commit does not change the total number of lines in the license header. Change-Id: I311e001373776812699d6efc045b5f742890c689 Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
596 lines
26 KiB
C++
596 lines
26 KiB
C++
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
|
** Contact: http://www.qt-project.org/
|
|
**
|
|
** This file is part of the test suite module of the Qt Toolkit.
|
|
**
|
|
** $QT_BEGIN_LICENSE:LGPL$
|
|
** GNU Lesser General Public License Usage
|
|
** 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.
|
|
**
|
|
** GNU General Public License Usage
|
|
** Alternatively, this file may be used under the terms of the GNU General
|
|
** Public License version 3.0 as published by the Free Software Foundation
|
|
** and appearing in the file LICENSE.GPL included in the packaging of this
|
|
** file. Please review the following information to ensure the GNU General
|
|
** Public License version 3.0 requirements will be met:
|
|
** http://www.gnu.org/copyleft/gpl.html.
|
|
**
|
|
** Other Usage
|
|
** Alternatively, this file may be used in accordance with the terms and
|
|
** conditions contained in a signed written agreement between you and Nokia.
|
|
**
|
|
**
|
|
**
|
|
**
|
|
**
|
|
**
|
|
** $QT_END_LICENSE$
|
|
**
|
|
****************************************************************************/
|
|
|
|
#include <QtGui>
|
|
#include <QtTest>
|
|
|
|
#include "ui_form.h"
|
|
#include "touchwidget.h"
|
|
|
|
class MultitouchTestWidget : public QWidget, public Ui::Form
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
MultitouchTestWidget(QWidget *parent = 0)
|
|
: QWidget(parent)
|
|
{
|
|
setAttribute(Qt::WA_QuitOnClose, false);
|
|
setupUi(this);
|
|
}
|
|
|
|
void closeEvent(QCloseEvent *event)
|
|
{
|
|
event->accept();
|
|
QTimer::singleShot(1000, qApp, SLOT(quit()));
|
|
}
|
|
};
|
|
|
|
class tst_ManualMultitouch : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
tst_ManualMultitouch();
|
|
~tst_ManualMultitouch();
|
|
|
|
private slots:
|
|
void ignoringTouchEventsEmulatesMouseEvents();
|
|
void basicSingleTouchEventHandling();
|
|
void basicMultiTouchEventHandling();
|
|
void acceptingTouchBeginStopsPropagation();
|
|
void ignoringTouchBeginPropagatesToParent();
|
|
void secondTouchPointOnParentGoesToChild();
|
|
void secondTouchPointOnChildGoesToParent();
|
|
void secondTouchPointOnSiblingGoesToSibling();
|
|
void secondTouchPointOnCousinGoesToCousin();
|
|
};
|
|
|
|
tst_ManualMultitouch::tst_ManualMultitouch()
|
|
{ }
|
|
|
|
tst_ManualMultitouch::~tst_ManualMultitouch()
|
|
{ }
|
|
|
|
void tst_ManualMultitouch::ignoringTouchEventsEmulatesMouseEvents()
|
|
{
|
|
// first, make sure that we get mouse events when not enabling touch events
|
|
MultitouchTestWidget testWidget;
|
|
testWidget.testNameLabel->setText("Mouse Event Emulation Test");
|
|
testWidget.testDescriptionLabel->setText("Touch, hold, and release your finger on the green widget.");
|
|
testWidget.redWidget->hide();
|
|
testWidget.blueWidget->hide();
|
|
testWidget.greenWidget->closeWindowOnMouseRelease = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(!testWidget.greenWidget->seenTouchBegin);
|
|
// QVERIFY(!testWidget.greenWidget->seenTouchUpdate);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchEnd);
|
|
QVERIFY(testWidget.greenWidget->seenMousePress);
|
|
// QVERIFY(testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(testWidget.greenWidget->seenMouseRelease);
|
|
|
|
// enable touch, but don't accept the events
|
|
testWidget.greenWidget->reset();
|
|
testWidget.greenWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.greenWidget->closeWindowOnMouseRelease = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.greenWidget->seenTouchBegin);
|
|
// QVERIFY(!testWidget.greenWidget->seenTouchUpdate);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchEnd);
|
|
QVERIFY(testWidget.greenWidget->seenMousePress);
|
|
// QVERIFY(testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(testWidget.greenWidget->seenMouseRelease);
|
|
}
|
|
|
|
void tst_ManualMultitouch::basicSingleTouchEventHandling()
|
|
{
|
|
// now enable touch and make sure we get the touch events
|
|
MultitouchTestWidget testWidget;
|
|
testWidget.testNameLabel->setText("Basic Single-Touch Event Handling Test");
|
|
testWidget.testDescriptionLabel->setText("Touch, hold, and release your finger on the green widget.");
|
|
testWidget.redWidget->hide();
|
|
testWidget.blueWidget->hide();
|
|
testWidget.greenWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.greenWidget->acceptTouchBegin = true;
|
|
testWidget.greenWidget->acceptTouchUpdate = true;
|
|
testWidget.greenWidget->acceptTouchEnd = true;
|
|
testWidget.greenWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.greenWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.greenWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.greenWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greenWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseRelease);
|
|
|
|
// again, ignoring the TouchEnd
|
|
testWidget.greenWidget->reset();
|
|
testWidget.greenWidget->acceptTouchBegin = true;
|
|
testWidget.greenWidget->acceptTouchUpdate = true;
|
|
// testWidget.greenWidget->acceptTouchEnd = true;
|
|
testWidget.greenWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.greenWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.greenWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.greenWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greenWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseRelease);
|
|
|
|
// again, ignoring TouchUpdates
|
|
testWidget.greenWidget->reset();
|
|
testWidget.greenWidget->acceptTouchBegin = true;
|
|
// testWidget.greenWidget->acceptTouchUpdate = true;
|
|
testWidget.greenWidget->acceptTouchEnd = true;
|
|
testWidget.greenWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.greenWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.greenWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.greenWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greenWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseRelease);
|
|
|
|
// last time, ignoring TouchUpdates and TouchEnd
|
|
testWidget.greenWidget->reset();
|
|
testWidget.greenWidget->acceptTouchBegin = true;
|
|
// testWidget.greenWidget->acceptTouchUpdate = true;
|
|
// testWidget.greenWidget->acceptTouchEnd = true;
|
|
testWidget.greenWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.greenWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.greenWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.greenWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greenWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseRelease);
|
|
}
|
|
|
|
void tst_ManualMultitouch::basicMultiTouchEventHandling()
|
|
{
|
|
// repeat, this time looking for multiple fingers
|
|
MultitouchTestWidget testWidget;
|
|
testWidget.testNameLabel->setText("Basic Multi-Touch Event Handling Test");
|
|
testWidget.testDescriptionLabel->setText("Touch, hold, and release several fingers on the red widget.");
|
|
testWidget.greenWidget->hide();
|
|
testWidget.greyWidget->hide();
|
|
testWidget.redWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.redWidget->acceptTouchBegin = true;
|
|
testWidget.redWidget->acceptTouchUpdate = true;
|
|
testWidget.redWidget->acceptTouchEnd = true;
|
|
testWidget.redWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.redWidget->seenTouchBegin);
|
|
QVERIFY(testWidget.redWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.redWidget->seenTouchEnd);
|
|
QVERIFY(testWidget.redWidget->touchPointCount > 1);
|
|
QVERIFY(!testWidget.greenWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseRelease);
|
|
|
|
testWidget.redWidget->reset();
|
|
testWidget.redWidget->acceptTouchBegin = true;
|
|
// testWidget.redWidget->acceptTouchUpdate = true;
|
|
testWidget.redWidget->acceptTouchEnd = true;
|
|
testWidget.redWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.redWidget->seenTouchBegin);
|
|
QVERIFY(testWidget.redWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.redWidget->seenTouchEnd);
|
|
QVERIFY(testWidget.redWidget->touchPointCount > 1);
|
|
QVERIFY(!testWidget.greenWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseRelease);
|
|
|
|
testWidget.redWidget->reset();
|
|
testWidget.redWidget->acceptTouchBegin = true;
|
|
testWidget.redWidget->acceptTouchUpdate = true;
|
|
// testWidget.redWidget->acceptTouchEnd = true;
|
|
testWidget.redWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.redWidget->seenTouchBegin);
|
|
QVERIFY(testWidget.redWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.redWidget->seenTouchEnd);
|
|
QVERIFY(testWidget.redWidget->touchPointCount > 1);
|
|
QVERIFY(!testWidget.greenWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseRelease);
|
|
|
|
testWidget.redWidget->reset();
|
|
testWidget.redWidget->acceptTouchBegin = true;
|
|
// testWidget.redWidget->acceptTouchUpdate = true;
|
|
// testWidget.redWidget->acceptTouchEnd = true;
|
|
testWidget.redWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.redWidget->seenTouchBegin);
|
|
QVERIFY(testWidget.redWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.redWidget->seenTouchEnd);
|
|
QVERIFY(testWidget.redWidget->touchPointCount > 1);
|
|
QVERIFY(!testWidget.greenWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseRelease);
|
|
}
|
|
|
|
void tst_ManualMultitouch::acceptingTouchBeginStopsPropagation()
|
|
{
|
|
// test that accepting the TouchBegin event on the
|
|
// blueWidget stops propagation to the greenWidget
|
|
MultitouchTestWidget testWidget;
|
|
testWidget.testNameLabel->setText("Touch Event Propagation Test: Accepting in Blue Blocks Green");
|
|
testWidget.testDescriptionLabel->setText("Touch, hold, and release your finger on the blue widget.");
|
|
testWidget.redWidget->hide();
|
|
testWidget.blueWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.greenWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.blueWidget->acceptTouchBegin = true;
|
|
testWidget.blueWidget->acceptTouchUpdate = true;
|
|
testWidget.blueWidget->acceptTouchEnd = true;
|
|
testWidget.blueWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.blueWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.blueWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.blueWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.blueWidget->seenMousePress);
|
|
QVERIFY(!testWidget.blueWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.blueWidget->seenMouseRelease);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchBegin);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchUpdate);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greenWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseRelease);
|
|
|
|
// ignoring TouchEnd
|
|
testWidget.blueWidget->reset();
|
|
testWidget.greenWidget->reset();
|
|
testWidget.blueWidget->acceptTouchBegin = true;
|
|
testWidget.blueWidget->acceptTouchUpdate = true;
|
|
// testWidget.blueWidget->acceptTouchEnd = true;
|
|
testWidget.blueWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.blueWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.blueWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.blueWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.blueWidget->seenMousePress);
|
|
QVERIFY(!testWidget.blueWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.blueWidget->seenMouseRelease);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchBegin);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchUpdate);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greenWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseRelease);
|
|
|
|
// ignoring TouchUpdate
|
|
testWidget.blueWidget->reset();
|
|
testWidget.greenWidget->reset();
|
|
testWidget.blueWidget->acceptTouchBegin = true;
|
|
// testWidget.blueWidget->acceptTouchUpdate = true;
|
|
testWidget.blueWidget->acceptTouchEnd = true;
|
|
testWidget.blueWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.blueWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.blueWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.blueWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.blueWidget->seenMousePress);
|
|
QVERIFY(!testWidget.blueWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.blueWidget->seenMouseRelease);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchBegin);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchUpdate);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greenWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseRelease);
|
|
|
|
// ignoring TouchUpdate and TouchEnd
|
|
testWidget.blueWidget->reset();
|
|
testWidget.greenWidget->reset();
|
|
testWidget.blueWidget->acceptTouchBegin = true;
|
|
// testWidget.blueWidget->acceptTouchUpdate = true;
|
|
// testWidget.blueWidget->acceptTouchEnd = true;
|
|
testWidget.blueWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.blueWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.blueWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.blueWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.blueWidget->seenMousePress);
|
|
QVERIFY(!testWidget.blueWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.blueWidget->seenMouseRelease);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchBegin);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchUpdate);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greenWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseRelease);
|
|
}
|
|
|
|
void tst_ManualMultitouch::ignoringTouchBeginPropagatesToParent()
|
|
{
|
|
// repeat the test above, now ignoring touch events in the
|
|
// greyWidget, they should be propagated to the redWidget
|
|
MultitouchTestWidget testWidget;
|
|
testWidget.testNameLabel->setText("Touch Event Propagation Test: Ignoring in Grey Propagates to Red");
|
|
testWidget.testDescriptionLabel->setText("Touch, hold, and release your finger on the grey widget.");
|
|
testWidget.greenWidget->hide();
|
|
testWidget.greyWidget->setAttribute(Qt::WA_AcceptTouchEvents, false);
|
|
testWidget.redWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.greyWidget->reset();
|
|
testWidget.redWidget->reset();
|
|
testWidget.redWidget->acceptTouchBegin = true;
|
|
testWidget.redWidget->acceptTouchUpdate = true;
|
|
testWidget.redWidget->acceptTouchEnd = true;
|
|
testWidget.redWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(!testWidget.greyWidget->seenTouchBegin);
|
|
QVERIFY(!testWidget.greyWidget->seenTouchUpdate);
|
|
QVERIFY(!testWidget.greyWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greyWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greyWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greyWidget->seenMouseRelease);
|
|
QVERIFY(testWidget.redWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.redWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.redWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.redWidget->seenMousePress);
|
|
QVERIFY(!testWidget.redWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.redWidget->seenMouseRelease);
|
|
|
|
// again, but this time greyWidget should see the TouchBegin
|
|
testWidget.greyWidget->reset();
|
|
testWidget.redWidget->reset();
|
|
testWidget.greyWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.redWidget->acceptTouchBegin = true;
|
|
testWidget.redWidget->acceptTouchUpdate = true;
|
|
testWidget.redWidget->acceptTouchEnd = true;
|
|
testWidget.redWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.greyWidget->seenTouchBegin);
|
|
QVERIFY(!testWidget.greyWidget->seenTouchUpdate);
|
|
QVERIFY(!testWidget.greyWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greyWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greyWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greyWidget->seenMouseRelease);
|
|
QVERIFY(testWidget.redWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.redWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.redWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.redWidget->seenMousePress);
|
|
QVERIFY(!testWidget.redWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.redWidget->seenMouseRelease);
|
|
|
|
// again, ignoring the TouchEnd
|
|
testWidget.greyWidget->reset();
|
|
testWidget.redWidget->reset();
|
|
testWidget.redWidget->acceptTouchBegin = true;
|
|
testWidget.redWidget->acceptTouchUpdate = true;
|
|
// testWidget.redWidget->acceptTouchEnd = true;
|
|
testWidget.redWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.greyWidget->seenTouchBegin);
|
|
QVERIFY(!testWidget.greyWidget->seenTouchUpdate);
|
|
QVERIFY(!testWidget.greyWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greyWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greyWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greyWidget->seenMouseRelease);
|
|
QVERIFY(testWidget.redWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.redWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.redWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.redWidget->seenMousePress);
|
|
QVERIFY(!testWidget.redWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.redWidget->seenMouseRelease);
|
|
|
|
// again, ignoring TouchUpdates
|
|
testWidget.greyWidget->reset();
|
|
testWidget.redWidget->reset();
|
|
testWidget.redWidget->acceptTouchBegin = true;
|
|
// testWidget.redWidget->acceptTouchUpdate = true;
|
|
testWidget.redWidget->acceptTouchEnd = true;
|
|
testWidget.redWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.greyWidget->seenTouchBegin);
|
|
QVERIFY(!testWidget.greyWidget->seenTouchUpdate);
|
|
QVERIFY(!testWidget.greyWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greyWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greyWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greyWidget->seenMouseRelease);
|
|
QVERIFY(testWidget.redWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.redWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.redWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.redWidget->seenMousePress);
|
|
QVERIFY(!testWidget.redWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.redWidget->seenMouseRelease);
|
|
|
|
// last time, ignoring TouchUpdates and TouchEnd
|
|
testWidget.greyWidget->reset();
|
|
testWidget.redWidget->reset();
|
|
testWidget.redWidget->acceptTouchBegin = true;
|
|
// testWidget.redWidget->acceptTouchUpdate = true;
|
|
// testWidget.redWidget->acceptTouchEnd = true;
|
|
testWidget.redWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.greyWidget->seenTouchBegin);
|
|
QVERIFY(!testWidget.greyWidget->seenTouchUpdate);
|
|
QVERIFY(!testWidget.greyWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greyWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greyWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.blueWidget->seenMouseRelease);
|
|
QVERIFY(testWidget.redWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.redWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.redWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.redWidget->seenMousePress);
|
|
QVERIFY(!testWidget.redWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.redWidget->seenMouseRelease);
|
|
}
|
|
|
|
void tst_ManualMultitouch::secondTouchPointOnParentGoesToChild()
|
|
{
|
|
MultitouchTestWidget testWidget;
|
|
testWidget.testNameLabel->setText("Additional Touch-Points Outside Child's Rect Go to Child");
|
|
testWidget.testDescriptionLabel->setText("Press and hold a finger on the blue widget, then on the green one, and release.");
|
|
testWidget.redWidget->hide();
|
|
testWidget.greenWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.blueWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.blueWidget->acceptTouchBegin = true;
|
|
testWidget.greenWidget->acceptTouchBegin = true;
|
|
testWidget.blueWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.blueWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.blueWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.blueWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.blueWidget->seenMousePress);
|
|
QVERIFY(!testWidget.blueWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.blueWidget->seenMouseRelease);
|
|
QVERIFY(testWidget.blueWidget->touchPointCount > 1);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchBegin);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchUpdate);
|
|
QVERIFY(!testWidget.greenWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greenWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseRelease);
|
|
}
|
|
|
|
void tst_ManualMultitouch::secondTouchPointOnChildGoesToParent()
|
|
{
|
|
MultitouchTestWidget testWidget;
|
|
testWidget.testNameLabel->setText("Additional Touch-Points Over Child's Rect Go to Parent");
|
|
testWidget.testDescriptionLabel->setText("Press and hold a finger on the red widget, then on the grey one, and release.");
|
|
testWidget.greenWidget->hide();
|
|
testWidget.redWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.greyWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.greyWidget->acceptTouchBegin = true;
|
|
testWidget.redWidget->acceptTouchBegin = true;
|
|
testWidget.redWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.redWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.redWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.redWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.redWidget->seenMousePress);
|
|
QVERIFY(!testWidget.redWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.redWidget->seenMouseRelease);
|
|
QVERIFY(testWidget.redWidget->touchPointCount > 1);
|
|
QVERIFY(!testWidget.greyWidget->seenTouchBegin);
|
|
QVERIFY(!testWidget.greyWidget->seenTouchUpdate);
|
|
QVERIFY(!testWidget.greyWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greyWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greyWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greyWidget->seenMouseRelease);
|
|
}
|
|
|
|
void tst_ManualMultitouch::secondTouchPointOnSiblingGoesToSibling()
|
|
{
|
|
MultitouchTestWidget testWidget;
|
|
testWidget.testNameLabel->setText("Multi-Touch Interaction Test, Unrelated Widgets Get Separate Events");
|
|
testWidget.testDescriptionLabel->setText("Press and hold a finger on the green widget, then the red one, and release.");
|
|
testWidget.blueWidget->hide();
|
|
testWidget.greenWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.greenWidget->acceptTouchBegin = true;
|
|
testWidget.greenWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.greyWidget->hide();
|
|
testWidget.redWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.redWidget->acceptTouchBegin = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.greenWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.greenWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.greenWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greenWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greenWidget->seenMouseRelease);
|
|
QVERIFY(testWidget.redWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.redWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.redWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.redWidget->seenMousePress);
|
|
QVERIFY(!testWidget.redWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.redWidget->seenMouseRelease);
|
|
QVERIFY(testWidget.greenWidget->touchPointCount == 1);
|
|
QVERIFY(testWidget.redWidget->touchPointCount == 1);
|
|
}
|
|
|
|
void tst_ManualMultitouch::secondTouchPointOnCousinGoesToCousin()
|
|
{
|
|
MultitouchTestWidget testWidget;
|
|
testWidget.testNameLabel->setText("Multi-Touch Interaction Test, Unrelated Widgets Get Separate Events");
|
|
testWidget.testDescriptionLabel->setText("Press and hold a finger on the blue widget, then the grey one, and release.");
|
|
testWidget.blueWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.blueWidget->acceptTouchBegin = true;
|
|
testWidget.blueWidget->closeWindowOnTouchEnd = true;
|
|
testWidget.greyWidget->setAttribute(Qt::WA_AcceptTouchEvents);
|
|
testWidget.greyWidget->acceptTouchBegin = true;
|
|
testWidget.showMaximized();
|
|
(void) qApp->exec();
|
|
QVERIFY(testWidget.blueWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.blueWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.blueWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.blueWidget->seenMousePress);
|
|
QVERIFY(!testWidget.blueWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.blueWidget->seenMouseRelease);
|
|
QVERIFY(testWidget.greyWidget->seenTouchBegin);
|
|
// QVERIFY(testWidget.greyWidget->seenTouchUpdate);
|
|
QVERIFY(testWidget.greyWidget->seenTouchEnd);
|
|
QVERIFY(!testWidget.greyWidget->seenMousePress);
|
|
QVERIFY(!testWidget.greyWidget->seenMouseMove);
|
|
QVERIFY(!testWidget.greyWidget->seenMouseRelease);
|
|
QVERIFY(testWidget.blueWidget->touchPointCount == 1);
|
|
QVERIFY(testWidget.greyWidget->touchPointCount == 1);
|
|
}
|
|
|
|
QTEST_MAIN(tst_ManualMultitouch)
|
|
|
|
#include "main.moc"
|