From: Marcus Eggenberger Date: Sun, 8 Mar 2009 15:05:46 +0000 (+0100) Subject: Fixes #583 - identity settings: clicking delete or rename crashes client if there... X-Git-Tag: 0.5-rc1~318 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=8e56bbef20a6d13a05fa20ba85ff54e4a5817ee1;ds=sidebyside Fixes #583 - identity settings: clicking delete or rename crashes client if there is no identity --- diff --git a/src/qtui/settingspages/identitiessettingspage.cpp b/src/qtui/settingspages/identitiessettingspage.cpp index bb9b564f..47463f6d 100644 --- a/src/qtui/settingspages/identitiessettingspage.cpp +++ b/src/qtui/settingspages/identitiessettingspage.cpp @@ -129,6 +129,7 @@ void IdentitiesSettingsPage::load() { deletedIdentities.clear(); changedIdentities.clear(); ui.identityList->clear(); + setWidgetStates(); foreach(IdentityId id, Client::identityIds()) { clientIdentityCreated(id); } @@ -140,6 +141,13 @@ void IdentitiesSettingsPage::widgetHasChanged() { if(changed != hasChanged()) setChangedState(changed); } +void IdentitiesSettingsPage::setWidgetStates() { + bool enabled = (ui.identityList->count() > 0); + ui.identityEditor->setEnabled(enabled); + ui.renameIdentity->setEnabled(enabled); + ui.deleteIdentity->setEnabled(ui.identityList->count() > 1); +} + bool IdentitiesSettingsPage::testHasChanged() { if(deletedIdentities.count()) return true; if(currentId < 0) { @@ -222,22 +230,19 @@ void IdentitiesSettingsPage::clientIdentityRemoved(IdentityId id) { void IdentitiesSettingsPage::insertIdentity(CertIdentity *identity) { IdentityId id = identity->id(); identities[id] = identity; - if(id == 1) { - // default identity is always the first one! - ui.identityList->insertItem(0, identity->identityName(), id.toInt()); - } else { - QString name = identity->identityName(); - for(int j = 0; j < ui.identityList->count(); j++) { - if((j>0 || ui.identityList->itemData(0).toInt() != 1) && name.localeAwareCompare(ui.identityList->itemText(j)) < 0) { - ui.identityList->insertItem(j, name, id.toInt()); - widgetHasChanged(); - return; - } + + QString name = identity->identityName(); + for(int j = 0; j < ui.identityList->count(); j++) { + if((j>0 || ui.identityList->itemData(0).toInt() != 1) && name.localeAwareCompare(ui.identityList->itemText(j)) < 0) { + ui.identityList->insertItem(j, name, id.toInt()); + widgetHasChanged(); + return; } - // append - ui.identityList->insertItem(ui.identityList->count(), name, id.toInt()); - widgetHasChanged(); } + // append + ui.identityList->insertItem(ui.identityList->count(), name, id.toInt()); + setWidgetStates(); + widgetHasChanged(); } void IdentitiesSettingsPage::renameIdentity(IdentityId id, const QString &newName) { @@ -252,6 +257,7 @@ void IdentitiesSettingsPage::removeIdentity(Identity *id) { changedIdentities.removeAll(id->id()); if(currentId == id->id()) currentId = 0; id->deleteLater(); + setWidgetStates(); widgetHasChanged(); } @@ -270,8 +276,6 @@ void IdentitiesSettingsPage::on_identityList_currentIndexChanged(int index) { ui.identityEditor->displayIdentity(identities[id], previousIdentity); currentId = id; } - ui.deleteIdentity->setEnabled(id != 1); // default identity cannot be deleted - ui.renameIdentity->setEnabled(id != 1); // ...or renamed } } diff --git a/src/qtui/settingspages/identitiessettingspage.h b/src/qtui/settingspages/identitiessettingspage.h index a6d21b22..27be75c8 100644 --- a/src/qtui/settingspages/identitiessettingspage.h +++ b/src/qtui/settingspages/identitiessettingspage.h @@ -60,6 +60,7 @@ private slots: void continueUnsecured(); #endif void widgetHasChanged(); + void setWidgetStates(); private: Ui::IdentitiesSettingsPage ui;