| 63 | }; |
| 64 | |
| 65 | static std::optional<xkb_binding_t> parse_keybinding_xkb(std::string binding) |
| 66 | { |
| 67 | binding.erase(std::remove(binding.begin(), binding.end(), ' '), binding.end()); |
| 68 | auto tokens = tokenize_at(binding, '+'); |
| 69 | if (tokens.empty()) |
| 70 | { |
| 71 | return std::nullopt; |
| 72 | } |
| 73 | |
| 74 | uint32_t mods = 0; |
| 75 | for (size_t i = 0; i < tokens.size() - 1; i++) |
| 76 | { |
| 77 | auto mod = parse_modifier(tokens[i]); |
| 78 | if (!mod) |
| 79 | { |
| 80 | return std::nullopt; |
| 81 | } |
| 82 | |
| 83 | mods |= mod; |
| 84 | } |
| 85 | |
| 86 | return xkb_binding_t{mods, tokens.back()}; |
| 87 | } |
| 88 | |
| 89 | class xkb_bindings_t : public wf::plugin_interface_t |
| 90 | { |
no test coverage detected