fix: setDescription from cmdline or cfg not working

when aboutDialog is not created yet, ApplicationDescription can't be set

Log: merge changes from develop/qt6 branch
This commit is contained in:
zty199 2024-10-20 15:47:35 +08:00
parent c4e34eb048
commit 7e5525d4e9
9 changed files with 111 additions and 178 deletions

21
debian/rules vendored
View File

@ -1,35 +1,36 @@
#!/usr/bin/make -f
export QT_SELECT=5
export QT_SELECT = qt5
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
include /usr/share/dpkg/default.mk
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
DH_AUTO_ARGS = --parallel --buildsystem=qmake
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
# Uncomment this to turn on verbose mode.
# export DH_VERBOSE=1
#export DH_VERBOSE=1
%:
dh $@ --parallel
override_dh_auto_clean:
rm -rf $(CURDIR)/build
rm -rf $(CURDIR)/build-$(DEB_HOST_MULTIARCH)
override_dh_auto_configure:
mkdir -p $(CURDIR)/build
mkdir -p $(CURDIR)/build-$(DEB_HOST_MULTIARCH)
dh_auto_configure MAKEFLAGS=-j$(JOBS) -- spark-webapp-runtime.pro \
-spec linux-g++ CONFIG+=qtquickcompiler \
-o $(CURDIR)/build/
qmake BUILD_VERSION=$(DEB_VERSION_UPSTREAM) spark-webapp-runtime.pro \
-spec linux-g++ CONFIG+=force_debug_info \
-o $(CURDIR)/build-$(DEB_HOST_MULTIARCH)/
override_dh_auto_build:
make -C $(CURDIR)/build -j$(JOBS)
make -C $(CURDIR)/build-$(DEB_HOST_MULTIARCH) -j$(JOBS)
override_dh_auto_install:
make -C $(CURDIR)/build install \
make -C $(CURDIR)/build-$(DEB_HOST_MULTIARCH) install \
INSTALL_ROOT=$(CURDIR)/debian/spark-webapp-runtime

View File

@ -8,6 +8,8 @@
#include <unistd.h>
const QString websiteLinkTemplate = "<a href='%1' style='text-decoration: none; color: rgba(0,129,255,0.9);'>%2</a>";
Application::Application(int &argc, char **argv)
: DApplication(argc, argv)
{
@ -20,23 +22,21 @@ Application::Application(int &argc, char **argv)
setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true);
}
setApplicationVersion(QString(CURRENT_VER));
setOrganizationName(ORGANIZATION_NAME); // 添加组织名称,和商店主体的文件夹同在 ~/.local/share/spark-union 文件夹下
setApplicationName(APPLICATION_NAME); // 这里不要翻译,否则 ~/.local/share 中文件夹名也会被翻译
setProductName(DEFAULT_TITLE);
setApplicationName(PROJECT_NAME); // 这里不要翻译,否则 ~/.local/share 中文件夹名也会被翻译
setApplicationVersion(APP_VERSION);
setApplicationDisplayName(DEFAULT_TITLE);
setApplicationLicense(" <a href='https://www.gnu.org/licenses/gpl-3.0.html'>GPLv3</a> ");
setWindowIcon(QIcon(":/images/spark-webapp-runtime.svg"));
setProductIcon(QIcon(":/images/spark-webapp-runtime.svg"));
setProductName(websiteLinkTemplate.arg("https://gitee.com/deepin-community-store/spark-web-app-runtime", DEFAULT_TITLE));
setApplicationDescription(QObject::tr("Presented By Spark developers # HadesStudio"));
setApplicationLicense(websiteLinkTemplate.arg("https://gitee.com/spark-store-project/spark-web-app-runtime/blob/master/LICENSE", "GPLv3"));
}
void Application::handleAboutAction()
void Application::triggerAboutAction()
{
if (aboutDialog()) {
DApplication::handleAboutAction();
return;
}
initAboutDialog();
DApplication::handleAboutAction();
handleAboutAction();
}
QStringList Application::launchParams() const
@ -54,6 +54,21 @@ MainWindow *Application::mainWindow()
return m_mainWindow;
}
void Application::handleAboutAction()
{
DApplication::handleAboutAction();
DAboutDialog *dialog = aboutDialog();
if (dialog) {
// CompanyLogo
dialog->setCompanyLogo(QPixmap(":/images/Logo-Spark.png"));
// WebsiteName
dialog->setWebsiteName("Spark Project");
// WebsiteLink
dialog->setWebsiteLink("https://gitee.com/deepin-community-store/");
}
}
void Application::saveLaunchParams(int &argc, char **argv)
{
m_argc = argc;
@ -66,43 +81,6 @@ void Application::saveLaunchParams(int &argc, char **argv)
qDebug() << Q_FUNC_INFO << m_argc << m_argv;
}
void Application::initAboutDialog()
{
// Customized DAboutDialog
DAboutDialog *dialog = new DAboutDialog(activeWindow());
// WindowIcon
dialog->setWindowIcon(QIcon(":/images/spark-webapp-runtime.svg"));
// ProductIcon
dialog->setProductIcon(QIcon(":/images/spark-webapp-runtime.svg"));
// ProductName
dialog->setProductName(productName());
// Version
dialog->setVersion(translate("DAboutDialog", "Version: %1").arg(applicationVersion()));
// CompanyLogo
dialog->setCompanyLogo(QPixmap(":/images/Logo-Spark.png"));
// Description
QString szDefaultDesc = QString("<a href='https://gitee.com/deepin-community-store/spark-web-app-runtime'><span style='font-size:12pt;font-weight:500;'>%1</span></a><br/>"
"<span style='font-size:12pt;'>%2</span>")
.arg(DEFAULT_TITLE)
.arg(QObject::tr("Presented By Spark developers # HadesStudio"));
dialog->setDescription(szDefaultDesc);
// WebsiteName
dialog->setWebsiteName("Spark Project");
// WebsiteLink
dialog->setWebsiteLink("https://gitee.com/deepin-community-store/");
// License
dialog->setLicense(translate("DAboutDialog", "%1 is released under %2").arg(productName()).arg(applicationLicense()));
setAboutDialog(dialog);
connect(aboutDialog(), &DAboutDialog::destroyed, this, [=] {
setAboutDialog(nullptr);
});
dialog->hide();
}
void Application::slotMainWindowClose()
{
if (aboutDialog()) {

View File

@ -13,16 +13,18 @@ class Application : public DApplication
public:
Application(int &argc, char **argv);
void handleAboutAction() override;
void triggerAboutAction();
QStringList launchParams() const;
void setMainWindow(MainWindow *window);
MainWindow *mainWindow();
protected:
void handleAboutAction() override;
private:
void saveLaunchParams(int &argc, char **argv);
void initAboutDialog();
signals:
void sigQuit();

View File

@ -4,7 +4,6 @@
#include <QObject>
#define DEFAULT_TITLE QObject::tr("SparkWebAppRuntime")
#define APPLICATION_NAME QString("spark-webapp-runtime")
#define ORGANIZATION_NAME QString("spark-union")
#define DEFAULT_URL QString("qrc:/help/help.html")
#define DEFAULT_WIDTH (1024)
@ -18,6 +17,4 @@
#define DEFAULT_PORT 0
#define DEFAULT_GPU 1
#define CURRENT_VER QString("1.7.0")
#endif // GLOBALDEFINE_H

View File

@ -19,23 +19,8 @@
int main(int argc, char *argv[])
{
if (!QString(qgetenv("XDG_CURRENT_DESKTOP")).toLower().startsWith("deepin")) {
qputenv("XDG_CURRENT_DESKTOP", "Deepin");
}
// 龙芯机器配置,使得 DApplication 能正确加载 QTWEBENGINE
qputenv("DTK_FORCE_RASTER_WIDGETS", "FALSE");
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-features=UseModernMediaControls");
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-web-security");
#ifdef __sw_64__
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--no-sandbox");
#endif
if (!Dtk::Core::DSysInfo::isDDE()) {
#ifndef DSTORE_NO_DXCBs
DApplication::loadDXcbPlugin();
#endif
}
// 开启 HiDPI 缩放支持
DApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
@ -51,9 +36,6 @@ int main(int argc, char *argv[])
}
Application a(fakeArgc, fakeArgv.data());
// 保存 DTK 主题
DApplicationSettings settings;
// 解析命令行启动参数
QCommandLineParser parser;
@ -180,10 +162,7 @@ int main(int argc, char *argv[])
#if SSL_SERVER
quint16 u16sslPort = 0;
#endif
QString szDefaultDesc = QString("<a href='https://gitee.com/deepin-community-store/spark-web-app-runtime'><span style='font-size:12pt;font-weight:500;'>%1</span></a><br/>"
"<span style='font-size:12pt;'>%2</span>")
.arg(DEFAULT_TITLE)
.arg(QObject::tr("Presented By Spark developers # HadesStudio"));
QString szDefaultDesc = QObject::tr("Presented By Spark developers # HadesStudio");
// 解析可能存在的配置文件
QString szCfgFile = DEFAULT_CFG;
@ -258,12 +237,17 @@ int main(int argc, char *argv[])
if (parser.isSet(useGPU)) {
toUseGPU = parser.value(useGPU).toUInt();
}
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-web-security");
if (toUseGPU == true) {
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--ignore-gpu-blocklist --enable-gpu-rasterization --enable-native-gpu-memory-buffers --enable-accelerated-video-decode --disable-web-security");
#ifdef __sw_64__
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--ignore-gpu-blocklist --enable-gpu-rasterization --enable-native-gpu-memory-buffers --enable-accelerated-video-decode --disable-web-security --no-sandbox");
QStringList chromium_flags = {"--disable-web-security"};
#if defined __sw_64__ || __loongarch__
chromium_flags << "--no-sandbox";
#endif
if (toUseGPU == true) {
chromium_flags << "--ignore-gpu-blocklist"
<< "--enable-gpu-rasterization"
<< "--enable-native-gpu-memory-buffers"
<< "--enable-accelerated-video-decode";
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", chromium_flags.join(" ").toUtf8());
qDebug() << "Setting GPU to True.";
}
// 初始化 QtWebEngine 深色模式环境变量

View File

@ -1,7 +1,5 @@
#include "mainwindow.h"
#include "application.h"
#include "webengineview.h"
#include "webenginepage.h"
#include <DLog>
#include <DWidgetUtil>
@ -50,8 +48,8 @@ MainWindow::MainWindow(QString szTitle,
, m_clearCache(new QAction(QObject::tr("Clear Cache"), this))
, t_menu(new QMenu(this))
, t_show(new QAction(QObject::tr("Show MainWindow"), this))
, t_about(new QAction(qApp->translate("TitleBarMenu", "About"), this))
, t_exit(new QAction(qApp->translate("TitleBarMenu", "Exit"), this))
, t_about(new QAction(qApp->translate("TitleBarMenu", QString("About").toUtf8().data()), this))
, t_exit(new QAction(qApp->translate("TitleBarMenu", QString("Exit").toUtf8().data()), this))
, downloadMessage(new DFloatingMessage(DFloatingMessage::ResidentType, this))
, downloadProgressWidget(new QWidget(downloadMessage))
, progressBarLayout(new QHBoxLayout(downloadProgressWidget))
@ -75,7 +73,7 @@ MainWindow::~MainWindow()
void MainWindow::setIcon(QString szIconPath)
{
if (!QFileInfo(szIconPath).exists()) {
if (!QFile::exists(szIconPath)) {
return;
}
@ -83,19 +81,13 @@ void MainWindow::setIcon(QString szIconPath)
setWindowIcon(QIcon(szIconPath));
m_tray->setIcon(QIcon(szIconPath));
DAboutDialog *aboutDialog = qobject_cast<Application *>(qApp)->aboutDialog();
if (aboutDialog) {
aboutDialog->setWindowIcon(QIcon::fromTheme(szIconPath));
aboutDialog->setProductIcon(QIcon::fromTheme(szIconPath));
}
qApp->setWindowIcon(QIcon::fromTheme(szIconPath));
qApp->setProductIcon(QIcon::fromTheme(szIconPath));
}
void MainWindow::setDescription(const QString &desc)
{
DAboutDialog *aboutDialog = qobject_cast<Application *>(qApp)->aboutDialog();
if (aboutDialog) {
aboutDialog->setDescription(desc);
}
qApp->setApplicationDescription(desc);
}
QString MainWindow::title() const
@ -187,6 +179,7 @@ void MainWindow::initUI()
fixSize();
fullScreen();
hideButtons(); // 修复指定hidebuttons之后没有生效
}
void MainWindow::initTitleBar()
@ -223,8 +216,6 @@ void MainWindow::initTitleBar()
if (!m_isHideButton) {
m_menu->addAction(m_hideButtons);
}else{
hideButtons(); // 修复指定hidebuttons之后没有生效
}
if (m_menu->actions().size() > 0) {
@ -303,7 +294,7 @@ void MainWindow::initConnections()
fixSize();
});
connect(t_about, &QAction::triggered, this, [=]() {
qobject_cast<Application *>(qApp)->handleAboutAction();
qobject_cast<Application *>(qApp)->triggerAboutAction();
});
connect(t_exit, &QAction::triggered, this, [=]() {
exit(0);
@ -384,7 +375,7 @@ QString MainWindow::saveAs(QString fileName)
QStandardPaths::writableLocation(QStandardPaths::DownloadLocation) + "/" + fileName);
if (!saveFile.isEmpty()) {
// 判断上层目录是否可写入
if (QFileInfo(QFileInfo(saveFile).absolutePath()).isWritable()) {
if (QFileInfo(QFileInfo(saveFile).absoluteDir().canonicalPath()).isWritable()) {
return saveFile;
} else {
return saveAs(fileName);
@ -418,14 +409,13 @@ void MainWindow::on_downloadStart(QWebEngineDownloadItem *item)
{
// 尝试加锁互斥量,禁止同时下载多个文件
if (mutex.tryLock()) {
QString fileName = QFileInfo(item->path()).fileName();
QString fileName = item->downloadFileName();
QString filePath = saveAs(fileName);
if (filePath.isEmpty()) {
mutex.unlock();
return;
}
item->setPath(filePath);
filePath = QFileInfo(item->path()).absoluteFilePath();
item->setDownloadDirectory(QFileInfo(filePath).absoluteDir().canonicalPath());
connect(item, &QWebEngineDownloadItem::downloadProgress, this, &MainWindow::on_downloadProgress);
connect(item, &QWebEngineDownloadItem::finished, this, [=]() {

View File

@ -1,4 +1,4 @@
QT += core gui webenginewidgets svg concurrent dbus
QT += core gui webenginewidgets concurrent
greaterThan(QT_MAJOR_VERSION, 5): QT += widgets
@ -6,6 +6,13 @@ TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
DEFINES += PROJECT_NAME=\\\"'$${TARGET}'\\\"
# Get build version from qmake
VERSION = $$BUILD_VERSION
isEmpty(VERSION): VERSION = 1.0
DEFINES += APP_VERSION=\\\"'$${VERSION}'\\\"
CONFIG += c++11 link_pkgconfig
PKGCONFIG += dtkcore dtkgui dtkwidget
@ -34,7 +41,7 @@ RESOURCES += \
resources/resources.qrc
TRANSLATIONS += \
translations/spark-webapp-runtime_zh_CN.ts
translations/$${TARGET}_zh_CN.ts
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin

View File

@ -1,109 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
<name>DAboutDialog</name>
<message>
<location filename="../application.cpp" line="82"/>
<source>Version: %1</source>
<translation>%1</translation>
</message>
<message>
<location filename="../application.cpp" line="98"/>
<source>%1 is released under %2</source>
<translation>%1%2</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../application.cpp" line="90"/>
<location filename="../main.cpp" line="186"/>
<location filename="../application.cpp" line="33"/>
<location filename="../main.cpp" line="165"/>
<source>Presented By Spark developers # HadesStudio</source>
<translation> @ </translation>
</message>
<message>
<location filename="../main.cpp" line="60"/>
<location filename="../main.cpp" line="42"/>
<source>Description: %1</source>
<translation>%1</translation>
</message>
<message>
<location filename="../main.cpp" line="66"/>
<location filename="../main.cpp" line="48"/>
<source>Enable CommandLineParser. Default is false.</source>
<translation></translation>
</message>
<message>
<location filename="../main.cpp" line="71"/>
<location filename="../main.cpp" line="53"/>
<source>The Title of Application. Default is %1.</source>
<translation> %1</translation>
</message>
<message>
<location filename="../main.cpp" line="78"/>
<location filename="../main.cpp" line="60"/>
<source>The target URL. Default is Blank.</source>
<translation> URL</translation>
</message>
<message>
<location filename="../main.cpp" line="85"/>
<location filename="../main.cpp" line="67"/>
<source>The Width of Application. Default is %1.</source>
<translation> %1</translation>
</message>
<message>
<location filename="../main.cpp" line="92"/>
<location filename="../main.cpp" line="74"/>
<source>The Height of Application. Default is %1.</source>
<translation> %1</translation>
</message>
<message>
<location filename="../main.cpp" line="99"/>
<location filename="../main.cpp" line="81"/>
<source>Enable Tray Icon. Default is false.</source>
<translation></translation>
</message>
<message>
<location filename="../main.cpp" line="103"/>
<location filename="../main.cpp" line="85"/>
<source>Run in Fullscreen Mode. Default is false.</source>
<translation></translation>
</message>
<message>
<location filename="../main.cpp" line="107"/>
<location filename="../main.cpp" line="89"/>
<source>Fix Window Size. Default is false.</source>
<translation></translation>
</message>
<message>
<location filename="../main.cpp" line="111"/>
<location filename="../main.cpp" line="93"/>
<source>Hide Control Buttons. Default is false.</source>
<translation></translation>
</message>
<message>
<location filename="../main.cpp" line="116"/>
<location filename="../main.cpp" line="98"/>
<source>The ICON of Application.</source>
<translation></translation>
</message>
<message>
<location filename="../main.cpp" line="123"/>
<location filename="../main.cpp" line="105"/>
<source>The Description of Application.</source>
<translation></translation>
</message>
<message>
<location filename="../main.cpp" line="130"/>
<location filename="../main.cpp" line="112"/>
<source>The Configuration file of Application.</source>
<translation></translation>
</message>
<message>
<location filename="../main.cpp" line="137"/>
<location filename="../main.cpp" line="119"/>
<source>The root path of the program web service.</source>
<translation> WebServer </translation>
</message>
<message>
<location filename="../main.cpp" line="144"/>
<location filename="../main.cpp" line="126"/>
<source>The port number of the program web service.</source>
<translation> WebServer </translation>
</message>
<message>
<location filename="../main.cpp" line="151"/>
<location filename="../main.cpp" line="133"/>
<source>To use GPU instead of CPU to decoding. Default True.</source>
<translation>GPU渲染</translation>
</message>
<message>
<location filename="../main.cpp" line="159"/>
<location filename="../main.cpp" line="141"/>
<source>The ssl port number of the program web service.</source>
<translation> WebServer SSL </translation>
</message>
@ -113,102 +100,89 @@
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="47"/>
<location filename="../mainwindow.cpp" line="45"/>
<source>Full Screen</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="48"/>
<location filename="../mainwindow.cpp" line="46"/>
<source>Fix Size</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="49"/>
<location filename="../mainwindow.cpp" line="47"/>
<source>Hide Buttons</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="50"/>
<location filename="../mainwindow.cpp" line="48"/>
<source>Clear Cache</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="52"/>
<location filename="../mainwindow.cpp" line="50"/>
<source>Show MainWindow</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="59"/>
<location filename="../mainwindow.cpp" line="57"/>
<source>Pause</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="60"/>
<location filename="../mainwindow.cpp" line="58"/>
<source>Resume</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="61"/>
<location filename="../mainwindow.cpp" line="59"/>
<source>Cancel</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="381"/>
<location filename="../mainwindow.cpp" line="374"/>
<source>Save As</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="445"/>
<location filename="../mainwindow.cpp" line="437"/>
<source>%1Start downloading %2</source>
<translation>%1 %2</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="456"/>
<location filename="../mainwindow.cpp" line="448"/>
<source>%1Wait for previous download to complete!</source>
<translation>%1</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="478"/>
<location filename="../mainwindow.cpp" line="470"/>
<source>Open</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="482"/>
<location filename="../mainwindow.cpp" line="474"/>
<source>download finished.</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="482"/>
<location filename="../mainwindow.cpp" line="474"/>
<source>Show in file manager?</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="520"/>
<location filename="../mainwindow.cpp" line="512"/>
<source>%1Download canceled!</source>
<translation>%1</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<location filename="../mainwindow.cpp" line="517"/>
<source>%1Load error occurred!</source>
<translation>%1</translation>
</message>
<message>
<location filename="../webengineview.cpp" line="79"/>
<location filename="../webengineview.cpp" line="82"/>
<source>View</source>
<translation></translation>
</message>
</context>
<context>
<name>TitleBarMenu</name>
<message>
<location filename="../mainwindow.cpp" line="53"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="54"/>
<source>Exit</source>
<translation>退</translation>
</message>
</context>
</TS>

View File

@ -34,7 +34,7 @@ void WebEngineView::handleChromiumFlags()
DGuiApplicationHelper::ColorType themeType = DGuiApplicationHelper::instance()->themeType();
QString env = qgetenv("QTWEBENGINE_CHROMIUM_FLAGS");
QStringList flags = env.split(" ", QString::SkipEmptyParts);
QStringList flags = env.split(" ", Qt::SkipEmptyParts);
/**
* --blink-settings=preferredColorScheme=0 prefers-color-scheme=dark (>= 5.14)