mirror of
https://github.com/KDE/latte-dock.git
synced 2025-03-10 20:58:18 +03:00
force plasmageometries updates for activitieschange
This commit is contained in:
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…
x
Reference in New Issue
Block a user