25 QString spec = qEnvironmentVariable(
"QT_QPA_EVDEV_KEYBOARD_PARAMETERS");
30 auto parsed = QEvdevUtil::parseSpecification(spec);
31 m_spec = std::move(parsed.spec);
34 for (
const QString &device : std::as_const(parsed.devices))
37 if (parsed.devices.isEmpty()) {
38 qCDebug(qLcEvdevKey,
"evdevkeyboard: Using device discovery");
39 if (
auto deviceDiscovery = QDeviceDiscovery::create(QDeviceDiscovery::Device_Keyboard,
this)) {
41 const QStringList devices = deviceDiscovery->scanConnectedDevices();
42 for (
const QString &device : devices)
45 connect(deviceDiscovery, &QDeviceDiscovery::deviceDetected,
46 this, &QEvdevKeyboardManager::addKeyboard);
47 connect(deviceDiscovery, &QDeviceDiscovery::deviceRemoved,
48 this, &QEvdevKeyboardManager::removeKeyboard);
59 qCDebug(qLcEvdevKey,
"Adding keyboard at %ls", qUtf16Printable(deviceNode));
60 auto keyboard = QEvdevKeyboardHandler::create(deviceNode, m_spec, m_defaultKeymapFile);
62 m_keyboards.add(deviceNode, std::move(keyboard));
65 qWarning(
"Failed to open keyboard device %ls", qUtf16Printable(deviceNode));
85 m_defaultKeymapFile = file;
90 QString keymapFromSpec;
91 const auto specs = QStringView{m_spec}.split(u':');
92 for (
const auto &arg : specs) {
93 if (arg.startsWith(
"keymap="_L1))
94 keymapFromSpec = arg.mid(7).toString();
96 for (
const auto &keyboard : m_keyboards) {
97 if (keymapFromSpec.isEmpty())
98 keyboard.handler->unloadKeymap();
100 keyboard.handler->loadKeymap(keymapFromSpec);
103 for (
const auto &keyboard : m_keyboards)
104 keyboard.handler->loadKeymap(file);