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 }