diff --git a/src/dbus/applicationservice.cpp b/src/dbus/applicationservice.cpp index 5dc5a42..cb8190d 100644 --- a/src/dbus/applicationservice.cpp +++ b/src/dbus/applicationservice.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -166,23 +167,31 @@ bool ApplicationService::shouldBeShown(const std::unique_ptr &entr return true; } +void ApplicationService::appendScaleFactor(QVariantMap &optionsMap) const noexcept +{ + static QStringList scaleEnvs{"DEEPIN_WINE_SCALE=%1;", "GDK_DPI_SCALE=%1;", "QT_SCALE_FACTOR=%1;", "GDK_SCALE=%1;"}; + QString oldEnv; + + auto factor = scaleFactor(); + if (auto it = optionsMap.find("env"); it != optionsMap.cend()) { + oldEnv = it->value(); + } + + for (const auto &env : scaleEnvs) { + oldEnv.append(env.arg(factor)); + } + + optionsMap.insert("env", oldEnv); +} + QDBusObjectPath ApplicationService::Launch(const QString &action, const QStringList &fields, const QVariantMap &options, const QString &realExec) { QString execStr{}; - bool ok; const auto &supportedActions = actions(); auto optionsMap = options; - QString oldEnv; - auto factor = scaleFactor(); - if (factor != 1.0) { - if (auto it = optionsMap.find("env"); it != optionsMap.cend()) { - oldEnv = it->value(); - } - oldEnv.append(QString{"DEEPIN_WINE_SCALE=%1;"}.arg(factor)); - optionsMap.insert("env", oldEnv); - } + appendScaleFactor(optionsMap); if (!realExec.isNull()) { // we want to replace exec of this applications. if (realExec.isEmpty()) { diff --git a/src/dbus/applicationservice.h b/src/dbus/applicationservice.h index 63f9a29..1159091 100644 --- a/src/dbus/applicationservice.h +++ b/src/dbus/applicationservice.h @@ -23,6 +23,8 @@ #include #include #include +#include +#include double getScaleFactor() noexcept; @@ -135,6 +137,7 @@ public: private Q_SLOTS: void onGlobalScaleFactorChanged() noexcept; + void appendScaleFactor(QVariantMap &optionsMap) const noexcept; public Q_SLOTS: // NOTE: 'realExec' only for internal implementation