[keyboard] Improve xkb parsing

This commit is contained in:
Adriaan de Groot 2020-10-12 15:58:26 +02:00
parent ec42e3294f
commit 0f6602cad7

View File

@ -138,18 +138,25 @@ Config::init()
{ {
const QStringList list = QString( process.readAll() ).split( "\n", SplitSkipEmptyParts ); const QStringList list = QString( process.readAll() ).split( "\n", SplitSkipEmptyParts );
for ( QString line : list ) // A typical line looks like
// xkb_symbols { include "pc+latin+ru:2+inet(evdev)+group(alt_shift_toggle)+ctrl(swapcaps)" };
for ( const auto& line : list )
{ {
line = line.trimmed(); if ( !line.trimmed().startsWith( "xkb_symbols" ) )
if ( !line.startsWith( "xkb_symbols" ) )
{ {
continue; continue;
} }
line = line.remove( "}" ).remove( "{" ).remove( ";" ); int firstQuote = line.indexOf('"');
line = line.mid( line.indexOf( "\"" ) + 1 ); int lastQuote = line.lastIndexOf('"');
QStringList split = line.split( "+", SplitSkipEmptyParts ); if (firstQuote < 0 || lastQuote < 0 || lastQuote <= firstQuote)
{
continue;
}
QStringList split = line.mid(firstQuote+1, lastQuote-firstQuote).split( "+", SplitSkipEmptyParts );
cDebug() << split;
if ( split.size() >= 2 ) if ( split.size() >= 2 )
{ {
currentLayout = split.at( 1 ); currentLayout = split.at( 1 );