79
79
qCDebug(QTMIR_SCREENS) << "ScreensModel::onCompositorStarting";
80
80
m_compositing = true;
82
update(); // must handle all hardware changes before starting the renderer
84
// (Re)Start Qt's render thread by setting all windows with a corresponding screen to exposed.
85
allWindowsSetExposed(true);
88
87
void ScreensModel::onCompositorStopping()
90
89
qCDebug(QTMIR_SCREENS) << "ScreensModel::onCompositorStopping";
91
90
m_compositing = false;
93
// Stop Qt's render threads by setting all its windows it obscured. Must
94
// block until all windows have their GL contexts released.
95
allWindowsSetExposed(false);
92
haltRenderer(); // must stop all rendering before handling any hardware changes
221
218
return canUpdateExisting;
224
void ScreensModel::allWindowsSetExposed(bool exposed)
222
* ScreensModel::startRenderer()
223
* (Re)Start Qt's render thread by setting all windows with a corresponding screen to exposed.
224
* It is asynchronous, it returns before the render thread(s) have started.
226
void ScreensModel::startRenderer()
228
Q_FOREACH (const auto screen, m_screenList) {
229
// Only set windows exposed on displays which are turned on, as the GL context Mir provided
230
// is invalid in that situation
231
if (screen->powerMode() == mir_power_mode_on) {
232
const auto window = static_cast<ScreenWindow *>(screen->window());
233
if (window && window->window()) {
234
window->setExposed(true);
241
* ScreensModel::haltRenderer()
242
* Stop Qt's render thread(s) by setting all windows with a corresponding screen to not exposed.
243
* It is blocking, it returns after the render thread(s) have all stopped.
245
void ScreensModel::haltRenderer()
226
247
Q_FOREACH (const auto screen, m_screenList) {
227
248
const auto window = static_cast<ScreenWindow *>(screen->window());
228
249
if (window && window->window()) {
229
window->setExposed(exposed);
250
window->setExposed(false);