Merge pull request #5155 from Alexays/fix/hyprland-language-keyboard-name-commas

fix(hyprland/language): handle commas in keyboard-name config
This commit is contained in:
Alexis Rouillard
2026-07-03 21:23:06 +02:00
committed by GitHub
+9 -4
View File
@@ -101,8 +101,6 @@ void Language::onEvent(const std::string& ev) {
spdlog::warn("hyprland language received malformed event payload: {}", ev); spdlog::warn("hyprland language received malformed event payload: {}", ev);
return; return;
} }
std::string kbName = payload.substr(0, kbSeparator);
// Last comma before variants parenthesis, eg: // Last comma before variants parenthesis, eg:
// activelayout>>micro-star-int'l-co.,-ltd.-msi-gk50-elite-gaming-keyboard,English (US, intl., // activelayout>>micro-star-int'l-co.,-ltd.-msi-gk50-elite-gaming-keyboard,English (US, intl.,
// with dead keys) // with dead keys)
@@ -120,8 +118,15 @@ void Language::onEvent(const std::string& ev) {
} }
auto layoutName = payload.substr(layoutSeparator + 1); auto layoutName = payload.substr(layoutSeparator + 1);
if (config_.isMember("keyboard-name") && kbName != config_["keyboard-name"].asString()) if (config_.isMember("keyboard-name")) {
return; // ignore const auto keyboardName = config_["keyboard-name"].asString();
// The keyboard name itself can contain commas, so match it as a full prefix
// (followed by the ',' separator) rather than comparing against the substring
// before the first comma, which would truncate such names and drop the event.
if (payload.size() <= keyboardName.size() || payload[keyboardName.size()] != ',' ||
payload.compare(0, keyboardName.size(), keyboardName) != 0)
return; // ignore
}
layoutName = waybar::util::sanitize_string(layoutName); layoutName = waybar::util::sanitize_string(layoutName);