forked from taj-ny/kwin-effects-forceblur
-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathblur_config.cpp
More file actions
134 lines (111 loc) · 4.19 KB
/
Copy pathblur_config.cpp
File metadata and controls
134 lines (111 loc) · 4.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
SPDX-FileCopyrightText: 2010 Fredrik Höglund <fredrik@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "blur_config.h"
//#include <config-kwin.h>
// KConfigSkeleton
#include "blurconfig.h"
#include <KPluginFactory>
#include "kwineffects_interface.h"
#include <QFileDialog>
#include <QPushButton>
#include <QComboBox>
#include <QLabel>
namespace KWin
{
K_PLUGIN_CLASS(BlurEffectConfig)
BlurEffectConfig::BlurEffectConfig(QObject *parent, const KPluginMetaData &data)
: KCModule(parent, data)
{
ui.setupUi(widget());
BlurConfig::instance("kwinrc");
addConfig(BlurConfig::self(), widget());
// Disable Edge Behavior when Concave mode is selected - not relevant
auto updateEdgeBehaviorEnabled = [this]() {
const bool concave = ui.kcfg_RefractionMode && ui.kcfg_RefractionMode->currentIndex() == 1;
if (ui.kcfg_RefractionTextureRepeatMode) {
ui.kcfg_RefractionTextureRepeatMode->setEnabled(!concave);
}
if (ui.labelRefractionTextureRepeatMode) {
ui.labelRefractionTextureRepeatMode->setEnabled(!concave);
}
// Corner radius is only relevant for Concave as Basic breaks with low values
if (ui.kcfg_RefractionCornerRadius) {
ui.kcfg_RefractionCornerRadius->setEnabled(concave);
}
if (ui.labelRefractionCornerRadius) {
ui.labelRefractionCornerRadius->setEnabled(concave);
}
if (ui.labelRefractionCornerRadiusSquare) {
ui.labelRefractionCornerRadiusSquare->setEnabled(concave);
}
if (ui.labelRefractionCornerRadiusRound) {
ui.labelRefractionCornerRadiusRound->setEnabled(concave);
}
};
if (ui.kcfg_RefractionMode) {
connect(ui.kcfg_RefractionMode, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [updateEdgeBehaviorEnabled](int){ updateEdgeBehaviorEnabled(); });
updateEdgeBehaviorEnabled();
}
connect(ui.staticBlurImagePicker, &QPushButton::clicked, this, &BlurEffectConfig::slotStaticBlurImagePickerClicked);
QFile about(":/effects/forceblur/kcm/about.html");
if (about.open(QIODevice::ReadOnly)) {
const auto html = about.readAll()
.replace("${version}", ABOUT_VERSION_STRING)
.replace("${repo}", "https://github.com/taj-ny/kwin-effects-forceblur");
ui.aboutText->setHtml(html);
}
setupContextualHelp();
}
BlurEffectConfig::~BlurEffectConfig()
{
}
void BlurEffectConfig::slotStaticBlurImagePickerClicked()
{
const auto imagePath = QFileDialog::getOpenFileName(widget(), "Select image", {}, "Images (*.png *.jpg *.jpeg *.bmp)");
if (imagePath.isNull()) {
return;
}
ui.kcfg_FakeBlurImage->setText(imagePath);
}
void BlurEffectConfig::setContextualHelp(
KContextualHelpButton *const contextualHelpButton,
const QString &text,
QWidget *const heightHintWidget
)
{
contextualHelpButton->setContextualHelpText(text);
if (heightHintWidget) {
const auto ownHeightHint = contextualHelpButton->sizeHint().height();
const auto otherHeightHint = heightHintWidget->sizeHint().height();
if (ownHeightHint >= otherHeightHint) {
contextualHelpButton->setHeightHintWidget(heightHintWidget);
}
}
}
void BlurEffectConfig::setupContextualHelp()
{
setContextualHelp(
ui.windowClassesContextualHelp,
QStringLiteral("<p>Specify one window class per line.</p>") +
QStringLiteral("<p>Use <code>$blank</code> to match empty window classes.<br/>") +
QStringLiteral("Use <code>$$</code> for literal dollar sign.</p>"),
ui.windowClassesBriefDescription
);
}
void BlurEffectConfig::save()
{
KCModule::save();
OrgKdeKwinEffectsInterface interface(QStringLiteral("org.kde.KWin"),
QStringLiteral("/Effects"),
QDBusConnection::sessionBus());
if (QGuiApplication::platformName() == QStringLiteral("xcb")) {
interface.reconfigureEffect(QStringLiteral("forceblur_x11"));
} else {
interface.reconfigureEffect(QStringLiteral("forceblur"));
}
}
} // namespace KWin
#include "blur_config.moc"
#include "moc_blur_config.cpp"