on xenial help sign in
Read inputMethod surface from the new property int QtMir

The previous signal had issues if the InputMethod in unity was created after the surfaceAddedSignal() was emitted. Fixes: #1545286 Approved by: Michał Sawicz, Daniel d'Andrada, Unity8 CI Bot, Lukáš Tinkl

commit9e911d1c75c4e93379a1fa24b3f7ec865e8455f4 authorMichael Zanetti <michael.zanetti@canonical.com> dateThu 10 Mar 2016, 22:39 (11 years ago) parentf5d9c63dd905cb
10 files changed+25−30
qml/Components/InputMethod.qml+1−9 tests/mocks/Unity/Application/MirSurface.cpp+3−2 tests/mocks/Unity/Application/MirSurface.h+2−1 tests/mocks/Unity/Application/SurfaceManager.cpp+8−9 tests/mocks/Unity/Application/SurfaceManager.h+3−3 tests/mocks/Unity/Application/VirtualKeyboard.cpp+3−2 tests/mocks/Unity/Application/VirtualKeyboard.h+1−1 tests/mocks/Unity/Application/plugin.cpp+2−1 tests/qmltests/tst_OrientedShell.qml+1−1 tests/qmltests/tst_Shell.qml+1−1
qml/Components/InputMethod.qml+1−9
@@ -22,15 +22,6 @@ import Ubuntu.Gestures 0.1
2222Item {
2323 id: root
2424
25− Connections {
26− target: SurfaceManager
27− onSurfaceCreated: {
28− if (surface.type == Mir.InputMethodType) {
29− surfaceItem.surface = surface;
30− }
31− }
32− }
33−
3425 property int transitionDuration: UbuntuAnimation.FastDuration
3526
3627 MirSurfaceItem {
@@ -41,6 +32,7 @@ Item {
4132
4233 surfaceWidth: width
4334 surfaceHeight: height
35+ surface: SurfaceManager.inputMethodSurface
4436
4537 onLiveChanged: {
4638 if (surface !== null && !live) {
tests/mocks/Unity/Application/MirSurface.cpp+3−2
@@ -23,8 +23,9 @@ MirSurface::MirSurface(const QString& name,
2323 Mir::Type type,
2424 Mir::State state,
2525 const QUrl& screenshot,
26− const QUrl &qmlFilePath)
27− : unity::shell::application::MirSurfaceInterface(nullptr)
26+ const QUrl &qmlFilePath,
27+ QObject *parent)
28+ : unity::shell::application::MirSurfaceInterface(parent)
2829 , m_name(name)
2930 , m_type(type)
3031 , m_state(state)
tests/mocks/Unity/Application/MirSurface.h+2−1
@@ -41,7 +41,8 @@ public:
4141 Mir::Type type,
4242 Mir::State state,
4343 const QUrl& screenshot,
44− const QUrl &qmlFilePath = QUrl());
44+ const QUrl &qmlFilePath = QUrl(),
45+ QObject *parent = nullptr);
4546 virtual ~MirSurface();
4647
4748 ////
tests/mocks/Unity/Application/SurfaceManager.cpp+8−9
@@ -34,6 +34,13 @@ SurfaceManager::SurfaceManager(QObject *parent) :
3434 QObject(parent)
3535 , m_virtualKeyboard(nullptr)
3636{
37+ m_virtualKeyboard = new VirtualKeyboard(this);
38+ connect(m_virtualKeyboard, &QObject::destroyed, this, [this](QObject *obj) {
39+ MirSurface* surface = qobject_cast<MirSurface*>(obj);
40+ m_virtualKeyboard = nullptr;
41+ Q_EMIT inputMethodSurfaceChanged();
42+ Q_EMIT surfaceDestroyed(surface);
43+ });
3744}
3845
3946MirSurface *SurfaceManager::createSurface(const QString& name,
@@ -58,16 +65,8 @@ MirSurface *SurfaceManager::createSurface(const QString& name,
5865 return surface;
5966}
6067
61−MirSurface *SurfaceManager::inputMethodSurface()
68+MirSurface *SurfaceManager::inputMethodSurface() const
6269{
63− if (!m_virtualKeyboard) {
64− m_virtualKeyboard = new VirtualKeyboard;
65− connect(m_virtualKeyboard, &QObject::destroyed, this, [this](QObject *obj) {
66− MirSurface* surface = qobject_cast<MirSurface*>(obj);
67− Q_EMIT surfaceDestroyed(surface);
68− });
69− Q_EMIT surfaceCreated(m_virtualKeyboard);
70− }
7170 return m_virtualKeyboard;
7271}
7372
tests/mocks/Unity/Application/SurfaceManager.h+3−3
@@ -25,7 +25,7 @@
2525class SurfaceManager : public QObject
2626{
2727 Q_OBJECT
28−
28+ Q_PROPERTY(MirSurface* inputMethodSurface READ inputMethodSurface NOTIFY inputMethodSurfaceChanged)
2929 Q_PROPERTY(int newSurfaceMinimumWidth READ newSurfaceMinimumWidth WRITE setNewSurfaceMinimumWidth NOTIFY newSurfaceMinimumWidthChanged)
3030 Q_PROPERTY(int newSurfaceMaximumWidth READ newSurfaceMaximumWidth WRITE setNewSurfaceMaximumWidth NOTIFY newSurfaceMaximumWidthChanged)
3131 Q_PROPERTY(int newSurfaceMinimumHeight READ newSurfaceMinimumHeight WRITE setNewSurfaceMinimumHeight NOTIFY newSurfaceMinimumHeightChanged)
@@ -43,8 +43,7 @@ public:
4343 Mir::State state,
4444 const QUrl& screenshot);
4545
46− // To be used in the tests
47− Q_INVOKABLE MirSurface* inputMethodSurface();
46+ MirSurface* inputMethodSurface() const;
4847
4948 int newSurfaceMinimumWidth() const { return m_newSurfaceMinimumWidth; }
5049 void setNewSurfaceMinimumWidth(int value);
@@ -65,6 +64,7 @@ public:
6564 void setNewSurfaceHeightIncrement(int);
6665
6766Q_SIGNALS:
67+ void inputMethodSurfaceChanged();
6868 void countChanged();
6969 void surfaceCreated(MirSurface *surface);
7070 void surfaceDestroyed(MirSurface*surface);
tests/mocks/Unity/Application/VirtualKeyboard.cpp+3−2
@@ -22,12 +22,13 @@
2222
2323#include <QDebug>
2424
25−VirtualKeyboard::VirtualKeyboard()
25+VirtualKeyboard::VirtualKeyboard(QObject *parent)
2626 : MirSurface("input-method",
2727 Mir::InputMethodType,
2828 Mir::MinimizedState,
2929 QUrl("qrc:///Unity/Application/vkb_portrait.png"),
30− QUrl("qrc:///Unity/Application/VirtualKeyboard.qml"))
30+ QUrl("qrc:///Unity/Application/VirtualKeyboard.qml"),
31+ parent)
3132{
3233}
3334
tests/mocks/Unity/Application/VirtualKeyboard.h+1−1
@@ -25,7 +25,7 @@ class VirtualKeyboard : public MirSurface
2525{
2626 Q_OBJECT
2727public:
28− explicit VirtualKeyboard();
28+ explicit VirtualKeyboard(QObject *parent = nullptr);
2929 ~VirtualKeyboard();
3030};
3131
tests/mocks/Unity/Application/plugin.cpp+2−1
@@ -78,8 +78,9 @@ void FakeUnityApplicationQmlPlugin::registerTypes(const char *uri)
7878 qmlRegisterUncreatableType<unity::shell::application::ApplicationInfoInterface>(uri, 0, 1, "ApplicationInfoInterface", "Abstract interface. Cannot be created in QML");
7979 qmlRegisterUncreatableType<Session>(uri, 0, 1, "Session", "Session can't be instantiated from QML");
8080 qmlRegisterUncreatableType<MirSurface>(uri, 0, 1, "MirSurface", "MirSurface can't be instantiated from QML");
81+ qmlRegisterUncreatableType<unity::shell::application::MirSurfaceInterface>(
82+ uri, 0, 1, "MirSurface", "MirSurface can't be instantiated from QML");
8183 qmlRegisterType<MirSurfaceItem>(uri, 0, 1, "MirSurfaceItem");
82−
8384 qmlRegisterType<ApplicationInfo>(uri, 0, 1, "ApplicationInfo");
8485
8586 qmlRegisterSingletonType<ApplicationManager>(uri, 0, 1, "ApplicationManager", applicationManagerSingleton);
tests/qmltests/tst_OrientedShell.qml+1−1
@@ -314,7 +314,7 @@ Rectangle {
314314 checked: false
315315 activeFocusOnPress: false
316316 onCheckedChanged: {
317− var surface = SurfaceManager.inputMethodSurface();
317+ var surface = SurfaceManager.inputMethodSurface;
318318 if (checked) {
319319 surface.setState(Mir.RestoredState);
320320 } else {
tests/qmltests/tst_Shell.qml+1−1
@@ -795,7 +795,7 @@ Rectangle {
795795 loadShell("phone");
796796 swipeAwayGreeter();
797797 var item = findChild(shell, "inputMethod");
798− var surface = SurfaceManager.inputMethodSurface();
798+ var surface = SurfaceManager.inputMethodSurface;
799799
800800 surface.setState(Mir.MinimizedState);
801801 tryCompare(item, "visible", false);