diff --git a/kcms/style/CMakeLists.txt b/kcms/style/CMakeLists.txt --- a/kcms/style/CMakeLists.txt +++ b/kcms/style/CMakeLists.txt @@ -7,9 +7,10 @@ set(klauncher_xml ${KINIT_DBUS_INTERFACES_DIR}/kf5_org.kde.KLauncher.xml) qt5_add_dbus_interface(kcm_style_PART_SRCS ${klauncher_xml} klauncher_iface) - ki18n_wrap_ui(kcm_style_PART_SRCS stylepreview.ui) +kconfig_add_kcfg_files(kcm_style_PART_SRCS stylesettings.kcfgc GENERATE_MOC) + add_library(kcm_style MODULE ${kcm_style_PART_SRCS}) target_link_libraries(kcm_style @@ -29,6 +30,7 @@ kcoreaddons_desktop_to_json(kcm_style "kcm_style.desktop") +install(FILES stylesettings.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) install(FILES kcm_style.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) install(TARGETS kcm_style DESTINATION ${KDE_INSTALL_PLUGINDIR}/kcms) diff --git a/kcms/style/kcmstyle.h b/kcms/style/kcmstyle.h --- a/kcms/style/kcmstyle.h +++ b/kcms/style/kcmstyle.h @@ -4,6 +4,7 @@ * Copyright (C) 2002 Daniel Molkentin * Copyright (C) 2007 Urs Wolfer * Copyright (C) 2019 Kai Uwe Broulik + * Copyright (C) 2019 Cyril Rossi * * Portions Copyright (C) TrollTech AS. * @@ -35,17 +36,16 @@ class QQuickItem; +class StyleSettings; class StylesModel; class StyleConfigDialog; class KCMStyle : public KQuickAddons::ConfigModule { Q_OBJECT Q_PROPERTY(StylesModel *model READ model CONSTANT) - - Q_PROPERTY(bool iconsOnButtons READ iconsOnButtons WRITE setIconsOnButtons NOTIFY iconsOnButtonsChanged) - Q_PROPERTY(bool iconsInMenus READ iconsInMenus WRITE setIconsInMenus NOTIFY iconsInMenusChanged) + Q_PROPERTY(StyleSettings *styleSettings READ styleSettings CONSTANT) Q_PROPERTY(ToolBarStyle mainToolBarStyle READ mainToolBarStyle WRITE setMainToolBarStyle NOTIFY mainToolBarStyleChanged) Q_PROPERTY(ToolBarStyle otherToolBarStyle READ otherToolBarStyle WRITE setOtherToolBarStyle NOTIFY otherToolBarStyleChanged) @@ -63,13 +63,7 @@ StylesModel *model() const; - bool iconsOnButtons() const; - void setIconsOnButtons(bool enable); - Q_SIGNAL void iconsOnButtonsChanged(); - - bool iconsInMenus() const; - void setIconsInMenus(bool enable); - Q_SIGNAL void iconsInMenusChanged(); + StyleSettings *styleSettings() const; ToolBarStyle mainToolBarStyle() const; void setMainToolBarStyle(ToolBarStyle style); @@ -85,27 +79,23 @@ void save() override; void defaults() override; - static QString defaultStyle(); - Q_SIGNALS: void showErrorMessage(const QString &message); - void styleReconfigured(const QString &styleName); private: + void loadSettingsToModel(); + + StyleSettings *m_settings; StylesModel *m_model; bool m_selectedStyleDirty = false; bool m_effectsDirty = false; - bool m_iconsOnButtons = false; - bool m_iconsInMenus = false; ToolBarStyle m_mainToolBarStyle = NoText; ToolBarStyle m_otherToolBarStyle = NoText; QPointer m_styleConfigDialog; }; #endif // __KCMSTYLE_H - -// vim: set noet ts=4: diff --git a/kcms/style/kcmstyle.cpp b/kcms/style/kcmstyle.cpp --- a/kcms/style/kcmstyle.cpp +++ b/kcms/style/kcmstyle.cpp @@ -5,6 +5,7 @@ * Copyright (C) 2007 Urs Wolfer * Copyright (C) 2009 by Davide Bettio * Copyright (C) 2019 Kai Uwe Broulik + * Copyright (C) 2019 Cyril Rossi * * Portions Copyright (C) 2007 Paolo Capriotti * Portions Copyright (C) 2007 Ivan Cukic @@ -53,6 +54,7 @@ #include "stylesmodel.h" #include "previewitem.h" +#include "stylesettings.h" K_PLUGIN_FACTORY_WITH_JSON(KCMStyleFactory, "kcm_style.json", registerPlugin();) @@ -72,16 +74,13 @@ } } -QString KCMStyle::defaultStyle() -{ - return QStringLiteral("Breeze"); -} - KCMStyle::KCMStyle(QObject *parent, const QVariantList &args) : KQuickAddons::ConfigModule(parent, args) + , m_settings(new StyleSettings(this)) , m_model(new StylesModel(this)) { qmlRegisterUncreatableType("org.kde.private.kcms.style", 1, 0, "KCM", QStringLiteral("Cannot create instances of KCM")); + qmlRegisterType(); qmlRegisterType(); qmlRegisterType("org.kde.private.kcms.style", 1, 0, "PreviewItem"); @@ -99,6 +98,14 @@ m_selectedStyleDirty = true; setNeedsSave(true); }); + connect(m_settings, &StyleSettings::iconsOnButtonsChanged, this, [this] { + m_effectsDirty = true; + setNeedsSave(true); + }); + connect(m_settings, &StyleSettings::iconsInMenusChanged, this, [this] { + m_effectsDirty = true; + setNeedsSave(true); + }); } KCMStyle::~KCMStyle() = default; @@ -108,36 +115,9 @@ return m_model; } -bool KCMStyle::iconsOnButtons() const -{ - return m_iconsOnButtons; -} - -void KCMStyle::setIconsOnButtons(bool enable) -{ - if (m_iconsOnButtons != enable) { - m_iconsOnButtons = enable; - emit iconsOnButtonsChanged(); - - m_effectsDirty = true; - setNeedsSave(true); - } -} - -bool KCMStyle::iconsInMenus() const -{ - return m_iconsInMenus; -} - -void KCMStyle::setIconsInMenus(bool enable) +StyleSettings *KCMStyle::styleSettings() const { - if (m_iconsInMenus != enable) { - m_iconsInMenus = enable; - emit iconsInMenusChanged(); - - m_effectsDirty = true; - setNeedsSave(true); - } + return m_settings; } KCMStyle::ToolBarStyle KCMStyle::mainToolBarStyle() const @@ -251,25 +231,9 @@ { m_model->load(); - KConfig config(QStringLiteral("kdeglobals")); - - // Current style - KConfigGroup kdeGroup = config.group("KDE"); - const QString widgetStyle = kdeGroup.readEntry("widgetStyle", KCMStyle::defaultStyle()); - - m_model->setSelectedStyle(widgetStyle); + m_settings->load(); - // Effects settings - setIconsOnButtons(kdeGroup.readEntry("ShowIconsOnPushButtons", true)); - setIconsInMenus(kdeGroup.readEntry("ShowIconsInMenuItems", true)); - - KConfigGroup toolBarGroup = config.group("Toolbar style"); - const QString mainToolBarStyle = toolBarGroup.readEntry("ToolButtonStyle", "TextBesideIcon"); - const QString otherToolBarStyle = toolBarGroup.readEntry("ToolButtonStyleOtherToolbars", "TextBesideIcon"); - - const QMetaEnum toolBarStyleEnum = QMetaEnum::fromType(); - setMainToolBarStyle(static_cast(toolBarStyleEnum.keyToValue(qUtf8Printable(mainToolBarStyle)))); - setOtherToolBarStyle(static_cast(toolBarStyleEnum.keyToValue(qUtf8Printable(otherToolBarStyle)))); + loadSettingsToModel(); m_selectedStyleDirty = false; m_effectsDirty = false; @@ -295,24 +259,15 @@ } } - KConfig config(QStringLiteral("kdeglobals")); - - KConfigGroup kdeGroup = config.group("KDE"); - if (newStyleLoaded) { - kdeGroup.writeEntry("widgetStyle", m_model->selectedStyle()); + m_settings->setWidgetStyle(m_model->selectedStyle()); } - kdeGroup.writeEntry("ShowIconsOnPushButtons", m_iconsOnButtons); - kdeGroup.writeEntry("ShowIconsInMenuItems", m_iconsInMenus); - - KConfigGroup toolBarGroup = config.group("Toolbar style"); const QMetaEnum toolBarStyleEnum = QMetaEnum::fromType(); + m_settings->setToolButtonStyle(toolBarStyleEnum.valueToKey(m_mainToolBarStyle)); + m_settings->setToolButtonStyleOtherToolbars(toolBarStyleEnum.valueToKey(m_otherToolBarStyle)); - toolBarGroup.writeEntry("ToolButtonStyle", toolBarStyleEnum.valueToKey(m_mainToolBarStyle)); - toolBarGroup.writeEntry("ToolButtonStyleOtherToolbars", toolBarStyleEnum.valueToKey(m_otherToolBarStyle)); - - config.sync(); + m_settings->save(); // Export the changes we made to qtrc, and update all qt-only // applications on the fly, ensuring that we still follow the user's @@ -342,27 +297,32 @@ // Reset selected style back to current in case of failure if (!newStyleLoaded) { - const QString widgetStyle = kdeGroup.readEntry("widgetStyle", KCMStyle::defaultStyle()); - m_model->setSelectedStyle(widgetStyle); + m_model->setSelectedStyle(m_settings->widgetStyle()); } + m_selectedStyleDirty = false; m_effectsDirty = false; - setNeedsSave(false); } void KCMStyle::defaults() { // TODO the old code had a fallback chain but do we actually support not having Breeze for Plasma? // defaultStyle() -> oxygen -> plastique -> windows -> platinum -> motif - m_model->setSelectedStyle(defaultStyle()); + m_settings->setDefaults(); + + loadSettingsToModel(); - setIconsOnButtons(true); - setIconsInMenus(true); - setMainToolBarStyle(TextBesideIcon); - setOtherToolBarStyle(TextBesideIcon); + setNeedsSave(m_settings->isSaveNeeded()); } -#include "kcmstyle.moc" +void KCMStyle::loadSettingsToModel() +{ + m_model->setSelectedStyle(m_settings->widgetStyle()); -// vim: set noet ts=4: + const QMetaEnum toolBarStyleEnum = QMetaEnum::fromType(); + setMainToolBarStyle(static_cast(toolBarStyleEnum.keyToValue(qUtf8Printable(m_settings->toolButtonStyle())))); + setOtherToolBarStyle(static_cast(toolBarStyleEnum.keyToValue(qUtf8Printable(m_settings->toolButtonStyleOtherToolbars())))); +} + +#include "kcmstyle.moc" diff --git a/kcms/style/package/contents/ui/EffectSettingsPopup.qml b/kcms/style/package/contents/ui/EffectSettingsPopup.qml --- a/kcms/style/package/contents/ui/EffectSettingsPopup.qml +++ b/kcms/style/package/contents/ui/EffectSettingsPopup.qml @@ -42,14 +42,14 @@ id: iconsOnButtonsCheckBox Kirigami.FormData.label: i18n("Show icons:") text: i18n("On buttons") - checked: kcm.iconsOnButtons - onClicked: kcm.iconsOnButtons = checked + checked: kcm.styleSettings.iconsOnButtons + onClicked: kcm.styleSettings.iconsOnButtons = checked } QtControls.CheckBox { text: i18n("In menus") - checked: kcm.iconsInMenus - onClicked: kcm.iconsInMenus = checked + checked: kcm.styleSettings.iconsInMenus + onClicked: kcm.styleSettings.iconsInMenus = checked } QtControls.ComboBox { diff --git a/kcms/style/stylesettings.kcfg b/kcms/style/stylesettings.kcfg new file mode 100644 --- /dev/null +++ b/kcms/style/stylesettings.kcfg @@ -0,0 +1,31 @@ + + + + + + + Breeze + + + + true + + + + true + + + + + + TextBesideIcon + + + + TextBesideIcon + + + diff --git a/kcms/style/stylesettings.kcfgc b/kcms/style/stylesettings.kcfgc new file mode 100644 --- /dev/null +++ b/kcms/style/stylesettings.kcfgc @@ -0,0 +1,6 @@ +File=stylesettings.kcfg +ClassName=StyleSettings +Mutators=true +DefaultValueGetters=true +GenerateProperties=true +ParentInConstructor=true