diff --git a/app/data/viewdata.cpp b/app/data/viewdata.cpp index 74d8612a4..a75af9348 100644 --- a/app/data/viewdata.cpp +++ b/app/data/viewdata.cpp @@ -102,7 +102,7 @@ bool View::operator==(const View &rhs) const { return (id == rhs.id) && (name == rhs.name) - && (isActive == rhs.isActive) + //&& (isActive == rhs.isActive) /*activeness is a state and is not considered*/ && (onPrimary == rhs.onPrimary) && (screen == rhs.screen) && (screenEdgeMargin == rhs.screenEdgeMargin) @@ -127,6 +127,18 @@ View::operator QString() const result += id; result +=" : "; result += isActive ? "Active" : "Inactive"; + result += " : "; + + if (m_state == IsInvalid) { + result += "IsInvalid"; + } else if (m_state == IsCreated) { + result += "IsCreated"; + } else if (m_state == OriginFromViewTemplate) { + result += "OriginFromViewTemplate"; + } else if (m_state == OriginFromLayout) { + result += "OriginFromLayout"; + } + result += " : "; result += onPrimary ? "Primary" : "Explicit"; result += " : "; diff --git a/app/settings/viewsdialog/viewscontroller.cpp b/app/settings/viewsdialog/viewscontroller.cpp index 1bd4d8f8d..63287b111 100644 --- a/app/settings/viewsdialog/viewscontroller.cpp +++ b/app/settings/viewsdialog/viewscontroller.cpp @@ -265,6 +265,10 @@ void Views::save() //! update model original data m_model->setOriginalData(currentViews); + + if (central->isActive()) { + m_model->updateActiveStatesBasedOn(central); + } } QString Views::uniqueViewName(QString name) diff --git a/app/settings/viewsdialog/viewsmodel.cpp b/app/settings/viewsdialog/viewsmodel.cpp index 46325131b..f2acc2b4e 100644 --- a/app/settings/viewsdialog/viewsmodel.cpp +++ b/app/settings/viewsdialog/viewsmodel.cpp @@ -208,6 +208,32 @@ bool Views::isVertical(const Plasma::Types::Location &location) const return (location == Plasma::Types::LeftEdge || location == Plasma::Types::RightEdge); } +void Views::updateActiveStatesBasedOn(const CentralLayout *layout) +{ + if (!layout) { + return; + } + + QVector roles; + roles << Qt::DisplayRole; + roles << Qt::UserRole; + roles << ISCHANGEDROLE; + roles << ISACTIVEROLE; + roles << HASCHANGEDVIEWROLE; + + for (int i=0; iviewForContainment(viewid); + + bool currentactivestate = (view != nullptr); + + if (currentactivestate != m_viewsTable[i].isActive) { + m_viewsTable[i].isActive = currentactivestate; + emit dataChanged(this->index(i, IDCOLUMN), this->index(i, SUBCONTAINMENTSCOLUMN), roles); + } + } +} + Latte::Data::Screen Views::screenData(const QString &viewId) const { int row = rowForId(viewId); diff --git a/app/settings/viewsdialog/viewsmodel.h b/app/settings/viewsdialog/viewsmodel.h index f02196440..5cf44ecbf 100644 --- a/app/settings/viewsdialog/viewsmodel.h +++ b/app/settings/viewsdialog/viewsmodel.h @@ -27,6 +27,7 @@ #include "../../data/screendata.h" #include "../../data/viewdata.h" #include "../../data/viewstable.h" +#include "../../layout/centrallayout.h" // Qt #include @@ -108,6 +109,8 @@ public: void setOriginalData(Latte::Data::ViewsTable &data); void setOriginalView(QString currentViewId, Latte::Data::View &view); + void updateActiveStatesBasedOn(const CentralLayout *layout); + Latte::Data::ViewsTable alteredViews() const; Latte::Data::ViewsTable newViews() const;