Fix widget change detection in ChatMonitorSettingsPage
[quassel.git] / src / qtui / settingspages / chatmonitorsettingspage.cpp
index e3d4b56..d457d3d 100644 (file)
@@ -41,7 +41,8 @@ ChatMonitorSettingsPage::ChatMonitorSettingsPage(QWidget *parent)
   // setup available buffers config (for the bufferview on the left)
   _configAvailable = new BufferViewConfig(-667, this);
   _configAvailable->setBufferViewName("tmpChatMonitorAvailableBuffers");
-  _configAvailable->sortAlphabetically();
+  _configAvailable->setSortAlphabetically(true);
+  _configAvailable->setDisableDecoration(true);
   _configAvailable->setNetworkId(NetworkId());
   _configAvailable->setInitialized();
 
@@ -49,6 +50,7 @@ ChatMonitorSettingsPage::ChatMonitorSettingsPage(QWidget *parent)
   _configActive = new BufferViewConfig(-666, this);
   _configActive->setBufferViewName("tmpChatMonitorActiveBuffers");
   _configActive->setSortAlphabetically(true);
+  _configActive->setDisableDecoration(true);
   _configActive->setNetworkId(NetworkId());
   _configActive->setInitialized();
 
@@ -92,10 +94,12 @@ void ChatMonitorSettingsPage::load() {
       bufferIdsFromConfig << v.value<BufferId>();
       allBufferIds.removeAll(v.value<BufferId>());
     }
+    qSort(bufferIdsFromConfig.begin(), bufferIdsFromConfig.end(), bufferIdLessThan);
     _configActive->initSetBufferList(bufferIdsFromConfig);
   }
   ui.activeBuffers->setFilteredModel(Client::bufferModel(), _configActive);
 
+  qSort(allBufferIds.begin(), allBufferIds.end(), bufferIdLessThan);
   _configAvailable->initSetBufferList(allBufferIds);
   ui.availableBuffers->setFilteredModel(Client::bufferModel(), _configAvailable);
 
@@ -138,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;
 }
 
@@ -223,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();
 }