Set initial count of screens before calling Screens::init

Screens::init sets up a Qt::QueuedConnection connect from countChanged
to changed. This means that when first setting up the connection a
changed signal will be delivered in the next event cycle. This can mess
with other code. E.g. WaylandServer recreating outputs which can make
Xwayland crash or KWin internally crash.

To solve this problem we just need to make sure to set the output count
to the initial value before performing the init.

Reviewed-By: bshah
icc-effect-5.14.5
Martin Gräßlin 2016-08-05 09:41:56 +02:00
parent 31790dc00c
commit 44e37aacdf
3 changed files with 3 additions and 3 deletions

View File

@ -36,8 +36,8 @@ DrmScreens::~DrmScreens() = default;
void DrmScreens::init()
{
KWin::Screens::init();
updateCount();
KWin::Screens::init();
emit changed();
}

View File

@ -33,6 +33,7 @@ VirtualScreens::~VirtualScreens() = default;
void VirtualScreens::init()
{
updateCount();
KWin::Screens::init();
connect(m_backend, &VirtualBackend::sizeChanged,
this, &VirtualScreens::startChangedTimer);
@ -47,7 +48,6 @@ void VirtualScreens::init()
}
}
);
updateCount();
emit changed();
}

View File

@ -188,12 +188,12 @@ BasicScreens::~BasicScreens() = default;
void BasicScreens::init()
{
updateCount();
KWin::Screens::init();
#ifndef KWIN_UNIT_TEST
connect(m_backend, &Platform::screenSizeChanged,
this, &BasicScreens::startChangedTimer);
#endif
updateCount();
emit changed();
}