]> git.cworth.org Git - apitrace/commitdiff
Don't change immutable values.
authorZack Rusin <zack@kde.org>
Mon, 8 Aug 2011 21:49:51 +0000 (17:49 -0400)
committerZack Rusin <zack@kde.org>
Mon, 8 Aug 2011 21:49:51 +0000 (17:49 -0400)
When editing the values in the gui we'd silently change some immutable
values. This fixes #29

gui/argumentseditor.cpp

index 0aeafeb4081e8cbe264c8237a05070f3e2399dd9..8848122b60089479c3343eb69a6c7010ca060483 100644 (file)
 static bool
 isVariantEditable(const QVariant &var)
 {
+    if (var.canConvert<ApiArray>()) {
+        ApiArray array = var.value<ApiArray>();
+        QList<QVariant> vals = array.values();
+        if (vals.isEmpty())
+            return false;
+        else
+            return isVariantEditable(vals.first());
+    }
     switch (var.userType()) {
     case QVariant::Bool:
     case QVariant::Int:
@@ -339,6 +347,7 @@ void ArgumentsEditor::accept()
         QString argName = argNames[i];
         QVariant argValue = originalValues[i];
         QVariant editorValue = valueForName(argName, argValue, &valChanged);
+
         newValues.append(editorValue);
 #if 0
         qDebug()<<"Arg = "<<argName;
@@ -368,6 +377,10 @@ QVariant ArgumentsEditor::valueForName(const QString &name,
         return arrayFromEditor(array, changed);
     }
 
+    if (!isVariantEditable(originalValue)) {
+        return originalValue;
+    }
+
     for (int topRow = 0; topRow < m_model->rowCount(); ++topRow) {
         QModelIndex nameIdx = m_model->index(topRow, 0, QModelIndex());
         QString argName = nameIdx.data().toString();