File indexing completed on 2024-05-12 05:35:42
0001 /* 0002 SPDX-FileCopyrightText: 2010 Andriy Rysin <rysin@kde.org> 0003 SPDX-FileCopyrightText: 2021 Cyril Rossi <cyril.rossi@enioka.com> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "kcm_keyboard.h" 0009 0010 #include <KAboutData> 0011 #include <KLocalizedString> 0012 0013 #include <QDBusConnection> 0014 #include <QDBusMessage> 0015 0016 #include "kcm_keyboard_widget.h" 0017 #include "kcmmisc.h" 0018 #include "keyboard_config.h" 0019 #include "keyboard_dbus.h" 0020 #include "keyboardmiscsettings.h" 0021 #include "keyboardsettingsdata.h" 0022 #include "x11_helper.h" 0023 #include "xkb_rules.h" 0024 0025 #include "xkb_helper.h" 0026 0027 KCMKeyboard::KCMKeyboard(QObject *parent, const KPluginMetaData &data, const QVariantList &args) 0028 : KCModule(parent, data) 0029 , m_data(new KeyboardSettingsData(this)) 0030 { 0031 rules = Rules::readRules(Rules::READ_EXTRAS); 0032 0033 QVBoxLayout *layout = new QVBoxLayout(widget()); 0034 layout->setContentsMargins(0, 0, 0, 0); 0035 // layout->setSpacing(KDialog::spacingHint()); 0036 0037 m_miscWidget = new KCMiscKeyboardWidget(widget(), m_data->miscSettings()); 0038 m_widget = new KCMKeyboardWidget(rules, m_data->keyboardConfig(), m_workspaceOptions, m_miscWidget, args, widget()); 0039 layout->addWidget(m_widget); 0040 0041 connect(m_widget, &KCMKeyboardWidget::changed, this, &KCMKeyboard::updateUnmanagedState); 0042 connect(m_miscWidget, qOverload<bool>(&KCMiscKeyboardWidget::changed), this, &KCMKeyboard::updateUnmanagedState); 0043 connect(this, &KCMKeyboard::defaultsIndicatorsVisibleChanged, this, &KCMKeyboard::updateUnmanagedState); 0044 connect(this, &KCMKeyboard::defaultsIndicatorsVisibleChanged, m_widget, [this]() { 0045 m_widget->setDefaultIndicator(defaultsIndicatorsVisible()); 0046 }); 0047 connect(this, &KCMKeyboard::defaultsIndicatorsVisibleChanged, m_miscWidget, [this]() { 0048 m_miscWidget->setDefaultIndicator(defaultsIndicatorsVisible()); 0049 }); 0050 setButtons(Help | Default | Apply); 0051 0052 addConfig(m_data->keyboardConfig(), m_widget); 0053 addConfig(m_data->miscSettings(), m_miscWidget); 0054 addConfig(&m_workspaceOptions, m_widget); 0055 } 0056 0057 KCMKeyboard::~KCMKeyboard() 0058 { 0059 delete rules; 0060 } 0061 0062 void KCMKeyboard::defaults() 0063 { 0064 KCModule::defaults(); 0065 0066 m_widget->defaults(); 0067 m_miscWidget->defaults(); 0068 } 0069 0070 void KCMKeyboard::updateUnmanagedState() 0071 { 0072 bool isNeedSave = false; 0073 isNeedSave |= m_widget->isSaveNeeded(); 0074 isNeedSave |= m_miscWidget->isSaveNeeded(); 0075 unmanagedWidgetChangeState(isNeedSave); 0076 0077 bool isDefault = true; 0078 isDefault &= m_widget->isDefault(); 0079 isDefault &= m_miscWidget->isDefault(); 0080 unmanagedWidgetDefaultState(isDefault); 0081 } 0082 0083 void KCMKeyboard::load() 0084 { 0085 KCModule::load(); 0086 m_data->keyboardConfig()->load(); 0087 m_widget->updateUI(); 0088 m_miscWidget->load(); 0089 } 0090 0091 void KCMKeyboard::save() 0092 { 0093 m_widget->save(); 0094 m_miscWidget->save(); 0095 0096 m_data->keyboardConfig()->save(); 0097 m_data->miscSettings()->save(); 0098 KCModule::save(); 0099 0100 QDBusMessage message = QDBusMessage::createSignal(KEYBOARD_DBUS_OBJECT_PATH, KEYBOARD_DBUS_SERVICE_NAME, KEYBOARD_DBUS_CONFIG_RELOAD_MESSAGE); 0101 QDBusConnection::sessionBus().send(message); 0102 } 0103 0104 #include "kcm_keyboard.moc"