Index: containments/desktop/plugins/folder/foldermodel.cpp =================================================================== --- containments/desktop/plugins/folder/foldermodel.cpp +++ containments/desktop/plugins/folder/foldermodel.cpp @@ -266,7 +266,7 @@ void FolderModel::newFileMenuItemCreated(const QUrl &url) { - if (m_usedByContainment) { + if (m_usedByContainment && !m_screenMapper->sharedDesktops()) { m_screenMapper->addMapping(url, m_screen, ScreenMapper::DelayedSignal); m_dropTargetPositions.insert(url.fileName(), m_menuPosition); m_menuPosition = {}; @@ -322,7 +322,7 @@ emit iconNameChanged(); - if (m_usedByContainment) { + if (m_usedByContainment && !m_screenMapper->sharedDesktops()) { m_screenMapper->removeScreen(m_screen, oldUrl); m_screenMapper->addScreen(m_screen, resolvedUrl()); } @@ -629,7 +629,7 @@ return; m_screen = screen; - if (m_usedByContainment) { + if (m_usedByContainment && !m_screenMapper->sharedDesktops()) { m_screenMapper->addScreen(screen, resolvedUrl()); } emit screenChanged(); @@ -1114,7 +1114,7 @@ } - if (m_usedByContainment) { + if (m_usedByContainment && !m_screenMapper->sharedDesktops()) { if (isDropBetweenSharedViews(mimeData->urls(), dropTargetFolderUrl)) { setSortMode(-1); for (const auto &url : mimeData->urls()) { @@ -1164,7 +1164,7 @@ m_dropTargetPositions.insert(targetUrl.fileName(), dropPos); m_dropTargetPositionsCleanup->start(); - if (m_usedByContainment) { + if (m_usedByContainment && !m_screenMapper->sharedDesktops()) { // assign a screen for the item before the copy is actually done, so // filterAcceptsRow doesn't assign the default screen to it QUrl url = resolvedUrl(); @@ -1498,7 +1498,7 @@ const KDirModel *dirModel = static_cast(sourceModel()); const KFileItem item = dirModel->itemForIndex(dirModel->index(sourceRow, KDirModel::Name, sourceParent)); - if (m_usedByContainment) { + if (m_usedByContainment && !m_screenMapper->sharedDesktops()) { const QUrl url = item.url(); const int screen = m_screenMapper->screenForItem(url); // don't do anything if the folderview is not associated with a screen Index: containments/desktop/plugins/folder/screenmapper.h =================================================================== --- containments/desktop/plugins/folder/screenmapper.h +++ containments/desktop/plugins/folder/screenmapper.h @@ -60,6 +60,9 @@ int firstAvailableScreen(const QUrl &screenUrl) const; void removeItemFromDisabledScreen(const QUrl &url); + bool sharedDesktops() const { return m_sharedDesktops; } + void setSharedDesktop(bool sharedDesktops); + #ifdef BUILD_TESTING void cleanup(); #endif @@ -80,6 +83,7 @@ QVector m_availableScreens; Plasma::Corona *m_corona = nullptr; QTimer *m_screenMappingChangedTimer = nullptr; + bool m_sharedDesktops = false; // all screens share the same desktops, disabling the screen mapping }; #endif // SCREENMAPPER_H Index: containments/desktop/plugins/folder/screenmapper.cpp =================================================================== --- containments/desktop/plugins/folder/screenmapper.cpp +++ containments/desktop/plugins/folder/screenmapper.cpp @@ -179,6 +179,19 @@ } } +void ScreenMapper::setSharedDesktop(bool sharedDesktops) +{ + if (m_sharedDesktops != sharedDesktops) { + m_sharedDesktops = true; + if (!m_corona) + return; + + auto config = m_corona->config(); + KConfigGroup group(config, QLatin1String("ScreenMapping")); + group.writeEntry(QLatin1String("sharedDesktops"), m_sharedDesktops); + } +} + #ifdef BUILD_TESTING void ScreenMapper::cleanup() { @@ -208,6 +221,7 @@ KConfigGroup group(config, QLatin1String("ScreenMapping")); const QStringList mapping = group.readEntry(QLatin1String("screenMapping"), QStringList{}); setScreenMapping(mapping); + m_sharedDesktops = group.readEntry(QLatin1String("sharedDesktops"), false); } } }