1 /* 2 SPDX-FileCopyrightText: 2017 Smith AR <audoban@openmailbox.org> 3 SPDX-FileCopyrightText: 2017 Michail Vourlakos <mvourlakos@gmail.com> 4 5 SPDX-License-Identifier: GPL-2.0-or-later 6 */ 7 8 #ifndef UNIVERSALSETTINGS_H 9 #define UNIVERSALSETTINGS_H 10 11 // local 12 #include <coretypes.h> 13 #include "../apptypes.h" 14 #include "../lattecorona.h" 15 16 // Qt 17 #include <QObject> 18 #include <QAbstractItemModel> 19 #include <QHash> 20 #include <QPair> 21 #include <QPointer> 22 #include <QQmlListProperty> 23 #include <QScreen> 24 25 // KDE 26 #include <KConfigGroup> 27 #include <KSharedConfig> 28 29 namespace Latte { 30 namespace Layouts { 31 class Manager; 32 } 33 } 34 35 namespace Latte { 36 //width_scale, height_scale 37 typedef QPair<float, float> ScreenScales; 38 39 //! This class holds all the settings that are universally available 40 //! independent of layouts 41 class UniversalSettings : public QObject 42 { 43 Q_OBJECT 44 Q_PROPERTY(bool autostart READ autostart WRITE setAutostart NOTIFY autostartChanged) 45 Q_PROPERTY(bool badges3DStyle READ badges3DStyle WRITE setBadges3DStyle NOTIFY badges3DStyleChanged) 46 Q_PROPERTY(bool inAdvancedModeForEditSettings READ inAdvancedModeForEditSettings WRITE setInAdvancedModeForEditSettings NOTIFY inAdvancedModeForEditSettingsChanged) 47 Q_PROPERTY(bool colorsScriptIsPresent READ colorsScriptIsPresent NOTIFY colorsScriptIsPresentChanged) 48 Q_PROPERTY(bool showInfoWindow READ showInfoWindow WRITE setShowInfoWindow NOTIFY showInfoWindowChanged) 49 50 Q_PROPERTY(QString singleModeLayoutName READ singleModeLayoutName WRITE setSingleModeLayoutName NOTIFY singleModeLayoutNameChanged) 51 52 Q_PROPERTY(QStringList launchers READ launchers WRITE setLaunchers NOTIFY launchersChanged) 53 Q_PROPERTY(QStringList contextMenuActionsAlwaysShown READ contextMenuActionsAlwaysShown WRITE setContextMenuActionsAlwaysShown NOTIFY actionsChanged) 54 55 Q_PROPERTY(Latte::Settings::MouseSensitivity sensitivity READ sensitivity WRITE setSensitivity NOTIFY sensitivityChanged) 56 57 Q_PROPERTY(QQmlListProperty<QScreen> screens READ screens) 58 59 public: 60 UniversalSettings(KSharedConfig::Ptr config, QObject *parent = nullptr); 61 ~UniversalSettings() override; 62 63 void load(); 64 65 bool autostart() const; 66 void setAutostart(bool state); 67 68 bool badges3DStyle() const; 69 void setBadges3DStyle(bool enable); 70 71 bool canDisableBorders() const; 72 void setCanDisableBorders(bool enable); 73 74 bool colorsScriptIsPresent() const; 75 76 bool inAdvancedModeForEditSettings() const; 77 void setInAdvancedModeForEditSettings(const bool &inAdvanced); 78 79 bool isAvailableGeometryBroadcastedToPlasma() const; 80 void setIsAvailableGeometryBroadcastedToPlasma(const bool &isBroadcasted); 81 82 bool kwin_metaForwardedToLatte() const; 83 void kwin_forwardMetaToLatte(bool forward); 84 85 bool kwin_borderlessMaximizedWindowsEnabled() const; 86 void kwin_setDisabledMaximizedBorders(bool disable); 87 88 bool metaPressAndHoldEnabled() const; 89 void setMetaPressAndHoldEnabled(bool enabled); 90 91 bool showInfoWindow() const; 92 void setShowInfoWindow(bool show); 93 94 int version() const; 95 void setVersion(int ver); 96 97 int screenTrackerInterval() const; 98 void setScreenTrackerInterval(int duration); 99 100 QString singleModeLayoutName() const; 101 void setSingleModeLayoutName(QString layoutName); 102 103 QStringList contextMenuActionsAlwaysShown() const; 104 void setContextMenuActionsAlwaysShown(const QStringList &actions); 105 106 QStringList launchers() const; 107 void setLaunchers(QStringList launcherList); 108 109 Settings::MouseSensitivity sensitivity(); 110 void setSensitivity(Settings::MouseSensitivity sense); 111 112 QQmlListProperty<QScreen> screens(); 113 static int countScreens(QQmlListProperty<QScreen> *property); //! is needed by screens() 114 static QScreen *atScreens(QQmlListProperty<QScreen> *property, int index); //! is needed by screens() 115 116 public slots: 117 Q_INVOKABLE QString splitterIconPath(); 118 Q_INVOKABLE QString trademarkPath(); 119 Q_INVOKABLE QString trademarkIconPath(); 120 121 Q_INVOKABLE float screenWidthScale(QString screenName) const; 122 Q_INVOKABLE float screenHeightScale(QString screenName) const; 123 Q_INVOKABLE void setScreenScales(QString screenName, float widthScale, float heightScale); 124 125 void syncSettings(); 126 127 signals: 128 void actionsChanged(); 129 void autostartChanged(); 130 void badges3DStyleChanged(); 131 void canDisableBordersChanged(); 132 void colorsScriptIsPresentChanged(); 133 void downloadWindowSizeChanged(); 134 void inAdvancedModeForEditSettingsChanged(); 135 void layoutsColumnWidthsChanged(); 136 void layoutsWindowSizeChanged(); 137 void launchersChanged(); 138 void layoutsMemoryUsageChanged(); 139 void isAvailableGeometryBroadcastedToPlasmaChanged(); 140 void metaPressAndHoldEnabledChanged(); 141 void sensitivityChanged(); 142 void screensCountChanged(); 143 void screenScalesChanged(); 144 void screenTrackerIntervalChanged(); 145 void showInfoWindowChanged(); 146 void singleModeLayoutNameChanged(); 147 void versionChanged(); 148 149 private slots: 150 void loadConfig(); 151 void loadScalesConfig(); 152 void saveConfig(); 153 void saveScalesConfig(); 154 155 void recoverKWinOptions(); 156 void updateColorsScriptIsPresent(); 157 void trackedFileChanged(const QString &file); 158 159 void upgrade_v010(); 160 private: 161 void cleanupSettings(); 162 163 void setColorsScriptIsPresent(bool present); 164 165 MemoryUsage::LayoutsMemory layoutsMemoryUsage() const; 166 void setLayoutsMemoryUsage(MemoryUsage::LayoutsMemory layoutsMemoryUsage); 167 168 private: 169 bool m_badges3DStyle{false}; 170 bool m_canDisableBorders{false}; 171 bool m_colorsScriptIsPresent{false}; 172 bool m_inAdvancedModeForEditSettings{false}; 173 bool m_isAvailableGeometryBroadcastedToPlasma{true}; 174 bool m_metaPressAndHoldEnabled{true}; 175 bool m_showInfoWindow{true}; 176 177 //!kwinrc tracking 178 bool m_kwinMetaForwardedToLatte{false}; 179 bool m_kwinBorderlessMaximizedWindows{false}; 180 181 //when there isnt a version it is an old universal file 182 int m_version{1}; 183 184 int m_screenTrackerInterval{2500}; 185 186 QString m_singleModeLayoutName; 187 188 QStringList m_launchers; 189 QStringList m_contextMenuActionsAlwaysShown; 190 191 MemoryUsage::LayoutsMemory m_memoryUsage; 192 Settings::MouseSensitivity m_sensitivity{Settings::HighMouseSensitivity}; 193 194 //! ScreenName, <width_scale, height_scale> 195 QHash<QString, ScreenScales> m_screenScales; 196 197 QPointer<Latte::Corona> m_corona; 198 199 KConfigGroup m_screenScalesGroup; 200 KConfigGroup m_universalGroup; 201 KSharedConfig::Ptr m_config; 202 203 //! reading kwinrc values is costly; a tracker protects from 204 //! reading too many times with no real reason 205 QTimer m_kwinrcTrackerTimer; 206 KSharedConfigPtr m_kwinrcPtr; 207 KConfigGroup m_kwinrcModifierOnlyShortcutsGroup; 208 KConfigGroup m_kwinrcWindowsGroup; 209 210 friend class Layouts::Manager; 211 friend class Latte::Corona; 212 }; 213 214 } 215 216 #endif //UNIVERSALSETTINGS_H 217