#include "mainwindow-dtk.h" #include #include #include #include #include #include #include #include DCORE_USE_NAMESPACE DWIDGET_USE_NAMESPACE int main(int argc, char *argv[]) { // Get build time static const QString version = "Version 4.1.1"; static const QDate buildDate = QLocale(QLocale::English).toDate(QString(__DATE__).replace(" ", " 0"), "MMM dd yyyy"); static const QTime buildTime = QTime::fromString(__TIME__, "hh:mm:ss"); // 设置桌面环境环境变量 bool isDeepinOS = true; if (!QString(qgetenv("XDG_CURRENT_DESKTOP")).toLower().startsWith("deepin")) { setenv("XDG_CURRENT_DESKTOP", "Deepin", 1); isDeepinOS = false; } bool isWayland = false; auto e = QProcessEnvironment::systemEnvironment(); QString XDG_SESSION_TYPE = e.value(QStringLiteral("XDG_SESSION_TYPE")); QString WAYLAND_DISPLAY = e.value(QStringLiteral("WAYLAND_DISPLAY")); if (XDG_SESSION_TYPE == QLatin1String("wayland") || WAYLAND_DISPLAY.contains(QLatin1String("wayland"), Qt::CaseInsensitive)) { isWayland = true; } qDebug() << "Wayland enabled:" << isWayland; // Set display backend if (isWayland && useWayland && !(Dtk::Core::DSysInfo::isDDE() || isDeepinOS)) { qputenv("QT_QPA_PLATFORM", "wayland"); } else if (isWayland && useWayland && (Dtk::Core::DSysInfo::isDDE() && isDeepinOS)) { qputenv("QT_QPA_PLATFORM", "dwayland"); } else { qputenv("QT_QPA_PLATFORM", "dxcb"); } DApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // 开启 Hidpi 支持 // 浏览器开启 GPU 支持 qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--ignore-gpu-blocklist --enable-gpu-rasterization --enable-native-gpu-memory-buffers --enable-accelerated-video-decode"); QVector fakeArgs(argc + 2); fakeArgs[0] = argv[0]; fakeArgs[1] = "-platformtheme"; fakeArgs[2] = "deepin"; for (int i = 1; i < argc; i++) fakeArgs[i + 2] = argv[i]; int fakeArgc = argc + 2; // DApplication的argc要用引用,避免c++编译器优化 DApplication a(fakeArgc, fakeArgs.data()); // 初始化日志模块 (默认日志位置 ~/.cache/deepin/spark-store) DLogManager::registerConsoleAppender(); DLogManager::registerFileAppender(); // Wayland 环境下使用,防止子控件 Native 化 if (!DPlatformWindowHandle::pluginVersion().isEmpty()) { a.setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true); } a.setAttribute(Qt::AA_UseHighDpiPixmaps); a.setApplicationDisplayName("Spark Store"); a.loadTranslator(); // 载入翻译 QSettings readConfig(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat); if (readConfig.value("build/version").toString() != version) { qDebug() << "Spark Store has been updated!"; QSettings *setConfig = new QSettings(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat); setConfig->setValue("build/version", version); setConfig->setValue("build/time", buildDate.toString("yyyy.MM.dd") + "-" + buildTime.toString()); setConfig->deleteLater(); } // Customized DAboutDialog DAboutDialog dialog; a.setAboutDialog(&dialog); dialog.setLicense(QObject::tr("We publish this program under GPL V3")); dialog.setVersion(DApplication::buildVersion(readConfig.value("build/version").toString() + "-" + "Flamescion" + "-" + readConfig.value("build/time").toString())); dialog.setProductIcon(QIcon::fromTheme("spark-store")); // 设置Logo dialog.setProductName(QLabel::tr("Spark Store")); dialog.setDescription( QObject::tr( "An appstore powered by community
" "https://www.spark-app.store
" "Spark developers")); dialog.setProductName(QLabel::tr("Spark Store")); dialog.setCompanyLogo(QPixmap(":/spark-store.png")); dialog.setWebsiteName(QObject::tr("The Spark Project")); dialog.setWebsiteLink("https://gitee.com/deepin-community-store"); a.setOrganizationName("spark-union"); a.setProductName(QObject::tr("Spark Store")); a.setApplicationName("Spark Store"); // 不用翻译,影响 ~/.local/share/spark-union 下文件夹名称 a.setApplicationDisplayName(QObject::tr("Spark Store")); // 设置窗口显示标题 (Wayland 下会显示 Qt 原生标题栏) a.setWindowIcon(QIcon::fromTheme("spark-store")); a.setApplicationDescription( QObject::tr( "An appstore powered by deepin community
" "https://www.spark-app.store
" "Spark developers

" "Published under GPL V3")); // 限制单实例运行 if (!a.setSingleInstance("spark-store")) { qDebug() << "The application is already running!"; QDBusInterface iface("com.gitee.spark.store", "/com/gitee/spark/store", "com.gitee.spark.store", QDBusConnection::sessionBus()); QString arg1 = argv[1]; iface.asyncCall("activeWindow", arg1); return -1; } DGuiApplicationHelper::instance()->setPaletteType(DGuiApplicationHelper::LightType); // 固定主题为浅色主题 DApplicationSettings settings; // 定义 DApplicationSettings,自动保存主题设置 MainWindow w; // 让打开时界面显示在正中 Dtk::Widget::moveToCenter(&w); QString arg1 = argv[1]; if (arg1.startsWith("spk://")) { w.openUrl(QUrl(argv[1])); } w.show(); w.setWindowTitle("Spark Store"); return a.exec(); }