38be0d1383
This is the beginning of revision history for this module. If you want to look at revision history older than this, please refer to the Qt Git wiki for how to use Git history grafting. At the time of writing, this wiki is located here: http://qt.gitorious.org/qt/pages/GitIntroductionWithQt If you have already performed the grafting and you don't see any history beyond this commit, try running "git log" with the "--follow" argument. Branched from the monolithic repo, Qt master branch, at commit 896db169ea224deb96c59ce8af800d019de63f12
596 lines
26 KiB
C++
596 lines
26 KiB
C++
/****************************************************************************
|
|
**
|
|
** 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 test suite 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 <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"
|