diff --git a/app/settings/controllers/layoutscontroller.cpp b/app/settings/controllers/layoutscontroller.cpp
index feddea90c..184d5d399 100644
--- a/app/settings/controllers/layoutscontroller.cpp
+++ b/app/settings/controllers/layoutscontroller.cpp
@@ -158,6 +158,21 @@ bool Layouts::dataAreChanged() const
return m_model->dataAreChanged();
}
+bool Layouts::layoutsAreChanged() const
+{
+ return m_model->layoutsAreChanged();
+}
+
+bool Layouts::modeIsChanged() const
+{
+ return m_model-modeIsChanged();
+}
+
+void Layouts::setOriginalInMultipleMode(const bool &inmultiple)
+{
+ m_model->setOriginalInMultipleMode(inmultiple);
+}
+
bool Layouts::hasSelectedLayout() const
{
int selectedRow = m_view->currentIndex().row();
@@ -382,7 +397,8 @@ void Layouts::initLayouts()
}
//! Send original loaded data to model
- m_model->setOriginalData(layouts, inMultiple);
+ m_model->setOriginalInMultipleMode(inMultiple);
+ m_model->setOriginalData(layouts);
QStringList currentLayoutNames = m_handler->corona()->layoutsManager()->currentLayoutsNames();
if (currentLayoutNames.count() > 0) {
diff --git a/app/settings/controllers/layoutscontroller.h b/app/settings/controllers/layoutscontroller.h
index e5f2dd1a0..5b76f7d45 100644
--- a/app/settings/controllers/layoutscontroller.h
+++ b/app/settings/controllers/layoutscontroller.h
@@ -65,6 +65,8 @@ public:
QTableView *view() const;
bool dataAreChanged() const;
+ bool layoutsAreChanged() const;
+ bool modeIsChanged() const;
bool inMultipleMode() const;
void setInMultipleMode(bool inMultiple);
@@ -89,6 +91,8 @@ public:
QString layoutNameForFreeActivities() const;
void setOriginalLayoutForFreeActivities(const QString &id);
+ void setOriginalInMultipleMode(const bool &inmultiple);
+
void copySelectedLayout();
const Latte::Data::Layout addLayoutForFile(QString file, QString layoutName = QString(), bool newTempDirectory = true);
const Latte::Data::Layout addLayoutByText(QString rawLayoutText);
diff --git a/app/settings/handlers/tablayoutshandler.cpp b/app/settings/handlers/tablayoutshandler.cpp
index d55d6d8dd..004c35eae 100644
--- a/app/settings/handlers/tablayoutshandler.cpp
+++ b/app/settings/handlers/tablayoutshandler.cpp
@@ -309,16 +309,20 @@ void TabLayouts::switchLayout()
Latte::Data::Layout selectedLayoutOriginal = m_layoutsController->selectedLayoutOriginalData();
selectedLayoutOriginal = selectedLayoutOriginal.isEmpty() ? selectedLayoutCurrent : selectedLayoutOriginal;
- if (m_layoutsController->dataAreChanged()) {
+ if (m_layoutsController->layoutsAreChanged()) {
showInlineMessage(i18nc("settings:not permitted switching layout","You need to apply your changes first to switch layout..."),
KMessageWidget::Warning);
return;
}
if (!m_layoutsController->inMultipleMode()) {
- m_corona->layoutsManager()->switchToLayout(selectedLayoutOriginal.name);
+ m_corona->layoutsManager()->switchToLayout(selectedLayoutOriginal.name, MemoryUsage::SingleLayout);
+ m_layoutsController->setOriginalInMultipleMode(false);
} else {
- CentralLayout singleLayout(this, selectedLayoutCurrent.id);
+ m_corona->layoutsManager()->switchToLayout(selectedLayoutOriginal.name, MemoryUsage::MultipleLayouts);
+ m_layoutsController->setOriginalInMultipleMode(true);
+
+ /*CentralLayout singleLayout(this, selectedLayoutCurrent.id);
QString switchToActivity;
@@ -354,7 +358,7 @@ void TabLayouts::switchLayout()
}
m_corona->layoutsManager()->synchronizer()->activitiesController()->setCurrentActivity(switchToActivity);
- }
+ }*/
}
updatePerLayoutButtonsState();
diff --git a/app/settings/models/layoutsmodel.cpp b/app/settings/models/layoutsmodel.cpp
index 1d8d397f0..de2c14692 100644
--- a/app/settings/models/layoutsmodel.cpp
+++ b/app/settings/models/layoutsmodel.cpp
@@ -73,7 +73,17 @@ bool Layouts::containsCurrentName(const QString &name) const
bool Layouts::dataAreChanged() const
{
- return ((o_inMultipleMode != m_inMultipleMode) || (o_layoutsTable != m_layoutsTable));
+ return modeIsChanged() || layoutsAreChanged();
+}
+
+bool Layouts::modeIsChanged() const
+{
+ return o_inMultipleMode != m_inMultipleMode;
+}
+
+bool Layouts::layoutsAreChanged() const
+{
+ return o_layoutsTable != m_layoutsTable;
}
bool Layouts::inMultipleMode() const
@@ -151,7 +161,8 @@ void Layouts::applyData()
void Layouts::resetData()
{
clear();
- setOriginalData(o_layoutsTable, o_inMultipleMode);
+ setOriginalInMultipleMode(o_inMultipleMode);
+ setOriginalData(o_layoutsTable);
}
void Layouts::removeLayout(const QString &id)
@@ -779,23 +790,27 @@ const Latte::Data::LayoutsTable &Layouts::currentLayoutsData()
return m_layoutsTable;
}
-void Layouts::setOriginalData(Latte::Data::LayoutsTable &data, const bool &inmultiple)
+void Layouts::setOriginalInMultipleMode(const bool &inmultiple)
+{
+ setInMultipleMode(inmultiple);
+
+ if (o_inMultipleMode == inmultiple) {
+ return;
+ }
+
+ o_inMultipleMode = inmultiple;
+ emit inMultipleModeChanged();
+}
+
+void Layouts::setOriginalData(Latte::Data::LayoutsTable &data)
{
clear();
beginInsertRows(QModelIndex(), 0, data.rowCount() - 1);
- o_inMultipleMode = inmultiple;
o_layoutsTable = data;
-
m_layoutsTable = data;
-
- for(int i=0; ilayoutsManager()->synchronizer()->layout(originalData(m_layoutsTable[i].id).name);
- }
endInsertRows();
- setInMultipleMode(inmultiple);
-
emit rowsInserted();
}
diff --git a/app/settings/models/layoutsmodel.h b/app/settings/models/layoutsmodel.h
index b67f0ceca..569640475 100644
--- a/app/settings/models/layoutsmodel.h
+++ b/app/settings/models/layoutsmodel.h
@@ -87,6 +87,8 @@ public:
bool containsCurrentName(const QString &name) const;
bool dataAreChanged() const;
+ bool layoutsAreChanged() const;
+ bool modeIsChanged() const;
bool inMultipleMode() const;
void setInMultipleMode(bool inMultiple);
@@ -129,7 +131,9 @@ public:
const Latte::Data::LayoutsTable ¤tLayoutsData();
const Latte::Data::LayoutsTable &originalLayoutsData();
- void setOriginalData(Latte::Data::LayoutsTable &data, const bool &inmultiple);
+
+ void setOriginalInMultipleMode(const bool &inmultiple);
+ void setOriginalData(Latte::Data::LayoutsTable &data);
signals:
void inMultipleModeChanged();