first approach to copy a dock

pull/1/head
Michail Vourlakos 8 years ago
parent 34b09c5c72
commit b0ebfdbe4f

@ -1044,6 +1044,56 @@ void DockCorona::loadDefaultLayout()
defaultContainment->createApplet(QStringLiteral("org.kde.plasma.analogclock"));
}
void DockCorona::copyDock(Plasma::Containment *containment)
{
if (!containment)
return;
qDebug() << "copying containment layout";
//! Settting mutable for create a containment
setImmutability(Plasma::Types::Mutable);
Plasma::Containment *newContainment{nullptr};
//! WE NEED A WAY TO COPY A CONTAINMENT!!!!
if (!newContainment)
return;
newContainment->setContainmentType(Plasma::Types::PanelContainment);
newContainment->init();
if (!newContainment || !newContainment->kPackage().isValid()) {
qWarning() << "the requested containment plugin can not be located or loaded";
return;
}
auto config = newContainment->config();
newContainment->restore(config);
QList<Plasma::Types::Location> edges = freeEdges(newContainment->screen());
if (edges.count() > 0) {
newContainment->setLocation(edges.at(0));
} else {
newContainment->setLocation(Plasma::Types::BottomEdge);
}
if (currentSession() != Dock::DefaultSession) {
config.writeEntry("session", (int)currentSession());
}
newContainment->updateConstraints(Plasma::Types::StartupCompletedConstraint);
newContainment->save(config);
requestConfigSync();
newContainment->flushPendingConstraintsEvents();
emit containmentAdded(newContainment);
emit containmentCreated(newContainment);
addDock(newContainment);
}
//! This function figures in the beginning if a dock with tasks
//! in it will be loaded taking into account also the screens are present.
bool DockCorona::heuresticForLoadingDockWithTasks()

@ -76,6 +76,7 @@ public:
void addDock(Plasma::Containment *containment);
void recreateDock(Plasma::Containment *containment);
void copyDock(Plasma::Containment *containment);
Dock::SessionType currentSession();
void setCurrentSession(Dock::SessionType session);

@ -398,6 +398,15 @@ void DockView::addNewDock()
}
}
void DockView::copyDock()
{
auto *dockCorona = qobject_cast<DockCorona *>(this->corona());
if (dockCorona) {
dockCorona->copyDock(containment());
}
}
void DockView::removeDock()
{
if (docksCount() > 1) {

@ -161,6 +161,7 @@ public:
public slots:
Q_INVOKABLE void addNewDock();
Q_INVOKABLE void removeDock();
Q_INVOKABLE void copyDock();
Q_INVOKABLE QList<int> freeEdges() const;
Q_INVOKABLE QVariantList containmentActions();

@ -294,7 +294,7 @@ PlasmaCore.FrameSvgItem {
tooltip: i18n("Add a new dock")
onClicked: dock.addNewDock()
onClicked: dock.copyDock() //dock.addNewDock()
Component.onCompleted: {
enabled = dock.freeEdges().length > 0

Loading…
Cancel
Save