Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37752996
en ru br
ALT Linux repos
S:5.27.8-alt1

Group :: Graphical desktop/KDE
RPM: plasma5-kwin

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs and FR  Repocop 

Patch: alt-def-xkb.patch
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);
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin