Adapt QGraphicsScene test to use QPlatformInputContext
Change-Id: Iaf61798cc78e57563fee088711d39090b722a946 Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
This commit is contained in:
parent
14e139f391
commit
b83e98d22c
@ -51,6 +51,8 @@
|
||||
#include <private/qgraphicssceneindex_p.h>
|
||||
#include <math.h>
|
||||
#include "../../../gui/painting/qpathclipper/pathcompare.h"
|
||||
#include "../../shared/platforminputcontext.h"
|
||||
#include <private/qinputpanel_p.h>
|
||||
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
|
||||
#include <windows.h>
|
||||
@ -186,6 +188,7 @@ class tst_QGraphicsScene : public QObject
|
||||
Q_OBJECT
|
||||
public slots:
|
||||
void initTestCase();
|
||||
void cleanup();
|
||||
|
||||
private slots:
|
||||
void construction();
|
||||
@ -289,6 +292,13 @@ void tst_QGraphicsScene::initTestCase()
|
||||
#endif
|
||||
}
|
||||
|
||||
void tst_QGraphicsScene::cleanup()
|
||||
{
|
||||
// ensure not even skipped tests with custom input context leave it dangling
|
||||
QInputPanelPrivate *inputPanelPrivate = QInputPanelPrivate::get(qApp->inputPanel());
|
||||
inputPanelPrivate->testContext = 0;
|
||||
}
|
||||
|
||||
void tst_QGraphicsScene::construction()
|
||||
{
|
||||
QGraphicsScene scene;
|
||||
@ -3753,25 +3763,12 @@ public:
|
||||
mutable int queryCalls;
|
||||
};
|
||||
|
||||
class TestInputContext : public QInputContext
|
||||
{
|
||||
public:
|
||||
TestInputContext() {}
|
||||
|
||||
QString identifierName() { return QString(); }
|
||||
QString language() { return QString(); }
|
||||
|
||||
void reset() {
|
||||
++resetCalls;
|
||||
sendEvent(QInputMethodEvent()); }
|
||||
|
||||
bool isComposing() const { return false; }
|
||||
|
||||
int resetCalls;
|
||||
};
|
||||
|
||||
void tst_QGraphicsScene::inputMethod()
|
||||
{
|
||||
PlatformInputContext inputContext;
|
||||
QInputPanelPrivate *inputPanelPrivate = QInputPanelPrivate::get(qApp->inputPanel());
|
||||
inputPanelPrivate->testContext = &inputContext;
|
||||
|
||||
QFETCH(int, flags);
|
||||
QFETCH(bool, callFocusItem);
|
||||
|
||||
@ -3780,21 +3777,19 @@ void tst_QGraphicsScene::inputMethod()
|
||||
|
||||
QGraphicsScene scene;
|
||||
QGraphicsView view(&scene);
|
||||
TestInputContext *inputContext = new TestInputContext;
|
||||
qApp->setInputContext(inputContext);
|
||||
view.show();
|
||||
QApplication::setActiveWindow(&view);
|
||||
view.setFocus();
|
||||
QTest::qWaitForWindowShown(&view);
|
||||
QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
|
||||
|
||||
inputContext->resetCalls = 0;
|
||||
inputContext.m_resetCallCount = 0;
|
||||
scene.addItem(item);
|
||||
QInputMethodEvent event;
|
||||
|
||||
scene.setFocusItem(item);
|
||||
QCOMPARE(!!(item->flags() & QGraphicsItem::ItemIsFocusable), scene.focusItem() == item);
|
||||
QCOMPARE(inputContext->resetCalls, 0);
|
||||
QCOMPARE(inputContext.m_resetCallCount, 0);
|
||||
|
||||
item->eventCalls = 0;
|
||||
qApp->sendEvent(&scene, &event);
|
||||
@ -3807,9 +3802,7 @@ void tst_QGraphicsScene::inputMethod()
|
||||
scene.setFocusItem(0);
|
||||
// the input context is reset twice, once because an item has lost focus and again because
|
||||
// the Qt::WA_InputMethodEnabled flag is cleared because no item has focus.
|
||||
QEXPECT_FAIL("3", "QTBUG-22456", Abort);
|
||||
QCOMPARE(inputContext->resetCalls, callFocusItem ? 2 : 0);
|
||||
QCOMPARE(item->eventCalls, callFocusItem ? 2 : 0); // verify correct delivery of "reset" event
|
||||
QCOMPARE(inputContext.m_resetCallCount, callFocusItem ? 2 : 0);
|
||||
QCOMPARE(item->queryCalls, callFocusItem ? 1 : 0); // verify that value is unaffected
|
||||
|
||||
item->eventCalls = 0;
|
||||
|
101
tests/auto/widgets/shared/platforminputcontext.h
Normal file
101
tests/auto/widgets/shared/platforminputcontext.h
Normal file
@ -0,0 +1,101 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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 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 <qplatforminputcontext_qpa.h>
|
||||
|
||||
class PlatformInputContext : public QPlatformInputContext
|
||||
{
|
||||
public:
|
||||
PlatformInputContext() :
|
||||
m_animating(false),
|
||||
m_visible(false),
|
||||
m_updateCallCount(0),
|
||||
m_resetCallCount(0),
|
||||
m_commitCallCount(0),
|
||||
m_lastQueries(Qt::ImhNone),
|
||||
m_action(QInputPanel::Click),
|
||||
m_cursorPosition(0),
|
||||
m_lastEventType(QEvent::None)
|
||||
{}
|
||||
|
||||
virtual QRectF keyboardRect() const { return m_keyboardRect; }
|
||||
virtual bool isAnimating() const { return m_animating; }
|
||||
virtual void reset() { m_resetCallCount++; }
|
||||
virtual void commit() { m_commitCallCount++; }
|
||||
|
||||
virtual void update(Qt::InputMethodQueries queries)
|
||||
{
|
||||
m_updateCallCount++;
|
||||
m_lastQueries = queries;
|
||||
}
|
||||
virtual void invokeAction(QInputPanel::Action action, int cursorPosition)
|
||||
{
|
||||
m_action = action;
|
||||
m_cursorPosition = cursorPosition;
|
||||
}
|
||||
virtual bool filterEvent(const QEvent *event)
|
||||
{
|
||||
m_lastEventType = event->type(); return false;
|
||||
}
|
||||
virtual void showInputPanel()
|
||||
{
|
||||
m_visible = true;
|
||||
}
|
||||
virtual void hideInputPanel()
|
||||
{
|
||||
m_visible = false;
|
||||
}
|
||||
virtual bool isInputPanelVisible() const
|
||||
{
|
||||
return m_visible;
|
||||
}
|
||||
|
||||
bool m_animating;
|
||||
bool m_visible;
|
||||
int m_updateCallCount;
|
||||
int m_resetCallCount;
|
||||
int m_commitCallCount;
|
||||
Qt::InputMethodQueries m_lastQueries;
|
||||
QInputPanel::Action m_action;
|
||||
int m_cursorPosition;
|
||||
int m_lastEventType;
|
||||
QRectF m_keyboardRect;
|
||||
};
|
Loading…
Reference in New Issue
Block a user