force plasmageometries updates for activitieschange

pull/12/head
Michail Vourlakos 5 years ago
parent 850b058ecd
commit 0ff8f2b74f

@ -169,6 +169,16 @@ QString Synchronizer::currentLayoutNameInMultiEnvironment() const
return m_currentLayoutNameInMultiEnvironment;
}
void Synchronizer::setCurrentLayoutNameInMultiEnvironment(const QString &name)
{
if (m_currentLayoutNameInMultiEnvironment == name) {
return;
}
m_currentLayoutNameInMultiEnvironment = name;
emit currentLayoutNameChanged();
}
QString Synchronizer::layoutPath(QString layoutName)
{
QString path = QDir::homePath() + "/.config/latte/" + layoutName + ".layout.latte";
@ -601,16 +611,14 @@ void Synchronizer::updateCurrentLayoutNameInMultiEnvironment()
{
for (const auto layout : m_centralLayouts) {
if (layout->activities().contains(m_manager->corona()->activitiesConsumer()->currentActivity())) {
m_currentLayoutNameInMultiEnvironment = layout->name();
emit currentLayoutNameChanged();
setCurrentLayoutNameInMultiEnvironment(layout->name());
return;
}
}
for (const auto layout : m_centralLayouts) {
if (layout->activities().isEmpty()) {
m_currentLayoutNameInMultiEnvironment = layout->name();
emit currentLayoutNameChanged();
setCurrentLayoutNameInMultiEnvironment(layout->name());
return;
}
}

@ -90,7 +90,10 @@ public:
int centralLayoutPos(QString id) const;
QString currentLayoutName() const;
QString currentLayoutNameInMultiEnvironment() const;
void setCurrentLayoutNameInMultiEnvironment(const QString &name);
QString shouldSwitchToLayout(QString activityId);
QStringList centralLayoutsNames();

@ -49,7 +49,7 @@ ScreenGeometries::ScreenGeometries(Latte::Corona *parent)
m_startupInitTimer.setSingleShot(true);
connect(&m_startupInitTimer, &QTimer::timeout, this, &ScreenGeometries::init);
m_publishTimer.setInterval(1000);
m_publishTimer.setInterval(2000);
m_publishTimer.setSingleShot(true);
connect(&m_publishTimer, &QTimer::timeout, this, &ScreenGeometries::updateGeometries);
@ -65,8 +65,6 @@ void ScreenGeometries::init()
{
QDBusInterface plasmaStrutsIface(PLASMASERVICE, "/StrutManager", PLASMASTRUTNAMESPACE, QDBusConnection::sessionBus());
if (plasmaStrutsIface.isValid()) {
m_plasmaInterfaceAvailable = true;
@ -79,6 +77,11 @@ void ScreenGeometries::init()
m_publishTimer.start();
});
connect(m_corona->activitiesConsumer(), &KActivities::Consumer::currentActivityChanged, this, [&]() {
m_forceGeometryBroadcast = true;
m_publishTimer.start();
});
m_publishTimer.start();
}
}
@ -124,12 +127,25 @@ void ScreenGeometries::updateGeometries()
m_ignoreModes,
QList<Plasma::Types::Location>());
if (!m_lastAvailableRect.contains(scrName) || m_lastAvailableRect[scrName] != availableRect) {
//! Workaround: Force update, to workaround Plasma not updating its layout at some cases
//! Example: Canvas,Music activities use the same Layout. Unity activity
//! is using a different layout. When the user from Unity is switching to
//! Music and afterwards to Canvas the desktop elements are not positioned properly
if (m_forceGeometryBroadcast) {
plasmaStrutsIface.call("setAvailableScreenRect", LATTESERVICE, scrName, QRect());
}
//! Disable checks because of the workaround concerning plasma desktop behavior
if (m_forceGeometryBroadcast || (!m_lastAvailableRect.contains(scrName) || m_lastAvailableRect[scrName] != availableRect)) {
m_lastAvailableRect[scrName] = availableRect;
plasmaStrutsIface.call("setAvailableScreenRect", LATTESERVICE, scrName, availableRect);
qDebug() << " PLASMA SCREEN GEOMETRIES AVAILABLE RECT :: " << screen->name() << " : " << availableRect;
}
if (m_forceGeometryBroadcast) {
m_forceGeometryBroadcast = false;
}
if (!m_lastAvailableRegion.contains(scrName) || m_lastAvailableRegion[scrName] != availableRegion) {
m_lastAvailableRegion[scrName] = availableRegion;

@ -54,6 +54,7 @@ private slots:
private:
bool m_plasmaInterfaceAvailable{false};
bool m_forceGeometryBroadcast{false};
//! this is needed in order to avoid too many costly calculations for available screen geometries
QTimer m_publishTimer;

Loading…
Cancel
Save