From aab751dbe5cdebd9c077bd48690156bc375851dd Mon Sep 17 00:00:00 2001 From: fuleyi Date: Wed, 11 Sep 2024 10:14:10 +0800 Subject: [PATCH] fix: modify accessdialog to dtk style modify accessdialog to dtk style --- CMakeLists.txt | 2 + debian/control | 1 + misc/CMakeLists.txt | 4 ++ misc/translations/CMakeLists.txt | 6 ++ misc/translations/lupdate.sh | 15 +++++ misc/translations/translate_generation.sh | 18 +++++ .../translations/xdg-desktop-portal-dde_en.ts | 30 +++++++++ .../xdg-desktop-portal-dde_zh_CN.ts | 30 +++++++++ src/CMakeLists.txt | 6 ++ src/access.cpp | 33 +-------- src/accessdialog.cpp | 67 +++++++++++++++++++ src/accessdialog.h | 33 +++++++++ src/xdg-desktop-portal-dde.cpp | 9 +++ 13 files changed, 224 insertions(+), 30 deletions(-) create mode 100644 misc/CMakeLists.txt create mode 100644 misc/translations/CMakeLists.txt create mode 100755 misc/translations/lupdate.sh create mode 100755 misc/translations/translate_generation.sh create mode 100644 misc/translations/translations/xdg-desktop-portal-dde_en.ts create mode 100644 misc/translations/translations/xdg-desktop-portal-dde_zh_CN.ts create mode 100644 src/accessdialog.cpp create mode 100644 src/accessdialog.h diff --git a/CMakeLists.txt b/CMakeLists.txt index ed3acbd..b3fdff7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,3 +31,5 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/xdg-desktop-portal-dde.service DESTINA install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.freedesktop.impl.portal.desktop.dde.service DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/dbus-1/services") install(FILES ${CMAKE_CURRENT_LIST_DIR}/misc/dde.portal DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/xdg-desktop-portal/portals/") install(FILES ${CMAKE_CURRENT_LIST_DIR}/misc/dde-portals.conf DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/xdg-desktop-portal/") + +add_subdirectory(misc) \ No newline at end of file diff --git a/debian/control b/debian/control index 544c9bc..db3599d 100644 --- a/debian/control +++ b/debian/control @@ -16,6 +16,7 @@ Build-Depends: libpipewire-0.3-dev, libwayland-dev, wlr-protocols, + libdtk6widget-dev, Standards-Version: 4.5.0 Package: xdg-desktop-portal-dde diff --git a/misc/CMakeLists.txt b/misc/CMakeLists.txt new file mode 100644 index 0000000..7c69cc9 --- /dev/null +++ b/misc/CMakeLists.txt @@ -0,0 +1,4 @@ +# SPDX-FileCopyrightText: None +# +# SPDX-License-Identifier: CC0-1.0 +add_subdirectory(translations) diff --git a/misc/translations/CMakeLists.txt b/misc/translations/CMakeLists.txt new file mode 100644 index 0000000..7af381f --- /dev/null +++ b/misc/translations/CMakeLists.txt @@ -0,0 +1,6 @@ +# generate qm +execute_process(COMMAND bash "misc/translations/translate_generation.sh" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) + +file(GLOB QM_FILES "translations/*.qm") +install(FILES ${QM_FILES} DESTINATION share/${PROJECT_NAME}/translations) diff --git a/misc/translations/lupdate.sh b/misc/translations/lupdate.sh new file mode 100755 index 0000000..a8439d5 --- /dev/null +++ b/misc/translations/lupdate.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +CURRENT_DIR=$(pwd) +PROJECT_DIR=$(dirname $(realpath $(dirname $(realpath $(dirname $(realpath $0)))))) +cd ${PROJECT_DIR} +echo 当前目录:${CURRENT_DIR} +echo 工程目录:${PROJECT_DIR} +# 执行目录会切换到工程目录 + +# xdg-desktop-portal-dde +lupdate ${PROJECT_DIR}/src -no-obsolete -no-ui-lines -locations none -ts ${PROJECT_DIR}/misc/translations/translations/xdg-desktop-portal-dde_en.ts + +# 推送翻译 +tx push -s --branch m23 +cd ${CURRENT_DIR} diff --git a/misc/translations/translate_generation.sh b/misc/translations/translate_generation.sh new file mode 100755 index 0000000..3b8a440 --- /dev/null +++ b/misc/translations/translate_generation.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# this file is used to auto-generate .qm file from .ts file. +# author: shibowen at linuxdeepin.com +CURRENT_DIR=$(pwd) +PROJECT_DIR=$CURRENT_DIR/misc/translations +cd ${PROJECT_DIR} +echo 当前目录:${CURRENT_DIR} +echo 工程目录:${PROJECT_DIR} + +ts_list=(`ls translations/*.ts`) + +for ts in "${ts_list[@]}" +do + printf "\nprocess ${ts}\n" + lrelease "${ts}" +done + +cd ${CURRENT_DIR} diff --git a/misc/translations/translations/xdg-desktop-portal-dde_en.ts b/misc/translations/translations/xdg-desktop-portal-dde_en.ts new file mode 100644 index 0000000..e52105f --- /dev/null +++ b/misc/translations/translations/xdg-desktop-portal-dde_en.ts @@ -0,0 +1,30 @@ + + + + + AppChooserDialog + + + Cancel + Cancel + + + + Confirm + Confirm + + + + accessDialog + + + Deny Access + Deny Access + + + + Grant Access + Grant Access + + + diff --git a/misc/translations/translations/xdg-desktop-portal-dde_zh_CN.ts b/misc/translations/translations/xdg-desktop-portal-dde_zh_CN.ts new file mode 100644 index 0000000..14c72d2 --- /dev/null +++ b/misc/translations/translations/xdg-desktop-portal-dde_zh_CN.ts @@ -0,0 +1,30 @@ + + + + + AppChooserDialog + + + Cancel + 取消 + + + + Confirm + 确认 + + + + accessDialog + + + Deny Access + 拒绝 + + + + Grant Access + 授权 + + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b4b8ec4..c3014f1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -6,6 +6,8 @@ find_package( Widgets WaylandClient) find_package(Qt6WaylandScannerTools REQUIRED) +find_package(Dtk6 REQUIRED COMPONENTS Core Widget) +find_package(X11 REQUIRED) set_source_files_properties( ${CMAKE_SOURCE_DIR}/misc/org.freedesktop.Notifications.xml @@ -67,6 +69,8 @@ set(SRC utils.cpp personalization_manager_client.h personalization_manager_client.cpp + accessdialog.h + accessdialog.cpp ) add_executable(${PROJECT_NAME} @@ -78,12 +82,14 @@ qt6_generate_wayland_protocol_client_sources(${PROJECT_NAME} ) target_link_libraries(${PROJECT_NAME} PUBLIC + ${DtkWidget_LIBRARIES} Qt::Core Qt::Widgets Qt::Gui Qt::DBus Qt::Concurrent Qt::WaylandClient + ${X11_LIBRARIES} xdg-desktop-portal-dde-wayland ) diff --git a/src/access.cpp b/src/access.cpp index 4379ad6..c31f1db 100644 --- a/src/access.cpp +++ b/src/access.cpp @@ -12,6 +12,7 @@ #include #include #include +#include "accessdialog.h" Q_LOGGING_CATEGORY(XdgDestkopDDEAccess, "xdg-dde-access") @@ -26,34 +27,6 @@ uint AccessPortal::AccessDialog( const QString &subtitle, const QString &body, const QVariantMap &options, QVariantMap &results) { qCDebug(XdgDestkopDDEAccess) << "request for access dialog"; - - QMessageBox access_dialog; - - if (options.contains(QStringLiteral("modal"))) { - access_dialog.setModal(options.value(QStringLiteral("modal")).toBool()); - } - - QPushButton *rejectButton = nullptr; - if (options.contains(QStringLiteral("deny_label"))) { - rejectButton = access_dialog.addButton(options.value(QStringLiteral("deny_label")).toString(), QMessageBox::RejectRole); - } - - - QPushButton *allowButton = nullptr; - if (options.contains(QStringLiteral("grant_label"))) { - allowButton = access_dialog.addButton(options.value(QStringLiteral("grant_label")).toString(), QMessageBox::AcceptRole); - } - - access_dialog.setWindowTitle(title); - access_dialog.setText(body); - access_dialog.exec(); - - uint respnse = 2; - if (access_dialog.clickedButton() == (QAbstractButton*)rejectButton) { - respnse = 0; - } else if (access_dialog.clickedButton() == (QAbstractButton*)allowButton) { - respnse = 1; - } - - return respnse; + accessDialog dialog(app_id,parent_window,title,subtitle,body,options); + return dialog.exec(); } diff --git a/src/accessdialog.cpp b/src/accessdialog.cpp new file mode 100644 index 0000000..5675fae --- /dev/null +++ b/src/accessdialog.cpp @@ -0,0 +1,67 @@ +// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: GPL-3.0-or-later + +// +// Created by uos on 24-9-9. +// + +#include "accessdialog.h" +#include +#include +// X11的声明放在下面,防止编译报错 +#include + +accessDialog::accessDialog(const QString &app_id, const QString &parent_window, const QString &title, const QString &subtitle, const QString &body, const QVariantMap &options) : + DDialog(), + m_titleLabel(new QLabel(this)), + m_subtitleLabel(new QLabel(this)), + m_bodyLabel(new QLabel(this)) +{ + setAccessibleName("AccessDialog"); + setIcon(QIcon::fromTheme("dialog-warning")); + setAttribute(Qt::WA_QuitOnClose); + // 设置tittle + m_titleLabel->setObjectName("TitileText"); + m_titleLabel->setAccessibleName("TitileText"); + addContent(m_titleLabel, Qt::AlignTop | Qt::AlignHCenter); + QFont font = m_titleLabel->font(); + font.setBold(true); + font.setPixelSize(16); + m_titleLabel->setFont(font); + m_titleLabel->setText(title); + // 设置subtitle + m_subtitleLabel->setObjectName("SubtitleText"); + m_subtitleLabel->setAccessibleName("SubtitleText"); + addContent(m_subtitleLabel, Qt::AlignTop | Qt::AlignHCenter); + m_subtitleLabel->setText(subtitle+"\n"); + // 设置body + m_bodyLabel->setObjectName("BodyText"); + m_bodyLabel->setAccessibleName("BodyText"); + addContent(m_bodyLabel, Qt::AlignTop | Qt::AlignHCenter); + m_bodyLabel->setText(body); + + if (options.contains(QStringLiteral("modal"))) { + setModal(options.value(QStringLiteral("modal")).toBool()); + } + + if (options.contains(QStringLiteral("deny_label"))) { + addButton(options.value(QStringLiteral("deny_label")).toString(), QMessageBox::RejectRole); + } else { + addButton(tr("Deny Access"), QMessageBox::RejectRole); + } + + + int allowButton; + if (options.contains(QStringLiteral("grant_label"))) { + addButton(options.value(QStringLiteral("grant_label")).toString(), QMessageBox::AcceptRole); + } else { + addButton(tr("Grant Access"), QMessageBox::AcceptRole); + } + + setWindowFlag(Qt::WindowStaysOnTopHint); +} + +accessDialog::~accessDialog(){ + +} \ No newline at end of file diff --git a/src/accessdialog.h b/src/accessdialog.h new file mode 100644 index 0000000..bd5c204 --- /dev/null +++ b/src/accessdialog.h @@ -0,0 +1,33 @@ +// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: GPL-3.0-or-later + +// +// Created by uos on 24-9-9. +// + +#ifndef XDG_DESKTOP_PORTAL_DDE_ACCESSDIALOG_H +#define XDG_DESKTOP_PORTAL_DDE_ACCESSDIALOG_H + +#include +#include +#include +#include +#include + +DWIDGET_USE_NAMESPACE +class LargeLabel; + +class accessDialog : public DDialog +{ + Q_OBJECT +public: + explicit accessDialog(const QString &app_id,const QString &parent_window,const QString &title,const QString &subtitle,const QString &body, const QVariantMap &options); + ~accessDialog(); +private: + QLabel *m_titleLabel; + QLabel *m_subtitleLabel; + QLabel *m_bodyLabel; +}; + +#endif // XDG_DESKTOP_PORTAL_DDE_ACCESSDIALOG_H diff --git a/src/xdg-desktop-portal-dde.cpp b/src/xdg-desktop-portal-dde.cpp index 96bc0f5..7e204cb 100644 --- a/src/xdg-desktop-portal-dde.cpp +++ b/src/xdg-desktop-portal-dde.cpp @@ -9,6 +9,8 @@ #include #include #include +#include +#include Q_LOGGING_CATEGORY(XdgDesktopDDE, "xdg-dde") @@ -33,6 +35,13 @@ int main(int argc, char *argv[]) QApplication a(argc, argv); a.setQuitOnLastWindowClosed(false); + QTranslator translator; + QString languagePath = QStandardPaths::locate(QStandardPaths::GenericDataLocation, + QString("xdg-desktop-portal-dde/translations"), + QStandardPaths::LocateDirectory); + translator.load(languagePath+"/xdg-desktop-portal-dde_" + QLocale::system().name()); + a.installTranslator(&translator); + QDBusConnection sessionBus = QDBusConnection::sessionBus(); if (sessionBus.registerService(QStringLiteral("org.freedesktop.impl.portal.desktop.dde"))) { if (onWayland()) {