diff --git a/app/settings/viewsdialog/viewscontroller.cpp b/app/settings/viewsdialog/viewscontroller.cpp index abeb9da6e..6428eedcf 100644 --- a/app/settings/viewsdialog/viewscontroller.cpp +++ b/app/settings/viewsdialog/viewscontroller.cpp @@ -114,6 +114,7 @@ void Views::init() m_copyAction = new QAction(QIcon::fromTheme("edit-copy"), i18n("Copy"), m_view); m_copyAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_C)); + connect(m_copyAction, &QAction::triggered, this, &Views::copySelectedViews); m_pasteAction = new QAction(QIcon::fromTheme("edit-paste"), i18n("Paste"), m_view); m_pasteAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_V)); @@ -193,6 +194,37 @@ const Latte::Data::View Views::appendViewFromViewTemplate(const Data::View &view return newview; } +void Views::copySelectedViews() +{ + qDebug() << Q_FUNC_INFO; + + if (!hasSelectedView()) { + return; + } + + Data::ViewsTable selectedviews = selectedViewsCurrentData(); + Latte::Data::Layout currentlayout = m_handler->currentData(); + + Data::ViewsTable clipboardviews; + + for(int i=0; ilayoutsController()->templatesKeeper()->storedView(currentlayout.id, selectedviews[i].id); + Latte::Data::View copiedview = selectedviews[i]; + copiedview.setState(Data::View::OriginFromLayout, storedviewpath, currentlayout.id, selectedviews[i].id); + copiedview.isActive = false; + clipboardviews << copiedview; + } else if (selectedviews[i].state() == Data::View::OriginFromViewTemplate + || selectedviews[i].state() == Data::View::OriginFromLayout) { + Latte::Data::View copiedview = selectedviews[i]; + copiedview.isActive = false; + clipboardviews << copiedview; + } + } + + m_handler->layoutsController()->templatesKeeper()->setClipboardContents(clipboardviews); +} + void Views::duplicateSelectedViews() { qDebug() << Q_FUNC_INFO; @@ -208,10 +240,11 @@ void Views::duplicateSelectedViews() if (selectedviews[i].state() == Data::View::IsCreated) { QString storedviewpath = m_handler->layoutsController()->templatesKeeper()->storedView(currentlayout.id, selectedviews[i].id); Latte::Data::View duplicatedview = selectedviews[i]; - duplicatedview.setState(Data::View::OriginFromViewTemplate, storedviewpath); + duplicatedview.setState(Data::View::OriginFromLayout, storedviewpath, currentlayout.id, selectedviews[i].id); duplicatedview.isActive = false; appendViewFromViewTemplate(duplicatedview); - } else if (selectedviews[i].state() == Data::View::OriginFromViewTemplate) { + } else if (selectedviews[i].state() == Data::View::OriginFromViewTemplate + || selectedviews[i].state() == Data::View::OriginFromLayout) { Latte::Data::View duplicatedview = selectedviews[i]; duplicatedview.isActive = false; appendViewFromViewTemplate(duplicatedview); @@ -291,6 +324,13 @@ void Views::save() for(int i=0; inewView(newViews[i]); + + newviewsresponses[newViews[i].id] = addedview; + } else if (newViews[i].state() == Data::View::OriginFromLayout) { + Data::View adjustedview = newViews[i]; + adjustedview.setState(Data::View::OriginFromViewTemplate, newViews[i].originFile(), QString(), QString()); + Data::View addedview = central->newView(adjustedview); + newviewsresponses[newViews[i].id] = addedview; } } diff --git a/app/settings/viewsdialog/viewscontroller.h b/app/settings/viewsdialog/viewscontroller.h index a848d6759..0b1e492bb 100644 --- a/app/settings/viewsdialog/viewscontroller.h +++ b/app/settings/viewsdialog/viewscontroller.h @@ -84,6 +84,7 @@ public: void save(); public slots: + void copySelectedViews(); void duplicateSelectedViews(); void removeSelectedViews();