File indexing completed on 2024-05-12 05:28:35
0001 ////////////////////////////////////////////////////////////////////////////// 0002 // breezeconfigurationui.cpp 0003 // ------------------- 0004 // 0005 // SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0006 // 0007 // SPDX-License-Identifier: MIT 0008 ////////////////////////////////////////////////////////////////////////////// 0009 0010 #include "breezeconfigwidget.h" 0011 #include "breezeexceptionlist.h" 0012 0013 #include <KLocalizedString> 0014 0015 #include <QDBusConnection> 0016 #include <QDBusMessage> 0017 #include <QFontDatabase> 0018 0019 namespace Breeze 0020 { 0021 //_________________________________________________________ 0022 ConfigWidget::ConfigWidget(QObject *parent, const KPluginMetaData &data, const QVariantList & /*args*/) 0023 : KCModule(parent, data) 0024 , m_configuration(KSharedConfig::openConfig(QStringLiteral("breezerc"))) 0025 , m_changed(false) 0026 { 0027 // configuration 0028 m_ui.setupUi(widget()); 0029 0030 // track ui changes 0031 connect(m_ui.titleAlignment, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged())); 0032 connect(m_ui.buttonSize, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged())); 0033 connect(m_ui.outlineCloseButton, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged); 0034 connect(m_ui.drawBorderOnMaximizedWindows, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged); 0035 connect(m_ui.drawBackgroundGradient, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged); 0036 0037 // track shadows changes 0038 connect(m_ui.shadowSize, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged())); 0039 connect(m_ui.shadowStrength, SIGNAL(valueChanged(int)), SLOT(updateChanged())); 0040 connect(m_ui.shadowColor, &KColorButton::changed, this, &ConfigWidget::updateChanged); 0041 connect(m_ui.outlineIntensity, SIGNAL(activated(int)), SLOT(updateChanged())); 0042 0043 // track exception changes 0044 connect(m_ui.exceptions, &ExceptionListWidget::changed, this, &ConfigWidget::updateChanged); 0045 0046 // set formatting 0047 m_ui.drawBorderOnMaximizedWindowsHelpLabel->setFont(QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont)); 0048 } 0049 0050 //_________________________________________________________ 0051 void ConfigWidget::load() 0052 { 0053 // create internal settings and load from rc files 0054 m_internalSettings = InternalSettingsPtr(new InternalSettings()); 0055 m_internalSettings->load(); 0056 0057 // assign to ui 0058 m_ui.titleAlignment->setCurrentIndex(m_internalSettings->titleAlignment()); 0059 m_ui.buttonSize->setCurrentIndex(m_internalSettings->buttonSize()); 0060 m_ui.drawBorderOnMaximizedWindows->setChecked(m_internalSettings->drawBorderOnMaximizedWindows()); 0061 m_ui.outlineCloseButton->setChecked(m_internalSettings->outlineCloseButton()); 0062 m_ui.drawBackgroundGradient->setChecked(m_internalSettings->drawBackgroundGradient()); 0063 0064 // load shadows 0065 if (m_internalSettings->shadowSize() <= InternalSettings::ShadowVeryLarge) { 0066 m_ui.shadowSize->setCurrentIndex(m_internalSettings->shadowSize()); 0067 } else { 0068 m_ui.shadowSize->setCurrentIndex(InternalSettings::ShadowLarge); 0069 } 0070 0071 m_ui.shadowStrength->setValue(qRound(qreal(m_internalSettings->shadowStrength() * 100) / 255)); 0072 m_ui.shadowColor->setColor(m_internalSettings->shadowColor()); 0073 0074 // load outline intensity 0075 if (m_internalSettings->outlineIntensity() <= InternalSettings::OutlineMaximum) { 0076 m_ui.outlineIntensity->setCurrentIndex(m_internalSettings->outlineIntensity()); 0077 } else { 0078 m_ui.outlineIntensity->setCurrentIndex(InternalSettings::OutlineMedium); 0079 } 0080 0081 // load exceptions 0082 ExceptionList exceptions; 0083 exceptions.readConfig(m_configuration); 0084 m_ui.exceptions->setExceptions(exceptions.get()); 0085 setNeedsSave(false); 0086 } 0087 0088 //_________________________________________________________ 0089 void ConfigWidget::save() 0090 { 0091 // create internal settings and load from rc files 0092 m_internalSettings = InternalSettingsPtr(new InternalSettings()); 0093 m_internalSettings->load(); 0094 0095 // apply modifications from ui 0096 m_internalSettings->setTitleAlignment(m_ui.titleAlignment->currentIndex()); 0097 m_internalSettings->setButtonSize(m_ui.buttonSize->currentIndex()); 0098 m_internalSettings->setOutlineCloseButton(m_ui.outlineCloseButton->isChecked()); 0099 m_internalSettings->setDrawBorderOnMaximizedWindows(m_ui.drawBorderOnMaximizedWindows->isChecked()); 0100 m_internalSettings->setDrawBackgroundGradient(m_ui.drawBackgroundGradient->isChecked()); 0101 0102 m_internalSettings->setShadowSize(m_ui.shadowSize->currentIndex()); 0103 m_internalSettings->setShadowStrength(qRound(qreal(m_ui.shadowStrength->value() * 255) / 100)); 0104 m_internalSettings->setShadowColor(m_ui.shadowColor->color()); 0105 m_internalSettings->setOutlineIntensity(m_ui.outlineIntensity->currentIndex()); 0106 0107 // save configuration 0108 m_internalSettings->save(); 0109 0110 // get list of exceptions and write 0111 InternalSettingsList exceptions(m_ui.exceptions->exceptions()); 0112 ExceptionList(exceptions).writeConfig(m_configuration); 0113 0114 // sync configuration 0115 m_configuration->sync(); 0116 setNeedsSave(false); 0117 0118 // needed to tell kwin to reload when running from external kcmshell 0119 { 0120 QDBusMessage message = QDBusMessage::createSignal("/KWin", "org.kde.KWin", "reloadConfig"); 0121 QDBusConnection::sessionBus().send(message); 0122 } 0123 0124 // needed for breeze style to reload shadows 0125 { 0126 QDBusMessage message(QDBusMessage::createSignal("/BreezeDecoration", "org.kde.Breeze.Style", "reparseConfiguration")); 0127 QDBusConnection::sessionBus().send(message); 0128 } 0129 } 0130 0131 //_________________________________________________________ 0132 void ConfigWidget::defaults() 0133 { 0134 // create internal settings and load from rc files 0135 m_internalSettings = InternalSettingsPtr(new InternalSettings()); 0136 m_internalSettings->setDefaults(); 0137 0138 // assign to ui 0139 m_ui.titleAlignment->setCurrentIndex(m_internalSettings->titleAlignment()); 0140 m_ui.buttonSize->setCurrentIndex(m_internalSettings->buttonSize()); 0141 m_ui.outlineCloseButton->setChecked(m_internalSettings->outlineCloseButton()); 0142 m_ui.drawBorderOnMaximizedWindows->setChecked(m_internalSettings->drawBorderOnMaximizedWindows()); 0143 m_ui.drawBackgroundGradient->setChecked(m_internalSettings->drawBackgroundGradient()); 0144 0145 m_ui.shadowSize->setCurrentIndex(m_internalSettings->shadowSize()); 0146 m_ui.shadowStrength->setValue(qRound(qreal(m_internalSettings->shadowStrength() * 100) / 255)); 0147 m_ui.shadowColor->setColor(m_internalSettings->shadowColor()); 0148 m_ui.outlineIntensity->setCurrentIndex(m_internalSettings->outlineIntensity()); 0149 } 0150 0151 //_______________________________________________ 0152 void ConfigWidget::updateChanged() 0153 { 0154 // check configuration 0155 if (!m_internalSettings) { 0156 return; 0157 } 0158 0159 // track modifications 0160 bool modified(false); 0161 0162 if (m_ui.titleAlignment->currentIndex() != m_internalSettings->titleAlignment()) { 0163 modified = true; 0164 } else if (m_ui.buttonSize->currentIndex() != m_internalSettings->buttonSize()) { 0165 modified = true; 0166 } else if (m_ui.outlineCloseButton->isChecked() != m_internalSettings->outlineCloseButton()) { 0167 modified = true; 0168 } else if (m_ui.drawBorderOnMaximizedWindows->isChecked() != m_internalSettings->drawBorderOnMaximizedWindows()) { 0169 modified = true; 0170 } else if (m_ui.drawBackgroundGradient->isChecked() != m_internalSettings->drawBackgroundGradient()) { 0171 modified = true; 0172 0173 // shadows 0174 } else if (m_ui.shadowSize->currentIndex() != m_internalSettings->shadowSize()) { 0175 modified = true; 0176 } else if (qRound(qreal(m_ui.shadowStrength->value() * 255) / 100) != m_internalSettings->shadowStrength()) { 0177 modified = true; 0178 } else if (m_ui.shadowColor->color() != m_internalSettings->shadowColor()) { 0179 modified = true; 0180 } else if (m_ui.outlineIntensity->currentIndex() != m_internalSettings->outlineIntensity()) { 0181 modified = true; 0182 0183 // exceptions 0184 } else if (m_ui.exceptions->isChanged()) { 0185 modified = true; 0186 } 0187 0188 setNeedsSave(modified); 0189 } 0190 0191 }