1 ////////////////////////////////////////////////////////////////////////////// 2 // oxygenconfigurationui.cpp 3 // ------------------- 4 // 5 // SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr> 6 // 7 // SPDX-License-Identifier: MIT 8 ////////////////////////////////////////////////////////////////////////////// 9 10 #include "oxygenconfigwidget.h" 11 #include "oxygenexceptionlist.h" 12 13 #include <QGroupBox> 14 #include <QIcon> 15 #include <QLabel> 16 #include <QLayout> 17 18 #include <KLocalizedString> 19 20 #include <QDBusConnection> 21 #include <QDBusMessage> 22 23 namespace Oxygen 24 { 25 26 //_________________________________________________________ ConfigWidget(QWidget * parent,const QVariantList & args)27 ConfigWidget::ConfigWidget( QWidget* parent, const QVariantList &args ): 28 KCModule(parent, args), 29 m_configuration( KSharedConfig::openConfig( QStringLiteral( "oxygenrc" ) ) ), 30 m_changed( false ) 31 { 32 33 m_ui.setupUi( this ); 34 35 // shadow configuration 36 m_ui.activeShadowConfiguration->setGroup( QPalette::Active ); 37 m_ui.inactiveShadowConfiguration->setGroup( QPalette::Inactive ); 38 39 // track ui changes 40 connect( m_ui.titleAlignment, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); 41 connect( m_ui.buttonSize, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); 42 connect( m_ui.drawBorderOnMaximizedWindows, SIGNAL(clicked()), SLOT(updateChanged()) ); 43 connect( m_ui.drawSizeGrip, SIGNAL(clicked()), SLOT(updateChanged()) ); 44 connect( m_ui.useWindowColors, SIGNAL(clicked()), SLOT(updateChanged()) ); 45 connect( m_ui.animationConfigWidget, SIGNAL(changed(bool)), SLOT(updateChanged()) ); 46 47 // track exception changes 48 connect( m_ui.exceptions, SIGNAL(changed(bool)), SLOT(updateChanged()) ); 49 50 // track shadow configuration changes 51 connect( m_ui.activeShadowConfiguration, SIGNAL(changed(bool)), SLOT(updateChanged()) ); 52 connect( m_ui.inactiveShadowConfiguration, SIGNAL(changed(bool)), SLOT(updateChanged()) ); 53 54 } 55 56 //_________________________________________________________ load(void)57 void ConfigWidget::load( void ) 58 { 59 60 // create internal settings and load from rc files 61 m_internalSettings = InternalSettingsPtr( new InternalSettings() ); 62 m_internalSettings->load(); 63 64 // assign to ui 65 m_ui.titleAlignment->setCurrentIndex( m_internalSettings->titleAlignment() ); 66 m_ui.buttonSize->setCurrentIndex( m_internalSettings->buttonSize() ); 67 m_ui.drawBorderOnMaximizedWindows->setChecked( m_internalSettings->drawBorderOnMaximizedWindows() ); 68 m_ui.drawSizeGrip->setChecked( m_internalSettings->drawSizeGrip() ); 69 m_ui.useWindowColors->setChecked( m_internalSettings->useWindowColors() ); 70 71 // load animations 72 m_ui.animationConfigWidget->setInternalSettings( m_internalSettings ); 73 m_ui.animationConfigWidget->load(); 74 75 // load shadows 76 m_ui.activeShadowConfiguration->load(); 77 m_ui.inactiveShadowConfiguration->load(); 78 79 // load exceptions 80 ExceptionList exceptions; 81 exceptions.readConfig( m_configuration ); 82 m_ui.exceptions->setExceptions( exceptions.get() ); 83 84 setChanged( false ); 85 86 } 87 88 //_________________________________________________________ save(void)89 void ConfigWidget::save( void ) 90 { 91 92 // create internal settings and load from rc files 93 m_internalSettings = InternalSettingsPtr( new InternalSettings() ); 94 m_internalSettings->load(); 95 96 // apply modifications from ui 97 m_internalSettings->setTitleAlignment( m_ui.titleAlignment->currentIndex() ); 98 m_internalSettings->setButtonSize( m_ui.buttonSize->currentIndex() ); 99 m_internalSettings->setDrawBorderOnMaximizedWindows( m_ui.drawBorderOnMaximizedWindows->isChecked() ); 100 m_internalSettings->setDrawSizeGrip( m_ui.drawSizeGrip->isChecked() ); 101 m_internalSettings->setUseWindowColors( m_ui.useWindowColors->isChecked() ); 102 103 // save animations 104 m_ui.animationConfigWidget->setInternalSettings( m_internalSettings ); 105 m_ui.animationConfigWidget->save(); 106 107 // save configuration 108 m_internalSettings->save(); 109 110 // save shadows 111 m_ui.activeShadowConfiguration->save(); 112 m_ui.inactiveShadowConfiguration->save(); 113 114 // get list of exceptions and write 115 InternalSettingsList exceptions( m_ui.exceptions->exceptions() ); 116 ExceptionList( exceptions ).writeConfig( m_configuration ); 117 118 // sync configuration 119 m_configuration->sync(); 120 setChanged( false ); 121 122 // needed to tell kwin to reload when running from external kcmshell 123 { 124 QDBusMessage message = QDBusMessage::createSignal("/KWin", "org.kde.KWin", "reloadConfig"); 125 QDBusConnection::sessionBus().send(message); 126 } 127 128 // needed for oxygen style to reload shadows 129 { 130 QDBusMessage message( QDBusMessage::createSignal("/OxygenDecoration", "org.kde.Oxygen.Style", "reparseConfiguration") ); 131 QDBusConnection::sessionBus().send(message); 132 } 133 134 } 135 136 //_________________________________________________________ defaults(void)137 void ConfigWidget::defaults( void ) 138 { 139 140 // create internal settings and load from rc files 141 m_internalSettings = InternalSettingsPtr( new InternalSettings() ); 142 m_ui.animationConfigWidget->setInternalSettings( m_internalSettings ); 143 m_internalSettings->setDefaults(); 144 145 // assign to ui 146 m_ui.titleAlignment->setCurrentIndex( m_internalSettings->titleAlignment() ); 147 m_ui.buttonSize->setCurrentIndex( m_internalSettings->buttonSize() ); 148 m_ui.drawBorderOnMaximizedWindows->setChecked( m_internalSettings->drawBorderOnMaximizedWindows() ); 149 m_ui.drawSizeGrip->setChecked( m_internalSettings->drawSizeGrip() ); 150 m_ui.useWindowColors->setChecked( m_internalSettings->useWindowColors() ); 151 152 // load shadows 153 m_ui.activeShadowConfiguration->setDefaults(); 154 m_ui.inactiveShadowConfiguration->setDefaults(); 155 156 // load animations 157 m_ui.animationConfigWidget->setInternalSettings( m_internalSettings ); 158 m_ui.animationConfigWidget->load(); 159 160 setChanged( false ); 161 162 } 163 164 //_______________________________________________ updateChanged(void)165 void ConfigWidget::updateChanged( void ) 166 { 167 168 // check configuration 169 if( !m_internalSettings ) return; 170 171 // track modifications 172 bool modified( false ); 173 174 if( m_ui.titleAlignment->currentIndex() != m_internalSettings->titleAlignment() ) modified = true; 175 else if( m_ui.buttonSize->currentIndex() != m_internalSettings->buttonSize() ) modified = true; 176 else if( m_ui.drawBorderOnMaximizedWindows->isChecked() != m_internalSettings->drawBorderOnMaximizedWindows() ) modified = true; 177 else if( m_ui.drawSizeGrip->isChecked() != m_internalSettings->drawSizeGrip() ) modified = true; 178 else if( m_ui.useWindowColors->isChecked() != m_internalSettings->useWindowColors() ) modified = true; 179 180 // animations 181 else if( m_ui.animationConfigWidget->isChanged() ) modified = true; 182 183 // exceptions 184 else if( m_ui.exceptions->isChanged() ) modified = true; 185 186 // shadow configurations 187 else if( m_ui.activeShadowConfiguration->isChanged() ) modified = true; 188 else if( m_ui.inactiveShadowConfiguration->isChanged() ) modified = true; 189 190 setChanged( modified ); 191 192 } 193 } 194