Merge lp:~alan-griffiths/miral/encapsulate-PromptSessionListener into lp:miral

Proposed by Alan Griffiths on 2016-10-18
Status: Merged
Approved by: Gerry Boland on 2016-10-26
Approved revision: 412
Merged at revision: 415
Proposed branch: lp:~alan-griffiths/miral/encapsulate-PromptSessionListener
Merge into: lp:miral
Diff against target: 217 lines (+80/-67)
3 files modified
miral-qt/src/platforms/mirserver/mirserverhooks.cpp (+68/-1)
miral-qt/src/platforms/mirserver/promptsessionlistener.cpp (+2/-47)
miral-qt/src/platforms/mirserver/promptsessionlistener.h (+10/-19)
To merge this branch: bzr merge lp:~alan-griffiths/miral/encapsulate-PromptSessionListener
Reviewer Review Type Date Requested Status
Gerry Boland 2016-10-18 Approve on 2016-10-26
Review via email: mp+308740@code.launchpad.net

Commit Message

[miral-qt] localize dependency on #include <mir/scene/prompt_session_listener.h>

To post a comment you must log in.
Gerry Boland (gerboland) wrote :

+ void promptProviderAdded(qtmir::PromptSession const&, miral::Application const&);
one thing to be careful of is that Qt signal/slot argument types need to be registered with the meta object system like this:

Q_DECLARE_METATYPE(namespace::type) in a header file, outside all namespaces

qRegisterMetaType<namespace::type>(); in one C++ file. It should be called before a signal using it is fired.

If you don't do this, at *runtime* the signal will fail to be emitted. You get a line printed to the console as an error. Lame I know.

I see neither argument being registered in the code (I missed this in reviewing rev 400 & 401).

Have you any tips on testing prompt sessions manually?

review: Needs Fixing
Alan Griffiths (alan-griffiths) wrote :

> + void promptProviderAdded(qtmir::PromptSession const&, miral::Application
> const&);
> one thing to be careful of is that Qt signal/slot argument types need to be
> registered with the meta object system like this:
>
> Q_DECLARE_METATYPE(namespace::type) in a header file, outside all namespaces
>
> qRegisterMetaType<namespace::type>(); in one C++ file. It should be called
> before a signal using it is fired.
>
> If you don't do this, at *runtime* the signal will fail to be emitted. You get
> a line printed to the console as an error. Lame I know.
>
> I see neither argument being registered in the code (I missed this in
> reviewing rev 400 & 401).

For the avoidance of doubt, this is a pre-existing problem? Nothing to do with *this* branch?

> Have you any tips on testing prompt sessions manually?

Sorry, the use of prompt sessions is a mystery to me.

411. By Alan Griffiths on 2016-10-26

merge :parent

412. By Alan Griffiths on 2016-10-26

Fix Qt type registration

Gerry Boland (gerboland) wrote :

That will do for now, let's land this, and if something broke, we can fix later

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'miral-qt/src/platforms/mirserver/mirserverhooks.cpp'
2--- miral-qt/src/platforms/mirserver/mirserverhooks.cpp 2016-09-15 22:40:51 +0000
3+++ miral-qt/src/platforms/mirserver/mirserverhooks.cpp 2016-10-26 13:57:17 +0000
4@@ -22,15 +22,37 @@
5 #include "mirserverstatuslistener.h"
6 #include "promptsessionlistener.h"
7 #include "screenscontroller.h"
8+#include "logging.h"
9
10 // mir
11 #include <mir/server.h>
12 #include <mir/graphics/cursor.h>
13+#include <mir/scene/prompt_session_listener.h>
14
15 namespace mg = mir::graphics;
16+namespace ms = mir::scene;
17
18 namespace
19 {
20+struct PromptSessionListenerImpl : PromptSessionListener, mir::scene::PromptSessionListener
21+{
22+ using PromptSessionListener::PromptSessionListener;
23+ ~PromptSessionListenerImpl();
24+
25+ void starting(std::shared_ptr<mir::scene::PromptSession> const& prompt_session) override;
26+ void stopping(std::shared_ptr<mir::scene::PromptSession> const& prompt_session) override;
27+ void suspending(std::shared_ptr<mir::scene::PromptSession> const& prompt_session) override;
28+ void resuming(std::shared_ptr<mir::scene::PromptSession> const& prompt_session) override;
29+
30+ void prompt_provider_added(mir::scene::PromptSession const& prompt_session,
31+ std::shared_ptr<mir::scene::Session> const& prompt_provider) override;
32+ void prompt_provider_removed(mir::scene::PromptSession const& prompt_session,
33+ std::shared_ptr<mir::scene::Session> const& prompt_provider) override;
34+
35+private:
36+ QHash<const mir::scene::PromptSession *, qtmir::PromptSession> m_mirPromptToSessionHash;
37+};
38+
39 struct HiddenCursorWrapper : mg::Cursor
40 {
41 HiddenCursorWrapper(std::shared_ptr<mg::Cursor> const& wrapped) :
42@@ -72,7 +94,7 @@
43
44 server.override_the_prompt_session_listener([this]
45 {
46- auto const result = std::make_shared<PromptSessionListener>();
47+ auto const result = std::make_shared<PromptSessionListenerImpl>();
48 self->m_promptSessionListener = result;
49 return result;
50 });
51@@ -115,3 +137,48 @@
52 new ScreensController(screensModel, theMirDisplay(), self->m_mirDisplayConfigurationController.lock()));
53 }
54
55+PromptSessionListenerImpl::~PromptSessionListenerImpl() = default;
56+
57+void PromptSessionListenerImpl::starting(std::shared_ptr<ms::PromptSession> const& prompt_session)
58+{
59+ qCDebug(QTMIR_MIR_MESSAGES) << "PromptSessionListener::starting - this=" << this << "prompt_session=" << prompt_session.get();
60+ m_mirPromptToSessionHash.insert(prompt_session.get(), prompt_session);
61+ Q_EMIT promptSessionStarting(prompt_session);
62+}
63+
64+void PromptSessionListenerImpl::stopping(std::shared_ptr<ms::PromptSession> const& prompt_session)
65+{
66+ qCDebug(QTMIR_MIR_MESSAGES) << "PromptSessionListener::stopping - this=" << this << "prompt_session=" << prompt_session.get();
67+ Q_EMIT promptSessionStopping(prompt_session);
68+ m_mirPromptToSessionHash.remove(prompt_session.get());
69+}
70+
71+void PromptSessionListenerImpl::suspending(std::shared_ptr<ms::PromptSession> const& prompt_session)
72+{
73+ qCDebug(QTMIR_MIR_MESSAGES) << "PromptSessionListener::suspending - this=" << this << "prompt_session=" << prompt_session.get();
74+ Q_EMIT promptSessionSuspending(prompt_session);
75+}
76+
77+void PromptSessionListenerImpl::resuming(std::shared_ptr<ms::PromptSession> const& prompt_session)
78+{
79+ qCDebug(QTMIR_MIR_MESSAGES) << "PromptSessionListener::resuming - this=" << this << "prompt_session=" << prompt_session.get();
80+ Q_EMIT promptSessionResuming(prompt_session);
81+}
82+
83+void PromptSessionListenerImpl::prompt_provider_added(ms::PromptSession const& prompt_session,
84+ std::shared_ptr<ms::Session> const& prompt_provider)
85+{
86+ qCDebug(QTMIR_MIR_MESSAGES) << "PromptSessionListener::prompt_provider_added - this=" << this
87+ << "prompt_session=" << &prompt_session
88+ << "prompt_provider=" << prompt_provider.get();
89+ Q_EMIT promptProviderAdded(m_mirPromptToSessionHash[&prompt_session], prompt_provider);
90+}
91+
92+void PromptSessionListenerImpl::prompt_provider_removed(ms::PromptSession const& prompt_session,
93+ std::shared_ptr<ms::Session> const& prompt_provider)
94+{
95+ qCDebug(QTMIR_MIR_MESSAGES) << "PromptSessionListener::prompt_provider_removed - this=" << this
96+ << "prompt_session=" << &prompt_session
97+ << "prompt_provider=" << prompt_provider.get();
98+ Q_EMIT promptProviderRemoved(m_mirPromptToSessionHash[&prompt_session], prompt_provider);
99+}
100
101=== modified file 'miral-qt/src/platforms/mirserver/promptsessionlistener.cpp'
102--- miral-qt/src/platforms/mirserver/promptsessionlistener.cpp 2016-10-06 14:05:01 +0000
103+++ miral-qt/src/platforms/mirserver/promptsessionlistener.cpp 2016-10-26 13:57:17 +0000
104@@ -19,60 +19,15 @@
105
106 namespace ms = mir::scene;
107
108-Q_DECLARE_METATYPE(std::shared_ptr<ms::PromptSession>)
109-
110 PromptSessionListener::PromptSessionListener(QObject *parent) :
111 QObject(parent)
112 {
113 qCDebug(QTMIR_MIR_MESSAGES) << "PromptSessionListener::PromptSessionListener - this=" << this;
114- qRegisterMetaType<std::shared_ptr<ms::PromptSession>>("std::shared_ptr<mir::scene::PromptSession>");
115+ qRegisterMetaType<qtmir::PromptSession>("qtmir::PromptSession");
116+ qRegisterMetaType<miral::Application>("miral::Application");
117 }
118
119 PromptSessionListener::~PromptSessionListener()
120 {
121 qCDebug(QTMIR_MIR_MESSAGES) << "PromptSessionListener::~PromptSessionListener - this=" << this;
122 }
123-
124-void PromptSessionListener::starting(std::shared_ptr<ms::PromptSession> const& prompt_session)
125-{
126- qCDebug(QTMIR_MIR_MESSAGES) << "PromptSessionListener::starting - this=" << this << "prompt_session=" << prompt_session.get();
127- m_mirPromptToSessionHash.insert(prompt_session.get(), prompt_session);
128- Q_EMIT promptSessionStarting(prompt_session);
129-}
130-
131-void PromptSessionListener::stopping(std::shared_ptr<ms::PromptSession> const& prompt_session)
132-{
133- qCDebug(QTMIR_MIR_MESSAGES) << "PromptSessionListener::stopping - this=" << this << "prompt_session=" << prompt_session.get();
134- Q_EMIT promptSessionStopping(prompt_session);
135- m_mirPromptToSessionHash.remove(prompt_session.get());
136-}
137-
138-void PromptSessionListener::suspending(std::shared_ptr<ms::PromptSession> const& prompt_session)
139-{
140- qCDebug(QTMIR_MIR_MESSAGES) << "PromptSessionListener::suspending - this=" << this << "prompt_session=" << prompt_session.get();
141- Q_EMIT promptSessionSuspending(prompt_session);
142-}
143-
144-void PromptSessionListener::resuming(std::shared_ptr<ms::PromptSession> const& prompt_session)
145-{
146- qCDebug(QTMIR_MIR_MESSAGES) << "PromptSessionListener::resuming - this=" << this << "prompt_session=" << prompt_session.get();
147- Q_EMIT promptSessionResuming(prompt_session);
148-}
149-
150-void PromptSessionListener::prompt_provider_added(ms::PromptSession const& prompt_session,
151- std::shared_ptr<ms::Session> const& prompt_provider)
152-{
153- qCDebug(QTMIR_MIR_MESSAGES) << "PromptSessionListener::prompt_provider_added - this=" << this
154- << "prompt_session=" << &prompt_session
155- << "prompt_provider=" << prompt_provider.get();
156- Q_EMIT promptProviderAdded(m_mirPromptToSessionHash[&prompt_session], prompt_provider);
157-}
158-
159-void PromptSessionListener::prompt_provider_removed(ms::PromptSession const& prompt_session,
160- std::shared_ptr<ms::Session> const& prompt_provider)
161-{
162- qCDebug(QTMIR_MIR_MESSAGES) << "PromptSessionListener::prompt_provider_removed - this=" << this
163- << "prompt_session=" << &prompt_session
164- << "prompt_provider=" << prompt_provider.get();
165- Q_EMIT promptProviderRemoved(m_mirPromptToSessionHash[&prompt_session], prompt_provider);
166-}
167
168=== modified file 'miral-qt/src/platforms/mirserver/promptsessionlistener.h'
169--- miral-qt/src/platforms/mirserver/promptsessionlistener.h 2016-10-07 15:45:30 +0000
170+++ miral-qt/src/platforms/mirserver/promptsessionlistener.h 2016-10-26 13:57:17 +0000
171@@ -23,36 +23,27 @@
172
173 #include "promptsession.h"
174
175-#include <mir/scene/prompt_session_listener.h>
176+#include <miral/application.h>
177
178-class PromptSessionListener : public QObject, public mir::scene::PromptSessionListener
179+class PromptSessionListener : public QObject
180 {
181- Q_OBJECT
182-public:
183+Q_OBJECT
184+protected:
185 explicit PromptSessionListener(QObject *parent = 0);
186 ~PromptSessionListener();
187
188- void starting(std::shared_ptr<mir::scene::PromptSession> const& prompt_session) override;
189- void stopping(std::shared_ptr<mir::scene::PromptSession> const& prompt_session) override;
190- void suspending(std::shared_ptr<mir::scene::PromptSession> const& prompt_session) override;
191- void resuming(std::shared_ptr<mir::scene::PromptSession> const& prompt_session) override;
192-
193- void prompt_provider_added(mir::scene::PromptSession const& prompt_session,
194- std::shared_ptr<mir::scene::Session> const& prompt_provider) override;
195- void prompt_provider_removed(mir::scene::PromptSession const& prompt_session,
196- std::shared_ptr<mir::scene::Session> const& prompt_provider) override;
197-
198+public:
199 Q_SIGNALS:
200 void promptSessionStarting(qtmir::PromptSession const &session);
201 void promptSessionStopping(qtmir::PromptSession const &session);
202 void promptSessionSuspending(qtmir::PromptSession const &session);
203 void promptSessionResuming(qtmir::PromptSession const &session);
204
205- void promptProviderAdded(qtmir::PromptSession const&, std::shared_ptr<mir::scene::Session> const&);
206- void promptProviderRemoved(qtmir::PromptSession const&, std::shared_ptr<mir::scene::Session> const&);
207-
208-private:
209- QHash<const mir::scene::PromptSession *, qtmir::PromptSession> m_mirPromptToSessionHash;
210+ void promptProviderAdded(qtmir::PromptSession const&, miral::Application const&);
211+ void promptProviderRemoved(qtmir::PromptSession const&, miral::Application const&);
212 };
213
214+Q_DECLARE_METATYPE(qtmir::PromptSession)
215+Q_DECLARE_METATYPE(miral::Application)
216+
217 #endif // SESSIONLISTENER_H

Subscribers

People subscribed via source and target branches