From 00f4e4cd22162b0e108a83a9761a18107daf0364 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Mon, 16 Mar 2020 11:20:24 +0200 Subject: [PATCH] fix crash from layouts reset functionality --- .../controllers/layoutscontroller.cpp | 8 +++++++ app/settings/controllers/layoutscontroller.h | 1 + app/settings/models/layoutsmodel.cpp | 2 +- app/settings/settingsdialog.cpp | 23 +++++++++---------- app/settings/settingsdialog.h | 4 +--- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/app/settings/controllers/layoutscontroller.cpp b/app/settings/controllers/layoutscontroller.cpp index bfa6d7069..0010362ae 100644 --- a/app/settings/controllers/layoutscontroller.cpp +++ b/app/settings/controllers/layoutscontroller.cpp @@ -141,6 +141,13 @@ bool Layouts::dataAreChanged() const || (o_layoutsOriginalData != m_model->currentData())); } +bool Layouts::hasSelectedLayout() const +{ + int selectedRow = m_view->currentIndex().row(); + + return (selectedRow >= 0); +} + bool Layouts::selectedLayoutIsCurrentActive() const { Data::Layout selected = selectedLayout(); @@ -581,6 +588,7 @@ void Layouts::reset() { setOriginalInMultipleMode(o_originalInMultipleMode); m_model->setCurrentData(o_layoutsOriginalData); + m_view->selectRow(rowForName(m_corona->layoutsManager()->currentLayoutName())); } void Layouts::save() diff --git a/app/settings/controllers/layoutscontroller.h b/app/settings/controllers/layoutscontroller.h index c18bda440..ccd28c4ed 100644 --- a/app/settings/controllers/layoutscontroller.h +++ b/app/settings/controllers/layoutscontroller.h @@ -59,6 +59,7 @@ public: void setOriginalInMultipleMode(bool inMultiple); + bool hasSelectedLayout() const; bool selectedLayoutIsCurrentActive() const; const Data::Layout &selectedLayout() const; diff --git a/app/settings/models/layoutsmodel.cpp b/app/settings/models/layoutsmodel.cpp index bcfcdc602..2292202cd 100644 --- a/app/settings/models/layoutsmodel.cpp +++ b/app/settings/models/layoutsmodel.cpp @@ -110,7 +110,7 @@ void Layouts::clear() if (m_layoutsTable.rowCount() > 0) { beginRemoveRows(QModelIndex(), 0, m_layoutsTable.rowCount() - 1); m_layoutsTable.clear(); - endInsertRows(); + endRemoveRows(); } } diff --git a/app/settings/settingsdialog.cpp b/app/settings/settingsdialog.cpp index b39fa2c71..beac8ebb8 100644 --- a/app/settings/settingsdialog.cpp +++ b/app/settings/settingsdialog.cpp @@ -155,7 +155,6 @@ SettingsDialog::SettingsDialog(QWidget *parent, Latte::Corona *corona) connect(m_layoutsController, &Settings::Controller::Layouts::dataChanged, this, [&]() { updateApplyButtonsState(); updatePerLayoutButtonsState(); - updateSharedLayoutsUiElements(); }); connect(m_inMemoryButtons, static_cast(&QButtonGroup::buttonToggled), @@ -630,7 +629,6 @@ void SettingsDialog::loadSettings() o_settingsOriginalData = currentSettings(); updateApplyButtonsState(); - updateSharedLayoutsUiElements(); } QList SettingsDialog::currentSettings() @@ -722,6 +720,10 @@ void SettingsDialog::updateApplyButtonsState() void SettingsDialog::updatePerLayoutButtonsState() { + if (!m_layoutsController->hasSelectedLayout()) { + return; + } + Settings::Data::Layout selectedLayout = m_layoutsController->selectedLayout(); //! Switch Button @@ -763,22 +765,19 @@ void SettingsDialog::updatePerLayoutButtonsState() ui->lockedButton->setChecked(false); } - //! Layout Shared Button - if (selectedLayout.isShared()) { - ui->sharedButton->setChecked(true); - } else { - ui->sharedButton->setChecked(false); - } -} - -void SettingsDialog::updateSharedLayoutsUiElements() -{ //! UI Elements that need to be enabled/disabled if (m_layoutsController->inMultipleMode()) { ui->sharedButton->setVisible(true); } else { ui->sharedButton->setVisible(false); } + + //! Layout Shared Button + if (selectedLayout.isShared()) { + ui->sharedButton->setChecked(true); + } else { + ui->sharedButton->setChecked(false); + } } bool SettingsDialog::dataAreAccepted() diff --git a/app/settings/settingsdialog.h b/app/settings/settingsdialog.h index b95f9630b..15f70bcdb 100644 --- a/app/settings/settingsdialog.h +++ b/app/settings/settingsdialog.h @@ -87,6 +87,7 @@ private slots: void restoreDefaults(); void showLayoutInformation(); void showScreensInformation(); + void updateApplyButtonsState(); void updatePerLayoutButtonsState(); private: @@ -96,9 +97,6 @@ private: void blockDeleteOnActivityStopped(); void loadSettings(); - void updateApplyButtonsState(); - void updateSharedLayoutsUiElements(); - void saveAllChanges(); void setCurrentFreeActivitiesLayout(const int &row);