Prevent the settings dialogs from crashing when OK is pressed without changes made.
[quassel.git] / src / qtui / settingsdlg.cpp
index 919ca34..b5fc125 100644 (file)
@@ -65,6 +65,7 @@ void SettingsDlg::registerSettingsPage(SettingsPage *sp) {
   QTreeWidgetItem *item = new QTreeWidgetItem(cat, QStringList(sp->title()));
   treeItems[sp] = item;
   pages[QString("%1$%2").arg(sp->category(), sp->title())] = sp;
+  sp->load();
   // TESTING
   selectPage(sp->category(), sp->title());
 }
@@ -112,7 +113,6 @@ void SettingsDlg::itemSelected() {
 
 void SettingsDlg::setButtonStates() {
   SettingsPage *sp = currentPage();
-  ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(sp && sp->hasChanged());
   ui.buttonBox->button(QDialogButtonBox::Apply)->setEnabled(sp && sp->hasChanged());
   ui.buttonBox->button(QDialogButtonBox::Reset)->setEnabled(sp && sp->hasChanged());
   ui.buttonBox->button(QDialogButtonBox::RestoreDefaults)->setEnabled(sp && sp->hasDefaults());
@@ -121,7 +121,9 @@ void SettingsDlg::setButtonStates() {
 void SettingsDlg::buttonClicked(QAbstractButton *button) {
   switch(ui.buttonBox->standardButton(button)) {
     case QDialogButtonBox::Ok:
-      if(applyChanges()) accept();
+      if(currentPage() && currentPage()->hasChanged()) {
+        if(applyChanges()) accept();
+      } else accept();
       break;
     case QDialogButtonBox::Apply:
       applyChanges();
@@ -169,7 +171,7 @@ void SettingsDlg::loadDefaults() {
   if(!currentPage()) return;
   int ret = QMessageBox::question(this, tr("Restore Defaults"), tr("Do you like to restore the default values for this page?"),
                                   QMessageBox::RestoreDefaults|QMessageBox::Cancel, QMessageBox::Cancel);
-  if(ret == QMessageBox::Yes) {
+  if(ret == QMessageBox::RestoreDefaults) {
     currentPage()->defaults();
   }
 }