Changeset View
Changeset View
Standalone View
Standalone View
kcmkwin/kwincompositing/compositing.cpp
Show All 31 Lines | |||||
32 | #include <QHash> | 32 | #include <QHash> | ||
33 | #include <QDebug> | 33 | #include <QDebug> | ||
34 | 34 | | |||
35 | namespace KWin { | 35 | namespace KWin { | ||
36 | namespace Compositing { | 36 | namespace Compositing { | ||
37 | 37 | | |||
38 | Compositing::Compositing(QObject *parent) | 38 | Compositing::Compositing(QObject *parent) | ||
39 | : QObject(parent) | 39 | : QObject(parent) | ||
40 | , m_animationSpeed(0) | 40 | , m_animationSpeed(1.0) | ||
41 | , m_windowThumbnail(0) | 41 | , m_windowThumbnail(0) | ||
42 | , m_glScaleFilter(0) | 42 | , m_glScaleFilter(0) | ||
43 | , m_xrScaleFilter(false) | 43 | , m_xrScaleFilter(false) | ||
44 | , m_glSwapStrategy(0) | 44 | , m_glSwapStrategy(0) | ||
45 | , m_compositingType(0) | 45 | , m_compositingType(0) | ||
46 | , m_compositingEnabled(true) | 46 | , m_compositingEnabled(true) | ||
47 | , m_changed(false) | 47 | , m_changed(false) | ||
48 | , m_openGLPlatformInterfaceModel(new OpenGLPlatformInterfaceModel(this)) | 48 | , m_openGLPlatformInterfaceModel(new OpenGLPlatformInterfaceModel(this)) | ||
49 | , m_openGLPlatformInterface(0) | 49 | , m_openGLPlatformInterface(0) | ||
50 | , m_windowsBlockCompositing(true) | 50 | , m_windowsBlockCompositing(true) | ||
51 | , m_compositingInterface(new OrgKdeKwinCompositingInterface(QStringLiteral("org.kde.KWin"), QStringLiteral("/Compositor"), QDBusConnection::sessionBus(), this)) | 51 | , m_compositingInterface(new OrgKdeKwinCompositingInterface(QStringLiteral("org.kde.KWin"), QStringLiteral("/Compositor"), QDBusConnection::sessionBus(), this)) | ||
52 | , m_config(KSharedConfig::openConfig("kwinrc")) | ||||
52 | { | 53 | { | ||
53 | reset(); | 54 | reset(); | ||
54 | connect(this, &Compositing::animationSpeedChanged, this, &Compositing::changed); | 55 | connect(this, &Compositing::animationSpeedChanged, this, &Compositing::changed); | ||
55 | connect(this, &Compositing::windowThumbnailChanged, this, &Compositing::changed); | 56 | connect(this, &Compositing::windowThumbnailChanged, this, &Compositing::changed); | ||
56 | connect(this, &Compositing::glScaleFilterChanged, this, &Compositing::changed); | 57 | connect(this, &Compositing::glScaleFilterChanged, this, &Compositing::changed); | ||
57 | connect(this, &Compositing::xrScaleFilterChanged, this, &Compositing::changed); | 58 | connect(this, &Compositing::xrScaleFilterChanged, this, &Compositing::changed); | ||
58 | connect(this, &Compositing::glSwapStrategyChanged, this, &Compositing::changed); | 59 | connect(this, &Compositing::glSwapStrategyChanged, this, &Compositing::changed); | ||
59 | connect(this, &Compositing::compositingTypeChanged, this, &Compositing::changed); | 60 | connect(this, &Compositing::compositingTypeChanged, this, &Compositing::changed); | ||
60 | connect(this, &Compositing::compositingEnabledChanged, this, &Compositing::changed); | 61 | connect(this, &Compositing::compositingEnabledChanged, this, &Compositing::changed); | ||
61 | connect(this, &Compositing::openGLPlatformInterfaceChanged, this, &Compositing::changed); | 62 | connect(this, &Compositing::openGLPlatformInterfaceChanged, this, &Compositing::changed); | ||
62 | connect(this, &Compositing::windowsBlockCompositingChanged, this, &Compositing::changed); | 63 | connect(this, &Compositing::windowsBlockCompositingChanged, this, &Compositing::changed); | ||
63 | 64 | | |||
64 | connect(this, &Compositing::changed, [this]{ | 65 | connect(this, &Compositing::changed, [this]{ | ||
65 | m_changed = true; | 66 | m_changed = true; | ||
66 | }); | 67 | }); | ||
67 | } | 68 | } | ||
68 | 69 | | |||
69 | void Compositing::reset() | 70 | void Compositing::reset() | ||
70 | { | 71 | { | ||
71 | KConfigGroup kwinConfig(KSharedConfig::openConfig(QStringLiteral("kwinrc")), QStringLiteral("Compositing")); | 72 | | ||
72 | setAnimationSpeed(kwinConfig.readEntry("AnimationSpeed", 3)); | 73 | KConfigGroup globalConfig(m_config, QStringLiteral("KDE")); | ||
74 | setAnimationSpeed(globalConfig.readEntry("AnimationDurationFactor", 1.0)); | ||||
75 | | ||||
76 | KConfigGroup kwinConfig(m_config, QStringLiteral("Compositing")); | ||||
zzag: stray new line | |||||
73 | setWindowThumbnail(kwinConfig.readEntry("HiddenPreviews", 5) - 4); | 77 | setWindowThumbnail(kwinConfig.readEntry("HiddenPreviews", 5) - 4); | ||
74 | setGlScaleFilter(kwinConfig.readEntry("GLTextureFilter", 2)); | 78 | setGlScaleFilter(kwinConfig.readEntry("GLTextureFilter", 2)); | ||
75 | setXrScaleFilter(kwinConfig.readEntry("XRenderSmoothScale", false)); | 79 | setXrScaleFilter(kwinConfig.readEntry("XRenderSmoothScale", false)); | ||
76 | setCompositingEnabled(kwinConfig.readEntry("Enabled", true)); | 80 | setCompositingEnabled(kwinConfig.readEntry("Enabled", true)); | ||
77 | 81 | | |||
78 | auto swapStrategy = [&kwinConfig]() { | 82 | auto swapStrategy = [&kwinConfig]() { | ||
79 | const QString glSwapStrategyValue = kwinConfig.readEntry("GLPreferBufferSwap", "a"); | 83 | const QString glSwapStrategyValue = kwinConfig.readEntry("GLPreferBufferSwap", "a"); | ||
80 | 84 | | |||
Show All 33 Lines | |||||
114 | 118 | | |||
115 | setWindowsBlockCompositing(kwinConfig.readEntry("WindowsBlockCompositing", true)); | 119 | setWindowsBlockCompositing(kwinConfig.readEntry("WindowsBlockCompositing", true)); | ||
116 | 120 | | |||
117 | m_changed = false; | 121 | m_changed = false; | ||
118 | } | 122 | } | ||
119 | 123 | | |||
120 | void Compositing::defaults() | 124 | void Compositing::defaults() | ||
121 | { | 125 | { | ||
122 | setAnimationSpeed(3); | 126 | setAnimationSpeed(1.0); | ||
123 | setWindowThumbnail(1); | 127 | setWindowThumbnail(1); | ||
124 | setGlScaleFilter(2); | 128 | setGlScaleFilter(2); | ||
125 | setXrScaleFilter(false); | 129 | setXrScaleFilter(false); | ||
126 | setGlSwapStrategy(1); | 130 | setGlSwapStrategy(1); | ||
127 | setCompositingType(CompositingType::OPENGL20_INDEX); | 131 | setCompositingType(CompositingType::OPENGL20_INDEX); | ||
128 | const QModelIndex index = m_openGLPlatformInterfaceModel->indexForKey(QStringLiteral("glx")); | 132 | const QModelIndex index = m_openGLPlatformInterfaceModel->indexForKey(QStringLiteral("glx")); | ||
129 | setOpenGLPlatformInterface(index.isValid() ? index.row() : 0); | 133 | setOpenGLPlatformInterface(index.isValid() ? index.row() : 0); | ||
130 | setWindowsBlockCompositing(true); | 134 | setWindowsBlockCompositing(true); | ||
131 | m_changed = true; | 135 | m_changed = true; | ||
132 | } | 136 | } | ||
133 | 137 | | |||
134 | bool Compositing::OpenGLIsUnsafe() const | 138 | bool Compositing::OpenGLIsUnsafe() const | ||
135 | { | 139 | { | ||
136 | KConfigGroup kwinConfig(KSharedConfig::openConfig("kwinrc"), "Compositing"); | 140 | KConfigGroup kwinConfig(m_config, "Compositing"); | ||
137 | return kwinConfig.readEntry("OpenGLIsUnsafe", true); | 141 | return kwinConfig.readEntry("OpenGLIsUnsafe", true); | ||
138 | } | 142 | } | ||
139 | 143 | | |||
140 | bool Compositing::OpenGLIsBroken() | 144 | bool Compositing::OpenGLIsBroken() | ||
141 | { | 145 | { | ||
142 | KConfigGroup kwinConfig(KSharedConfig::openConfig("kwinrc"), "Compositing"); | 146 | KConfigGroup kwinConfig(m_config, "Compositing"); | ||
143 | 147 | | |||
144 | QString oldBackend = kwinConfig.readEntry("Backend", "OpenGL"); | 148 | QString oldBackend = kwinConfig.readEntry("Backend", "OpenGL"); | ||
145 | kwinConfig.writeEntry("Backend", "OpenGL"); | 149 | kwinConfig.writeEntry("Backend", "OpenGL"); | ||
146 | kwinConfig.sync(); | 150 | kwinConfig.sync(); | ||
147 | 151 | | |||
148 | if (m_compositingInterface->openGLIsBroken()) { | 152 | if (m_compositingInterface->openGLIsBroken()) { | ||
149 | kwinConfig.writeEntry("Backend", oldBackend); | 153 | kwinConfig.writeEntry("Backend", oldBackend); | ||
150 | kwinConfig.sync(); | 154 | kwinConfig.sync(); | ||
151 | return true; | 155 | return true; | ||
152 | } | 156 | } | ||
153 | 157 | | |||
154 | kwinConfig.writeEntry("OpenGLIsUnsafe", false); | 158 | kwinConfig.writeEntry("OpenGLIsUnsafe", false); | ||
155 | kwinConfig.sync(); | 159 | kwinConfig.sync(); | ||
156 | return false; | 160 | return false; | ||
157 | } | 161 | } | ||
158 | 162 | | |||
159 | void Compositing::reenableOpenGLDetection() | 163 | void Compositing::reenableOpenGLDetection() | ||
160 | { | 164 | { | ||
161 | KConfigGroup kwinConfig(KSharedConfig::openConfig("kwinrc"), "Compositing"); | 165 | KConfigGroup kwinConfig(m_config, "Compositing"); | ||
162 | kwinConfig.writeEntry("OpenGLIsUnsafe", false); | 166 | kwinConfig.writeEntry("OpenGLIsUnsafe", false); | ||
163 | kwinConfig.sync(); | 167 | kwinConfig.sync(); | ||
164 | } | 168 | } | ||
165 | 169 | | |||
166 | int Compositing::animationSpeed() const | 170 | qreal Compositing::animationSpeed() const | ||
167 | { | 171 | { | ||
168 | return m_animationSpeed; | 172 | return m_animationSpeed; | ||
169 | } | 173 | } | ||
170 | 174 | | |||
171 | int Compositing::windowThumbnail() const | 175 | int Compositing::windowThumbnail() const | ||
172 | { | 176 | { | ||
173 | return m_windowThumbnail; | 177 | return m_windowThumbnail; | ||
174 | } | 178 | } | ||
Show All 18 Lines | 196 | { | |||
193 | return m_compositingType; | 197 | return m_compositingType; | ||
194 | } | 198 | } | ||
195 | 199 | | |||
196 | bool Compositing::compositingEnabled() const | 200 | bool Compositing::compositingEnabled() const | ||
197 | { | 201 | { | ||
198 | return m_compositingEnabled; | 202 | return m_compositingEnabled; | ||
199 | } | 203 | } | ||
200 | 204 | | |||
201 | void Compositing::setAnimationSpeed(int speed) | 205 | void Compositing::setAnimationSpeed(qreal speed) | ||
202 | { | 206 | { | ||
203 | if (speed == m_animationSpeed) { | 207 | if (speed == m_animationSpeed) { | ||
204 | return; | 208 | return; | ||
205 | } | 209 | } | ||
206 | m_animationSpeed = speed; | 210 | m_animationSpeed = speed; | ||
207 | emit animationSpeedChanged(speed); | 211 | emit animationSpeedChanged(speed); | ||
208 | } | 212 | } | ||
209 | 213 | | |||
▲ Show 20 Lines • Show All 52 Lines • ▼ Show 20 Line(s) | 260 | { | |||
262 | } | 266 | } | ||
263 | 267 | | |||
264 | m_compositingEnabled = enabled; | 268 | m_compositingEnabled = enabled; | ||
265 | emit compositingEnabledChanged(enabled); | 269 | emit compositingEnabledChanged(enabled); | ||
266 | } | 270 | } | ||
267 | 271 | | |||
268 | void Compositing::save() | 272 | void Compositing::save() | ||
269 | { | 273 | { | ||
270 | KConfigGroup kwinConfig(KSharedConfig::openConfig(QStringLiteral("kwinrc")), "Compositing"); | 274 | // this writes to the KDE group of the kwinrc, when loading we rely on kconfig cascading to | ||
271 | kwinConfig.writeEntry("AnimationSpeed", animationSpeed()); | 275 | // load a global value, or allow a kwin override | ||
276 | KConfigGroup generalConfig(m_config, "KDE"); | ||||
277 | if (!isRunningPlasma()) { | ||||
278 | generalConfig.writeEntry("AnimationDurationFactor", animationSpeed()); | ||||
279 | } | ||||
280 | KConfigGroup kwinConfig(m_config, "Compositing"); | ||||
281 | | ||||
272 | kwinConfig.writeEntry("HiddenPreviews", windowThumbnail() + 4); | 282 | kwinConfig.writeEntry("HiddenPreviews", windowThumbnail() + 4); | ||
273 | kwinConfig.writeEntry("GLTextureFilter", glScaleFilter()); | 283 | kwinConfig.writeEntry("GLTextureFilter", glScaleFilter()); | ||
274 | kwinConfig.writeEntry("XRenderSmoothScale", xrScaleFilter()); | 284 | kwinConfig.writeEntry("XRenderSmoothScale", xrScaleFilter()); | ||
275 | if (!compositingRequired()) { | 285 | if (!compositingRequired()) { | ||
276 | kwinConfig.writeEntry("Enabled", compositingEnabled()); | 286 | kwinConfig.writeEntry("Enabled", compositingEnabled()); | ||
277 | } | 287 | } | ||
278 | auto swapStrategy = [this] { | 288 | auto swapStrategy = [this] { | ||
279 | switch (glSwapStrategy()) { | 289 | switch (glSwapStrategy()) { | ||
▲ Show 20 Lines • Show All 80 Lines • ▼ Show 20 Line(s) | 362 | { | |||
360 | emit windowsBlockCompositingChanged(set); | 370 | emit windowsBlockCompositingChanged(set); | ||
361 | } | 371 | } | ||
362 | 372 | | |||
363 | bool Compositing::compositingRequired() const | 373 | bool Compositing::compositingRequired() const | ||
364 | { | 374 | { | ||
365 | return m_compositingInterface->platformRequiresCompositing(); | 375 | return m_compositingInterface->platformRequiresCompositing(); | ||
366 | } | 376 | } | ||
367 | 377 | | |||
378 | bool Compositing::isRunningPlasma() { | ||||
zzag: Style: `{` goes on the next line. | |||||
379 | return qgetenv("XDG_CURRENT_DESKTOP") == "KDE"; | ||||
380 | } | ||||
381 | | ||||
382 | | ||||
368 | CompositingType::CompositingType(QObject *parent) | 383 | CompositingType::CompositingType(QObject *parent) | ||
zzag: stay new line | |||||
369 | : QAbstractItemModel(parent) { | 384 | : QAbstractItemModel(parent) { | ||
370 | 385 | | |||
371 | generateCompositing(); | 386 | generateCompositing(); | ||
372 | } | 387 | } | ||
373 | 388 | | |||
374 | void CompositingType::generateCompositing() | 389 | void CompositingType::generateCompositing() | ||
375 | { | 390 | { | ||
376 | QHash<QString, CompositingType::CompositingTypeIndex> compositingTypes; | 391 | QHash<QString, CompositingType::CompositingTypeIndex> compositingTypes; | ||
▲ Show 20 Lines • Show All 156 Lines • Show Last 20 Lines |
stray new line