1 ////////////////////////////////////////////////////////////////////////////// 2 // breezeconfigurationui.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 "breezeconfigwidget.h" 11 #include "breezeexceptionlist.h" 12 13 #include <KLocalizedString> 14 15 #include <QDBusConnection> 16 #include <QDBusMessage> 17 18 namespace Breeze 19 { 20 21 //_________________________________________________________ ConfigWidget(QWidget * parent,const QVariantList & args)22 ConfigWidget::ConfigWidget( QWidget* parent, const QVariantList &args ): 23 KCModule(parent, args), 24 m_configuration( KSharedConfig::openConfig( QStringLiteral( "breezerc" ) ) ), 25 m_changed( false ) 26 { 27 28 // configuration 29 m_ui.setupUi( this ); 30 31 // track ui changes 32 connect( m_ui.titleAlignment, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); 33 connect( m_ui.buttonSize, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); 34 connect( m_ui.outlineCloseButton, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged ); 35 connect( m_ui.drawBorderOnMaximizedWindows, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged ); 36 connect( m_ui.drawSizeGrip, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged ); 37 connect( m_ui.drawBackgroundGradient, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged ); 38 connect( m_ui.drawTitleBarSeparator, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged ); 39 40 // track shadows changes 41 connect( m_ui.shadowSize, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); 42 connect( m_ui.shadowStrength, SIGNAL(valueChanged(int)), SLOT(updateChanged()) ); 43 connect( m_ui.shadowColor, &KColorButton::changed, this, &ConfigWidget::updateChanged ); 44 45 // track exception changes 46 connect( m_ui.exceptions, &ExceptionListWidget::changed, this, &ConfigWidget::updateChanged ); 47 48 } 49 50 //_________________________________________________________ load()51 void ConfigWidget::load() 52 { 53 54 // create internal settings and load from rc files 55 m_internalSettings = InternalSettingsPtr( new InternalSettings() ); 56 m_internalSettings->load(); 57 58 // assign to ui 59 m_ui.titleAlignment->setCurrentIndex( m_internalSettings->titleAlignment() ); 60 m_ui.buttonSize->setCurrentIndex( m_internalSettings->buttonSize() ); 61 m_ui.drawBorderOnMaximizedWindows->setChecked( m_internalSettings->drawBorderOnMaximizedWindows() ); 62 m_ui.outlineCloseButton->setChecked( m_internalSettings->outlineCloseButton() ); 63 m_ui.drawSizeGrip->setChecked( m_internalSettings->drawSizeGrip() ); 64 m_ui.drawBackgroundGradient->setChecked( m_internalSettings->drawBackgroundGradient() ); 65 m_ui.drawTitleBarSeparator->setChecked( m_internalSettings->drawTitleBarSeparator() ); 66 67 // load shadows 68 if( m_internalSettings->shadowSize() <= InternalSettings::ShadowVeryLarge ) m_ui.shadowSize->setCurrentIndex( m_internalSettings->shadowSize() ); 69 else m_ui.shadowSize->setCurrentIndex( InternalSettings::ShadowLarge ); 70 71 m_ui.shadowStrength->setValue( qRound(qreal(m_internalSettings->shadowStrength()*100)/255 ) ); 72 m_ui.shadowColor->setColor( m_internalSettings->shadowColor() ); 73 74 // load exceptions 75 ExceptionList exceptions; 76 exceptions.readConfig( m_configuration ); 77 m_ui.exceptions->setExceptions( exceptions.get() ); 78 setChanged( false ); 79 80 } 81 82 //_________________________________________________________ save()83 void ConfigWidget::save() 84 { 85 86 // create internal settings and load from rc files 87 m_internalSettings = InternalSettingsPtr( new InternalSettings() ); 88 m_internalSettings->load(); 89 90 // apply modifications from ui 91 m_internalSettings->setTitleAlignment( m_ui.titleAlignment->currentIndex() ); 92 m_internalSettings->setButtonSize( m_ui.buttonSize->currentIndex() ); 93 m_internalSettings->setOutlineCloseButton( m_ui.outlineCloseButton->isChecked() ); 94 m_internalSettings->setDrawBorderOnMaximizedWindows( m_ui.drawBorderOnMaximizedWindows->isChecked() ); 95 m_internalSettings->setDrawSizeGrip( m_ui.drawSizeGrip->isChecked() ); 96 m_internalSettings->setDrawBackgroundGradient( m_ui.drawBackgroundGradient->isChecked() ); 97 m_internalSettings->setDrawTitleBarSeparator(m_ui.drawTitleBarSeparator->isChecked()); 98 99 m_internalSettings->setShadowSize( m_ui.shadowSize->currentIndex() ); 100 m_internalSettings->setShadowStrength( qRound( qreal(m_ui.shadowStrength->value()*255)/100 ) ); 101 m_internalSettings->setShadowColor( m_ui.shadowColor->color() ); 102 103 // save configuration 104 m_internalSettings->save(); 105 106 // get list of exceptions and write 107 InternalSettingsList exceptions( m_ui.exceptions->exceptions() ); 108 ExceptionList( exceptions ).writeConfig( m_configuration ); 109 110 // sync configuration 111 m_configuration->sync(); 112 setChanged( false ); 113 114 // needed to tell kwin to reload when running from external kcmshell 115 { 116 QDBusMessage message = QDBusMessage::createSignal("/KWin", "org.kde.KWin", "reloadConfig"); 117 QDBusConnection::sessionBus().send(message); 118 } 119 120 // needed for breeze style to reload shadows 121 { 122 QDBusMessage message( QDBusMessage::createSignal("/BreezeDecoration", "org.kde.Breeze.Style", "reparseConfiguration") ); 123 QDBusConnection::sessionBus().send(message); 124 } 125 126 } 127 128 //_________________________________________________________ defaults()129 void ConfigWidget::defaults() 130 { 131 132 // create internal settings and load from rc files 133 m_internalSettings = InternalSettingsPtr( new InternalSettings() ); 134 m_internalSettings->setDefaults(); 135 136 // assign to ui 137 m_ui.titleAlignment->setCurrentIndex( m_internalSettings->titleAlignment() ); 138 m_ui.buttonSize->setCurrentIndex( m_internalSettings->buttonSize() ); 139 m_ui.outlineCloseButton->setChecked( m_internalSettings->outlineCloseButton() ); 140 m_ui.drawBorderOnMaximizedWindows->setChecked( m_internalSettings->drawBorderOnMaximizedWindows() ); 141 m_ui.drawSizeGrip->setChecked( m_internalSettings->drawSizeGrip() ); 142 m_ui.drawBackgroundGradient->setChecked( m_internalSettings->drawBackgroundGradient() ); 143 m_ui.drawTitleBarSeparator->setChecked( m_internalSettings->drawTitleBarSeparator() ); 144 145 m_ui.shadowSize->setCurrentIndex( m_internalSettings->shadowSize() ); 146 m_ui.shadowStrength->setValue( qRound(qreal(m_internalSettings->shadowStrength()*100)/255 ) ); 147 m_ui.shadowColor->setColor( m_internalSettings->shadowColor() ); 148 149 } 150 151 //_______________________________________________ updateChanged()152 void ConfigWidget::updateChanged() 153 { 154 155 // check configuration 156 if( !m_internalSettings ) return; 157 158 // track modifications 159 bool modified( false ); 160 161 if (m_ui.drawTitleBarSeparator->isChecked() != m_internalSettings->drawTitleBarSeparator()) modified = true; 162 if( m_ui.titleAlignment->currentIndex() != m_internalSettings->titleAlignment() ) modified = true; 163 else if( m_ui.buttonSize->currentIndex() != m_internalSettings->buttonSize() ) modified = true; 164 else if( m_ui.outlineCloseButton->isChecked() != m_internalSettings->outlineCloseButton() ) modified = true; 165 else if( m_ui.drawBorderOnMaximizedWindows->isChecked() != m_internalSettings->drawBorderOnMaximizedWindows() ) modified = true; 166 else if( m_ui.drawSizeGrip->isChecked() != m_internalSettings->drawSizeGrip() ) modified = true; 167 else if( m_ui.drawBackgroundGradient->isChecked() != m_internalSettings->drawBackgroundGradient() ) modified = true; 168 169 // shadows 170 else if( m_ui.shadowSize->currentIndex() != m_internalSettings->shadowSize() ) modified = true; 171 else if( qRound( qreal(m_ui.shadowStrength->value()*255)/100 ) != m_internalSettings->shadowStrength() ) modified = true; 172 else if( m_ui.shadowColor->color() != m_internalSettings->shadowColor() ) modified = true; 173 174 // exceptions 175 else if( m_ui.exceptions->isChanged() ) modified = true; 176 177 setChanged( modified ); 178 179 } 180 181 //_______________________________________________ setChanged(bool value)182 void ConfigWidget::setChanged( bool value ) 183 { 184 emit changed( value ); 185 } 186 187 } 188