#include <QtQuick/qquickitem.h>
#include <QtQuick/qquickview.h>
#include <QtGui/qinputmethod.h>
+#include <qpa/qwindowsysteminterface.h>
class tst_qquickapplication : public QObject
{
private slots:
void active();
void layoutDirection();
- void inputPanel();
void inputMethod();
private:
"}", QUrl::fromLocalFile(""));
QQuickItem *item = qobject_cast<QQuickItem *>(component.create());
QVERIFY(item);
- QQuickView view;
- item->setParentItem(view.rootObject());
+ QQuickWindow window;
+ item->setParentItem(window.rootItem());
// not active
QVERIFY(!item->property("active").toBool());
QVERIFY(!item->property("active2").toBool());
- QCOMPARE(item->property("active").toBool(), QGuiApplication::activeWindow() != 0);
// active
- view.show();
- view.requestActivateWindow();
- QTest::qWait(50);
- QEXPECT_FAIL("", "QTBUG-21573", Abort);
- QTRY_COMPARE(view.status(), QQuickView::Ready);
- QCOMPARE(item->property("active").toBool(), QGuiApplication::activeWindow() != 0);
- QCOMPARE(item->property("active2").toBool(), QGuiApplication::activeWindow() != 0);
-
-#if 0
- // QGuiApplication has no equivalent of setActiveWindow(0). QTBUG-21573
- // Is this different to clearing the active state of the window or can it be removed?
- // On Mac, setActiveWindow(0) on mac does not deactivate the current application,
- // must switch to a different app or hide the current app to trigger this
- // on mac, setActiveWindow(0) on mac does not deactivate the current application
- // (you have to switch to a different app or hide the current app to trigger this)
+ window.show();
+ window.requestActivateWindow();
+ QTest::qWaitForWindowActive(&window);
+ QVERIFY(QGuiApplication::focusWindow() == &window);
+ QVERIFY(item->property("active").toBool());
+ QVERIFY(item->property("active2").toBool());
// not active again
- QGuiApplication::setActiveWindow(0);
- QVERIFY(!item->property("active").toBool());
- QCOMPARE(item->property("active").toBool(), QGuiApplication::activeWindow() != 0);
-#endif
+ QWindowSystemInterface::handleWindowActivated(0);
+ QTRY_VERIFY(QGuiApplication::focusWindow() != &window);
+ QVERIFY(!item->property("active").toBool());
+ QVERIFY(!item->property("active2").toBool());
}
void tst_qquickapplication::layoutDirection()
QCOMPARE(Qt::LayoutDirection(item->property("layoutDirection").toInt()), Qt::LeftToRight);
}
-void tst_qquickapplication::inputPanel()
-{
- const QLatin1String expected("Qt.application.inputPanel is deprecated, use Qt.inputMethod instead ");
- QTest::ignoreMessage(QtWarningMsg, expected.data());
-
- QQmlComponent component(&engine);
- component.setData("import QtQuick 2.0; Item { property variant inputPanel: Qt.application.inputPanel }", QUrl::fromLocalFile(""));
- QQuickItem *item = qobject_cast<QQuickItem *>(component.create());
- QVERIFY(item);
- QQuickView view;
- item->setParentItem(view.rootObject());
-
- // check that the inputPanel property maches with application's input panel
- QCOMPARE(qvariant_cast<QObject*>(item->property("inputPanel")), qApp->inputMethod());
-}
-
void tst_qquickapplication::inputMethod()
{
// technically not in QQuickApplication, but testing anyway here