From ab045b2e9d26c935d04f2204e58c25b791a75568 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Tue, 20 Jun 2017 20:01:18 +0300 Subject: [PATCH] fix #537,add copied dock properly in explicit scr --the copy dock function now works properly in a multi-screen environment --- app/dockcorona.cpp | 27 +++++++++++++++++++++------ app/dockcorona.h | 2 +- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/app/dockcorona.cpp b/app/dockcorona.cpp index fed0331bc..1b53fdfa8 100644 --- a/app/dockcorona.cpp +++ b/app/dockcorona.cpp @@ -801,7 +801,7 @@ int DockCorona::screenForContainment(const Plasma::Containment *containment) con return -1; } -void DockCorona::addDock(Plasma::Containment *containment) +void DockCorona::addDock(Plasma::Containment *containment, int expDockScreen) { if (!containment || !containment->kPackage().isValid()) { qWarning() << "the requested containment plugin can not be located or loaded"; @@ -842,11 +842,14 @@ void DockCorona::addDock(Plasma::Containment *containment) bool onPrimary = containment->config().readEntry("onPrimary", true); int id = containment->screen(); - if (id == -1) { + if (id == -1 && expDockScreen==-1) { id = containment->lastScreen(); } + if (expDockScreen>-1) { + id = expDockScreen; + } - qDebug() << "add dock - containment id : " << id; + qDebug() << "add dock - containment id : " << id << " onprimary:"<= 0 && !onPrimary && !forceDockLoading) { QString connector = m_screenPool->connector(id); @@ -868,7 +871,7 @@ void DockCorona::addDock(Plasma::Containment *containment) } qDebug() << "Adding dock for container..."; - qDebug() << "onPrimary: " << onPrimary << "screen!!! :" << containment->screen(); + qDebug() << "onPrimary: " << onPrimary << "screen!!! :" << nextScreen->name(); //! it is used to set the correct flag during the creation //! of the window... This of course is also used during @@ -1169,13 +1172,15 @@ void DockCorona::copyDock(Plasma::Containment *containment) bool setOnExplicitScreen = false; int dockScrId = -1; + int copyScrId = -1; if (dock) { dockScrId = m_screenPool->id(dock->currentScreen()); + qDebug() << "COPY DOCK SCREEN ::: " << dockScrId; if (dockScrId != -1 && screens.count() > 1) { foreach (auto scr, screens) { - int copyScrId = m_screenPool->id(scr->name()); + copyScrId = m_screenPool->id(scr->name()); //the screen must exist and not be the same with the original dock if (copyScrId > -1 && copyScrId != dockScrId) { @@ -1187,7 +1192,10 @@ void DockCorona::copyDock(Plasma::Containment *containment) newContainment->config().writeEntry("lastScreen", copyScrId); newContainment->setLocation(containment->location()); + qDebug() << "COPY DOCK SCREEN NEW SCREEN ::: " << copyScrId; + setOnExplicitScreen = true; + break; } } } @@ -1220,7 +1228,14 @@ void DockCorona::copyDock(Plasma::Containment *containment) emit containmentAdded(newContainment); emit containmentCreated(newContainment); - addDock(newContainment); + if (setOnExplicitScreen && copyScrId>-1) { + qDebug()<< "Copy Dock in explicit screen ::: " << copyScrId; + addDock(newContainment, copyScrId); + newContainment->reactToScreenChange(); + } else { + qDebug()<< "Copy Dock in current screen..."; + addDock(newContainment); + } } //! This function figures in the beginning if a dock with tasks diff --git a/app/dockcorona.h b/app/dockcorona.h index 4550be6fe..912de18f8 100644 --- a/app/dockcorona.h +++ b/app/dockcorona.h @@ -76,7 +76,7 @@ public: int noDocksWithTasks() const; int screenForContainment(const Plasma::Containment *containment) const override; - void addDock(Plasma::Containment *containment); + void addDock(Plasma::Containment *containment, int expDockScreen = -1); void recreateDock(Plasma::Containment *containment); void copyDock(Plasma::Containment *containment);