108
107
void Session::doSuspend()
110
109
Q_ASSERT(m_state == Session::Suspending);
112
m_surface->stopFrameDropper();
112
auto surfaceList = m_surfaces.list();
113
if (surfaceList.empty()) {
114
qCDebug(QTMIR_SESSIONS) << "Application::suspend - no surface to call stopFrameDropper() on!";
114
qDebug() << "Application::suspend - no surface to call stopFrameDropper() on!";
116
for (int i = 0; i < surfaceList.count(); ++i) {
117
surfaceList[i]->stopFrameDropper();
116
120
setState(Suspended);
191
190
Q_EMIT applicationChanged(application);
194
void Session::setSurface(MirSurfaceInterface *newSurface)
193
void Session::registerSurface(MirSurfaceInterface *newSurface)
196
qCDebug(QTMIR_SESSIONS) << "Session::setSurface - session=" << name() << "surface=" << newSurface;
198
if (newSurface == m_surface) {
203
m_surface->disconnect(this);
206
MirSurfaceInterface *previousSurface = surface();
207
m_surface = newSurface;
210
connect(newSurface, &MirSurfaceInterface::stateChanged,
211
this, &Session::updateFullscreenProperty);
213
// Only notify QML of surface creation once it has drawn its first frame.
214
if (m_surface->isFirstFrameDrawn()) {
217
connect(newSurface, &MirSurfaceInterface::firstFrameDrawn,
218
this, &Session::onFirstSurfaceFrameDrawn);
222
if (previousSurface != surface()) {
223
qCDebug(QTMIR_SESSIONS).nospace() << "Session::surfaceChanged - session=" << this
224
<< " surface=" << m_surface;
225
Q_EMIT surfaceChanged(m_surface);
195
qCDebug(QTMIR_SESSIONS) << "Session::resgisterSurface - session=" << name() << "surface=" << newSurface;
197
// Only notify QML of surface creation once it has drawn its first frame.
198
if (newSurface->isFirstFrameDrawn()) {
199
appendSurface(newSurface);
201
connect(newSurface, &MirSurfaceInterface::firstFrameDrawn,
202
this, [this, newSurface]() { this->appendSurface(newSurface); });
228
205
updateFullscreenProperty();
231
void Session::onFirstSurfaceFrameDrawn()
233
qCDebug(QTMIR_SESSIONS).nospace() << "Session::surfaceChanged - session=" << this
234
<< " surface=" << m_surface;
235
Q_EMIT surfaceChanged(m_surface);
208
void Session::appendSurface(MirSurfaceInterface *newSurface)
210
qCDebug(QTMIR_SESSIONS) << "Session::appendSurface - session=" << name() << "surface=" << newSurface;
212
connect(newSurface, &MirSurfaceInterface::stateChanged,
213
this, &Session::updateFullscreenProperty);
215
m_surfaces.insert(m_surfaces.rowCount(), newSurface);
217
Q_EMIT lastSurfaceChanged(newSurface);
219
if (m_state == Starting) {
224
void Session::removeSurface(MirSurfaceInterface* surface)
226
qCDebug(QTMIR_SESSIONS) << "Session::removeSurface - session=" << name() << "surface=" << surface;
228
surface->disconnect(this);
230
if (m_surfaces.contains(surface)) {
231
bool lastSurfaceWasRemoved = lastSurface() == surface;
232
m_surfaces.remove(surface);
233
if (lastSurfaceWasRemoved) {
234
Q_EMIT lastSurfaceChanged(lastSurface());
239
239
void Session::updateFullscreenProperty()
242
setFullscreen(m_surface->state() == Mir::FullscreenState);
241
if (m_surfaces.rowCount() > 0) {
242
// TODO: Figure out something better
243
setFullscreen(m_surfaces.list().at(0)->state() == Mir::FullscreenState);
244
245
// Keep the current value of the fullscreen property until we get a new