diff options
Diffstat (limited to '')
| -rw-r--r-- | plugin/src/Caelestia/Internal/hyprdevices.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/plugin/src/Caelestia/Internal/hyprdevices.cpp b/plugin/src/Caelestia/Internal/hyprdevices.cpp index 2c94d90..3aa0158 100644 --- a/plugin/src/Caelestia/Internal/hyprdevices.cpp +++ b/plugin/src/Caelestia/Internal/hyprdevices.cpp @@ -93,13 +93,18 @@ bool HyprDevices::updateLastIpcObject(QJsonObject object) { const auto val = object.value("keyboards").toArray(); bool dirty = false; - for (const auto& keyboard : std::as_const(m_keyboards)) { - if (std::find_if(val.begin(), val.end(), [keyboard](const QJsonValue& object) { - return object.toObject().value("address").toString() == keyboard->address(); - }) == val.end()) { + for (auto it = m_keyboards.begin(); it != m_keyboards.end();) { + auto* const keyboard = *it; + const auto inNewValues = std::any_of(val.begin(), val.end(), [keyboard](const QJsonValue& object) { + return object.toObject().value("address").toString() == keyboard->address(); + }); + + if (!inNewValues) { dirty = true; - m_keyboards.removeAll(keyboard); + it = m_keyboards.erase(it); keyboard->deleteLater(); + } else { + ++it; } } |