From 59605d552ef3a72d0c44eadea2945b4dfc984d6b Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 19 Jun 2017 10:41:56 -0400 Subject: [PATCH] Keyboard: simplify execution of setxkbmap. Use QProcess::execute() with the 'safer' argument-list, rather than escaping and de-escaping strings. Also reduce noise by only passing a variant if there is one. --- src/modules/keyboard/KeyboardPage.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/modules/keyboard/KeyboardPage.cpp b/src/modules/keyboard/KeyboardPage.cpp index 117530a88..76eecc85c 100644 --- a/src/modules/keyboard/KeyboardPage.cpp +++ b/src/modules/keyboard/KeyboardPage.cpp @@ -67,8 +67,8 @@ KeyboardPage::KeyboardPage( QWidget* parent ) QString model = m_models.value( text, "pc105" ); // Set Xorg keyboard model - QProcess::execute( QString( "setxkbmap -model \"%1\"" ) - .arg( model ).toUtf8() ); + QProcess::execute( QLatin1Literal( "setxkbmap" ), + QStringList() << "-model" << model ); }); CALAMARES_RETRANSLATE( ui->retranslateUi( this ); ) @@ -292,6 +292,13 @@ KeyboardPage::onListLayoutCurrentItemChanged( const QModelIndex& current, updateVariants( QPersistentModelIndex( current ) ); } +static inline QStringList xkbmap_args( QStringList&& r, const QString& layout, const QString& variant) +{ + r << "-layout" << layout; + if ( !variant.isEmpty() ) + r << "-variant" << variant; + return r; +} void KeyboardPage::onListVariantCurrentItemChanged( QListWidgetItem* current, QListWidgetItem* previous ) @@ -320,8 +327,8 @@ KeyboardPage::onListVariantCurrentItemChanged( QListWidgetItem* current, QListWi connect( &m_setxkbmapTimer, &QTimer::timeout, this, [=] { - QProcess::execute( QString( "setxkbmap -layout \"%1\" -variant \"%2\"" ) - .arg( layout, variant ).toUtf8() ); + QProcess::execute( QLatin1Literal( "setxkbmap" ), + xkbmap_args( QStringList(), layout, variant ) ); cDebug() << "xkbmap selection changed to: " << layout << "-" << variant; m_setxkbmapTimer.disconnect( this ); } );