Changeset View
Changeset View
Standalone View
Standalone View
kded/configeditor.cpp
Show All 17 Lines | |||||
18 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 18 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
19 | */ | 19 | */ | ||
20 | 20 | | |||
21 | #include <QDebug> | 21 | #include <QDebug> | ||
22 | #include <QDir> | 22 | #include <QDir> | ||
23 | #include <QRegularExpression> | 23 | #include <QRegularExpression> | ||
24 | #include <QStandardPaths> | 24 | #include <QStandardPaths> | ||
25 | #include <QProcess> | 25 | #include <QProcess> | ||
26 | #include <QVariant> | ||||
26 | 27 | | |||
27 | #include <KSharedConfig> | 28 | #include <KSharedConfig> | ||
28 | #include <KConfigGroup> | 29 | #include <KConfigGroup> | ||
29 | 30 | | |||
30 | #include <string> | 31 | #include <string> | ||
31 | #include <csignal> | 32 | #include <csignal> | ||
32 | #include <cstdio> | 33 | #include <cstdio> | ||
33 | 34 | | |||
34 | #include <gio/gio.h> | 35 | #include <gio/gio.h> | ||
35 | 36 | | |||
36 | #include "configeditor.h" | 37 | #include "configeditor.h" | ||
37 | 38 | | |||
38 | void ConfigEditor::setGtk3ConfigValueDconf(const QString ¶mName, bool paramValue, const QString &category) | 39 | void ConfigEditor::setGtk3ConfigValueGSettings(const QString ¶mName, const QVariant ¶mValue, const QString &category) | ||
39 | { | 40 | { | ||
40 | g_autoptr(GSettings) gsettings = g_settings_new(category.toUtf8().constData()); | 41 | g_autoptr(GSettings) gsettings = g_settings_new(category.toUtf8().constData()); | ||
41 | g_settings_set_boolean(gsettings, paramName.toUtf8().constData(), paramValue); | 42 | | ||
43 | if (paramValue.type() == QVariant::Type::String) { | ||||
44 | g_settings_set_string(gsettings, paramName.toUtf8().constData(), paramValue.toString().toUtf8().constData()); | ||||
45 | } else if (paramValue.type() == QVariant::Type::Int) { | ||||
46 | g_settings_set_int(gsettings, paramName.toUtf8().constData(), paramValue.toInt()); | ||||
47 | } else if (paramValue.type() == QVariant::Type::Bool) { | ||||
48 | g_settings_set_boolean(gsettings, paramName.toUtf8().constData(), paramValue.toBool()); | ||||
49 | } | ||||
42 | } | 50 | } | ||
43 | 51 | | |||
44 | void ConfigEditor::setGtk3ConfigValueDconf(const QString ¶mName, const QString ¶mValue, const QString &category) | 52 | void ConfigEditor::setGtk3ConfigValueGSettingsAsEnum(const QString& paramName, int paramValue, const QString& category) | ||
45 | { | 53 | { | ||
46 | g_autoptr(GSettings) gsettings = g_settings_new(category.toUtf8().constData()); | 54 | g_autoptr(GSettings) gsettings = g_settings_new(category.toUtf8().constData()); | ||
47 | g_settings_set_string(gsettings, paramName.toUtf8().constData(), paramValue.toUtf8().constData()); | 55 | g_settings_set_enum(gsettings, paramName.toUtf8().constData(), paramValue); | ||
48 | } | 56 | } | ||
49 | 57 | | |||
50 | void ConfigEditor::setGtk3ConfigValueSettingsIni(const QString ¶mName, const QString ¶mValue) | 58 | void ConfigEditor::setGtk3ConfigValueSettingsIni(const QString ¶mName, const QVariant ¶mValue) | ||
51 | { | 59 | { | ||
52 | QString configLocation = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation); | 60 | QString configLocation = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation); | ||
53 | QString gtk3ConfigPath = configLocation + QStringLiteral("/gtk-3.0/settings.ini"); | 61 | QString gtk3ConfigPath = configLocation + QStringLiteral("/gtk-3.0/settings.ini"); | ||
54 | 62 | | |||
55 | KSharedConfig::Ptr gtk3Config = KSharedConfig::openConfig(gtk3ConfigPath, KConfig::NoGlobals); | 63 | KSharedConfig::Ptr gtk3Config = KSharedConfig::openConfig(gtk3ConfigPath, KConfig::NoGlobals); | ||
56 | KConfigGroup group = gtk3Config->group(QStringLiteral("Settings")); | 64 | KConfigGroup group = gtk3Config->group(QStringLiteral("Settings")); | ||
57 | 65 | | |||
58 | group.writeEntry(paramName, paramValue); | 66 | group.writeEntry(paramName, paramValue); | ||
59 | group.sync(); | 67 | group.sync(); | ||
60 | } | 68 | } | ||
61 | 69 | | |||
62 | void ConfigEditor::setGtk3ConfigValueXSettingsd(const QString ¶mName, const QString ¶mValue) | 70 | void ConfigEditor::setGtk3ConfigValueXSettingsd(const QString ¶mName, const QVariant ¶mValue) | ||
63 | { | 71 | { | ||
64 | using qsp = QStandardPaths; | 72 | QString configLocation = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation); | ||
65 | QString configLocation = qsp::writableLocation(qsp::GenericConfigLocation); | | |||
66 | 73 | | |||
67 | QDir xsettingsdPath = configLocation + QStringLiteral("/xsettingsd"); | 74 | QDir xsettingsdPath = configLocation + QStringLiteral("/xsettingsd"); | ||
68 | if (!xsettingsdPath.exists()) { | 75 | if (!xsettingsdPath.exists()) { | ||
69 | xsettingsdPath.mkpath(QStringLiteral(".")); | 76 | xsettingsdPath.mkpath(QStringLiteral(".")); | ||
70 | } | 77 | } | ||
71 | 78 | | |||
72 | QString xSettingsdConfigPath = xsettingsdPath.path() + QStringLiteral("/xsettingsd.conf"); | 79 | QString xSettingsdConfigPath = xsettingsdPath.path() + QStringLiteral("/xsettingsd.conf"); | ||
73 | 80 | | |||
74 | QFile xSettingsdConfig(xSettingsdConfigPath); | 81 | QFile xSettingsdConfig(xSettingsdConfigPath); | ||
75 | QString xSettingsdConfigContents = readFileContents(xSettingsdConfig); | 82 | QString xSettingsdConfigContents = readFileContents(xSettingsdConfig); | ||
76 | replaceValueInXSettingsdContents(xSettingsdConfigContents, paramName, paramValue); | 83 | replaceValueInXSettingsdContents(xSettingsdConfigContents, paramName, paramValue); | ||
77 | xSettingsdConfig.remove(); | 84 | xSettingsdConfig.remove(); | ||
78 | xSettingsdConfig.open(QIODevice::WriteOnly | QIODevice::Text); | 85 | xSettingsdConfig.open(QIODevice::WriteOnly | QIODevice::Text); | ||
79 | xSettingsdConfig.write(xSettingsdConfigContents.toUtf8()); | 86 | xSettingsdConfig.write(xSettingsdConfigContents.toUtf8()); | ||
80 | reloadXSettingsd(); | 87 | reloadXSettingsd(); | ||
81 | } | 88 | } | ||
82 | 89 | | |||
83 | void ConfigEditor::setGtk2ConfigValue(const QString ¶mName, const QString ¶mValue) | 90 | void ConfigEditor::setGtk2ConfigValue(const QString ¶mName, const QVariant ¶mValue) | ||
84 | { | 91 | { | ||
85 | QString gtkrcPath = qEnvironmentVariable("GTK2_RC_FILES", QDir::homePath() + QStringLiteral("/.gtkrc-2.0")); | 92 | QString gtkrcPath = qEnvironmentVariable("GTK2_RC_FILES", QDir::homePath() + QStringLiteral("/.gtkrc-2.0")); | ||
86 | if (gtkrcPath.contains(QStringLiteral(":/"))) { // I.e. env variable contains multiple paths | 93 | if (gtkrcPath.contains(QStringLiteral(":/"))) { // I.e. env variable contains multiple paths | ||
87 | gtkrcPath = QDir::homePath() + QStringLiteral("/.gtkrc-2.0"); | 94 | gtkrcPath = QDir::homePath() + QStringLiteral("/.gtkrc-2.0"); | ||
88 | } | 95 | } | ||
89 | QFile gtkrc(gtkrcPath); | 96 | QFile gtkrc(gtkrcPath); | ||
90 | QString gtkrcContents = readFileContents(gtkrc); | 97 | QString gtkrcContents = readFileContents(gtkrc); | ||
91 | replaceValueInGtkrcContents(gtkrcContents, paramName, paramValue); | 98 | replaceValueInGtkrcContents(gtkrcContents, paramName, paramValue); | ||
▲ Show 20 Lines • Show All 64 Lines • ▼ Show 20 Line(s) | |||||
156 | { | 163 | { | ||
157 | if (file.open(QIODevice::ReadWrite | QIODevice::Text)) { | 164 | if (file.open(QIODevice::ReadWrite | QIODevice::Text)) { | ||
158 | return file.readAll(); | 165 | return file.readAll(); | ||
159 | } else { | 166 | } else { | ||
160 | return QString(); | 167 | return QString(); | ||
161 | } | 168 | } | ||
162 | } | 169 | } | ||
163 | 170 | | |||
164 | void ConfigEditor::replaceValueInGtkrcContents(QString >krcContents, const QString ¶mName, const QString ¶mValue) | 171 | void ConfigEditor::replaceValueInGtkrcContents(QString >krcContents, const QString ¶mName, const QVariant ¶mValue) | ||
165 | { | 172 | { | ||
166 | const QRegularExpression regExp(paramName + QStringLiteral("=[^\n]*($|\n)")); | 173 | const QRegularExpression regExp(paramName + QStringLiteral("=[^\n]*($|\n)")); | ||
167 | 174 | | |||
168 | static const QStringList nonStringProperties{ | | |||
169 | QStringLiteral("gtk-toolbar-style"), | | |||
170 | QStringLiteral("gtk-menu-images"), | | |||
171 | QStringLiteral("gtk-button-images"), | | |||
172 | QStringLiteral("gtk-primary-button-warps-slider"), | | |||
173 | QStringLiteral("gtk-enable-animations"), | | |||
174 | }; | | |||
175 | | ||||
176 | QString newConfigString; | 175 | QString newConfigString; | ||
177 | if (nonStringProperties.contains(paramName)) { | 176 | if (paramValue.type() == QVariant::Type::String) { | ||
178 | newConfigString = paramName + QStringLiteral("=") + paramValue + QStringLiteral("\n"); | 177 | newConfigString = QStringLiteral("%1=\"%2\"\n").arg(paramName, paramValue.toString()); | ||
178 | } else if (paramValue.type() == QVariant::Type::Bool) { | ||||
179 | // GTK2 does not support 'true' and 'false' as values | ||||
180 | newConfigString = QStringLiteral("%1=%2\n").arg(paramName, QString::number(paramValue.toInt())); | ||||
179 | } else { | 181 | } else { | ||
180 | newConfigString = paramName + QStringLiteral("=\"") + paramValue + QStringLiteral("\"\n"); | 182 | newConfigString = QStringLiteral("%1=%2\n").arg(paramName, paramValue.toString()); | ||
181 | } | 183 | } | ||
182 | 184 | | |||
183 | if (gtkrcContents.contains(regExp)) { | 185 | if (gtkrcContents.contains(regExp)) { | ||
184 | gtkrcContents.replace(regExp, newConfigString); | 186 | gtkrcContents.replace(regExp, newConfigString); | ||
185 | } else { | 187 | } else { | ||
186 | gtkrcContents = newConfigString + QStringLiteral("\n") + gtkrcContents; | 188 | gtkrcContents = newConfigString + gtkrcContents; | ||
187 | } | 189 | } | ||
188 | } | 190 | } | ||
189 | 191 | | |||
190 | void ConfigEditor::replaceValueInXSettingsdContents(QString &xSettingsdContents, const QString ¶mName, const QString ¶mValue) | 192 | void ConfigEditor::replaceValueInXSettingsdContents(QString &xSettingsdContents, const QString ¶mName, const QVariant ¶mValue) | ||
191 | { | 193 | { | ||
192 | const QRegularExpression regExp(paramName + QStringLiteral(" [^\n]*($|\n)")); | 194 | const QRegularExpression regExp(paramName + QStringLiteral(" [^\n]*($|\n)")); | ||
193 | 195 | | |||
194 | static const QStringList nonStringProperties{ | | |||
195 | QStringLiteral("Gtk/ButtonImages"), | | |||
196 | QStringLiteral("Gtk/MenuImages"), | | |||
197 | QStringLiteral("Gtk/ToolbarStyle"), | | |||
198 | QStringLiteral("Gtk/PrimaryButtonWarpsSlider"), | | |||
199 | QStringLiteral("Gtk/EnableAnimations"), | | |||
200 | }; | | |||
201 | | ||||
202 | QString newConfigString; | 196 | QString newConfigString; | ||
203 | if (nonStringProperties.contains(paramName)) { | 197 | if (paramValue.type() == QVariant::Type::String) { | ||
204 | newConfigString = paramName + QStringLiteral(" ") + paramValue + QStringLiteral("\n"); | 198 | newConfigString = QStringLiteral("%1 \"%2\"\n").arg(paramName, paramValue.toString()); | ||
199 | } else if (paramValue.type() == QVariant::Type::Bool) { | ||||
200 | // XSettigsd does not support 'true' and 'false' as values | ||||
201 | newConfigString = QStringLiteral("%1 %2\n").arg(paramName, QString::number(paramValue.toInt())); | ||||
205 | } else { | 202 | } else { | ||
206 | newConfigString = paramName + QStringLiteral(" \"") + paramValue + QStringLiteral("\"\n"); | 203 | newConfigString = QStringLiteral("%1 %2\n").arg(paramName, paramValue.toString()); | ||
207 | } | 204 | } | ||
208 | 205 | | |||
209 | if (xSettingsdContents.contains(regExp)) { | 206 | if (xSettingsdContents.contains(regExp)) { | ||
210 | xSettingsdContents.replace(regExp, newConfigString); | 207 | xSettingsdContents.replace(regExp, newConfigString); | ||
211 | } else { | 208 | } else { | ||
212 | xSettingsdContents = newConfigString + QStringLiteral("\n") + xSettingsdContents; | 209 | xSettingsdContents = newConfigString + xSettingsdContents; | ||
213 | } | 210 | } | ||
214 | } | 211 | } | ||
215 | 212 | | |||
216 | void ConfigEditor::reloadGtk2Apps() | 213 | void ConfigEditor::reloadGtk2Apps() | ||
217 | { | 214 | { | ||
218 | QProcess::startDetached(QStandardPaths::findExecutable(QStringLiteral("reload_gtk_apps"))); | 215 | QProcess::startDetached(QStandardPaths::findExecutable(QStringLiteral("reload_gtk_apps"))); | ||
219 | } | 216 | } | ||
220 | 217 | | |||
Show All 18 Lines |