Group :: Graphical desktop/KDE
RPM: plasma5-kwin
Main Changelog Spec Patches Sources Download Gear Bugs and FR Repocop
Patch: alt-def-xkb.patch
Download
Download
--- a/src/xkb.cpp
+++ b/src/xkb.cpp
@@ -206,6 +206,39 @@ xkb_keymap *Xkb::loadKeymapFromConfig()
xkb_keymap *Xkb::loadDefaultKeymap()
{
xkb_rule_names ruleNames = {};
+ const QString xkbmap_path(QStringLiteral("/etc/X11/xinit/Xkbmap"));
+ QFile xkbmap_file(xkbmap_path);
+ if( xkbmap_file.open(QIODevice::ReadOnly) ) {
+ QByteArray _model, _layout, _variant, _options;
+ char line_data[256];
+ xkbmap_file.readLine(line_data, 256);
+ QStringList options_list(QString::fromLatin1(line_data).split(QChar('-'), Qt::SkipEmptyParts));
+ for(QString option_line: options_list) {
+ QString opt_line(option_line.trimmed());
+ int dlm_pos = opt_line.indexOf(QStringLiteral(" "));
+ QString option_name = opt_line.left(dlm_pos >= 0? dlm_pos: 0).trimmed();
+ QString option_value = opt_line.right(opt_line.length() - 1 - (dlm_pos >= 0? dlm_pos: 0)).trimmed();
+ if( !option_name.isEmpty() && option_value != QStringLiteral(",") ) {
+ if( option_name == QLatin1String("model") ) {
+ _model = option_value.toLatin1();
+ } else if( option_name == QLatin1String("layout")) {
+ _layout = option_value.toLatin1();
+ } else if( option_name == QLatin1String("variant")) {
+ _variant = option_value.toLatin1();
+ } else if( option_name == QLatin1String("options")) {
+ _options = option_value.toLatin1();
+ }
+ }
+ }
+ xkb_rule_names ruleNames_alterator = {
+ .rules = nullptr,
+ .model = _model.constData(),
+ .layout = _layout.constData(),
+ .variant = _variant.constData(),
+ .options = _options.constData(),
+ };
+ ruleNames = ruleNames_alterator;
+ }
applyEnvironmentRules(ruleNames);
m_layoutList = QString::fromLatin1(ruleNames.layout).split(QLatin1Char(','));
return xkb_keymap_new_from_names(m_context, &ruleNames, XKB_KEYMAP_COMPILE_NO_FLAGS);