File indexing completed on 2024-05-19 05:35:16
0001 ////////////////////////////////////////////////////////////////////////////// 0002 // oxygenconfigurationui.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 "oxygenconfigwidget.h" 0011 #include "oxygenexceptionlist.h" 0012 0013 #include <QGroupBox> 0014 #include <QIcon> 0015 #include <QLabel> 0016 #include <QLayout> 0017 0018 #include <KLocalizedString> 0019 0020 #include <QDBusConnection> 0021 #include <QDBusMessage> 0022 0023 namespace Oxygen 0024 { 0025 //_________________________________________________________ 0026 ConfigWidget::ConfigWidget(QObject *parent, const KPluginMetaData &metaData, const QVariantList &args) 0027 #if QT_VERSION_MAJOR < 6 0028 : KCModule(parent, metaData, args) 0029 #else 0030 : KCModule(parent, metaData) 0031 #endif 0032 , m_configuration(KSharedConfig::openConfig(QStringLiteral("oxygenrc"))) 0033 , m_changed(false) 0034 { 0035 m_ui.setupUi(widget()); 0036 0037 // shadow configuration 0038 m_ui.activeShadowConfiguration->setGroup(QPalette::Active); 0039 m_ui.inactiveShadowConfiguration->setGroup(QPalette::Inactive); 0040 0041 // track ui changes 0042 connect(m_ui.titleAlignment, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged())); 0043 connect(m_ui.buttonSize, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged())); 0044 connect(m_ui.drawBorderOnMaximizedWindows, SIGNAL(clicked()), SLOT(updateChanged())); 0045 connect(m_ui.drawSizeGrip, SIGNAL(clicked()), SLOT(updateChanged())); 0046 connect(m_ui.useWindowColors, SIGNAL(clicked()), SLOT(updateChanged())); 0047 connect(m_ui.animationConfigWidget, SIGNAL(changed(bool)), SLOT(updateChanged())); 0048 0049 // track exception changes 0050 connect(m_ui.exceptions, SIGNAL(changed(bool)), SLOT(updateChanged())); 0051 0052 // track shadow configuration changes 0053 connect(m_ui.activeShadowConfiguration, SIGNAL(changed(bool)), SLOT(updateChanged())); 0054 connect(m_ui.inactiveShadowConfiguration, SIGNAL(changed(bool)), SLOT(updateChanged())); 0055 } 0056 0057 //_________________________________________________________ 0058 void ConfigWidget::load(void) 0059 { 0060 // create internal settings and load from rc files 0061 m_internalSettings = InternalSettingsPtr(new InternalSettings()); 0062 m_internalSettings->load(); 0063 0064 // assign to ui 0065 m_ui.titleAlignment->setCurrentIndex(m_internalSettings->titleAlignment()); 0066 m_ui.buttonSize->setCurrentIndex(m_internalSettings->buttonSize()); 0067 m_ui.drawBorderOnMaximizedWindows->setChecked(m_internalSettings->drawBorderOnMaximizedWindows()); 0068 m_ui.drawSizeGrip->setChecked(m_internalSettings->drawSizeGrip()); 0069 m_ui.useWindowColors->setChecked(m_internalSettings->useWindowColors()); 0070 0071 // load animations 0072 m_ui.animationConfigWidget->setInternalSettings(m_internalSettings); 0073 m_ui.animationConfigWidget->load(); 0074 0075 // load shadows 0076 m_ui.activeShadowConfiguration->load(); 0077 m_ui.inactiveShadowConfiguration->load(); 0078 0079 // load exceptions 0080 ExceptionList exceptions; 0081 exceptions.readConfig(m_configuration); 0082 m_ui.exceptions->setExceptions(exceptions.get()); 0083 0084 setChanged(false); 0085 } 0086 0087 //_________________________________________________________ 0088 void ConfigWidget::save(void) 0089 { 0090 // create internal settings and load from rc files 0091 m_internalSettings = InternalSettingsPtr(new InternalSettings()); 0092 m_internalSettings->load(); 0093 0094 // apply modifications from ui 0095 m_internalSettings->setTitleAlignment(m_ui.titleAlignment->currentIndex()); 0096 m_internalSettings->setButtonSize(m_ui.buttonSize->currentIndex()); 0097 m_internalSettings->setDrawBorderOnMaximizedWindows(m_ui.drawBorderOnMaximizedWindows->isChecked()); 0098 m_internalSettings->setDrawSizeGrip(m_ui.drawSizeGrip->isChecked()); 0099 m_internalSettings->setUseWindowColors(m_ui.useWindowColors->isChecked()); 0100 0101 // save animations 0102 m_ui.animationConfigWidget->setInternalSettings(m_internalSettings); 0103 m_ui.animationConfigWidget->save(); 0104 0105 // save configuration 0106 m_internalSettings->save(); 0107 0108 // save shadows 0109 m_ui.activeShadowConfiguration->save(); 0110 m_ui.inactiveShadowConfiguration->save(); 0111 0112 // get list of exceptions and write 0113 InternalSettingsList exceptions(m_ui.exceptions->exceptions()); 0114 ExceptionList(exceptions).writeConfig(m_configuration); 0115 0116 // sync configuration 0117 m_configuration->sync(); 0118 setChanged(false); 0119 0120 // needed to tell kwin to reload when running from external kcmshell 0121 { 0122 QDBusMessage message = QDBusMessage::createSignal(QStringLiteral("/KWin"), QStringLiteral("org.kde.KWin"), QStringLiteral("reloadConfig")); 0123 QDBusConnection::sessionBus().send(message); 0124 } 0125 0126 // needed for oxygen style to reload shadows 0127 { 0128 QDBusMessage message( 0129 QDBusMessage::createSignal(QStringLiteral("/OxygenDecoration"), QStringLiteral("org.kde.Oxygen.Style"), QStringLiteral("reparseConfiguration"))); 0130 QDBusConnection::sessionBus().send(message); 0131 } 0132 } 0133 0134 //_________________________________________________________ 0135 void ConfigWidget::defaults(void) 0136 { 0137 // create internal settings and load from rc files 0138 m_internalSettings = InternalSettingsPtr(new InternalSettings()); 0139 m_ui.animationConfigWidget->setInternalSettings(m_internalSettings); 0140 m_internalSettings->setDefaults(); 0141 0142 // assign to ui 0143 m_ui.titleAlignment->setCurrentIndex(m_internalSettings->titleAlignment()); 0144 m_ui.buttonSize->setCurrentIndex(m_internalSettings->buttonSize()); 0145 m_ui.drawBorderOnMaximizedWindows->setChecked(m_internalSettings->drawBorderOnMaximizedWindows()); 0146 m_ui.drawSizeGrip->setChecked(m_internalSettings->drawSizeGrip()); 0147 m_ui.useWindowColors->setChecked(m_internalSettings->useWindowColors()); 0148 0149 // load shadows 0150 m_ui.activeShadowConfiguration->setDefaults(); 0151 m_ui.inactiveShadowConfiguration->setDefaults(); 0152 0153 // load animations 0154 m_ui.animationConfigWidget->setInternalSettings(m_internalSettings); 0155 m_ui.animationConfigWidget->load(); 0156 0157 setChanged(false); 0158 } 0159 0160 //_______________________________________________ 0161 void ConfigWidget::updateChanged(void) 0162 { 0163 // check configuration 0164 if (!m_internalSettings) 0165 return; 0166 0167 // track modifications 0168 bool modified(false); 0169 0170 if (m_ui.titleAlignment->currentIndex() != m_internalSettings->titleAlignment()) 0171 modified = true; 0172 else if (m_ui.buttonSize->currentIndex() != m_internalSettings->buttonSize()) 0173 modified = true; 0174 else if (m_ui.drawBorderOnMaximizedWindows->isChecked() != m_internalSettings->drawBorderOnMaximizedWindows()) 0175 modified = true; 0176 else if (m_ui.drawSizeGrip->isChecked() != m_internalSettings->drawSizeGrip()) 0177 modified = true; 0178 else if (m_ui.useWindowColors->isChecked() != m_internalSettings->useWindowColors()) 0179 modified = true; 0180 0181 // animations 0182 else if (m_ui.animationConfigWidget->isChanged()) 0183 modified = true; 0184 0185 // exceptions 0186 else if (m_ui.exceptions->isChanged()) 0187 modified = true; 0188 0189 // shadow configurations 0190 else if (m_ui.activeShadowConfiguration->isChanged()) 0191 modified = true; 0192 else if (m_ui.inactiveShadowConfiguration->isChanged()) 0193 modified = true; 0194 0195 setChanged(modified); 0196 } 0197 }