Fix widget change detection in ChatMonitorSettingsPage
authorManuel Nickschas <sputnick@quassel-irc.org>
Fri, 19 Dec 2008 22:21:23 +0000 (23:21 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Fri, 19 Dec 2008 22:21:23 +0000 (23:21 +0100)
src/qtui/settingsdlg.cpp
src/qtui/settingspages/chatmonitorsettingspage.cpp

index d070080..6064296 100644 (file)
@@ -34,6 +34,8 @@ SettingsDlg::SettingsDlg(QWidget *parent)
 
   connect(ui.settingsTree, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelected()));
   connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *)));
+
+  setButtonStates();
 }
 
 void SettingsDlg::registerSettingsPage(SettingsPage *sp) {
index cbfa26e..d457d3d 100644 (file)
@@ -142,7 +142,19 @@ void ChatMonitorSettingsPage::widgetHasChanged() {
 }
 
 bool ChatMonitorSettingsPage::testHasChanged() {
-  if (_configAvailable != _configActive) return true;
+  if(settings["OperationMode"] != ui.operationMode->itemData(ui.operationMode->currentIndex()))
+    return true;
+
+  if(_configActive->bufferList().count() != settings["Buffers"].toList().count())
+    return true;
+
+  QSet<BufferId> uiBufs = _configActive->bufferList().toSet();
+  QSet<BufferId> settingsBufs;
+  foreach(QVariant v, settings["Buffers"].toList())
+    settingsBufs << v.value<BufferId>();
+  if(uiBufs != settingsBufs)
+    return true;
+
   return false;
 }
 
@@ -227,9 +239,5 @@ void ChatMonitorSettingsPage::switchOperationMode(int modeIndex) {
   else if(newMode == ChatViewSettings::OptOut) {
     ui.labelActiveBuffers->setText(tr("Ignore:"));
   }
-
-  if(settings["OperationMode"] != newMode) {
-    setChangedState(true);
-  }
-  settings["OperationMode"] = newMode;
+  widgetHasChanged();
 }