diff --git a/app/dockcorona.cpp b/app/dockcorona.cpp index b0a7706b9..0833744f0 100644 --- a/app/dockcorona.cpp +++ b/app/dockcorona.cpp @@ -51,6 +51,7 @@ DockCorona::DockCorona(QObject *parent) m_activityConsumer(new KActivities::Consumer(this)) { KPackage::Package package(new DockPackage(this)); + m_screenPool->load(); if (!package.isValid()) { qWarning() << staticMetaObject.className() @@ -94,7 +95,6 @@ void DockCorona::load() { if (m_activityConsumer && (m_activityConsumer->serviceStatus() == KActivities::Consumer::Running) && m_activitiesStarting) { disconnect(m_activityConsumer, &KActivities::Consumer::serviceStatusChanged, this, &DockCorona::load); - m_screenPool->load(); m_activitiesStarting = false; @@ -245,6 +245,12 @@ void DockCorona::addOutput(QScreen *screen) { Q_ASSERT(screen); + int id = m_screenPool->id(screen->name()); + if (id==-1){ + int newId = m_screenPool->firstAvailableId(); + m_screenPool->insertScreenMapping(newId, screen->name()); + } + /* qDebug() << "screen added +++ "<name(); foreach(auto scr, qGuiApp->screens()){ qDebug() << "Found screen: "<name(); @@ -304,6 +310,7 @@ void DockCorona::screenCountChangedTimer() qDebug() << "screen count changed -+-+ "<< qGuiApp->screens().size(); qDebug() << "adding consideration...."; + qDebug() << "dock view running : " << m_dockViews.count(); foreach(auto scr, qGuiApp->screens()){ qDebug() << "Found screen: "<name(); @@ -489,8 +496,11 @@ void DockCorona::addDock(Plasma::Containment *containment) id = containment->lastScreen(); } + qDebug() << "add dock - containment id : "<< id; + if (id >= 0) { QString connector = m_screenPool->connector(id); + qDebug() << "add dock - connector : "<< connector; bool found{false}; foreach(auto scr, qGuiApp->screens()){ if (scr && scr->name() == connector){ diff --git a/app/screenpool.cpp b/app/screenpool.cpp index 25a9d8e62..3901df277 100644 --- a/app/screenpool.cpp +++ b/app/screenpool.cpp @@ -20,6 +20,7 @@ #include "screenpool.h" #include +#include #include #include @@ -65,6 +66,7 @@ void ScreenPool::load() !m_idForConnector.contains(connector)) { m_connectorForId[key.toInt()] = connector; m_idForConnector[connector] = key.toInt(); + qDebug() << "Known Screen - " << connector << " - " << key.toInt(); } else if (m_idForConnector.value(connector) != key.toInt()) { m_configGroup.deleteEntry(key); } @@ -94,7 +96,11 @@ QString ScreenPool::primaryConnector() const void ScreenPool::setPrimaryConnector(const QString &primary) { - if (m_primaryConnector == primary) { + //the ":" check fixes the strange plasma/qt issues when changing layouts + //there are case that the QScreen instead of the correct screen name + //returns "0:0", this check prevents from breaking the screens database + //from garbage ids + if ((m_primaryConnector == primary)|| primary.startsWith(":")) { return; } Q_ASSERT(m_idForConnector.contains(primary)); @@ -106,6 +112,7 @@ void ScreenPool::setPrimaryConnector(const QString &primary) m_idForConnector[m_primaryConnector] = oldIdForPrimary; m_connectorForId[oldIdForPrimary] = m_primaryConnector; m_primaryConnector = primary; + save(); } @@ -124,6 +131,15 @@ void ScreenPool::insertScreenMapping(int id, const QString &connector) Q_ASSERT(!m_connectorForId.contains(id) || m_connectorForId.value(id) == connector); Q_ASSERT(!m_idForConnector.contains(connector) || m_idForConnector.value(connector) == id); + //the ":" check fixes the strange plasma/qt issues when changing layouts + //there are case that the QScreen instead of the correct screen name + //returns "0:0", this check prevents from breaking the screens database + //from garbage ids + if (connector.startsWith(":")) + return; + + qDebug() << "add connector..." << connector; + if (id == 0) { m_primaryConnector = connector; }