diff --git a/kcms/fonts/fonts.cpp b/kcms/fonts/fonts.cpp
index 43b041d44..3546920ba 100644
--- a/kcms/fonts/fonts.cpp
+++ b/kcms/fonts/fonts.cpp
@@ -129,9 +129,10 @@ void KFonts::load()
void KFonts::save()
{
auto dpiItem = fontsAASettings()->findItem("forceFontDPI");
+ auto dpiWaylandItem = fontsAASettings()->findItem("forceFontDPIWayland");
auto antiAliasingItem = fontsAASettings()->findItem("antiAliasing");
- Q_ASSERT(dpiItem && antiAliasingItem);
- if (dpiItem->isSaveNeeded() || antiAliasingItem->isSaveNeeded()) {
+ Q_ASSERT(dpiItem && dpiWaylandItem && antiAliasingItem);
+ if (dpiItem->isSaveNeeded() || dpiWaylandItem->isSaveNeeded() || antiAliasingItem->isSaveNeeded()) {
emit aliasingChangeApplied();
}
diff --git a/kcms/fonts/fontsaasettings.cpp b/kcms/fonts/fontsaasettings.cpp
index 9e2683dcd..8953aa5d5 100644
--- a/kcms/fonts/fontsaasettings.cpp
+++ b/kcms/fonts/fontsaasettings.cpp
@@ -264,6 +264,7 @@ FontsAASettings::FontsAASettings(QObject *parent)
addItemInternal("subPixel", defaultSubPixel(), &FontsAASettings::subPixelChanged);
addItemInternal("hinting", defaultHinting(), &FontsAASettings::hintingChanged);
+ connect(this, &FontsAASettings::forceFontDPIWaylandChanged, this, &FontsAASettings::dpiChanged);
connect(this, &FontsAASettings::forceFontDPIChanged, this, &FontsAASettings::dpiChanged);
}
diff --git a/kcms/fonts/fontsaasettingsbase.kcfg b/kcms/fonts/fontsaasettingsbase.kcfg
index 22d80c0db..771953885 100644
--- a/kcms/fonts/fontsaasettingsbase.kcfg
+++ b/kcms/fonts/fontsaasettingsbase.kcfg
@@ -5,6 +5,10 @@
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
+
+
+ 0
+ 0
diff --git a/kcms/fonts/package/contents/ui/main.qml b/kcms/fonts/package/contents/ui/main.qml
index 64eca5001..a63035bf4 100644
--- a/kcms/fonts/package/contents/ui/main.qml
+++ b/kcms/fonts/package/contents/ui/main.qml
@@ -362,9 +362,6 @@ KCM.SimpleKCM {
RowLayout {
Layout.preferredWidth: formLayout.maxImplicitWidth
- // We don't want people messing with the font DPI on Wayland;
- // they should always be using the global scaling system instead
- visible: Qt.platform.pluginName === "xcb"
QtControls.CheckBox {
id: dpiCheckBox
@@ -375,6 +372,13 @@ KCM.SimpleKCM {
dpiTwiddledMessage.visible = checked
}
+ // dpiSpinBox will set forceFontDPI or forceFontDPIWayland,
+ // so only one SettingStateBinding will be activated at a time.
+ KCM.SettingStateBinding {
+ configObject: kcm.fontsAASettings
+ settingName: "forceFontDPIWayland"
+ extraEnabledConditions: antiAliasingCheckBox.checked && !kcm.fontsAASettings.isAaImmutable
+ }
KCM.SettingStateBinding {
configObject: kcm.fontsAASettings
settingName: "forceFontDPI"
@@ -390,6 +394,13 @@ KCM.SimpleKCM {
to: 999
from: 1
+ // dpiSpinBox will set forceFontDPI or forceFontDPIWayland,
+ // so only one SettingStateBinding will be activated at a time.
+ KCM.SettingStateBinding {
+ configObject: kcm.fontsAASettings
+ settingName: "forceFontDPIWayland"
+ extraEnabledConditions: dpiCheckBox.enabled && dpiCheckBox.checked
+ }
KCM.SettingStateBinding {
configObject: kcm.fontsAASettings
settingName: "forceFontDPI"
diff --git a/kcms/krdb/krdb.cpp b/kcms/krdb/krdb.cpp
index e349193e3..4cf641cfd 100644
--- a/kcms/krdb/krdb.cpp
+++ b/kcms/krdb/krdb.cpp
@@ -438,8 +438,13 @@ void runRdb(uint flags)
int dpi;
+ //even though this sets up the X rdb, we want to use the value the
+ //user has set to use when under wayland - as X apps will be scaled by the compositor
if (KWindowSystem::isPlatformWayland()) {
- dpi = 96; // Don't change the default DPI at all under wayland
+ dpi = cfgfonts.readEntry("forceFontDPIWayland", 0);
+ if (dpi == 0) { //with wayland we want xwayland to run at 96 dpi (unless set otherwise) as we have wayland scaling on top
+ dpi = 96;
+ }
} else {
dpi = cfgfonts.readEntry("forceFontDPI", 0);
}
diff --git a/startkde/startplasma-wayland.cpp b/startkde/startplasma-wayland.cpp
index 28c59782a..0867c726b 100644
--- a/startkde/startplasma-wayland.cpp
+++ b/startkde/startplasma-wayland.cpp
@@ -30,6 +30,14 @@ int main(int argc, char **argv)
createConfigDirectory();
setupCursor(true);
+ {
+ KConfig fonts(QStringLiteral("kcmfonts"));
+ KConfigGroup group = fonts.group("General");
+ auto dpiSetting = group.readEntry("forceFontDPIWayland", 96);
+ auto dpi = dpiSetting == 0 ? 96 : dpiSetting;
+ qputenv("QT_WAYLAND_FORCE_DPI", QByteArray::number(dpi));
+ }
+
// Query whether org.freedesktop.locale1 is available. If it is, try to
// set XKB_DEFAULT_{MODEL,LAYOUT,VARIANT,OPTIONS} accordingly.
{