diff options
Diffstat (limited to 'tdecore/tdehw/tdehardwaredevices.cpp')
-rw-r--r-- | tdecore/tdehw/tdehardwaredevices.cpp | 64 |
1 files changed, 49 insertions, 15 deletions
diff --git a/tdecore/tdehw/tdehardwaredevices.cpp b/tdecore/tdehw/tdehardwaredevices.cpp index b0162f6fe..62fd6a427 100644 --- a/tdecore/tdehw/tdehardwaredevices.cpp +++ b/tdecore/tdehw/tdehardwaredevices.cpp @@ -1640,27 +1640,61 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDeviceByExternalRules(udev_ for (cndit = conditionmap.begin(); cndit != conditionmap.end(); ++cndit) { TQStringList conditionList = TQStringList::split(',', cndit.data(), false); bool atleastonematch = false; - for ( TQStringList::Iterator paramit = conditionList.begin(); paramit != conditionList.end(); ++paramit ) { - if (cndit.key() == "VENDOR_ID") { - if (device->vendorID() == (*paramit)) { - atleastonematch = true; + bool allmatch = true; + TQString matchtype = rulesFile.readEntry("MATCH_TYPE", "All"); + if (conditionList.count() < 1) { + allmatch = false; + } + else { + for ( TQStringList::Iterator paramit = conditionList.begin(); paramit != conditionList.end(); ++paramit ) { + if ((*paramit) == "MatchType") { + continue; } - } - else if (cndit.key() == "MODEL_ID") { - if (device->modelID() == (*paramit)) { - atleastonematch = true; + if (cndit.key() == "VENDOR_ID") { + if (device->vendorID() == (*paramit)) { + atleastonematch = true; + } + else { + allmatch = false; + } } - } - else if (cndit.key() == "DRIVER") { - if (device->deviceDriver() == (*paramit)) { - atleastonematch = true; + else if (cndit.key() == "MODEL_ID") { + if (device->modelID() == (*paramit)) { + atleastonematch = true; + } + else { + allmatch = false; + } + } + else if (cndit.key() == "DRIVER") { + if (device->deviceDriver() == (*paramit)) { + atleastonematch = true; + } + else { + allmatch = false; + } } + else { + if (readUdevAttribute(dev, cndit.key()) == (*paramit)) { + atleastonematch = true; + } + else { + allmatch = false; + } + } + } + } + if (matchtype == "All") { + if (!allmatch) { + match = false; } - else if (readUdevAttribute(dev, cndit.key()) == (*paramit)) { - atleastonematch = true; + } + else if (matchtype == "Any") { + if (!atleastonematch) { + match = false; } } - if (!atleastonematch) { + else { match = false; } } |