From bfc60ad2cfc2f16ca87fd3c024a2d96defa0c023 Mon Sep 17 00:00:00 2001 From: Artem Grinev Date: Tue, 27 Oct 2020 04:56:19 +0300 Subject: [PATCH] [keyboard] Implemented X11 config writing for additional layout --- src/modules/keyboard/AdditionalLayoutInfo.h | 24 +++++++++++++ src/modules/keyboard/Config.cpp | 25 ++++++++----- src/modules/keyboard/Config.h | 8 +---- src/modules/keyboard/KeyboardPage.cpp | 1 + src/modules/keyboard/SetKeyboardLayoutJob.cpp | 36 +++++++++++++------ src/modules/keyboard/SetKeyboardLayoutJob.h | 4 +++ src/modules/keyboardq/keyboardq.qrc | 1 + 7 files changed, 72 insertions(+), 27 deletions(-) create mode 100644 src/modules/keyboard/AdditionalLayoutInfo.h diff --git a/src/modules/keyboard/AdditionalLayoutInfo.h b/src/modules/keyboard/AdditionalLayoutInfo.h new file mode 100644 index 000000000..660449952 --- /dev/null +++ b/src/modules/keyboard/AdditionalLayoutInfo.h @@ -0,0 +1,24 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Artem Grinev + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef KEYBOARD_ADDITIONAL_LAYOUT_INFO_H +#define KEYBOARD_ADDITIONAL_LAYOUT_INFO_H + +#include + +struct AdditionalLayoutInfo { + QString additionalLayout; + QString additionalVariant; + + QString groupSwitcher; + + QString vconsoleKeymap; +}; + +#endif diff --git a/src/modules/keyboard/Config.cpp b/src/modules/keyboard/Config.cpp index aab7db014..03a774ef6 100644 --- a/src/modules/keyboard/Config.cpp +++ b/src/modules/keyboard/Config.cpp @@ -176,27 +176,33 @@ Config::Config( QObject* parent ) } connect( &m_setxkbmapTimer, &QTimer::timeout, this, [=] { - AdditionalLayoutInfo info = getAdditionalLayoutInfo( m_selectedLayout); + m_selectedLayoutsAdditionalLayoutInfo = getAdditionalLayoutInfo( m_selectedLayout ); - if(!info.additionalLayout.isEmpty()) + if(!m_selectedLayoutsAdditionalLayoutInfo.additionalLayout.isEmpty()) { - m_selectedLayoutsAdditionalLayoutInfo = info; - QString switchOption = xkbmap_query_grp_option(); + m_selectedLayoutsAdditionalLayoutInfo.groupSwitcher = xkbmap_query_grp_option(); QProcess::execute( "setxkbmap", xkbmap_layout_args( - { info.additionalLayout, m_selectedLayout }, - { info.additionalVariant, m_selectedVariant }, - switchOption.isEmpty()?"grp:alt_shift_toggle":QString() ) + { m_selectedLayoutsAdditionalLayoutInfo.additionalLayout, m_selectedLayout }, + { m_selectedLayoutsAdditionalLayoutInfo.additionalVariant, m_selectedVariant }, + m_selectedLayoutsAdditionalLayoutInfo.groupSwitcher.isEmpty()?"grp:alt_shift_toggle":QString() ) ); + + if( m_selectedLayoutsAdditionalLayoutInfo.groupSwitcher.isEmpty() ) + { + m_selectedLayoutsAdditionalLayoutInfo.groupSwitcher = "grp:alt_shift_toggle"; + } + cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant - << "(added " << info.additionalLayout << "-" << info.additionalVariant << " since current layout is not ASCII-capable)"; + << "(added " << m_selectedLayoutsAdditionalLayoutInfo.additionalLayout << "-" + << m_selectedLayoutsAdditionalLayoutInfo.additionalVariant << " since current layout is not ASCII-capable)"; } else { m_selectedLayoutsAdditionalLayoutInfo = AdditionalLayoutInfo(); QProcess::execute( "setxkbmap", xkbmap_layout_args( m_selectedLayout, m_selectedVariant ) ); - cDebug() << "xkbеmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant; + cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant; } m_setxkbmapTimer.disconnect( this ); } ); @@ -336,6 +342,7 @@ Config::createJobs() Calamares::Job* j = new SetKeyboardLayoutJob( m_selectedModel, m_selectedLayout, m_selectedVariant, + m_selectedLayoutsAdditionalLayoutInfo, m_xOrgConfFileName, m_convertedKeymapPath, m_writeEtcDefaultKeyboard ); diff --git a/src/modules/keyboard/Config.h b/src/modules/keyboard/Config.h index 96b3d7dd4..dda4403b3 100644 --- a/src/modules/keyboard/Config.h +++ b/src/modules/keyboard/Config.h @@ -13,6 +13,7 @@ #include "Job.h" #include "KeyboardLayoutModel.h" +#include "AdditionalLayoutInfo.h" #include #include @@ -20,13 +21,6 @@ #include #include -struct AdditionalLayoutInfo { - QString additionalLayout; - QString additionalVariant; - - QString vconsoleKeymap; -}; - class Config : public QObject { Q_OBJECT diff --git a/src/modules/keyboard/KeyboardPage.cpp b/src/modules/keyboard/KeyboardPage.cpp index 07c5cf763..84958761b 100644 --- a/src/modules/keyboard/KeyboardPage.cpp +++ b/src/modules/keyboard/KeyboardPage.cpp @@ -222,6 +222,7 @@ KeyboardPage::createJobs( const QString& xOrgConfFileName, Calamares::Job* j = new SetKeyboardLayoutJob( selectedModel, m_selectedLayout, m_selectedVariant, + AdditionalLayoutInfo(), xOrgConfFileName, convertedKeymapPath, writeEtcDefaultKeyboard ); diff --git a/src/modules/keyboard/SetKeyboardLayoutJob.cpp b/src/modules/keyboard/SetKeyboardLayoutJob.cpp index cabe0b5c0..ddadc8430 100644 --- a/src/modules/keyboard/SetKeyboardLayoutJob.cpp +++ b/src/modules/keyboard/SetKeyboardLayoutJob.cpp @@ -30,9 +30,9 @@ #include -SetKeyboardLayoutJob::SetKeyboardLayoutJob( const QString& model, +SetKeyboardLayoutJob::SetKeyboardLayoutJob(const QString& model, const QString& layout, - const QString& variant, + const QString& variant, const AdditionalLayoutInfo &additionaLayoutInfo, const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard ) @@ -40,6 +40,7 @@ SetKeyboardLayoutJob::SetKeyboardLayoutJob( const QString& model, , m_model( model ) , m_layout( layout ) , m_variant( variant ) + , m_additionalLayoutInfo( additionaLayoutInfo ) , m_xOrgConfFileName( xOrgConfFileName ) , m_convertedKeymapPath( convertedKeymapPath ) , m_writeEtcDefaultKeyboard( writeEtcDefaultKeyboard ) @@ -250,19 +251,32 @@ SetKeyboardLayoutJob::writeX11Data( const QString& keyboardConfPath ) const " Identifier \"system-keyboard\"\n" " MatchIsKeyboard \"on\"\n"; - if ( !m_layout.isEmpty() ) - { - stream << " Option \"XkbLayout\" \"" << m_layout << "\"\n"; - } - if ( !m_model.isEmpty() ) + if ( m_additionalLayoutInfo.additionalLayout.isEmpty() ) { - stream << " Option \"XkbModel\" \"" << m_model << "\"\n"; - } + if ( !m_layout.isEmpty() ) + { + stream << " Option \"XkbLayout\" \"" << m_layout << "\"\n"; + } - if ( !m_variant.isEmpty() ) + if ( !m_variant.isEmpty() ) + { + stream << " Option \"XkbVariant\" \"" << m_variant << "\"\n"; + } + } + else { - stream << " Option \"XkbVariant\" \"" << m_variant << "\"\n"; + if ( !m_layout.isEmpty() ) + { + stream << " Option \"XkbLayout\" \"" << m_additionalLayoutInfo.additionalLayout << "," << m_layout << "\"\n"; + } + + if ( !m_variant.isEmpty() ) + { + stream << " Option \"XkbVariant\" \"" << m_additionalLayoutInfo.additionalVariant << "," << m_variant << "\"\n"; + } + + stream << " Option \"XkbOptions\" \"" << m_additionalLayoutInfo.groupSwitcher << "\"\n"; } stream << "EndSection\n"; diff --git a/src/modules/keyboard/SetKeyboardLayoutJob.h b/src/modules/keyboard/SetKeyboardLayoutJob.h index f1eabe195..b1ce0bb15 100644 --- a/src/modules/keyboard/SetKeyboardLayoutJob.h +++ b/src/modules/keyboard/SetKeyboardLayoutJob.h @@ -12,6 +12,8 @@ #define SETKEYBOARDLAYOUTJOB_H #include "Job.h" +#include "AdditionalLayoutInfo.h" + class SetKeyboardLayoutJob : public Calamares::Job @@ -21,6 +23,7 @@ public: SetKeyboardLayoutJob( const QString& model, const QString& layout, const QString& variant, + const AdditionalLayoutInfo& additionaLayoutInfo, const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard ); @@ -38,6 +41,7 @@ private: QString m_model; QString m_layout; QString m_variant; + AdditionalLayoutInfo m_additionalLayoutInfo; QString m_xOrgConfFileName; QString m_convertedKeymapPath; const bool m_writeEtcDefaultKeyboard; diff --git a/src/modules/keyboardq/keyboardq.qrc b/src/modules/keyboardq/keyboardq.qrc index 492f6e213..d2473a8ec 100644 --- a/src/modules/keyboardq/keyboardq.qrc +++ b/src/modules/keyboardq/keyboardq.qrc @@ -3,5 +3,6 @@ ../keyboard/kbd-model-map ../keyboard/images/restore.png keyboardq.qml + ../keyboard/non-ascii-layouts