diff --git a/0000-fix-pkgconfig-Fix-the-issue-of-incorrect-content-in-.patch b/0000-fix-pkgconfig-Fix-the-issue-of-incorrect-content-in-.patch new file mode 100644 index 0000000..339257f --- /dev/null +++ b/0000-fix-pkgconfig-Fix-the-issue-of-incorrect-content-in-.patch @@ -0,0 +1,32 @@ +From 558754678f0a34d1e624dcc9c17b583bc05d4d80 Mon Sep 17 00:00:00 2001 +From: liuxinhao +Date: Tue, 12 Dec 2023 20:26:29 +0800 +Subject: [PATCH] fix(pkgconfig): Fix the issue of incorrect content in the PC + file provided by pkgconfig +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +- 修复提供的pkgconfig配置内容缺失的问题 +--- + data/kiran-control-panel.pc.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/data/kiran-control-panel.pc.in b/data/kiran-control-panel.pc.in +index de3ae6b..1e50a0d 100644 +--- a/data/kiran-control-panel.pc.in ++++ b/data/kiran-control-panel.pc.in +@@ -1,7 +1,7 @@ +-includedir=@KCP_INSTALL_INCLUDE@ ++includedir=@KCP_INCLUDEDIR@ + +-category_desktop_location=@CATEGORY_DESKTOP_INSTALL_DIR@ +-category_icon_location=@CATEGORY_ICON_INSTALL_DIR@ ++category_desktop_location=@CATEGORY_DESKTOP_DIR@ ++category_icon_location=@CATEGORY_ICON_DIR@ + + plugin_location=@PLUGIN_LIBS_DIR@ + plugin_desktop_location=@PLUGIN_DESKTOP_DIR@ +-- +2.27.0 + diff --git a/0001-fix-appearance-remove-the-Kiran-and-Adwaita-icon-the.patch b/0001-fix-appearance-remove-the-Kiran-and-Adwaita-icon-the.patch new file mode 100644 index 0000000..9cdc85d --- /dev/null +++ b/0001-fix-appearance-remove-the-Kiran-and-Adwaita-icon-the.patch @@ -0,0 +1,9973 @@ +From a6ac8962724e45553dacdf74fa80a11e04d9b635 Mon Sep 17 00:00:00 2001 +From: yuanxing +Date: Wed, 13 Dec 2023 14:04:46 +0800 +Subject: [PATCH] fix(appearance):remove the Kiran and Adwaita icon theme in ui + and translate the icon name for show +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +- 在界面中不显示Kiran和Adwaita图标主题,将图标名称翻译为中文显示在界面 +--- + .../pages/theme/icon/icon-theme-page.cpp | 6 +- + .../pages/theme/icon/icon-theme-page.h | 7 +- + plugins/appearance/pages/theme/theme-page.cpp | 20 +- + translations/kiran-control-panel.zh_CN.ts | 7099 ++++++++++------- + 4 files changed, 4079 insertions(+), 3053 deletions(-) + +diff --git a/plugins/appearance/pages/theme/icon/icon-theme-page.cpp b/plugins/appearance/pages/theme/icon/icon-theme-page.cpp +index 7aaa142..845d5bf 100644 +--- a/plugins/appearance/pages/theme/icon/icon-theme-page.cpp ++++ b/plugins/appearance/pages/theme/icon/icon-theme-page.cpp +@@ -96,7 +96,6 @@ void IconThemePage::loadIconThemes() + for (auto theme : themeInfos) + { + // 过滤非白名单主题 +- static const QStringList iconThemeWhiteList = {"Kiran", "Adwaita", "Spring","Summer"}; + if (!iconThemeWhiteList.contains(theme.name)) + { + continue; +@@ -174,11 +173,10 @@ ThemePreviewWidget* IconThemePage::createPreviewWidget(const QString& themeName, + previewWidget->setSpacingAndMargin(24, QMargins(24, 0, 24, 0)); + previewWidget->setSelectedIndicatorEnable(true); + previewWidget->setSelected(selected); +- previewWidget->setThemeInfo(themeName, themeName); ++ previewWidget->setThemeInfo(iconThemeWhiteList.value(themeName, themeName), themeName); + previewWidget->setPreviewPixmapSize(QSize(40, 40)); + previewWidget->appendPreviewPixmap(pixmaps); +- connect(previewWidget, &ThemePreviewWidget::pressed, this, [this]() +- { emit requestReturn(); }); ++ connect(previewWidget, &ThemePreviewWidget::pressed, this, [this]() { emit requestReturn(); }); + + return previewWidget; + } +diff --git a/plugins/appearance/pages/theme/icon/icon-theme-page.h b/plugins/appearance/pages/theme/icon/icon-theme-page.h +index 853ef13..dbc52e1 100644 +--- a/plugins/appearance/pages/theme/icon/icon-theme-page.h ++++ b/plugins/appearance/pages/theme/icon/icon-theme-page.h +@@ -16,8 +16,13 @@ + #define ICONTHEMES_H + + #include +-#include + #include ++#include ++ ++// 图标主题及对应翻译 ++const QMap iconThemeWhiteList = { ++ {"Spring", QObject::tr("Spring")}, ++ {"Summer", QObject::tr("Summer")}}; + + namespace Ui + { +diff --git a/plugins/appearance/pages/theme/theme-page.cpp b/plugins/appearance/pages/theme/theme-page.cpp +index a20c4a5..7c303b7 100644 +--- a/plugins/appearance/pages/theme/theme-page.cpp ++++ b/plugins/appearance/pages/theme/theme-page.cpp +@@ -89,21 +89,19 @@ bool ThemePage::initIconTheme() + return false; + } + +- m_chooseIconWidget->setName(m_currIconTheme); ++ m_chooseIconWidget->setName(iconThemeWhiteList.value(m_currIconTheme, m_currIconTheme)); + + m_iconThemePage = new IconThemePage(ui->stackedWidget); + m_iconThemePage->installEventFilter(this); + ui->stackedWidget->addWidget(m_iconThemePage); + + connect(m_chooseIconWidget, &SettingBriefWidget::clicked, this, +- [this] +- { ++ [this] { + ui->stackedWidget->setCurrentWidget(m_iconThemePage); + }); + + connect(m_iconThemePage, &IconThemePage::requestReturn, this, +- [&, this]() +- { ++ [&, this]() { + ui->stackedWidget->setCurrentIndex(0); + }); + +@@ -128,14 +126,12 @@ bool ThemePage::initCursorTheme() + ui->stackedWidget->addWidget(m_cursorThemePage); + + connect(m_chooseCursorWidget, &SettingBriefWidget::clicked, +- [this] +- { ++ [this] { + ui->stackedWidget->setCurrentWidget(m_cursorThemePage); + }); + + connect(m_cursorThemePage, &CursorThemePage::requestReturn, +- [this]() +- { ++ [this]() { + ui->stackedWidget->setCurrentIndex(0); + }); + +@@ -154,8 +150,7 @@ void ThemePage::createThemeWidget() + const QList uiThemes = { + {tr("Light Theme"), LIGHT_THEME, ":/kcp-appearance/images/theme-light.png"}, + {tr("Auto"), THEME_AUTO_NAME, ":/kcp-appearance/images/theme-auto.png"}, +- {tr("Dark Theme"), DARK_THEME, ":/kcp-appearance/images/theme-dark.png"} +- }; ++ {tr("Dark Theme"), DARK_THEME, ":/kcp-appearance/images/theme-dark.png"}}; + + for (int i = 0; i < uiThemes.count(); i++) + { +@@ -212,7 +207,7 @@ void ThemePage::handleThemeChange(int type) + { + QString iconName; + AppearanceGlobalInfo::instance()->getTheme(APPEARANCE_THEME_TYPE_ICON, iconName); +- m_chooseIconWidget->setName(iconName); ++ m_chooseIconWidget->setName(iconThemeWhiteList.value(iconName, iconName)); + m_iconThemePage->updateCurrentTheme(iconName); + break; + } +@@ -258,5 +253,4 @@ void ThemePage::onCurrentUiThemeChanged() + KLOG_INFO(qLcAppearance) << "updated ui theme" << currentID; + } + } +- + } +diff --git a/translations/kiran-control-panel.zh_CN.ts b/translations/kiran-control-panel.zh_CN.ts +index 1ef3d82..6fb278f 100644 +--- a/translations/kiran-control-panel.zh_CN.ts ++++ b/translations/kiran-control-panel.zh_CN.ts +@@ -2,5768 +2,6797 @@ + + + +- CPanelNetworkWidget ++ AccountItemWidget + +- CPanelNetworkWidget +- ++ Create new user ++ 创建新用户 + + +- VPN +- VPN ++ disable ++ 禁用 + + +- Network Details +- 网络详情 ++ enable ++ 启用 + ++ ++ ++ AccountSubItem + +- Wired Network +- 有线网络 ++ ++ account ++ 帐户 + + +- Wireless Network +- 无线网络 ++ ++ New User ++ 创建新用户 + ++ ++ ++ AccountWidget + +- Connected +- 已连接 ++ ++ ++ disable ++ 禁用 + + +- Unavailable +- 已禁用 ++ ++ ++ enable ++ 启用 + + +- Disconnected +- 已断开 ++ ++ Create new user ++ 创建新用户 + ++ ++ ++ ActGuideWidget + +- Wired Network %1 +- 有线网络 %1 ++ Please choose activation mode: ++ 请选择激活方式: + + +- Wireless Network %1 +- 无线网络 %1 ++ Next ++ 下一步 + +- +- +- ConnectionDetailsWidget + +- ConnectionDetailsWidget +- ++ Current machine code: ++ 当前系统机器码: + + +- Security type +- 安全类型 ++ Please input activation code: ++ 请输入激活码: + + +- TextLabel +- ++ Back ++ 上一步 + + +- Frequency band +- 频段 ++ Please insert the UsbKey device first! ++ 请先插入UsbKey设备! + + +- Channel +- 网络通道 ++ Activate online ++ 在线激活 + + +- Interface +- 接口 ++ Activate with the input activation code ++ 输入激活码激活 + + +- MAC +- ++ Activate with insert UsbKey ++ 插入UsbKey设备激活 + + +- IPv4 +- ++ Activate ++ 激活 + + +- Gateway +- 网关 ++ Please enter the activate server address: ++ 请输入激活服务器地址: + + +- DNS +- ++ Activating...... ++ 正在激活...... + + +- Subnet mask +- 子网掩码 ++ System activate successful! ++ 系统激活成功! + + +- IPv6 +- ++ server activation and remaining points: ++ 服务器版激活点数和剩余点数: + + +- Prefix +- 前缀 ++ development activation and remaining points: ++ 开发版激活点数和剩余点数: + + +- Rate +- 速率 ++ industrial activation and remaining points: ++ 工控版激活点数和剩余点数: + + +- Preferred DNS +- 首选DNS ++ desktop activation and remaining points: ++ 桌面版激活点数和剩余点数: + +- +- +- ConnectionItemWidget + +- +- disconnect +- 断开 ++ activation points: ++ 激活点数: + + +- +- ignore +- 忽略 ++ remaining points: ++ 剩余点数: + + +- +- remove +- 移除 ++ Close ++ 关闭 + + +- +- The current device:%1 is not available +- 当前设备:%1 不可用 ++ System activate failed! ++ 系统激活失败! + + +- +- The carrier is pulled out +- 网线被拔出 ++ unknow ++ 未知 + + +- +- Are you sure you want to delete the connection %1 +- 您是否确定要删除连接 "%1" ++ Activation Mode ++ 选择激活方式 + + +- +- Warning +- 警告 ++ Start Activation ++ 开始激活 + + +- +- +- Tips +- 提示 ++ Activation Complete ++ 激活完成 + + +- +- Password required to connect to %1. +- 连接网络 "%1" 需要密码 ++ Activation Guide ++ 激活向导 + + +- +- Please input a network name +- 请输入网络名称 ++ Server IP address or Domain name ++ 服务器IP地址或域名 + + + +- ConnectionNameWidget ++ AdvanceSettings + +- ConnectionNameWidget +- ++ ++ Advance Settings ++ 高级设置 + + +- TextLabel +- ++ ++ ++ Automatically generated by system ++ 由系统自动生成 + + +- EditConnectionName +- ++ ++ Please enter the correct path ++ 请输入正确的路径 + + +- Auto Connection +- 自动连接 ++ ++ Please enter specify user Id ++ 请输入用户ID + + +- Required +- 必填 ++ ++ Please enter an integer above 1000 ++ 请输入一个大于或等于1000的整数 + + +- Wired Connection %1 +- 有线网络%1 ++ ++ Please enter the correct home directory ++ 请输入正确的用户目录 + + +- VPN L2TP %1 +- ++ ++ Form ++ + + +- VPN PPTP %1 ++ ++ Login shell ++ 登录Shell ++ ++ ++ ++ EditLoginShell + + + +- Connection name can not be empty +- 网络名称不能为空 ++ ++ Specify user id (needs to be greater than 1000) ++ 指定用户ID(需大于或等于1000) + +- +- +- ConnectionShowPage + +- ConnectionShowPage ++ ++ EditSpecifyUserID + + + +- TextLabel +- ++ ++ Specify user home ++ 指定用户目录 + + +- ButtonCreateConnection ++ ++ EditSpecifyUserHome + + +- +- +- DetailsPage + +- DetailsPage ++ ++ ButtonConfirm + + + +- Network Details +- 网络详情 ++ ++ confirm ++ 确认 + + +- Please select a connection +- 请选择连接 ++ ++ ButtonCancel ++ + + +- ComboBoxDetailsSelectConnection +- ++ ++ cancel ++ 取消 ++ ++ ++ Specify user id ++ 指定用户ID + + + +- DeviceAvailableConnectionWidget ++ AppearancePlugin + +- +- Network card: %1 +- 网卡:%1 ++ ++ Theme ++ 主题 + + +- +- Other WiFi networks +- 其它WIFI网络 ++ ++ Wallpaper ++ 壁纸 ++ ++ ++ ++ Font ++ 字体 + + + +- DeviceList ++ ApplicationPlugin + +- +- Wired Network Adapter +- 有线网络配置 ++ ++ DefaultApp ++ 默认程序 + + +- +- Wireless Network Adapter +- 无线网络配置 ++ ++ AutoStart ++ 开机启动 + + + +- DisconnectAndDeleteButton ++ AudioSystemTray + +- DisconnectAndDeleteButton +- +- +- +- ButtonDisconnect +- ++ ++ Volume Setting ++ 声音设置 + + +- Disconnect +- 断开 ++ ++ Mixed Setting ++ 混合设置 + ++ ++ ++ AuthManagerPage + +- ButtonDelete +- ++ Fingerprint Authentication ++ 指纹认证 + + +- Delete +- 删除 ++ Face Authentication ++ 人脸认证 + + +- ButtonIgnore +- ++ Password Authentication ++ 密码认证 + + +- Ignore +- 忽略 ++ save ++ 保存 + + +- Are you sure you want to delete the connection %1 +- 您是否确定要删除连接 "%1" ++ return ++ 返回 + + +- Warning +- 警告 ++ add fingerprint ++ 录入指纹数据 + +- +- +- DnsWidget + +- DnsWidget +- ++ add face ++ 录入人脸数据 + + +- Preferred DNS +- 首选DNS ++ error ++ 错误 + + +- Alternate DNS +- 备选DNS ++ please ensure that at least one authentication option exists ++ 请确保至少一个认证选项打开 + +- +- +- DslManager + +- DslManager +- ++ fingerprint_ ++ 指纹_ + + +- DSL +- ++ face_ ++ 人脸_ + + + +- DslSettingPage +- +- DslSettingPage +- +- +- +- Save +- 保存 +- ++ AuthPlugin + +- Return +- 返回 ++ ++ Fingerprint ++ 指纹 + +- +- +- EthernetWidget + +- EthernetWidget +- ++ ++ FingerVein ++ 指静脉 + + +- MAC Address Of Ethernet Device +- 设备MAC地址 ++ ++ UKey ++ UKey + + +- ComboBoxDeviceMac +- ++ ++ Iris ++ 虹膜 + + +- Ethernet Clone MAC Address +- 克隆MAC地址 ++ ++ Face ++ 人脸 + + +- EditDeviceMac +- ++ ++ Driver Manager ++ 驱动管理 + + +- Custom MTU +- 自定义MTU ++ ++ Prefs ++ 配置 + + +- SpinBoxCustomMTU +- ++ Word size ++ 字号 + + +- No device specified +- 不指定设备 ++ System font ++ 系统字体 + + +- Clone Mac invalid +- 无效的克隆MAC地址 ++ Monospaced font ++ 等宽字体 + + + +- Ipv4Widget ++ AutoStartPage + +- Ipv4Widget +- ++ Boot Setup ++ 开机启动设置 + + +- IPV4 Method +- IPV4方法 ++ Desktop files(*.desktop) ++ 桌面类型(*.desktop) + + +- ComboBoxIpv4Method +- ++ select autostart desktop ++ 选择自启动应用 + + +- IP Address +- IP地址 ++ Select ++ 选择 + + +- EditIpv4Address +- ++ Cancel ++ 取消 + + +- Net Mask +- 子网掩码 ++ Error ++ 错误 + + +- EditIpv4Netmask +- ++ Desktop has existed ++ 该程序已存在 + + +- Gateway +- 网关 ++ Desktop cant permit to join ++ 该程序不允许添加 + + +- EditIpv4Gateway +- ++ Desktop dont support ++ 不支持该程序 + ++ ++ ++ AutostartPage + +- +- DNS +- ++ ++ Boot Setup ++ 开机启动设置 + + +- EditIpv4PreferredDNS +- ++ ++ Desktop files(*.desktop) ++ 桌面类型(*.desktop) + + +- Auto +- 自动 ++ ++ select autostart desktop ++ 选择自启动应用 + + +- Manual +- 手动 ++ ++ Select ++ 选择 + + +- Required +- 必填 ++ ++ Cancel ++ 取消 + + +- +- Please separate multiple DNS entries by semicolon +- 请用分号分隔多个DNS ++ ++ ++ ++ Error ++ 错误 + + +- +- Ipv4 DNS invalid +- 无效的Ipv4 DNS ++ ++ Desktop has existed ++ 该程序已存在 + + +- Ipv4 address can not be empty +- Ipv4地址不能为空 ++ ++ Desktop cant permit to join ++ 该程序不允许添加 + + +- Ipv4 Address invalid +- 无效的Ipv4地址 ++ ++ Desktop dont support ++ 不支持该程序 + ++ ++ ++ BatterySettingsPage + +- NetMask can not be empty +- 子网掩码不能为空 ++ ++ BatterySettingsPage ++ 电池设置 + + +- Netmask invalid +- 无效的子网掩码 ++ ++ After idle for more than the following time, the computer will execute ++ 空闲超过以下时间后,计算机将执行 + + +- Ipv4 Gateway invalid +- 无效的Ipv4网关 ++ ++ ComboIdleTime ++ + + +- Preferred DNS +- 首选DNS ++ ++ ComboIdleAction ++ + + +- Alternate DNS +- 备选DNS ++ ++ When the battery is lit up, it will be executed ++ 电池电量将用尽时 + + +- EditIpv4AlternateDNS +- ++ ++ ComboLowBatteryAction ++ + + +- Ipv4 Preferred DNS invalid +- 无效的Ipv4首选DNS ++ ++ The monitor will turn off when it is idle ++ 显示器空闲以下时间关闭 + + +- Ipv4 Alternate DNS invalid +- 无效的Ipv4备选DNS ++ ++ ComboMonitorTurnOffIdleTime ++ + + +- DNS 1 +- ++ ++ Reduce screen brightness when idle ++ 空闲时减少亮度 + + +- DNS 2 +- ++ ++ Reduce screen brightness when no power ++ 低点亮时减少亮度 + +- +- +- Ipv6Widget + +- Ipv6Widget +- ++ ++ The energy saving mode is enabled when the power is low ++ 低电量时自动开启节能模式 + + +- IPV6 Method +- IPV6方法 ++ ++ ++ Suspend ++ 待机 + + +- ComboBoxIpv6Method +- ++ ++ ++ Shutdown ++ 关机 + + +- IP Address +- IP地址 ++ ++ ++ Hibernate ++ 休眠 + + +- EditIpv6Address +- ++ ++ ++ Do nothing ++ 不执行操作 + ++ ++ ++ BatterySubItem + +- Prefix +- 前缀 ++ Battery Settings ++ 电池设置 + +- +- SpinBoxIpv6Prefix +- ++ ++ ++ BiometricItem ++ ++ add ++ 添加 + ++ ++ ++ CPanelAudioWidget + +- Gateway +- 网关 ++ ++ CPanelAudioWidget ++ + + +- EditIpv6Gateway +- ++ ++ Output ++ 输出 + + +- +- DNS +- ++ ++ Input ++ 输入 + ++ ++ ++ CPanelNetworkWidget + +- EditIpv6PreferredDNS ++ ++ CPanelNetworkWidget + + + +- Auto +- 自动 ++ ++ ++ VPN ++ VPN + + +- Manual +- 手动 ++ ++ ++ Network Details ++ 网络详情 + + +- Ignored +- 忽略 ++ ++ ++ ++ ++ ++ Wired Network ++ 有线网络 + + +- Required +- 必填 ++ ++ ++ ++ ++ ++ ++ Wireless Network ++ 无线网络 + + +- +- Please separate multiple DNS entries by semicolon +- 请用分号分隔多个DNS ++ ++ Connected ++ 已连接 + + +- +- Ipv6 DNS invalid +- 无效的Ipv6 DNS ++ ++ Unavailable ++ 已禁用 + + +- Ipv6 address can not be empty +- Ipv6地址不能为空 ++ ++ Disconnected ++ 已断开 + + +- Ipv6 address invalid +- 无效的Ipv6地址 ++ Wired Network %1 ++ 有线网络 %1 + + +- Ipv6 Gateway invalid +- 无效的Ipv6网关 ++ Wireless Network %1 ++ 无线网络 %1 + ++ ++ ++ ChangeHostNameWidget + +- Preferred DNS +- 首选DNS ++ ++ Form ++ + + +- Alternate DNS +- 备选DNS ++ ++ Host Name: ++ 主机名: + + +- EditIpv6AlternateDNS ++ ++ EditHostName + + + +- Ipv6 Preferred DNS invalid +- 无效的Ipv6首选DNS ++ ++ ButtonSaveHostName ++ + + +- Ipv6 Alternate DNS invalid +- 无效的Ipv6备选DNS ++ ++ Save ++ 保存 + +- +- +- NetworkSubItem + +- Wired Network %1 +- 有线网络 %1 ++ ++ ButtonCancelChangeHostName ++ + + +- Wired Network +- 有线网络 ++ ++ Cancel ++ 取消 + + +- Wireless Network %1 +- 无线网络 %1 ++ Host Name ++ 主机名 + + +- Wireless Network +- 无线网络 ++ ++ Warning ++ 警告 + + +- VPN +- VPN ++ ++ Change host name failed! Please check the Dbus service! ++ 修改主机名失败!请 检查Dbus服务! + ++ ++ ++ CheckpasswdDialog + +- Network Details +- 网络详情 ++ ++ Check password ++ 校验当前用户密码 ++ ++ ++ ++ Check the current password before you enroll the feature ++ 录入特征之前需要校验当前密码 + + + +- NetworkTray ++ ChooseItem + +- Network settings +- 网络设置 ++ ++ Form ++ + ++ ++ ++ ConnectionDetailsWidget + +- Network unavailable +- 网络不可用 ++ ++ ConnectionDetailsWidget ++ + + +- +- +- The network is connected, but you cannot access the Internet +- 网络已连接,但不能访问互联网 ++ ++ Security type ++ 安全类型 + + +- +- +- Network not connected +- 网络已断开 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ TextLabel ++ + + +- Wired network card: %1 available +- 有线网卡: %1 可用 ++ ++ Frequency band ++ 频段 + + +- Wireless network card: %1 available +- 无线网卡: %1 可用 ++ ++ Channel ++ 网络通道 + + +- Wired network card: %1 unavailable +- 有线网卡: %1 不可用 ++ ++ Interface ++ 接口 + + +- Wireless network card: %1 unavailable +- 无线网卡: %1 不可用 ++ ++ MAC ++ + + +- +- Network connected +- 网络已连接 ++ ++ IPv4 ++ + +- +- +- PluginConnectionList + +- Other WiFi networks +- 其它WIFI网络 ++ ++ ++ Gateway ++ 网关 + + +- Tips +- 提示 ++ ++ DNS ++ + + +- Please input a network name +- 请输入网络名称 ++ ++ Subnet mask ++ 子网掩码 + +- +- +- StatusNotification + +- Connection Failed +- 连接失败 ++ ++ IPv6 ++ + + +- the network not found +- 未找到网络 ++ ++ Prefix ++ 前缀 + + +- The hidden network "%1" to be connected has been detected and exists in the network list +- 要连接的隐藏网络“%1”已经被探测到,并存在于网络列表中 ++ ++ Rate ++ 速率 + + +- Failed to connect to the network "%1" +- 无法连接到网络 "%1" ++ Preferred DNS ++ 首选DNS ++ ++ ++ ++ ConnectionItemWidget ++ ++ ++ disconnect ++ 断开 + + +- Connection activated +- 网络已连接 ++ ++ ignore ++ 忽略 + + +- You are now connected to the network "%1" +- 您已连接到网络 "%1" ++ ++ remove ++ 移除 + + +- Connection deactivated +- 连接断开 ++ ++ The current device:%1 is not available ++ 当前设备:%1 不可用 + + +- You have now disconnected the network "%1" +- 您已断开网络连接 "%1" ++ ++ The carrier is pulled out ++ 网线被拔出 + + +- Connection deleted +- 连接已删除 ++ ++ Are you sure you want to delete the connection %1 ++ 您是否确定要删除连接 "%1" + + +- The connection has been deleted "%1" +- 已删除连接 "%1" ++ ++ Warning ++ 警告 + +- +- +- TextInputDialog + ++ ++ + Tips + 提示 + + +- Yes +- 确认 ++ ++ Password required to connect to %1. ++ 连接网络 "%1" 需要密码 + + +- Cancel +- 取消 ++ ++ Please input a network name ++ 请输入网络名称 + + + +- TrayConnectionList ++ ConnectionNameWidget + +- Other WiFi networks +- 其它WIFI网络 ++ ++ ConnectionNameWidget ++ + +- +- +- TrayItemWidget + +- TrayItemWidget ++ ++ TextLabel + + + +- Icon ++ ++ EditConnectionName + + + +- Name +- 名称 ++ ++ Auto Connection ++ 自动连接 + + +- Status +- 状态 ++ ++ Required ++ 必填 + + +- Ignore +- 忽略 +- +- +- Disconnect +- 断开 ++ ++ Wired Connection %1 ++ 有线网络%1 + + +- Cancel +- 取消 ++ ++ VPN L2TP %1 ++ + + +- Connect +- 连接 ++ ++ VPN PPTP %1 ++ + + +- Connected +- 已连接 ++ ++ Connection name can not be empty ++ 网络名称不能为空 + ++ ++ ++ ConnectionShowPage + +- Unconnected +- 未连接 ++ ++ ConnectionShowPage ++ + + +- Please input password +- 请输入密码 ++ ++ TextLabel ++ + + +- Please input a network name +- 请输入网络名称 ++ ++ ButtonCreateConnection ++ + + + +- TrayPage ++ CreateGroupPage + +- TrayPage ++ ++ CreateGroupPage + + + +- TextLabel ++ ++ Create Group + + + +- Select wired network card +- 请选择有线网卡 +- +- +- Select wireless network card +- 请选择无线网卡 ++ ++ Add Group Members ++ + +- +- +- VpnIPsec + +- VpnIPsec ++ ++ Confirm + + + +- Enable IPsec +- 启用IPsec ++ ++ Please enter your group name ++ + + +- Group Name +- 组名 ++ ++ group name cannot be a pure number ++ + + +- EditGroupName ++ ++ group name already exists + + + +- Group ID +- 组ID ++ ++ ++ Error ++ 错误 + ++ ++ ++ CreateUserPage + +- EditGroupId +- ++ Account type ++ 帐户类型 + + +- Pre-Shared Key +- 预共享密钥 ++ ++ standard ++ 普通用户 + + +- EditPreSharedKey +- ++ ++ administrator ++ 管理员 + + +- Show Password +- 显示密码 ++ ++ Please enter user name first ++ 请输入用户名 + + +- Internet Key Exchange Protocol +- 密钥交换协议 ++ ++ Please enter your user name ++ 请输入用户名 + + +- EditIpsecIKE +- ++ ++ user name cannot be a pure number ++ 用户名不能全为数字 + + +- Encapsulating Security Payload +- 安全封装协议 ++ ++ user name already exists ++ 用户名已存在 + + +- EditIpsecESP +- ++ ++ Please enter your password ++ 请输出密码 + +- +- +- VpnIpvx + +- VpnIpvx +- ++ ++ Please enter the password again ++ 请再次输入密码 + + +- IPV4 Method +- IPV4方法 ++ ++ The password you enter must be the same as the former one ++ 两次密码不相同,请核对后,再次输入 + + +- ComboBoxVPNIpv4Method +- ++ ++ ++ Error ++ 错误 + + +- Only applied in corresponding resources +- 仅用于相对应的网络上的资源 ++ ++ Password encryption failed ++ 密码加密失败 + + +- Preferred DNS +- 首选DNS ++ ++ Form ++ + + +- EditVPNIpv4PreferredDNS ++ ++ UserAvatarWidget + + + +- Alternate DNS +- 备选DNS ++ ++ User name ++ 用户名 + + +- EditIpv4AlternateDNS ++ ++ EditUserName + + + +- Auto +- 自动 ++ ++ User type ++ 用户类型 + +- +- +- VpnL2tpSetting + +- VpnL2tpSetting ++ ++ ComboUserType + + + +- VPN name +- VPN名称 ++ ++ Password ++ 用户密码 + +- +- +- VpnManager + +- VpnManager ++ ++ EditPasswd + + + +- VPN type +- VPN类型 ++ ++ Confirm password ++ 确认密码 + + +- Save +- 保存 ++ ++ EditPasswdConfirm ++ + + +- Return +- 返回 ++ ++ ButtonAdvanceSetting ++ + + +- VPN +- VPN ++ ++ Advance setting ++ 高级设置 + + +- L2TP ++ ++ ButtonConfirm + + + +- Tips +- 提示 +- +- +- Password required to connect to %1. +- 连接网络 "%1" 需要密码 ++ ++ Confirm ++ 创建 + +- +- +- VpnPpp + +- VpnPpp ++ ++ ButtonCancel + + + +- Use MPPE +- 使用MPPE ++ ++ Cancel ++ 取消 + + +- Security +- 安全 ++ Please enter account name first ++ 请先输入帐户名 + + +- ComboBoxMppeSecurity +- ++ Please enter your account name ++ 请输入帐户名 + + +- Stateful MPPE +- 使用带状态的MPPE ++ Account cannot be a pure number ++ 帐户名不能全为数字 + + +- All available (default) +- 都可用(默认) ++ Account already exists ++ 帐户名已存在 + + +- 40-bit (less secure) +- 40位(较安全) ++ Please enter your userName name ++ 请输入用户名 + ++ ++ ++ CursorThemePage + +- 128-bit (most secure) +- 128位(最安全) ++ ++ Cursor Themes Settings ++ 光标主题设置 + ++ ++ ++ CursorThemes + +- Refuse EAP Authentication +- 拒绝EAP认证 ++ Cursor Themes Settings ++ 光标主题设置 + + +- Refuse PAP Authentication +- 拒绝PAP认证 ++ Faild ++ 失败 + + +- Refuse CHAP Authentication +- 拒绝CHAP认证 ++ Set cursor themes failed! ++ 设置光标主题失败! + ++ ++ ++ DateTimeSettings + +- Refuse MSCHAP Authentication +- 拒绝MSCHAP认证 ++ ++ DateTimeSettings ++ 日期时间设置 + + +- Refuse MSCHAPv2 Authentication +- 拒绝MSCHAPv2认证 ++ ++ Select Time ++ 选择时间 + + +- No BSD Data Compression +- 无BSD数据压缩 ++ ++ Select Date ++ 选择日期 + + +- No Deflate Data Compression +- 无Deflate数据压缩 ++ ++ ButtonSave ++ + + +- No TCP Header Compression +- 无TCP头压缩 ++ ++ save ++ 保存 + + +- No Protocol Field Compression +- 无协议字段压缩 ++ ++ ButtonReset ++ + + +- No Address/Control Compression +- 无地址/控制压缩 +- +- +- Send PPP Echo Packets +- 发送PPP回响包 ++ ++ reset ++ 重置 + + + +- VpnPptpSetting +- +- VpnPptpSetting +- +- ++ DaySpinBox + +- VPN name +- VPN名称 ++ ++ %1 ++ %1日 + + + +- VpnWidget ++ DefaultApp + +- VpnWidget +- ++ ++ DefaultApp ++ 默认程序 + + +- Gateway +- 网关 ++ ++ Web Browser ++ web浏览器 + + +- EditVPNGateway +- ++ ++ Email ++ 电子邮件 + + +- User Name +- 用户名 ++ ++ Text ++ 文档查看器 + + +- EditVPNUserName +- ++ ++ Music ++ 音乐播放器 + + +- Password Options +- 密码选项 ++ ++ Video ++ 视频播放器 + + +- ComboBoxVPNPasswordOptions +- ++ ++ Image ++ 图片查看器 + ++ ++ ++ DefaultappPlugin + +- Password +- 密码 ++ Email ++ 电子邮件 + + +- EditVPNPassword +- ++ Text ++ 文档查看器 + + +- ButtonPasswordVisual +- ++ Music ++ 音乐播放器 + + +- Show Password +- 显示密码 ++ Video ++ 视频播放器 + + +- NT Domain +- NT域 ++ Image ++ 图片查看器 + + +- EditNTDomain +- ++ DefaultApp ++ 默认程序 + ++ ++ ++ DetailsPage + +- Required +- 必填 ++ ++ DetailsPage ++ + + +- Saved +- 已保存的 ++ ++ Network Details ++ 网络详情 + + +- Ask +- 总是询问 ++ ++ Please select a connection ++ 请选择连接 + + +- Not required +- 不要求 ++ ++ ComboBoxDetailsSelectConnection ++ + ++ ++ ++ DeviceAvailableConnectionWidget + +- Gateway can not be empty +- 网关不能为空 ++ ++ Network card: %1 ++ 网卡:%1 + + +- Gateway invalid +- 无效的网关 ++ ++ Other WiFi networks ++ 其它WIFI网络 + ++ ++ ++ DeviceList + +- user name can not be empty +- 用户名不能为空 ++ ++ Wired Network Adapter ++ 有线网络配置 + + +- password can not be empty +- 密码不能为空 ++ ++ Wireless Network Adapter ++ 无线网络配置 + + + +- WiredManager ++ DevicePanel + +- WiredManager ++ ++ Form + + + +- ButtonSave ++ ++ Rotate left 90 degrees ++ 左旋转90度 ++ ++ ++ ++ ButtonLeft + + + +- Save +- 保存 ++ ++ Rotate right 90 degrees ++ 右旋转90度 + + +- ButtonReturn ++ ++ ButtonRight + + + +- Return +- 返回 ++ ++ Turn left and right ++ 左右翻转 + + +- Wired Network Adapter +- 有线网络配置 ++ ++ ButtonHorizontal ++ + + +- The carrier is pulled out +- 网线被拔出 ++ ++ upside down ++ 上下翻转 + + +- The current device is not available +- 当前设备不可用 ++ ++ ButtonVertical ++ + +- +- +- WiredSettingPage + +- WiredSettingPage +- ++ ++ Identification display ++ 标识显示器 + + +- Network name +- 网络名称 ++ ++ ButtonIdentifying ++ + + + +- WirelessManager ++ DisconnectAndDeleteButton + +- WirelessManager ++ ++ DisconnectAndDeleteButton + + + +- Save +- 保存 ++ ++ ButtonDisconnect ++ + + +- Return +- 返回 ++ ++ Disconnect ++ 断开 + + +- Wireless Network Adapter +- 无线网卡 ++ ++ ButtonDelete ++ + + +- The current device is not available +- 当前设备不可用 ++ ++ Delete ++ 删除 + + +- Tips +- 提示 ++ ++ ButtonIgnore ++ + + +- Password required to connect to %1. +- 连接网络 "%1" 需要密码 ++ ++ Ignore ++ 忽略 + +- +- +- WirelessSecurityWidget + +- WirelessSecurityWidget +- ++ ++ Are you sure you want to delete the connection %1 ++ 您是否确定要删除连接 "%1" + + +- Security +- 安全 ++ ++ Warning ++ 警告 + ++ ++ ++ DisplayFormatSettings + +- ComboBoxWirelessSecurityOption +- ++ ++ DisplayFormatSettings ++ 日期时间格式设置 + + +- Password Options +- 密码选项 ++ ++ Long date display format ++ 长日期显示格式 + + +- ComboBoxWirelessPasswordOption ++ ++ ComboLongDateDisplayFormat + + + +- Password +- 密码 ++ ++ Short date display format ++ 短日期显示格式 + + +- EditWirelessPassword ++ ++ ComboShortDateDisplayFormat + + + +- ButtonWirelessPasswordVisual +- ++ ++ Time format ++ 时间格式 + + +- PushButton ++ ++ ComboTimeFormat + + + +- None +- ++ ++ Show time witch seconds ++ 时间显示秒 + + +- WPA/WPA2 Personal +- WPA/WPA2个人版 ++ ++ 24-hours ++ 二十四小时制 + + +- Save password for all users +- 仅为该用户存储密码 ++ ++ 12-hours ++ 十二小时制 + ++ ++ ++ DisplayPage + +- Save password for this user +- 存储所有用户密码 ++ ++ DisplayPage ++ + + +- Ask me always +- 总是询问 ++ ++ ButtonCopyDisplay ++ + + +- Required +- 必填 ++ ++ Copy display ++ 复制显示 + +- +- +- WirelessSettingPage + +- WirelessSettingPage ++ ++ ButtonExtendedDisplay + + + +- Wireless name +- 无线网络名称 ++ ++ Extended display ++ 扩展显示 + +- +- +- WirelessTrayWidget + +- the network "%1" not found +- 未找到网络 "%1" ++ ++ ++ Resolution ratio ++ 分辨率 + +- +- +- WirelessWidget + +- WirelessWidget ++ ++ ComboResolutionRatio + + + +- SSID +- ++ ++ ++ Refresh rate ++ 刷新率 + + +- EditSsid ++ ++ ComboRefreshRate + + + +- MAC Address Of Device +- 设备MAC地址 ++ ++ ++ Zoom rate ++ 缩放率 + + +- ComboBoxWirelessMacAddress ++ ++ ComboZoomRate + + + +- Custom MTU +- 自定义MTU ++ ++ ++ Automatic ++ 自动 + + +- SpinBoxWirelessCustomMTU ++ ++ ++ 100% (recommended) ++ 100% (推荐) ++ ++ ++ ++ ++ 200% + + + +- Required +- 必填 ++ ++ Open ++ 开启 + + +- No device specified +- 不指定设备 ++ ++ Set as main display ++ 设为主显示器 + +- +- +- AudioSystemTray + +- Volume Setting +- 声音设置 ++ ++ SwitchExtraPrimary ++ + + +- Mixed Setting +- 混合设置 ++ ++ ComboExtraResolutionRatio ++ + +- +- +- CPanelAudioWidget + +- CPanelAudioWidget +- ++ ++ ComboExtraRefreshRate ++ + + +- Output +- 输出 ++ ++ ComboExtraZoomRate ++ + + +- Input +- 输入 ++ ++ ButtonExtraApply ++ + +- +- +- InputPage + +- InputPage +- ++ ++ Apply ++ 应用 + + +- +- Input cards +- 输入声卡 ++ ++ ButtonExtraCancel ++ + + +- Input devices +- 输入设备 ++ ++ Close ++ 关闭 + + +- ComboBoxInputDevices +- ++ ++ ++ (recommended) ++ (推荐) + + +- Input volume +- 输入音量 ++ ++ Is the display normal? ++ 显示是否正常? + + +- SliderVolumeSetting +- ++ ++ Save current configuration(K) ++ 保存当前配置(K) + + +- Feedback volume +- 反馈音量 ++ ++ Restore previous configuration(R) ++ 恢复之前的配置(R) + + +- No input device detected +- 未检测到输入设备 ++ ++ The display will resume the previous configuration in %1 seconds ++ 显示将会在 %1 秒后恢复之前的配置 + + + +- OutputPage +- +- OutputPage +- +- ++ DisplaySubitem + +- +- Output cards +- 输出声卡 ++ ++ Display ++ 显示 + ++ ++ ++ DnsWidget + +- Output devices +- 输出设备 ++ ++ DnsWidget ++ + + +- ComboBoxOutputDevices +- ++ ++ Preferred DNS ++ 首选DNS + + +- Output volume +- 输出音量 ++ ++ Alternate DNS ++ 备选DNS + ++ ++ ++ DriverPage + +- SlilderVolumeSetting +- ++ ++ device type ++ 设备类型 + + +- Left/right balance +- 左/右平衡 ++ ++ driver list ++ 驱动列表 + + +- SliderVolumeBalance +- ++ ++ Fingerprint ++ 指纹 + + +- Left +- ++ FingerVein ++ 指静脉 + + +- Right +- ++ ++ Fingervein ++ 指静脉 + + +- No output device detected +- 未检测到输出设备 ++ ++ iris ++ 虹膜 + +- +- +- VolumeIntputSubItem + +- VolumeInput +- 输入 ++ ++ ukey ++ UKey + +- +- +- VolumeOutputSubItem + +- VolumeOutput +- 输出 ++ ++ face ++ 人脸 + + + +- VolumeSettingPage ++ DslManager + +- VolumeSettingPage +- ++ ++ DslManager ++ + + +- Volume +- 音量 ++ ++ DSL ++ + + + +- AccountItemWidget ++ DslSettingPage + +- Create new user +- 创建新用户 ++ ++ DslSettingPage ++ + + +- disable +- 禁用 ++ ++ Save ++ 保存 + + +- enable +- 启用 ++ ++ Return ++ 返回 + + + +- AccountSubItem ++ EthernetWidget + +- account +- 帐户 ++ ++ EthernetWidget ++ + + +- New User +- 创建新用户 ++ ++ MAC Address Of Ethernet Device ++ 设备MAC地址 + +- +- +- AccountWidget + +- disable +- 禁用 ++ ++ ComboBoxDeviceMac ++ + + +- enable +- 启用 ++ ++ Ethernet Clone MAC Address ++ 克隆MAC地址 + + +- Create new user +- 创建新用户 ++ ++ EditDeviceMac ++ + +- +- +- ActGuideWidget + +- Please choose activation mode: +- 请选择激活方式: ++ ++ Custom MTU ++ 自定义MTU + + +- Next +- 下一步 ++ ++ SpinBoxCustomMTU ++ + + +- Current machine code: +- 当前系统机器码: ++ ++ No device specified ++ 不指定设备 + + +- Please input activation code: +- 请输入激活码: ++ ++ Clone Mac invalid ++ 无效的克隆MAC地址 + ++ ++ ++ FaceEnrollDialog + +- Back +- 上一步 ++ save ++ 保存 + + +- Please insert the UsbKey device first! +- 请先插入UsbKey设备! ++ cancel ++ 取消 + + +- Activate online +- 在线激活 ++ initializing face collection environment... ++ 正在初始化人脸采集环境,请稍后 + + +- Activate with the input activation code +- 输入激活码激活 ++ failed to initialize face collection environment! ++ 初始化人脸采集环境失败! + + +- Activate with insert UsbKey +- 插入UsbKey设备激活 +- +- +- Activate +- 激活 +- +- +- Please enter the activate server address: +- 请输入激活服务器地址: +- +- +- Activating...... +- 正在激活...... +- +- +- System activate successful! +- 系统激活成功! ++ Failed to start collection ++ 开始采集失败 + ++ ++ ++ FaceInputDialog + +- server activation and remaining points: +- 服务器版激活点数和剩余点数: ++ save ++ 保存 + + +- development activation and remaining points: +- 开发版激活点数和剩余点数: ++ cancel ++ 取消 + + +- industrial activation and remaining points: +- 工控版激活点数和剩余点数: ++ initializing face collection environment... ++ 正在初始化人脸采集环境,请稍后 + + +- desktop activation and remaining points: +- 桌面版激活点数和剩余点数: ++ failed to initialize face collection environment! ++ 初始化人脸采集环境失败! + + +- activation points: +- 激活点数: ++ Failed to start collection ++ 开始采集失败 + ++ ++ ++ FacePage + +- remaining points: +- 剩余点数: ++ ++ Default face device ++ 默认人脸设备 + + +- Close +- 关闭 ++ ++ face feature list ++ 人脸特征列表 + + +- System activate failed! +- 系统激活失败! ++ ++ face ++ 人脸 + + +- unknow +- 未知 ++ ++ Cancel ++ 取消 + + +- Activation Mode +- 选择激活方式 ++ ++ Start enroll failed,%1 ++ 开始录入失败,%1 + + +- Start Activation +- 开始激活 ++ ++ ++ Error ++ 错误 + + +- Activation Complete +- 激活完成 ++ ++ The biometric features were successfully recorded. The feature name is:%1 ++ 特征已成功录入,特征名为:%1 + + +- Activation Guide +- 激活向导 ++ ++ Tips ++ 提示 + + +- Server IP address or Domain name +- 服务器IP地址或域名 ++ ++ Failed to record biometrics(%1), Please try again ++ 录入特征失败(%1),请重试 + + + +- AdvanceSettings +- +- Advance Settings +- 高级设置 +- +- +- Automatically generated by system +- 由系统自动生成 +- +- +- Please enter the correct path +- 请输入正确的路径 +- ++ FingerPage + +- Please enter specify user Id +- 请输入用户ID ++ ++ Cancel ++ 取消 + + +- Please enter an integer above 1000 +- 请输入一个大于或等于1000的整数 ++ ++ fingerprint ++ 指纹 + + +- Please enter the correct home directory +- 请输入正确的用户目录 ++ ++ fingervein ++ 指静脉 + + +- Form +- ++ default %1 device ++ 默认%1设备 + + +- Login shell +- 登录Shell ++ ++ %1 list ++ %1列表 + + +- EditLoginShell +- ++ ++ Start enroll failed,%1 ++ 开始录入失败,%1 + + +- Specify user id (needs to be greater than 1000) +- 指定用户ID(需大于或等于1000) ++ ++ ++ Error ++ 错误 + + +- EditSpecifyUserID +- ++ ++ The biometric features were successfully recorded. The feature name is:%1 ++ 特征已成功录入,特征名为:%1 + + +- Specify user home +- 指定用户目录 ++ ++ Tips ++ 提示 + + +- EditSpecifyUserHome +- ++ ++ Failed to record biometrics(%1), Please try again ++ 录入特征失败(%1),请重试 + + +- ButtonConfirm +- ++ %1list ++ %1列表 + + +- confirm +- 确认 ++ ++ Default %1 device ++ 默认%1设备 + ++ ++ ++ FingerprintEnrollDialog + +- ButtonCancel +- ++ save ++ 保存 + + + cancel +- 取消 +- +- +- Specify user id +- 指定用户ID +- +- +- +- AppearancePlugin +- +- Theme +- 主题 ++ 取消 + + +- Wallpaper +- 壁纸 ++ Finger Enroll ++ 指纹录入 + + +- Font +- 字体 ++ This fingerprint is bound to the user(%1) ++ 该指纹已绑定用户(%1) + +- +- +- ApplicationPlugin + +- DefaultApp +- 默认程序 ++ Info ++ 提示 + + +- AutoStart +- 开机启动 ++ Error ++ 错误 + + + +- AuthManagerPage +- +- Fingerprint Authentication +- 指纹认证 +- +- +- Face Authentication +- 人脸认证 +- +- +- Password Authentication +- 密码认证 +- ++ FingerprintInputDialog + + save + 保存 + + +- return +- 返回 +- +- +- add fingerprint +- 录入指纹数据 +- +- +- add face +- 录入人脸数据 ++ cancel ++ 取消 + + +- ComboAppFontName +- ++ Finger Enroll ++ 指纹录入 + + +- ComboAppFontSize +- +- error ++ Error + 错误 + ++ ++ ++ FingerprintInputWorker + +- please ensure that at least one authentication option exists +- 请确保至少一个认证选项打开 +- +- +- fingerprint_ +- 指纹_ +- +- +- ComboTitleFontName +- +- face_ +- 人脸_ ++ initializing fingerprint collection environment... ++ 正在初始化指纹采集环境,请稍等 + + + +- AuthPlugin ++ Fonts + +- ComboTitleFontSize ++ ++ Form + +- Fingerprint +- 指纹 + + +- FingerVein +- 指静脉 ++ ++ Word size ++ 字号 + + +- ComboMonospaceFontName +- ++ ++ System font ++ 系统字体 + + +- ComboMonospaceFontSize +- ++ ++ Monospaced font ++ 等宽字体 + + +- Word size +- 字号 ++ Application Font Settings ++ 应用程序字体设置 + + +- System font +- 系统字体 ++ Titlebar Font Settings ++ 窗口标题字体设置 + + +- Monospaced font +- 等宽字体 ++ Monospace Font Settings ++ 等宽字体设置 + + + + GeneralBioPage + ++ + default device + 默认设备 + + ++ + feature list + 特征列表 + + ++ + Are you sure you want to delete the feature called %1, Ensure that the Ukey device is inserted; otherwise the information stored in the Ukey will not be deleted + 您确定要删除特征名为%1的UKey绑定吗?请确保已插入Ukey设备;否则存储在Ukey中的信息将不会被删除 + + ++ + Are you sure you want to delete the feature called %1 + 您确定要删除特征名为%1的特征吗 + + ++ + tips + 提示 + + +- Error +- 错误 + Driver Manager +- 驱动管理 ++ 驱动管理 + + + Prefs +- 配置 ++ 配置 + + + UKey +- UKey ++ UKey + + + Iris +- 虹膜 ++ 虹膜 + + + Face +- 人脸 ++ 人脸 + +- +- +- AutoStartPage + +- Boot Setup +- 开机启动设置 ++ ++ Error ++ 错误 + + +- Desktop files(*.desktop) +- 桌面类型(*.desktop) ++ ++ Failed to enroll feature because the password verification failed! ++ 由于密码校验失败,录入特征失败! + + +- select autostart desktop +- 选择自启动应用 ++ ++ Rename Feature ++ 重命名特征值 + + +- Select +- 选择 ++ ++ Please enter the renamed feature name ++ 请输入特征名 + ++ ++ ++ GeneralPage + +- Cancel +- 取消 ++ ++ Form ++ + + +- Error +- 错误 ++ ++ Capslock Tip ++ 大写锁定提示 + + +- Desktop has existed +- 该程序已存在 ++ ++ Numlock Tip ++ 数字键盘锁定提示 + + +- Desktop cant permit to join +- 该程序不允许添加 ++ ++ Repeat Key ++ 重复键 + + +- Desktop dont support +- 不支持该程序 ++ ++ (Repeat a key while holding it down) ++ (按住某一键时重复该键) + +- +- +- AutostartPage + +- Boot Setup +- 开机启动设置 ++ ++ SwitchRepeatKey ++ + + +- Desktop files(*.desktop) +- 桌面类型(*.desktop) ++ ++ Delay ++ 延时 + + +- select autostart desktop +- 选择自启动应用 ++ ++ SliderRepeatDelay ++ + + +- Select +- 选择 ++ ++ Short ++ + + +- Cancel +- 取消 ++ ++ Long ++ + + +- Error +- 错误 ++ ++ Interval ++ 速度 + + +- Desktop has existed +- 该程序已存在 ++ ++ SliderRepeatInterval ++ + + +- Desktop cant permit to join +- 该程序不允许添加 ++ ++ Slow ++ + + +- Desktop dont support +- 不支持该程序 ++ ++ Fast ++ ++ ++ ++ ++ ++ Enter repeat characters to test ++ 输入重复字符测试 ++ ++ ++ ++ EditTestRepeatKey ++ ++ ++ ++ Enter characters to test the settings ++ 输入重复字符测试 + + + +- BatterySettingsPage ++ GeneralSettingsPage + +- BatterySettingsPage +- 电池设置 ++ ++ GeneralSettingsPage ++ 通用设置页面 + + +- After idle for more than the following time, the computer will execute +- 空闲超过以下时间后,计算机将执行 ++ ++ When the power button is pressed ++ 按下电源按钮时 + + +- ComboIdleTime ++ ++ ComboPowerButtonAction + + + +- ComboIdleAction ++ ++ When the suspend button is pressed ++ 按下挂起按钮时 ++ ++ ++ ++ ComboSuspendAction + + + +- When the battery is lit up, it will be executed +- 电池电量将用尽时 ++ ++ When closing the lid ++ 合上盖子操作 + + +- ComboLowBatteryAction ++ ++ ComboCloseLidAction + + + +- The monitor will turn off when it is idle +- 显示器空闲以下时间关闭 ++ ++ Computer Mode ++ 计算机模式 + + +- ComboMonitorTurnOffIdleTime +- ++ ++ Display brightness setting ++ 显示亮度设置 + + +- Reduce screen brightness when idle +- 空闲时减少亮度 ++ ++ 0% ++ + + +- Reduce screen brightness when no power +- 低点亮时减少亮度 ++ ++ SliderDisplayBrightness ++ + + +- The energy saving mode is enabled when the power is low +- 低电量时自动开启节能模式 ++ ++ Color temperature ++ 色温 + + +- Suspend +- 待机 ++ ++ Automatic color temperature ++ 自动色温 + + +- Shutdown +- 关机 ++ ++ cold ++ + + +- Hibernate +- 休眠 ++ ++ standard ++ 标准 + + +- Do nothing +- 不执行操作 ++ ++ warm ++ + +- +- +- BatterySubItem + +- Battery Settings +- 电池设置 ++ ++ Regard computer as idle after ++ 于此时间后视计算机为空闲 + +- +- +- BiometricItem + +- add +- 添加 ++ ++ SliderComputerIdleTime ++ + +- +- +- ChangeHostNameWidget + +- Form +- ++ ++ Lock screen when idle ++ 计算机空闲时锁定屏幕 + + +- Host Name: +- 主机名: ++ ++ password is required to wake up in standby mode ++ 待机时唤醒需要输入密码 + + +- EditHostName +- ++ ++ ++ shutdown ++ 关机 + + +- ButtonSaveHostName +- ++ ++ ++ ++ hibernate ++ 休眠 + + +- Save +- 保存 ++ ++ ++ ++ suspend ++ 待机 + + +- ButtonCancelChangeHostName +- ++ ++ ++ display off ++ 关闭显示器 + + +- Cancel +- 取消 ++ ++ ++ ++ do nothing ++ 不执行操作 + + +- Host Name +- 主机名 ++ ++ ERROR ++ 错误 + + +- Warning +- 警告 ++ ++ %1hour ++ %1小时 + + +- Change host name failed! Please check the Dbus service! +- 修改主机名失败!请 检查Dbus服务! ++ ++ %1minute ++ %1分钟 + + + +- CheckpasswdDialog ++ GeneralSettingsSubItem + +- Check password +- 校验当前用户密码 ++ General Settings ++ 通用设置 + ++ ++ ++ GeneralSubItem + +- Check the current password before you enroll the feature +- 录入特征之前需要校验当前密码 ++ ++ Keyboard General Option ++ 键盘通用选项 + + + +- ChooseItem ++ GroupInfoPage + ++ + Form +- ++ + +- +- +- CreateGroupPage + +- CreateGroupPage ++ ++ TextLabel + + + +- Create Group ++ ++ Group + + + +- Add Group Members ++ ++ Member List + + + +- Confirm ++ ++ Add User + + + +- Please enter your group name ++ ++ Delete + + + +- group name cannot be a pure number ++ ++ Add Member + + + +- group name already exists ++ ++ Save ++ 保存 ++ ++ ++ ++ Cancel ++ 取消 ++ ++ ++ ++ Please input keys for search... + + + ++ ++ ++ ++ + Error + 错误 + + + +- CreateUserPage ++ GroupSubItem + +- Account type +- 帐户类型 ++ ++ Group ++ + + +- standard +- 普通用户 ++ ++ Creat group ++ + + +- administrator +- 管理员 ++ ++ Change group name ++ + + +- Please enter user name first +- 请输入用户名 ++ ++ Add group member ++ + ++ ++ ++ HardWorker + +- Please enter your user name +- 请输入用户名 ++ ++ Create User failed ++ 创建用户失败 + + +- user name cannot be a pure number +- 用户名不能全为数字 ++ ++ update password failed ++ 更新密码失败 + + +- user name already exists +- 用户名已存在 ++ ++ icon file ++ 头像 + + +- Please enter your password +- 请输出密码 ++ ++ userName type ++ 用户名 + + +- Please enter the password again +- 请再次输入密码 ++ ++ locked ++ 启用状态 + + +- The password you enter must be the same as the former one +- 两次密码不相同,请核对后,再次输入 ++ ++ Failed to update user properties,%1 ++ 更新用户属性失败,%1 + + +- Error +- 错误 ++ ++ Failed to delete user,%1 ++ 删除用户失败,%1 + + +- Password encryption failed +- 密码加密失败 ++ password ++ 密码 + + +- Form +- ++ home directory ++ 用户目录 + + +- UserAvatarWidget +- ++ shell ++ shell + + +- User name +- 用户名 ++ icon ++ 头像 + + +- EditUserName +- ++ Failed to set user attributes ++ 设置用户属性失败 + + +- User type +- 用户类型 ++ account type ++ 帐户类型 + + +- ComboUserType +- ++ Failed to update user properties(%1) ++ 更新用户属性失败(%1) + + +- Password +- 用户密码 ++ Failed to delete user ++ 删除用户失败 + + +- EditPasswd ++ ++ Failed to connect to the account management service + + + +- Confirm password +- 确认密码 ++ ++ Create Group failed ++ + + +- EditPasswdConfirm ++ ++ Failed to delete group,%1 + + + +- ButtonAdvanceSetting ++ ++ ++ add user to group failed + + + +- Advance setting +- 高级设置 ++ ++ change group name failed ++ + + +- ButtonConfirm ++ ++ change group name failed, the new group name is occupied + + ++ ++ ++ HardwareInformation + +- Confirm +- 创建 ++ ++ Form ++ + + +- ButtonCancel ++ ++ CPU: ++ CPU: ++ ++ ++ ++ LabelCpuInfo + + + +- Cancel +- 取消 ++ ++ ++ TextLabel ++ + + +- Please enter account name first +- 请先输入帐户名 ++ ++ Memory: ++ 内存: + + +- Please enter your account name +- 请输入帐户名 ++ ++ LabelMemoryInfo ++ + + +- Account cannot be a pure number +- 帐户名不能全为数字 ++ ++ Hard disk: ++ 硬盘: + + +- Account already exists +- 帐户名已存在 ++ ++ Graphics card: ++ 显卡: + + +- Please enter your userName name +- 请输入用户名 ++ ++ Network card: ++ 网卡: + +- +- +- CursorThemePage + +- Cursor Themes Settings +- 光标主题设置 ++ Copyright © ++ 版权所有 © + +- +- +- CursorThemes + +- Cursor Themes Settings +- 光标主题设置 ++ KylinSec. All rights reserved. ++ KylinSec.保留所有权利. + + +- Faild +- 失败 ++ ++ ++ ++ Unknow ++ 未知 + + +- Set cursor themes failed! +- 设置光标主题失败! ++ ++ %1 GB (%2 GB available) ++ %1 GB (%2 GB 可用) + + + +- DateTimeSettings ++ HardwareInformationWidget + +- DateTimeSettings +- 日期时间设置 ++ CPU: ++ CPU: + + +- Select Time +- 选择时间 ++ Memory: ++ 内存: + + +- Select Date +- 选择日期 ++ Hard disk: ++ 硬盘: + + +- ButtonSave +- ++ Graphics card: ++ 显卡: + + +- save +- 保存 ++ Network card: ++ 网卡: + + +- ButtonReset +- ++ Unknow ++ 未知 + ++ ++ ++ HardwareSubItem + +- reset +- 重置 ++ ++ Hardware Information ++ 硬件信息 + + + +- DaySpinBox ++ IconThemePage + +- %1 +- %1日 ++ ++ Form ++ ++ ++ ++ ++ Icon Themes Setting ++ 图标主题设置 + + + +- DefaultApp ++ IconThemes + +- DefaultApp +- 默认程序 ++ Icon Themes Setting ++ 图标主题设置 + + +- Web Browser +- web浏览器 ++ Faild ++ 失败 + + +- Email +- 电子邮件 ++ Set icon themes failed! ++ 设置图标主题失败! + ++ ++ ++ IdentificationRenameDialog + +- Text +- 文档查看器 ++ Rename Feature ++ 重命名特征值 + + +- Music +- 音乐播放器 ++ Please enter the renamed feature name ++ 请输入特征名 + + +- Video +- 视频播放器 ++ Confirm ++ 确认 + + +- Image +- 图片查看器 ++ Cancel ++ 取消 + + + +- DefaultappPlugin ++ ImageSelector + +- Email +- 电子邮件 ++ ++ Add Image Failed ++ 添加壁纸失败 + + +- Text +- 文档查看器 ++ ++ The image already exists! ++ 该壁纸已存在! + + +- Music +- 音乐播放器 ++ ++ Delete image ++ 删除壁纸 + + +- Video +- 视频播放器 ++ ++ Are you sure you want to delete this picture? ++ 您确定要删除此壁纸? + ++ ++ ++ InputDialog + +- Image +- 图片查看器 ++ ++ Confirm ++ 确认 + + +- DefaultApp +- 默认程序 ++ ++ Cancel ++ 取消 + + + +- DevicePanel ++ InputPage + +- Form +- ++ ++ InputPage ++ + + +- Rotate left 90 degrees +- 左旋转90度 ++ ++ Input cards ++ 输入声卡 + + +- ButtonLeft +- ++ ++ Input devices ++ 输入设备 + + +- Rotate right 90 degrees +- 右旋转90度 ++ ++ ComboBoxInputDevices ++ + + +- ButtonRight +- ++ ++ Input volume ++ 输入音量 + + +- Turn left and right +- 左右翻转 ++ ++ SliderVolumeSetting ++ + + +- ButtonHorizontal +- ++ ++ Feedback volume ++ 反馈音量 + + +- upside down +- 上下翻转 ++ ++ No input device detected ++ 未检测到输入设备 + ++ ++ ++ Ipv4Widget + +- ButtonVertical ++ ++ Ipv4Widget + + + +- Identification display +- 标识显示器 ++ ++ IPV4 Method ++ IPV4方法 + + +- ButtonIdentifying ++ ++ ComboBoxIpv4Method + + +- +- +- DisplayFormatSettings +- +- DisplayFormatSettings +- 日期时间格式设置 +- + +- Long date display format +- 长日期显示格式 ++ ++ IP Address ++ IP地址 + + +- ComboLongDateDisplayFormat ++ ++ EditIpv4Address + + + +- Short date display format +- 短日期显示格式 ++ ++ Net Mask ++ 子网掩码 + + +- ComboShortDateDisplayFormat ++ ++ EditIpv4Netmask + + + +- Time format +- 时间格式 ++ ++ Gateway ++ 网关 + + +- ComboTimeFormat ++ ++ EditIpv4Gateway + + + +- Show time witch seconds +- 时间显示秒 ++ ++ DNS ++ + + +- 24-hours +- 二十四小时制 ++ ++ EditIpv4PreferredDNS ++ + + +- 12-hours +- 十二小时制 ++ ++ Auto ++ 自动 + +- +- +- DisplayPage + +- DisplayPage +- ++ ++ Manual ++ 手动 + + +- ButtonCopyDisplay +- ++ ++ ++ Required ++ 必填 + + +- Copy display +- 复制显示 ++ ++ Please separate multiple DNS entries by semicolon ++ 请用分号分隔多个DNS + + +- ButtonExtendedDisplay +- ++ ++ Ipv4 DNS invalid ++ 无效的Ipv4 DNS + + +- Extended display +- 扩展显示 ++ ++ Ipv4 address can not be empty ++ Ipv4地址不能为空 + + +- Resolution ratio +- 分辨率 ++ ++ Ipv4 Address invalid ++ 无效的Ipv4地址 + + +- ComboResolutionRatio +- ++ ++ NetMask can not be empty ++ 子网掩码不能为空 + + +- Refresh rate +- 刷新率 ++ ++ Netmask invalid ++ 无效的子网掩码 + + +- ComboRefreshRate +- ++ ++ Ipv4 Gateway invalid ++ 无效的Ipv4网关 + + +- Zoom rate +- 缩放率 ++ Preferred DNS ++ 首选DNS + + +- ComboZoomRate +- ++ Alternate DNS ++ 备选DNS + + +- Automatic +- 自动 ++ Ipv4 Preferred DNS invalid ++ 无效的Ipv4首选DNS + + +- 100% (recommended) +- 100% (推荐) ++ Ipv4 Alternate DNS invalid ++ 无效的Ipv4备选DNS + ++ ++ ++ Ipv6Widget + +- 200% ++ ++ Ipv6Widget + + + +- Open +- 开启 +- +- +- Set as main display +- 设为主显示器 ++ ++ IPV6 Method ++ IPV6方法 + + +- SwitchExtraPrimary ++ ++ ComboBoxIpv6Method + + + +- ComboExtraResolutionRatio +- ++ ++ IP Address ++ IP地址 + + +- ComboExtraRefreshRate ++ ++ EditIpv6Address + + + +- ComboExtraZoomRate +- ++ ++ Prefix ++ 前缀 + + +- ButtonExtraApply ++ ++ SpinBoxIpv6Prefix + + + +- Apply +- 应用 ++ ++ Gateway ++ 网关 + + +- ButtonExtraCancel ++ ++ EditIpv6Gateway + + + +- Close +- 关闭 ++ ++ DNS ++ + + +- (recommended) +- (推荐) ++ ++ EditIpv6PreferredDNS ++ + + +- Is the display normal? +- 显示是否正常? ++ ++ Auto ++ 自动 + + +- Save current configuration(K) +- 保存当前配置(K) ++ ++ Manual ++ 手动 + + +- Restore previous configuration(R) +- 恢复之前的配置(R) ++ ++ Ignored ++ 忽略 + + +- The display will resume the previous configuration in %1 seconds +- 显示将会在 %1 秒后恢复之前的配置 ++ ++ Required ++ 必填 + +- +- +- DisplaySubitem + +- Display +- 显示 ++ ++ Please separate multiple DNS entries by semicolon ++ 请用分号分隔多个DNS + +- +- +- DriverPage + +- device type +- 设备类型 ++ ++ Ipv6 DNS invalid ++ 无效的Ipv6 DNS + + +- driver list +- 驱动列表 ++ ++ Ipv6 address can not be empty ++ Ipv6地址不能为空 + + +- Fingerprint +- 指纹 ++ ++ Ipv6 address invalid ++ 无效的Ipv6地址 + + +- FingerVein +- 指静脉 ++ ++ Ipv6 Gateway invalid ++ 无效的Ipv6网关 + + +- Fingervein +- 指静脉 ++ Preferred DNS ++ 首选DNS + + +- iris +- 虹膜 ++ Alternate DNS ++ 备选DNS + + +- ukey +- UKey ++ Ipv6 Preferred DNS invalid ++ 无效的Ipv6首选DNS + + +- face +- 人脸 ++ Ipv6 Alternate DNS invalid ++ 无效的Ipv6备选DNS + + + +- FaceEnrollDialog ++ IrisPage + +- save +- 保存 ++ ++ Default Iris device ++ 默认虹膜设备 + + +- cancel +- 取消 ++ ++ Iris feature list ++ 虹膜特征列表 + + +- initializing face collection environment... +- 正在初始化人脸采集环境,请稍后 ++ ++ iris ++ 虹膜 + + +- failed to initialize face collection environment! +- 初始化人脸采集环境失败! ++ ++ Cancel ++ 取消 + + +- Failed to start collection +- 开始采集失败 ++ ++ Start enroll failed,%1 ++ 开始录入失败,%1 + +- +- +- FaceInputDialog + +- save +- 保存 +- +- +- cancel +- 取消 ++ ++ ++ Error ++ 错误 + + +- initializing face collection environment... +- 正在初始化人脸采集环境,请稍后 ++ ++ The biometric features were successfully recorded. The feature name is:%1 ++ 特征已成功录入,特征名为:%1 + + +- failed to initialize face collection environment! +- 初始化人脸采集环境失败! ++ ++ Tips ++ 提示 + + +- Failed to start collection +- 开始采集失败 ++ ++ Failed to record biometrics(%1), Please try again ++ 录入特征失败(%1),请重试 + + + +- FacePage ++ KcpInterface + +- Default face device +- 默认人脸设备 ++ Warning ++ 警告 + + +- face feature list +- 人脸特征列表 ++ load qss file failed ++ 加载qss文件失败 + ++ ++ ++ KeybindingSubItem + +- face +- 人脸 ++ ++ Keybinding ++ 快捷键 + ++ ++ ++ KeycodeTranslator + +- Cancel +- 取消 ++ ++ None ++ 暂无 + + +- Start enroll failed,%1 +- 开始录入失败,%1 ++ ++ disabled ++ 禁用 + ++ ++ ++ KiranAccountManager + +- Error +- 错误 ++ disable ++ 禁用 + + +- The biometric features were successfully recorded. The feature name is:%1 +- 特征已成功录入,特征名为:%1 ++ enable ++ 启用 + + +- Tips +- 提示 ++ Create new user ++ 创建新用户 + + +- Failed to record biometrics(%1), Please try again +- 录入特征失败(%1),请重试 ++ User Manager ++ 帐户管理工具 ++ ++ ++ Create new account ++ 创建新用户 + + + +- FingerPage ++ KiranAvatarEditor ++ ++ ++ Avatar Editor ++ 头像编辑器 ++ ++ ++ ++ Confirm ++ 确认 ++ + ++ + Cancel + 取消 + ++ ++ ++ KiranCPanelMouse + +- fingerprint +- 指纹 ++ Mouse and TouchPad ++ 鼠标和触摸板 + ++ ++ ++ KiranCPanelMouseWidget + +- fingervein +- 指静脉 ++ Select Mouse Hand ++ 选择鼠标手持模式 + + +- default %1 device +- 默认%1设备 ++ Mouse Motion Acceleration ++ 鼠标移动加速 + + +- %1 list +- %1列表 ++ Natural Scroll ++ 是否为自然滚动 + + +- Start enroll failed,%1 +- 开始录入失败,%1 ++ Middle Emulation Enabled ++ 同时按下左右键模拟中键 + + +- Error +- 错误 ++ Touchpad Enabled ++ 禁用触摸板 + + +- The biometric features were successfully recorded. The feature name is:%1 +- 特征已成功录入,特征名为:%1 ++ Select TouchPad Hand ++ 选择触摸板使用模式 + + +- Tips +- 提示 ++ TouchPad Motion Acceleration ++ 触摸板移动加速 + + +- Failed to record biometrics(%1), Please try again +- 录入特征失败(%1),请重试 ++ Select Click Method ++ 设置点击触摸板方式 + + +- %1list +- %1列表 ++ Select Scroll Method ++ 滚动窗口方式 + + +- Default %1 device +- 默认%1设备 ++ Enabled while Typing ++ 打字时触摸板禁用 + +- +- +- FingerprintEnrollDialog + +- save +- 保存 ++ Tap to Click ++ 轻击(不按下)触摸板功能是否生效 + + +- cancel +- 取消 ++ Reset ++ 重置 + + +- Finger Enroll +- 指纹录入 ++ Exit ++ 关闭 + + +- This fingerprint is bound to the user(%1) +- 该指纹已绑定用户(%1) ++ Cancel ++ 取消 + + +- Info +- 提示 ++ Save ++ 保存 + + +- Error +- 错误 ++ Mouse Settings ++ 鼠标设置 + +- +- +- FingerprintInputDialog + +- save +- 保存 ++ TouchPad Settings ++ 触摸板设置 + + +- cancel +- 取消 ++ Standard ++ 标准 + + +- Finger Enroll +- 指纹录入 ++ Right Hand Mode ++ 右手模式 + + +- Error +- 错误 ++ Left Hand Mode ++ 左手模式 + +- +- +- FingerprintInputWorker + +- initializing fingerprint collection environment... +- 正在初始化指纹采集环境,请稍等 ++ Press and Tap ++ 按键和轻触 + +- +- +- Fonts + +- Form +- ++ Tap ++ 轻触 + + +- Application Font Settings +- 应用程序字体设置 ++ Two Finger Scroll ++ 两指滑动 + + +- ComboAppFontName +- ++ Edge Scroll ++ 边缘滑动 + + +- ComboAppFontSize +- ++ Slow ++ 低速 + + +- Titlebar Font Settings +- 窗口标题字体设置 ++ Fast ++ 快速 + ++ ++ ++ KiranCollapse + +- ComboTitleFontName ++ ++ ListExpansionSpace + + ++ ++ ++ KiranCpanelAppearance + +- ComboTitleFontSize +- ++ Wallpaper Setting ++ 壁纸设置 + + +- Monospace Font Settings +- 等宽字体设置 ++ Theme Setting ++ 主题设置 + + +- ComboMonospaceFontName +- ++ Font Setting ++ 字体设置 + ++ ++ ++ KiranDatePickerWidget + +- ComboMonospaceFontSize ++ ++ Form + + + + +- GeneralBioPage ++ KiranGroupManager + +- default device +- 默认设备 ++ ++ Create new group ++ + ++ ++ ++ KiranModuleWidget + +- feature list +- 特征列表 ++ Warning ++ 警告 + + +- Are you sure you want to delete the feature called %1, Ensure that the Ukey device is inserted; otherwise the information stored in the Ukey will not be deleted +- 您确定要删除特征名为%1的UKey绑定吗?请确保已插入Ukey设备;否则存储在Ukey中的信息将不会被删除 ++ The edited content in %1 is not saved. After switching, the edited content will be lost. Are you sure you want to save? ++ %1中编辑的内容未保存,切换后编辑的内容将会丢失。您确定要保存吗? + + +- Are you sure you want to delete the feature called %1 +- 您确定要删除特征名为%1的特征吗 ++ ++ Form ++ + ++ ++ ++ KiranSystemWidget + +- tips +- 提示 ++ kiran-system-imformation ++ 系统信息 + + +- Error +- 错误 ++ 保存 ++ 保存 + ++ ++ ++ KiranTimeDateWidget + +- Failed to enroll feature because the password verification failed! +- 由于密码校验失败,录入特征失败! +- +- +- Rename Feature +- 重命名特征值 +- +- +- Please enter the renamed feature name +- 请输入特征名 ++ ++ KiranTimeDateWidget ++ + +- +- +- GeneralPage + +- Form +- ++ ++ Automatic synchronizetion ++ 自动同步 + + +- Capslock Tip +- 大写锁定提示 ++ ++ Change Time Zone ++ 更改时区 + + +- Numlock Tip +- 数字键盘锁定提示 ++ ++ Set Time Manually ++ 手动设置时间 + + +- Repeat Key +- 重复键 ++ ++ Time date format setting ++ 日期时间格式设置 + + +- (Repeat a key while holding it down) +- (按住某一键时重复该键) ++ ++ %1(%2) ++ %1时间(%2) + ++ ++ ++ KiranTimePickerWidget + +- SwitchRepeatKey ++ ++ Form + + ++ ++ ++ KiranTimeZone + +- Delay +- 延时 +- +- +- SliderRepeatDelay ++ ++ Form + + + +- Short +- +- +- +- Long +- +- +- +- Interval +- 速度 ++ ++ Search in all time zones... ++ 在所有时区中搜索... + ++ ++ ++ KiranTimeZoneItem + +- SliderRepeatInterval ++ ++ Form + + + +- Slow +- +- +- +- Fast +- +- +- +- Enter repeat characters to test +- 输入重复字符测试 ++ ++ No search results, please search again... ++ 无搜索结果,请重新搜索... + ++ ++ ++ KiranTimeZoneList + +- EditTestRepeatKey ++ ++ Form + + +- +- Enter characters to test the settings +- 输入重复字符测试 +- + + +- GeneralSettingsPage +- +- GeneralSettingsPage +- 通用设置页面 +- +- +- When the power button is pressed +- 按下电源按钮时 +- +- +- ComboPowerButtonAction +- +- ++ KiranTips + +- When the suspend button is pressed +- 按下挂起按钮时 ++ ++ ++ Form ++ + ++ ++ ++ KylinsecLogo + +- ComboSuspendAction +- ++ ++ Copyright © ++ 版权所有 © + + +- When closing the lid +- 合上盖子操作 ++ ++ KylinSec. All rights reserved. ++ KylinSec.保留所有权利. + ++ ++ ++ LayoutItem + +- ComboCloseLidAction ++ ++ Form + + ++ ++ ++ LayoutList + +- Computer Mode +- 计算机模式 +- +- +- Display brightness setting +- 显示亮度设置 +- +- +- 0% ++ ++ LayoutList + + ++ ++ ++ LayoutPage + +- SliderDisplayBrightness ++ ++ Form + + + +- Color temperature +- 色温 +- +- +- Automatic color temperature +- 自动色温 +- +- +- cold +- +- +- +- standard +- 标准 +- +- +- warm +- ++ ++ Select Kayboard Layout ++ 选择布局 + + +- Regard computer as idle after +- 于此时间后视计算机为空闲 ++ ++ ++ Edit ++ 编辑 + + +- SliderComputerIdleTime +- ++ ++ ++ Add Layout ++ 添加布局 + + +- Lock screen when idle +- 计算机空闲时锁定屏幕 ++ ++ ButtonAddLayout ++ + + +- password is required to wake up in standby mode +- 待机时唤醒需要输入密码 ++ ++ Addition ++ 添加 + + +- shutdown +- 关机 ++ ++ ButtonReturn ++ + + +- hibernate +- 休眠 ++ ++ Return ++ 返回 + + +- suspend +- 待机 ++ ++ ++ ++ ++ Failed ++ 失败 + + +- display off +- 关闭显示器 ++ ++ You have added this keyboard layout! ++ 您已经添加过该布局 + + +- do nothing +- 不执行操作 ++ ++ The %1 keyboard layout does not exist! ++ 该 %1 键盘布局不存在! + + +- ERROR +- 错误 ++ ++ The keyboard layout is currently in use and cannot be deleted! ++ 该布局目前正在使用,无法删除! + + +- %1hour +- %1小时 ++ ++ Delete Layout ++ 删除布局 + + +- %1minute +- %1分钟 ++ ++ You do not appear to have added %1 keyboard layout! ++ 您似乎没有添加 %1 键盘布局! + +- +- +- GeneralSettingsSubItem + +- General Settings +- 通用设置 ++ ++ Finish ++ 完成 + + + +- GeneralSubItem ++ LayoutSubItem + +- Keyboard General Option +- 键盘通用选项 ++ ++ Keyboard Layout ++ 键盘布局 + + + +- GroupInfoPage ++ LicenseAgreement + ++ + Form + + + +- TextLabel ++ ++ BrowserLicense + + + +- Group ++ ++ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> ++<html><head><meta name="qrichtext" content="1" /><style type="text/css"> ++p, li { white-space: pre-wrap; } ++</style></head><body style=" font-family:'Noto Sans CJK SC'; font-size:9pt; font-weight:400; font-style:normal;"> ++<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + +- Member List ++ ++ ButtonExportLicense + + + +- Add User +- ++ ++ Export ++ 导出 + + +- Delete ++ ++ ButtonCloseLicense + + + +- Add Member +- ++ ++ Close ++ 关闭 + + ++ + Save +- 保存 ++ 保存 + + +- Cancel +- 取消 ++ ++ PDF(*.pdf) ++ + + +- Please input keys for search... +- ++ ++ Export License ++ 导出协议 + + +- Error +- 错误 ++ ++ Export License failed! ++ 导出协议失败! + +- +- +- GroupSubItem + +- Group +- ++ ++ User End License Agreement ++ 最终用户许可协议 + + +- Creat group +- ++ ++ ++ ++ ++ ++ ++ None ++ 暂无 + + +- Change group name +- ++ ++ Version License ++ 版本协议 + + +- Add group member +- ++ Export EULA ++ 导出最终用户许可协议 ++ ++ ++ Export EULA failed! ++ 导出最终用户许可协议失败! ++ ++ ++ ++ ++ Privacy Policy ++ 隐私协议 + + + +- HardWorker ++ LicenseInfoWidget + +- Create User failed +- 创建用户失败 ++ Machine Code: ++ 机器码: + + +- update password failed +- 更新密码失败 ++ Activation Code: ++ 激活码: + + +- icon file +- 头像 ++ Activation Information ++ 激活信息 + + +- userName type +- 用户名 ++ Can't get machine code ++ 无法获取到机器码 + + +- locked +- 启用状态 ++ Can't get activation code ++ 无法获取到激活码 + ++ ++ ++ LicenseInformation + +- Failed to update user properties,%1 +- 更新用户属性失败,%1 ++ Installation time: ++ 安装时间: + + +- Failed to delete user,%1 +- 删除用户失败,%1 ++ Activation status: ++ 激活状态: + + +- password +- 密码 ++ Expiry date: ++ 质保期: + + +- home directory +- 用户目录 ++ Contact Us: ++ 联系我们: + + +- shell +- shell ++ Unknow ++ 未知 + + +- icon +- 头像 ++ Can't get activation information ++ 无法获取激活信息 + + +- Failed to set user attributes +- 设置用户属性失败 ++ Activate ++ 激活 + + +- account type +- 帐户类型 ++ The current time is illegal ++ 当前时间不合法 + + +- Failed to update user properties(%1) +- 更新用户属性失败(%1) ++ Less than the installation time ++ 小于安装时间 + + +- Failed to delete user +- 删除用户失败 ++ Not activated. Trail expiration: ++ 未激活.试用到期: + + +- Failed to connect to the account management service +- ++ get service status failed ++ 获取服务状态信息失败 + + +- Create Group failed +- ++ Not yet ++ 暂无 + + +- Failed to delete group,%1 +- ++ Activated ++ 已激活 + + +- add user to group failed +- ++ Forever ++ 永久授权 + + +- change group name failed +- ++ Copyright © ++ 版权所有 © + + +- change group name failed, the new group name is occupied +- ++ KylinSec. All rights reserved. ++ KylinSec.保留所有权利. + + + +- HardwareInformation ++ ListExpansionSpace + +- Form ++ ++ ListExpansionSpace + + ++ ++ ++ Media Key + +- CPU: +- CPU: +- +- +- LabelCpuInfo +- ++ ++ Audio Play ++ 音频播放 + + +- TextLabel +- ++ ++ Search ++ 搜索 + + +- Memory: +- 内存: ++ ++ WWW ++ 万维网 + + +- LabelMemoryInfo +- ++ ++ Audio Lower Volume ++ 减小音量 + + +- Hard disk: +- 硬盘: ++ ++ Audio Raise Volume ++ 增大音量 + + +- Graphics card: +- 显卡: ++ ++ Mic Mute ++ 输入静音 + + +- Network card: +- 网卡: ++ ++ Audio Stop ++ 音频停止 + + +- Copyright © +- 版权所有 © ++ ++ Explorer ++ 浏览 + + +- KylinSec. All rights reserved. +- KylinSec.保留所有权利. ++ ++ Calculator ++ 计算器 + + +- Unknow +- 未知 ++ ++ Audio Mute ++ 音频暂停 + + +- %1 GB (%2 GB available) +- %1 GB (%2 GB 可用) ++ ++ Audio Pause ++ 音频暂停 + +- +- +- HardwareInformationWidget + +- CPU: +- CPU: ++ ++ Audio Prev ++ 音频上一个 + + +- Memory: +- 内存: ++ ++ Audio Media ++ 音频媒体 + + +- Hard disk: +- 硬盘: ++ ++ Audio Next ++ 音频下一个 + + +- Graphics card: +- 显卡: ++ ++ Mail ++ 邮件 + + +- Network card: +- 网卡: ++ ++ Tools ++ 工具 + + +- Unknow +- 未知 ++ ++ Eject ++ 弹出 + + + +- HardwareSubItem ++ MonthSpinBox + +- Hardware Information +- 硬件信息 ++ ++ MMMM ++ MMMM + + + +- IconThemePage ++ MousePage + ++ + Form + + + +- Icon Themes Setting +- 图标主题设置 ++ ++ Select Mouse Hand ++ 选择鼠标手持模式 + +- +- +- IconThemes + +- Icon Themes Setting +- 图标主题设置 ++ ++ ComboSelectMouseHand ++ + + +- Faild +- 失败 ++ ++ Mouse Motion Acceleration ++ 鼠标移动加速 + + +- Set icon themes failed! +- 设置图标主题失败! ++ ++ SliderMouseMotionAcceleration ++ + +- +- +- IdentificationRenameDialog + +- Rename Feature +- 重命名特征值 ++ ++ Slow ++ + + +- Please enter the renamed feature name +- 请输入特征名 ++ ++ Fast ++ + + +- Confirm +- 确认 ++ ++ Natural Scroll ++ 是否为自然滚动 + + +- Cancel +- 取消 ++ ++ SwitchMouseNatturalScroll ++ + +- +- +- ImageSelector + +- Add Image Failed +- 添加壁纸失败 ++ ++ Middle Emulation Enabled ++ 同时按下左右键模拟中键 + + +- The image already exists! +- 该壁纸已存在! ++ ++ SwitchMiddleEmulation ++ + + +- Delete image +- 删除壁纸 ++ ++ Test mouse wheel direction ++ 鼠标滚轮方向测试 + + +- Are you sure you want to delete this picture? +- 您确定要删除此壁纸? ++ ++ This is line 1 of the test text ++This is line 2 of the test text ++This is line 3 of the test text ++This is line 4 of the test text ++This is line 5 of the test text ++This is line 6 of the test text ++This is line 7 of the test text ++This is line 8 of the test text ++This is line 9 of the test text ++This is line 10 of the test text ++This is line 11 of the test text ++This is line 12 of the test text ++This is line 13 of the test text ++This is line 14 of the test text ++This is line 15 of the test text ++This is line 16 of the test text ++This is line 17 of the test text ++This is line 18 of the test text ++This is line 19 of the test text ++This is line 20 of the test text ++This is line 21 of the test text ++This is line 22 of the test text ++This is line 23 of the test text ++This is line 24 of the test text ++This is line 25 of the test text ++This is line 26 of the test text ++This is line 27 of the test text ++This is line 28 of the test text ++This is line 29 of the test text ++This is line 30 of the test text ++This is line 31 of the test text ++This is line 32 of the test text ++This is line 33 of the test text ++This is line 34 of the test text ++This is line 35 of the test text ++This is line 36 of the test text ++This is line 37 of the test text ++This is line 38 of the test text ++This is line 39 of the test text ++This is line 40 of the test text ++This is line 41 of the test text ++This is line 42 of the test text ++This is line 43 of the test text ++This is line 44 of the test text ++This is line 45 of the test text ++This is line 46 of the test text ++This is line 47 of the test text ++This is line 48 of the test text ++This is line 49 of the test text ++This is line 50 of the test text ++ 这是第1行测试文字 ++这是第2行测试文字 ++这是第3行测试文字 ++这是第4行测试文字 ++这是第5行测试文字 ++这是第6行测试文字 ++这是第7行测试文字 ++这是第8行测试文字 ++这是第9行测试文字 ++这是第10行测试文字 ++这是第11行测试文字 ++这是第12行测试文字 ++这是第13行测试文字 ++这是第14行测试文字 ++这是第15行测试文字 ++这是第16行测试文字 ++这是第17行测试文字 ++这是第18行测试文字 ++这是第19行测试文字 ++这是第20行测试文字 ++这是第21行测试文字 ++这是第22行测试文字 ++这是第23行测试文字 ++这是第24行测试文字 ++这是第25行测试文字 ++这是第26行测试文字 ++这是第27行测试文字 ++这是第28行测试文字 ++这是第29行测试文字 ++这是第30行测试文字 ++这是第31行测试文字 ++这是第32行测试文字 ++这是第33行测试文字 ++这是第34行测试文字 ++这是第35行测试文字 ++这是第36行测试文字 ++这是第37行测试文字 ++这是第38行测试文字 ++这是第39行测试文字 ++这是第40行测试文字 ++这是第41行测试文字 ++这是第42行测试文字 ++这是第43行测试文字 ++这是第44行测试文字 ++这是第45行测试文字 ++这是第46行测试文字 ++这是第47行测试文字 ++这是第48行测试文字 ++这是第49行测试文字 ++这是第50行测试文字 + +- +- +- InputDialog + +- Confirm +- 确认 ++ ++ Right Hand Mode ++ 右手模式 + + +- Cancel +- 取消 ++ ++ Left Hand Mode ++ 左手模式 + + + +- IrisPage ++ MouseSettings + +- Default Iris device +- 默认虹膜设备 ++ Select Mouse Hand ++ 选择鼠标手持模式 + + +- Iris feature list +- 虹膜特征列表 ++ Mouse Motion Acceleration ++ 鼠标移动加速 + + +- iris +- 虹膜 ++ Natural Scroll ++ 是否为自然滚动 + + +- Cancel +- 取消 ++ Middle Emulation Enabled ++ 同时按下左右键模拟中键 + + +- Start enroll failed,%1 +- 开始录入失败,%1 ++ Right Hand Mode ++ 右手模式 + + +- Error +- 错误 ++ Left Hand Mode ++ 左手模式 + + +- The biometric features were successfully recorded. The feature name is:%1 +- 特征已成功录入,特征名为:%1 ++ Slow ++ + + +- Tips +- 提示 ++ Standard ++ 标准 + + +- Failed to record biometrics(%1), Please try again +- 录入特征失败(%1),请重试 ++ Fast ++ + + + +- KcpInterface +- +- Warning +- 警告 +- ++ MouseSubItem + +- load qss file failed +- 加载qss文件失败 ++ ++ Mouse Settings ++ 鼠标设置 + + + +- KeybindingSubItem ++ NetworkSubItem + +- Keybinding +- 快捷键 ++ ++ Wired Network %1 ++ 有线网络 %1 + +- +- +- KeycodeTranslator + +- None +- 暂无 ++ ++ Wired Network ++ 有线网络 + + +- disabled +- 禁用 ++ ++ Wireless Network %1 ++ 无线网络 %1 ++ ++ ++ ++ Wireless Network ++ 无线网络 ++ ++ ++ ++ VPN ++ VPN ++ ++ ++ ++ Network Details ++ 网络详情 + + + +- KiranAccountManager ++ NetworkTray + +- disable +- 禁用 ++ ++ Network settings ++ 网络设置 + + +- enable +- 启用 ++ ++ ++ Network unavailable ++ 网络不可用 + + +- Create new user +- 创建新用户 ++ ++ ++ The network is connected, but you cannot access the Internet ++ 网络已连接,但不能访问互联网 + + +- User Manager +- 帐户管理工具 ++ ++ Network not connected ++ 网络已断开 + + +- Create new account +- 创建新用户 ++ ++ Wired network card: %1 available ++ 有线网卡: %1 可用 + +- +- +- KiranAvatarEditor + +- Avatar Editor +- 头像编辑器 ++ ++ Wireless network card: %1 available ++ 无线网卡: %1 可用 + + +- Confirm +- 确认 ++ ++ Wired network card: %1 unavailable ++ 有线网卡: %1 不可用 + + +- Cancel +- 取消 ++ ++ Wireless network card: %1 unavailable ++ 无线网卡: %1 不可用 + +- +- +- KiranCPanelMouse + +- Mouse and TouchPad +- 鼠标和触摸板 ++ ++ ++ Network connected ++ 网络已连接 + + + +- KiranCPanelMouseWidget ++ OutputPage + +- Select Mouse Hand +- 选择鼠标手持模式 ++ ++ OutputPage ++ ++ ++ ++ ++ Output cards ++ 输出声卡 ++ ++ ++ ++ Output devices ++ 输出设备 ++ ++ ++ ++ ComboBoxOutputDevices ++ ++ ++ ++ ++ Output volume ++ 输出音量 ++ ++ ++ ++ SlilderVolumeSetting ++ ++ ++ ++ ++ Left/right balance ++ 左/右平衡 ++ ++ ++ ++ SliderVolumeBalance ++ + + +- Mouse Motion Acceleration +- 鼠标移动加速 ++ ++ Left ++ + + +- Natural Scroll +- 是否为自然滚动 ++ ++ Right ++ + + +- Middle Emulation Enabled +- 同时按下左右键模拟中键 ++ ++ No output device detected ++ 未检测到输出设备 + ++ ++ ++ PanelWindow + +- Touchpad Enabled +- 禁用触摸板 ++ ++ Control Panel ++ 控制面板 + ++ ++ ++ PasswordExpirationPolicyPage + +- Select TouchPad Hand +- 选择触摸板使用模式 ++ ++ PasswordExpirationPolicyPage ++ + + +- TouchPad Motion Acceleration +- 触摸板移动加速 ++ ++ User expires ++ 用户过期时间 + + +- Select Click Method +- 设置点击触摸板方式 ++ ++ SpinBoxUserExpires ++ + + +- Select Scroll Method +- 滚动窗口方式 ++ ++ yyyy-MM-dd ++ + + +- Enabled while Typing +- 打字时触摸板禁用 ++ ++ Last password change ++ 最近一次密码修改时间 + + +- Tap to Click +- 轻击(不按下)触摸板功能是否生效 ++ ++ LabelLastPasswdChange ++ + + +- Reset +- 重置 ++ ++ 1990-01-01 ++ + + +- Exit +- 关闭 ++ ++ Maximum vaild days of password ++ 密码最大有限天数 + + +- Cancel +- 取消 ++ ++ SpinBoxMaximumValidDays ++ + + +- Save +- 保存 ++ ++ Prompt time before password expiration ++ 密码过期之前提醒的天数 + + +- Mouse Settings +- 鼠标设置 ++ ++ SpinBoxPromptBeforeExpiration ++ + + +- TouchPad Settings +- 触摸板设置 ++ ++ how many days after password expires will become inactive ++ 密码过期多少天认定为失效 + + +- Standard +- 标准 ++ ++ SpinBoxPasswdInactiveTime ++ + + +- Right Hand Mode +- 右手模式 ++ ++ ButtonSave ++ + + +- Left Hand Mode +- 左手模式 ++ ++ save ++ 保存 + + +- Press and Tap +- 按键和轻触 ++ ++ ButtonReturn ++ + + +- Tap +- 轻触 ++ ++ return ++ 返回 + + +- Two Finger Scroll +- 两指滑动 ++ ++ ++ ++ day ++ + ++ ++ ++ PluginConnectionList + +- Edge Scroll +- 边缘滑动 ++ ++ Other WiFi networks ++ 其它WIFI网络 + + +- Slow +- 低速 ++ ++ Tips ++ 提示 + + +- Fast +- 快速 ++ ++ Please input a network name ++ 请输入网络名称 + + + +- KiranCollapse ++ Popup + +- ListExpansionSpace +- ++ cancel ++ 取消 + + + +- KiranCpanelAppearance ++ PowerPlugin + +- Wallpaper Setting +- 壁纸设置 ++ ++ General Settings ++ 通用设置 + + +- Theme Setting +- 主题设置 ++ ++ Power Settings ++ 电源设置 + + +- Font Setting +- 字体设置 ++ ++ Battery Settings ++ 电池设置 + + + +- KiranDatePickerWidget ++ PowerProfilesWrapper + +- Form +- ++ ++ ++ power-saver ++ 省电模式 + +- +- +- KiranGroupManager + +- Create new group +- ++ ++ ++ balanced ++ 平衡模式 ++ ++ ++ ++ ++ performance ++ 性能模式 + + + +- KiranModuleWidget ++ PowerSettingsPage + +- Warning +- 警告 ++ ++ PowerSettingsPage ++ 电源设置页面 + + +- The edited content in %1 is not saved. After switching, the edited content will be lost. Are you sure you want to save? +- %1中编辑的内容未保存,切换后编辑的内容将会丢失。您确定要保存吗? ++ ++ After idle for more than the following time, the computer will execute ++ 空闲超过以下时间后,计算机将执行 + + +- Form ++ ++ ComboIdleTime + + +- +- +- KiranSystemWidget + +- kiran-system-imformation +- 系统信息 ++ ++ ComboIdleAction ++ + + +- 保存 +- 保存 ++ ++ The monitor will turn off when it is idle ++ 显示器空闲以下时间关闭 + +- +- +- KiranTimeDateWidget + +- KiranTimeDateWidget ++ ++ ComboMonitorTrunOffIdleTime + + + +- Automatic synchronizetion +- 自动同步 +- +- +- Change Time Zone +- 更改时区 ++ ++ Suspend ++ 待机 + + +- Set Time Manually +- 手动设置时间 ++ ++ Shutdown ++ 关机 + + +- Time date format setting +- 日期时间格式设置 ++ ++ Hibernate ++ 休眠 + + +- %1(%2) +- %1时间(%2) ++ ++ Do nothing ++ 不执行操作 + + + +- KiranTimePickerWidget ++ PowerSubItem + +- Form +- ++ Power Settings ++ 电源设置 + + + +- KiranTimeZone +- +- Form +- +- ++ PrefsPage + +- Search in all time zones... +- 在所有时区中搜索... ++ ++ Authentication type Enabled status ++ 认证类型启用状态 + +- +- +- KiranTimeZoneItem + +- Form +- ++ ++ ++ fingerprint ++ 指纹 + + +- No search results, please search again... +- 无搜索结果,请重新搜索... ++ ++ ++ fingervein ++ 指静脉 + +- +- +- KiranTimeZoneList + +- Form ++ ++ ... + + +- +- +- KiranTips + +- Form +- ++ ++ Return ++ 返回 + +- +- +- KylinsecLogo + +- Copyright © +- 版权所有 © ++ ++ login ++ 登录 + + +- KylinSec. All rights reserved. +- KylinSec.保留所有权利. ++ ++ unlock ++ 解锁 + +- +- +- LayoutItem + +- Form +- ++ ++ empowerment ++ 授权 + +- +- +- LayoutList + +- LayoutList +- ++ ++ Apply the %1 authentication to the following applications ++ 启用%1认证在以下的认证应用中 + +- +- +- LayoutPage + +- Form +- ++ ++ ukey ++ UKey + + +- Select Kayboard Layout +- 选择布局 ++ ++ iris ++ 虹膜 + + +- Edit +- 编辑 ++ ++ face ++ 人脸 + ++ ++ ++ QObject + +- Add Layout +- 添加布局 ++ Did not reply within the specified timeout ++ 连接超时 + + +- ButtonAddLayout +- ++ The called service is not known ++ 无法连接到Dbus服务 + + +- Addition +- 添加 ++ warning ++ 警告 + + +- ButtonReturn +- ++ Open qss file failed ++ 加载qss文件失败 + + +- Return +- 返回 ++ ++ %1Day ++ %1天 + + +- Failed +- 失败 ++ ++ %1Hour ++ %1小时 + + +- You have added this keyboard layout! +- 您已经添加过该布局 ++ ++ %1Minute ++ %1分钟 + + +- The %1 keyboard layout does not exist! +- 该 %1 键盘布局不存在! ++ ++ never ++ 从不 + + +- The keyboard layout is currently in use and cannot be deleted! +- 该布局目前正在使用,无法删除! ++ SLow ++ 低速 + + +- Delete Layout +- 删除布局 ++ Standard ++ 标准 + + +- You do not appear to have added %1 keyboard layout! +- 您似乎没有添加 %1 键盘布局! ++ Fast ++ 快速 + + +- Finish +- 完成 ++ Faild ++ 失败 + +- +- +- LayoutSubItem + +- Keyboard Layout +- 键盘布局 ++ Connect Mouse or TouchPad Dbus Failed! ++ 连接鼠标或触摸板Dbus服务失败! + +- +- +- LicenseAgreement + +- Form +- ++ Load qss file failed! ++ 加载qss文件失败! + + +- BrowserLicense +- ++ ++ No search results, please search again... ++ 无搜索结果,请重新搜索... + + +- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +-<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +-p, li { white-space: pre-wrap; } +-</style></head><body style=" font-family:'Noto Sans CJK SC'; font-size:9pt; font-weight:400; font-style:normal;"> +-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> +- ++ ++ ++ ++ ++ Tips ++ 提示 + + +- ButtonExportLicense +- ++ ++ ++ ++ ++ OK(K) ++ 确定(K) + + +- Export +- 导出 ++ ++ Failed to apply display settings!%1 ++ 应用显示设置失败!%1 + + +- ButtonCloseLicense +- ++ ++ Fallback display setting failed! %1 ++ 回撤显示设置失败! %1 + + +- Close +- 关闭 ++ Failed ++ 失败 + + +- Save +- 保存 ++ Set font failed! ++ 设置字体失败! + + +- PDF(*.pdf) +- ++ Get icon themes failed! ++ 获取图标主题失败! + + +- Export License +- 导出协议 ++ Get cursor themes failed! ++ 获取光标主题失败! + + +- Export License failed! +- 导出协议失败! ++ Warning ++ 警告 + + +- User End License Agreement +- 最终用户许可协议 ++ There is no theme to set! ++ 目前没有主题可以设置! + + +- None +- 暂无 ++ ++ Spring ++ 初春 + + +- Version License +- 版本协议 ++ ++ Summer ++ 盛夏 + ++ ++ ++ SearchEdit + +- Export EULA +- 导出最终用户许可协议 ++ ++ Enter keywords to search ++ 输入关键词进行搜索 + + +- Export EULA failed! +- 导出最终用户许可协议失败! ++ ++ Info ++ 提示 + + +- Privacy Policy +- 隐私协议 ++ ++ Failed to find related items, please re-enter! ++ 未能搜索到相关项,请重新输入! + + + +- LicenseInfoWidget ++ SelectAvatarPage + +- Machine Code: +- 机器码: ++ ++ Confirm ++ 确认 + + +- Activation Code: +- 激活码: ++ ++ Return ++ 返回 + + +- Activation Information +- 激活信息 ++ ++ select picture ++ 选择图片 + + +- Can't get machine code +- 无法获取到机器码 ++ ++ image files(*.bmp *.jpg *.png *.tif *.gif *.pcx *.tga *.exif *.fpx *.svg *.psd *.cdr *.pcd *.dxf *.ufo *.eps *.ai *.raw *.WMF *.webp) ++ 图片文件(*.bmp *.jpg *.png *.tif *.gif *.pcx *.tga *.exif *.fpx *.svg *.psd *.cdr *.pcd *.dxf *.ufo *.eps *.ai *.raw *.WMF *.webp) ++ ++ ++ ++ SettingBriefWidget ++ ++ ++ Form ++ + + +- Can't get activation code +- 无法获取到激活码 ++ ++ ++ ++ TextLabel ++ + + + +- LicenseInformation ++ Shortcut + +- Installation time: +- 安装时间: ++ ++ Form ++ + + +- Activation status: +- 激活状态: ++ ++ EditSearch ++ + + +- Expiry date: +- 质保期: ++ ++ Custom ++ 自定义 + + +- Contact Us: +- 联系我们: ++ ++ ++ ++ Edit ++ 编辑 + + +- Unknow +- 未知 ++ ++ ButtonAddShortcut ++ + + +- Can't get activation information +- 无法获取激活信息 ++ ++ ++ ++ ++ Add ++ 添加 + + +- Activate +- 激活 ++ ++ ButtonReset ++ + + +- The current time is illegal +- 当前时间不合法 ++ ++ Reset ++ 重置 + + +- Less than the installation time +- 小于安装时间 ++ ++ Custom Shortcut Name ++ 自定义快捷键名称 + + +- Not activated. Trail expiration: +- 未激活.试用到期: ++ ++ EditCustomShortcutName ++ + + +- get service status failed +- 获取服务状态信息失败 ++ ++ Custom Shortcut application ++ 自定义快捷键应用程序 + + +- Not yet +- 暂无 ++ ++ ++ EditShortcutApp ++ + + +- Activated +- 已激活 ++ ++ Custom Shortcut Key ++ 自定义快捷键 + + +- Forever +- 永久授权 ++ ++ ButtonAdd ++ + + +- Copyright © +- 版权所有 © ++ ++ ButtonCancel ++ + + +- KylinSec. All rights reserved. +- KylinSec.保留所有权利. ++ ++ Cancel ++ 取消 + +- +- +- ListExpansionSpace + +- ListExpansionSpace ++ ++ Shortcut Name ++ 快捷键名称 ++ ++ ++ ++ EditShortcutName + + +- +- +- Media Key + +- Audio Play +- 音频播放 ++ ++ Shortcut application ++ 快捷键应用程序 ++ ++ ++ ++ Shortcut key ++ 快捷键 + + +- Search +- 搜索 ++ ++ ButtonSave ++ + + +- WWW +- 万维网 ++ ++ Save ++ 保存 + + +- Audio Lower Volume +- 减小音量 ++ ++ ButtonReturn ++ + + +- Audio Raise Volume +- 增大音量 ++ ++ return ++ 返回 + + +- Mic Mute +- 输入静音 ++ ++ Please enter a search keyword... ++ 请输入搜索关键字... + + +- Audio Stop +- 音频停止 ++ ++ Required ++ 必填 + + +- Explorer +- 浏览 ++ ++ ++ Please press the new shortcut key ++ 请输入新快捷键 + + +- Calculator +- 计算器 ++ ++ Finished ++ 完成 + + +- Audio Mute +- 音频暂停 ++ ++ failed to load shortcut key data! ++ 加载快捷键数据失败! + + +- Audio Pause +- 音频暂停 ++ ++ List shortcut failed,error:%1 ++ 列出快捷键失败,错误:%1 + + +- Audio Prev +- 音频上一个 ++ ++ Error ++ 错误 + + +- Audio Media +- 音频媒体 ++ ++ Get shortcut failed,error: ++ 获取快捷键失败,错误: + + +- Audio Next +- 音频下一个 ++ ++ Open File ++ 打开文件 + + +- Mail +- 邮件 ++ ++ System ++ 系统 + + +- Tools +- 工具 ++ ++ Sound ++ 声音 + + +- Eject +- 弹出 ++ ++ ++ ++ ++ ++ ++ ++ Failed ++ 失败 + +- +- +- MonthSpinBox + +- MMMM +- MMMM ++ ++ Delete shortcut failed,error: ++ 删除快捷键失败,错误: + +- +- +- MousePage + +- Form +- ++ ++ ++ Warning ++ 警告 + + +- Select Mouse Hand +- 选择鼠标手持模式 ++ ++ ++ Please complete the shortcut information! ++ 请完善快捷键信息! + + +- ComboSelectMouseHand +- ++ ++ Set shortcut ++ 设置快捷键 + + +- Mouse Motion Acceleration +- 鼠标移动加速 ++ ++ Are you sure you want to disable this shortcut? ++ 是否确定要禁用此快捷键? + + +- SliderMouseMotionAcceleration +- ++ ++ Modify system shortcut failed,error: ++ 修改系统快捷键失败,错误: + + +- Slow +- ++ ++ Modify custom shortcut failed,error: ++ 修改自定义快捷键失败,错误: + + +- Fast +- ++ ++ Add custom shortcut failed,error: ++ 添加自定义快捷键失败,错误: + + +- Natural Scroll +- 是否为自然滚动 ++ ++ Reset shortcut failed,error: ++ 重置快捷键失败,错误: + + +- SwitchMouseNatturalScroll +- ++ ++ Cannot use shortcut "%1", Because you cannot enter with this key.Please try again using Ctrl, Alt, or Shift at the same time. ++ 无法使用快捷键"%1",因为使用此键将无法输入,请同时使用Ctrl,Alt,Shift再试一次。 + + +- Middle Emulation Enabled +- 同时按下左右键模拟中键 ++ ++ Shortcut keys %1 are already used in %2,Please try again! ++ 快捷键%1已用于%2,请再试一次! + ++ ++ ++ ShortcutItem + +- SwitchMiddleEmulation +- ++ ++ Form ++ + + +- Test mouse wheel direction +- 鼠标滚轮方向测试 ++ ++ ++ TextLabel ++ + ++ ++ ++ ShowQRCode + +- This is line 1 of the test text +-This is line 2 of the test text +-This is line 3 of the test text +-This is line 4 of the test text +-This is line 5 of the test text +-This is line 6 of the test text +-This is line 7 of the test text +-This is line 8 of the test text +-This is line 9 of the test text +-This is line 10 of the test text +-This is line 11 of the test text +-This is line 12 of the test text +-This is line 13 of the test text +-This is line 14 of the test text +-This is line 15 of the test text +-This is line 16 of the test text +-This is line 17 of the test text +-This is line 18 of the test text +-This is line 19 of the test text +-This is line 20 of the test text +-This is line 21 of the test text +-This is line 22 of the test text +-This is line 23 of the test text +-This is line 24 of the test text +-This is line 25 of the test text +-This is line 26 of the test text +-This is line 27 of the test text +-This is line 28 of the test text +-This is line 29 of the test text +-This is line 30 of the test text +-This is line 31 of the test text +-This is line 32 of the test text +-This is line 33 of the test text +-This is line 34 of the test text +-This is line 35 of the test text +-This is line 36 of the test text +-This is line 37 of the test text +-This is line 38 of the test text +-This is line 39 of the test text +-This is line 40 of the test text +-This is line 41 of the test text +-This is line 42 of the test text +-This is line 43 of the test text +-This is line 44 of the test text +-This is line 45 of the test text +-This is line 46 of the test text +-This is line 47 of the test text +-This is line 48 of the test text +-This is line 49 of the test text +-This is line 50 of the test text +- 这是第1行测试文字 +-这是第2行测试文字 +-这是第3行测试文字 +-这是第4行测试文字 +-这是第5行测试文字 +-这是第6行测试文字 +-这是第7行测试文字 +-这是第8行测试文字 +-这是第9行测试文字 +-这是第10行测试文字 +-这是第11行测试文字 +-这是第12行测试文字 +-这是第13行测试文字 +-这是第14行测试文字 +-这是第15行测试文字 +-这是第16行测试文字 +-这是第17行测试文字 +-这是第18行测试文字 +-这是第19行测试文字 +-这是第20行测试文字 +-这是第21行测试文字 +-这是第22行测试文字 +-这是第23行测试文字 +-这是第24行测试文字 +-这是第25行测试文字 +-这是第26行测试文字 +-这是第27行测试文字 +-这是第28行测试文字 +-这是第29行测试文字 +-这是第30行测试文字 +-这是第31行测试文字 +-这是第32行测试文字 +-这是第33行测试文字 +-这是第34行测试文字 +-这是第35行测试文字 +-这是第36行测试文字 +-这是第37行测试文字 +-这是第38行测试文字 +-这是第39行测试文字 +-这是第40行测试文字 +-这是第41行测试文字 +-这是第42行测试文字 +-这是第43行测试文字 +-这是第44行测试文字 +-这是第45行测试文字 +-这是第46行测试文字 +-这是第47行测试文字 +-这是第48行测试文字 +-这是第49行测试文字 +-这是第50行测试文字 ++ Scan QR code to get machine code ++ 扫描二维码获取机器码 + + +- Right Hand Mode +- 右手模式 ++ QRcode of Machine and Activation Code ++ 激活信息二维码 + + +- Left Hand Mode +- 左手模式 ++ Scan QR code to get activation code ++ 扫描二维码获取激活码 + + + +- MouseSettings ++ StatusNotification + +- Select Mouse Hand +- 选择鼠标手持模式 ++ ++ ++ ++ ++ ++ Connection Failed ++ 连接失败 ++ ++ ++ ++ the network not found ++ 未找到网络 + + +- Mouse Motion Acceleration +- 鼠标移动加速 ++ ++ The hidden network "%1" to be connected has been detected and exists in the network list ++ 要连接的隐藏网络“%1”已经被探测到,并存在于网络列表中 + + +- Natural Scroll +- 是否为自然滚动 ++ ++ ++ Failed to connect to the network "%1" ++ 无法连接到网络 "%1" + + +- Middle Emulation Enabled +- 同时按下左右键模拟中键 ++ ++ Connection activated ++ 网络已连接 + + +- Right Hand Mode +- 右手模式 ++ ++ You are now connected to the network "%1" ++ 您已连接到网络 "%1" + + +- Left Hand Mode +- 左手模式 ++ ++ Connection deactivated ++ 连接断开 + + +- Slow +- ++ ++ You have now disconnected the network "%1" ++ 您已断开网络连接 "%1" + + +- Standard +- 标准 ++ ++ Connection deleted ++ 连接已删除 + + +- Fast +- ++ ++ The connection has been deleted "%1" ++ 已删除连接 "%1" + + + +- MouseSubItem ++ SystemInfoSubItem + +- Mouse Settings +- 鼠标设置 ++ ++ System Information ++ 系统信息 + + + +- PanelWindow ++ SystemInformation + +- Control Panel +- 控制面板 ++ ++ Form ++ + +- +- +- PasswordExpirationPolicyPage + +- PasswordExpirationPolicyPage +- ++ ++ Host Name: ++ 主机名: + + +- User expires +- 用户过期时间 ++ ++ LabelHostName ++ + + +- SpinBoxUserExpires ++ ++ ++ ++ ++ ++ TextLabel + + + +- yyyy-MM-dd +- ++ ++ ButtonChangeHostName ++ + + +- Last password change +- 最近一次密码修改时间 ++ ++ Change ++ 更改 + + +- LabelLastPasswdChange +- ++ ++ System Version: ++ 系统版本: + + +- 1990-01-01 +- ++ ++ LabelSystemVersion ++ + + +- Maximum vaild days of password +- 密码最大有限天数 ++ ++ Kernel Version: ++ 内核版本: + + +- SpinBoxMaximumValidDays ++ ++ LabelKernelVersion + + + +- Prompt time before password expiration +- 密码过期之前提醒的天数 ++ ++ System Architecture: ++ 系统架构: + + +- SpinBoxPromptBeforeExpiration ++ ++ LabelSystemArch + + + +- how many days after password expires will become inactive +- 密码过期多少天认定为失效 ++ ++ Activation status: ++ 激活状态: + + +- SpinBoxPasswdInactiveTime +- ++ ++ ++ ++ ++ Show ++ 查看 + + +- ButtonSave ++ ++ EULA: ++ 最终用户许可协议: ++ ++ ++ ++ ButtonShowEULA + + + +- save +- 保存 ++ ++ Version License: ++ 版本协议: + + +- ButtonReturn ++ ++ ButtonShowVersionLicense + + + +- return +- 返回 ++ ++ ++ ++ ++ Unknow ++ 未知 + + +- day +- ++ ++ UnActivated ++ 未激活 + +- +- +- Popup + +- cancel +- 取消 ++ ++ Activation code has expired ++ 激活码已过期 + +- +- +- PowerPlugin + +- General Settings +- 通用设置 ++ ++ Permanently activated ++ 永久激活 + + +- Power Settings +- 电源设置 ++ ++ Activated ++ 已激活 + + +- Battery Settings +- 电池设置 ++ ++ Error ++ 错误 + +- +- +- PowerProfilesWrapper + +- power-saver +- 省电模式 ++ ++ Failed to open the license activator ++ 启动激活许可证弹窗失败 + + +- balanced +- 平衡模式 ++ Copyright © ++ 版权所有 © + + +- performance +- 性能模式 ++ KylinSec. All rights reserved. ++ KylinSec.保留所有权利. ++ ++ ++ ++ Privacy policy: ++ 隐私协议: + + + +- PowerSettingsPage ++ SystemInformationWidget + +- PowerSettingsPage +- 电源设置页面 ++ Host Name: ++ 主机名: + + +- After idle for more than the following time, the computer will execute +- 空闲超过以下时间后,计算机将执行 ++ System Version: ++ 系统版本: + + +- ComboIdleTime +- ++ Kernel Version: ++ 内核版本: + + +- ComboIdleAction +- ++ System Architecture: ++ 系统架构: + + +- The monitor will turn off when it is idle +- 显示器空闲以下时间关闭 ++ Installation time: ++ 安装时间: + + +- ComboMonitorTrunOffIdleTime +- ++ Activation status: ++ 激活状态: + + +- Suspend +- 待机 ++ Expiry date: ++ 质保期: + + +- Shutdown +- 关机 ++ EULA: ++ 最终用户许可协议: + + +- Hibernate +- 休眠 ++ Version License: ++ 版本协议: + + +- Do nothing +- 不执行操作 ++ Contact Us: ++ 联系我们: + +- +- +- PowerSubItem + +- Power Settings +- 电源设置 ++ Change ++ 更改 + +- +- +- PrefsPage + +- Authentication type Enabled status +- 认证类型启用状态 ++ Show ++ 查看 + + +- fingerprint +- 指纹 ++ Unknow ++ 未知 + + +- fingervein +- 指静脉 ++ The current time is illegal ++ 当前时间不合法 + + +- ... +- ++ Less than the installation time ++ 小于安装时间 + + +- Return +- 返回 ++ Not activated. Trail expiration: ++ 未激活.试用到期: + + +- login +- 登录 ++ Can't get activation information ++ 无法获取激活信息 + + +- unlock +- 解锁 ++ Activate ++ 激活 + + +- empowerment +- 授权 ++ get service status failed ++ 获取服务状态信息失败 + + +- Apply the %1 authentication to the following applications +- 启用%1认证在以下的认证应用中 ++ Not yet ++ 暂无 ++ ++ ++ Activated ++ 已激活 ++ ++ ++ Forever ++ 永久授权 ++ ++ ++ Copyright © ++ 版权所有 © ++ ++ ++ KylinSec. All rights reserved. ++ KylinSec.保留所有权利. + ++ ++ ++ TextInputDialog + +- ukey +- UKey ++ ++ Tips ++ 提示 + + +- iris +- 虹膜 ++ ++ Yes ++ 确认 + + +- face +- 人脸 ++ ++ Cancel ++ 取消 + + + +- QObject ++ ThemePage + +- Did not reply within the specified timeout +- 连接超时 ++ ++ Form ++ + + +- The called service is not known +- 无法连接到Dbus服务 ++ ++ Dark and Light Theme ++ 深浅色主题设置 + + +- warning +- 警告 ++ ++ Themes Settings ++ 主题设置 + + +- Open qss file failed +- 加载qss文件失败 ++ ++ Open Window Effects ++ 打开或关闭窗口特效 + + +- %1Day +- %1天 ++ ++ ++ Unknown ++ 未知 + + +- %1Hour +- %1小时 ++ ++ Light Theme ++ 浅色 + + +- %1Minute +- %1分钟 ++ ++ Auto ++ 自动 + + +- never +- 从不 ++ ++ Dark Theme ++ 深色 + + +- SLow +- 低速 ++ ++ Choose icon Theme ++ 选择图标主题 + + +- Standard +- 标准 ++ ++ Choose cursor Themes ++ 选择光标主题 + ++ ++ ++ ThemeWidget + +- Fast +- 快速 ++ Dark Theme ++ 深色 + + +- Faild +- 失败 ++ Light Theme ++ 浅色 + + +- Connect Mouse or TouchPad Dbus Failed! +- 连接鼠标或触摸板Dbus服务失败! ++ Auto ++ 自动 + ++ ++ ++ Themes + +- Load qss file failed! +- 加载qss文件失败! ++ Dark and Light Theme ++ 深浅色主题设置 + + +- No search results, please search again... +- 无搜索结果,请重新搜索... ++ Themes Settings ++ 主题设置 + + +- Tips +- 提示 ++ Open Window Effects ++ 打开或关闭窗口特效 + + +- OK(K) +- 确定(K) ++ Choose icon themes ++ 选择图标主题 + + +- Failed to apply display settings!%1 +- 应用显示设置失败!%1 ++ Unknown ++ 未知 + + +- Fallback display setting failed! %1 +- 回撤显示设置失败! %1 ++ Choose cursor themes ++ 选择光标主题 + ++ ++ ++ ThreadObject + ++ + Failed + 失败 + + +- Set font failed! +- 设置字体失败! +- +- +- Get icon themes failed! +- 获取图标主题失败! ++ ++ List shortcut failed,error: ++ 列出快捷键失败,错误: + ++ ++ ++ TimeDateSubItem + +- Get cursor themes failed! +- 获取光标主题失败! ++ ++ Time Date Settings ++ 日期时间设置 + + +- Warning +- 警告 ++ ++ Chnage time Zone ++ 更改时区 + + +- There is no theme to set! +- 目前没有主题可以设置! ++ ++ Set time Manually ++ 手动设置时间 + + +- Set font failed! +- ++ ++ Time date format setting ++ 日期时间格式设置 + + + +- SearchEdit +- +- Enter keywords to search +- 输入关键词进行搜索 +- ++ TimezoneSettings + +- Info +- 提示 ++ ++ TimezoneSettings ++ + + +- Failed to find related items, please re-enter! +- 未能搜索到相关项,请重新输入! ++ ++ Select Time Zone ++ 选择时区 + +- +- +- SelectAvatarPage + +- Confirm +- 确认 ++ ++ ButtonSave ++ + + +- Return +- 返回 ++ ++ save ++ 保存 + + +- select picture +- 选择图片 ++ ++ ButtonReturn ++ + + +- image files(*.bmp *.jpg *.png *.tif *.gif *.pcx *.tga *.exif *.fpx *.svg *.psd *.cdr *.pcd *.dxf *.ufo *.eps *.ai *.raw *.WMF *.webp) +- 图片文件(*.bmp *.jpg *.png *.tif *.gif *.pcx *.tga *.exif *.fpx *.svg *.psd *.cdr *.pcd *.dxf *.ufo *.eps *.ai *.raw *.WMF *.webp) ++ ++ reset ++ 重置 + + + +- SettingBriefWidget ++ TopBar + +- Form ++ ++ ListExpansionSpace + + + +- TextLabel ++ ++ TITLE ++ ++ ++ ++ ++ FLAG + + + + +- Shortcut ++ TouchPadPage + ++ + Form +- ++ + + +- EditSearch +- ++ ++ TouchPad Enabled ++ 开启触摸板 + + +- Custom +- 自定义 ++ ++ SwitchTouchPadEnable ++ + + +- Edit +- 编辑 ++ ++ Select TouchPad Hand ++ 选择触摸板使用模式 + + +- ButtonAddShortcut ++ ++ ComboTouchPadHand + + + +- Add +- 添加 ++ ++ TouchPad Motion Acceleration ++ 触摸板移动加速 + + +- ButtonReset ++ ++ SliderTouchPadMotionAcceleration + + + +- Reset +- 重置 ++ ++ Slow ++ + + +- Custom Shortcut Name +- 自定义快捷键名称 ++ ++ Fast ++ + + +- EditCustomShortcutName ++ ++ Select Click Method ++ 设置点击触摸板方式 ++ ++ ++ ++ ComboClickMethod + + + +- Custom Shortcut application +- 自定义快捷键应用程序 ++ ++ Select Scroll Method ++ 滚动窗口方式 + + +- EditShortcutApp ++ ++ ComboScrollMethod + + + +- Custom Shortcut Key +- 自定义快捷键 ++ ++ Natural Scroll ++ 是否为自然滚动 + + +- ButtonAdd ++ ++ ComboNaturalScroll + + + +- ButtonCancel +- ++ ++ Enabled while Typing ++ 打字时触摸板禁用 + + +- Cancel +- 取消 ++ ++ SwitchTypingEnable ++ + + +- Shortcut Name +- 快捷键名称 ++ ++ Tap to Click ++ 轻击(不按下)触摸板功能是否生效 + + +- EditShortcutName ++ ++ SwtichTapToClick + + + +- Shortcut application +- 快捷键应用程序 ++ ++ Right Hand Mode ++ 右手模式 + + +- Shortcut key +- 快捷键 ++ ++ Left Hand Mode ++ 左手模式 + + +- ButtonSave +- ++ ++ Press and Tap ++ 按键和轻触 + + +- Save +- 保存 ++ ++ Tap ++ 轻触 ++ ++ ++ ++ Two Finger Scroll ++ 两指滑动 + + +- ButtonReturn +- ++ ++ Edge Scroll ++ 边缘滑动 + ++ ++ ++ TouchPadSettings + +- return +- 返回 ++ Touchpad Enabled ++ 禁用触摸板 + + +- Please enter a search keyword... +- 请输入搜索关键字... ++ Disable TouchPad ++ 禁用触摸板 + + +- Required +- 必填 ++ TouchPad Enabled ++ 开启触摸板 + + +- Please press the new shortcut key +- 请输入新快捷键 ++ Select TouchPad Hand ++ 选择触摸板使用模式 + + +- Finished +- 完成 ++ TouchPad Motion Acceleration ++ 触摸板移动加速 + + +- failed to load shortcut key data! +- 加载快捷键数据失败! ++ Select Click Method ++ 设置点击触摸板方式 + + +- List shortcut failed,error:%1 +- 列出快捷键失败,错误:%1 ++ Select Scroll Method ++ 滚动窗口方式 + + +- Error +- 错误 ++ Natural Scroll ++ 是否为自然滚动 + + +- Get shortcut failed,error: +- 获取快捷键失败,错误: ++ Enabled while Typing ++ 打字时触摸板禁用 + + +- Open File +- 打开文件 ++ Tap to Click ++ 轻击(不按下)触摸板功能是否生效 + + +- System +- 系统 ++ Slow ++ + + +- Sound +- 声音 ++ Standard ++ 标准 + + +- Failed +- 失败 ++ Fast ++ + + +- Delete shortcut failed,error: +- 删除快捷键失败,错误: ++ Right Hand Mode ++ 右手模式 + + +- Warning +- 警告 ++ Left Hand Mode ++ 左手模式 + + +- Please complete the shortcut information! +- 请完善快捷键信息! ++ Press and Tap ++ 按键和轻触 + + +- Set shortcut +- 设置快捷键 ++ Tap ++ 轻触 + + +- Are you sure you want to disable this shortcut? +- 是否确定要禁用此快捷键? ++ Two Finger Scroll ++ 两指滑动 + + +- Modify system shortcut failed,error: +- 修改系统快捷键失败,错误: ++ Edge Scroll ++ 边缘滑动 + ++ ++ ++ TouchPadSubItem + +- Modify custom shortcut failed,error: +- 修改自定义快捷键失败,错误: ++ ++ TouchPad Settings ++ 触摸板设置 + ++ ++ ++ TrayConnectionList + +- Add custom shortcut failed,error: +- 添加自定义快捷键失败,错误: ++ ++ Other WiFi networks ++ 其它WIFI网络 + ++ ++ ++ TrayItemWidget + +- Reset shortcut failed,error: +- 重置快捷键失败,错误: ++ ++ TrayItemWidget ++ + + +- Cannot use shortcut "%1", Because you cannot enter with this key.Please try again using Ctrl, Alt, or Shift at the same time. +- 无法使用快捷键"%1",因为使用此键将无法输入,请同时使用Ctrl,Alt,Shift再试一次。 ++ ++ Icon ++ + + +- Shortcut keys %1 are already used in %2,Please try again! +- 快捷键%1已用于%2,请再试一次! ++ ++ Name ++ 名称 + +- +- +- ShortcutItem + +- Form +- ++ ++ Status ++ 状态 + + +- TextLabel +- ++ ++ Ignore ++ 忽略 + +- +- +- ShowQRCode + +- Scan QR code to get machine code +- 扫描二维码获取机器码 ++ ++ Disconnect ++ 断开 + + +- QRcode of Machine and Activation Code +- 激活信息二维码 ++ ++ ++ Cancel ++ 取消 + + +- Scan QR code to get activation code +- 扫描二维码获取激活码 ++ ++ ++ Connect ++ 连接 + +- +- +- SystemInfoSubItem + +- System Information +- 系统信息 ++ ++ Connected ++ 已连接 + +- +- +- SystemInformation + +- Form +- ++ ++ Unconnected ++ 未连接 + + +- Host Name: +- 主机名: ++ ++ Please input password ++ 请输入密码 + + +- LabelHostName +- ++ ++ Please input a network name ++ 请输入网络名称 + ++ ++ ++ TrayPage + +- TextLabel ++ ++ TrayPage + + + +- ButtonChangeHostName ++ ++ TextLabel + + + +- Change +- 更改 ++ ++ Select wired network card ++ 请选择有线网卡 + + +- System Version: +- 系统版本: ++ ++ Select wireless network card ++ 请选择无线网卡 + ++ ++ ++ UKeyPage + +- LabelSystemVersion +- ++ ++ Ukey ++ UKey + + +- Kernel Version: +- 内核版本: ++ ++ Default Ukey device ++ 默认UKey设备 + + +- LabelKernelVersion +- ++ ++ List of devices bound to the Ukey ++ 绑定UKey设备列表 + + +- System Architecture: +- 系统架构: ++ ++ ++ ++ error ++ 错误 + + +- LabelSystemArch +- ++ ++ No UKey device detected, pelease insert the UKey device and perform operations ++ 未检测到UKey设备,请插入UKey设备再次执行操作 + + +- Activation status: +- 激活状态: ++ ++ UKey Enroll ++ UKey录入 + + +- Show +- 查看 ++ ++ Please enter the ukey pin code ++ 请输入UKey PIN码 + ++ ++ ++ UKeyPinCodeDialog + +- EULA: +- 最终用户许可协议: ++ UKey Enroll ++ UKey录入 + + +- ButtonShowEULA +- ++ Please enter the ukey pin code ++ 请输入UKey PIN码 + + +- Version License: +- 版本协议: ++ Confirm ++ 确认 + + +- ButtonShowVersionLicense +- ++ Cancel ++ 取消 + ++ ++ ++ UserInfoPage + +- Unknow +- 未知 ++ ++ Form ++ + + +- UnActivated +- 未激活 ++ ++ Account ++ + + +- Activation code has expired +- 激活码已过期 ++ ++ Change password ++ 修改密码 + + +- Permanently activated +- 永久激活 ++ ++ User id ++ 用户ID + + +- Activated +- 已激活 ++ ++ User type ++ 用户类型 + + +- Error +- 错误 ++ ++ User status ++ 启用用户 + +- +- Failed to open the license activator +- 启动激活许可证弹窗失败 ++ ++ ++ auth manager ++ 认证管理 + + +- Copyright © +- 版权所有 © ++ ++ Password expiration policy ++ 密码过期策略 + + +- KylinSec. All rights reserved. +- KylinSec.保留所有权利. ++ ++ Confirm ++ 保存 + + +- Privacy policy: +- 隐私协议: ++ ++ Delete ++ 删除用户 + +- +- +- SystemInformationWidget + +- Host Name: +- 主机名: ++ ++ Current password ++ 当前密码 + + +- System Version: +- 系统版本: ++ ++ EditCurrentPasswd ++ + + +- Kernel Version: +- 内核版本: ++ ++ New password ++ 新密码 + + +- System Architecture: +- 系统架构: ++ ++ EditNewPasswd ++ + + +- Installation time: +- 安装时间: ++ ++ Enter the new password again ++ 再次输入新密码 + + +- Activation status: +- 激活状态: ++ ++ EditNewPasswdAgain ++ + + +- Expiry date: +- 质保期: ++ ++ EditPasswdSave ++ + + +- EULA: +- 最终用户许可协议: ++ ++ Save ++ 保存 + + +- Version License: +- 版本协议: ++ ++ EditPasswdCancel ++ + + +- Contact Us: +- 联系我们: ++ ++ Cancel ++ 取消 + + +- Change +- 更改 ++ Account type ++ 帐户类型 + + +- Show +- 查看 ++ Account status ++ 启用帐户 + + +- Unknow +- 未知 ++ ++ standard ++ 普通用户 + + +- The current time is illegal +- 当前时间不合法 ++ ++ administrator ++ 管理员 + + +- Less than the installation time +- 小于安装时间 ++ ++ Please enter the new user password ++ 请输入新密码 + + +- Not activated. Trail expiration: +- 未激活.试用到期: ++ ++ Please enter the password again ++ 请再次输入密码 + + +- Can't get activation information +- 无法获取激活信息 ++ ++ The password you enter must be the same as the former one ++ 两次密码不相同,请核对后,再次输入 + + +- Activate +- 激活 ++ ++ Please enter the current user password ++ 请输入当前密码 + + +- get service status failed +- 获取服务状态信息失败 ++ ++ The current password is incorrect ++ 当前密码错误,请再次输入 + + +- Not yet +- 暂无 ++ ++ The new password cannot be the same as the current password ++ 新密码不能和旧密码相同,请重新输入 + + +- Activated +- 已激活 ++ ++ ++ ++ ++ ++ Error ++ 错误 + + +- Forever +- 永久授权 ++ ++ ++ Password encryption failed ++ 密码加密失败 + + +- Copyright © +- 版权所有 © ++ ++ user information updated successfully ++ 用户信息更新成功 + + +- KylinSec. All rights reserved. +- KylinSec.保留所有权利. ++ ++ Password updated successfully ++ 密码更新成功 + +- +- +- ThemePage + +- Form +- ++ ++ The directory and files under the user's home directory are deleted with the user.Are you sure you want to delete the user(%1)? ++ 用户目录下的目录和文件会随用户一起删除,确定要删除%1用户吗? + + +- Dark and Light Theme +- 深浅色主题设置 ++ ++ Warning ++ 警告 + + +- Themes Settings +- 主题设置 ++ Account information updated successfully ++ 帐户信息更新成功 + ++ ++ ++ UserlicenseAgreement + +- Open Window Effects +- 打开或关闭窗口特效 ++ Export ++ 导出 + + +- Unknown +- 未知 ++ Close ++ 关闭 + + +- Light Theme +- 浅色 ++ Save ++ 保存 + + +- Auto +- 自动 ++ Export EULA ++ 导出最终用户许可协议 + + +- Dark Theme +- 深色 ++ Export EULA failed! ++ 导出最终用户许可协议失败! + + +- Choose icon Theme +- 选择图标主题 ++ User End License Agreement ++ 最终用户许可协议 + + +- Choose cursor Themes +- 选择光标主题 ++ None ++ 暂无 + + + +- ThemeWidget +- +- Dark Theme +- 深色 +- ++ VolumeIntputSubItem + +- Light Theme +- 浅色 ++ ++ VolumeInput ++ 输入 + ++ ++ ++ VolumeOutputSubItem + +- Auto +- 自动 ++ ++ VolumeOutput ++ 输出 + + + +- Themes ++ VolumeSettingPage + +- Dark and Light Theme +- 深浅色主题设置 ++ ++ VolumeSettingPage ++ + + +- Themes Settings +- 主题设置 ++ ++ ++ Volume ++ 音量 + ++ ++ ++ VpnIPsec + +- Open Window Effects +- 打开或关闭窗口特效 ++ ++ VpnIPsec ++ + + +- Choose icon themes +- 选择图标主题 ++ ++ Enable IPsec ++ 启用IPsec + + +- Unknown +- 未知 ++ ++ Group Name ++ 组名 + + +- Choose cursor themes +- 选择光标主题 ++ ++ EditGroupName ++ + +- +- +- ThreadObject + +- Failed +- 失败 ++ ++ Group ID ++ 组ID + + +- List shortcut failed,error: +- 列出快捷键失败,错误: ++ ++ EditGroupId ++ + +- +- +- TimeDateSubItem + +- Time Date Settings +- 日期时间设置 ++ ++ Pre-Shared Key ++ 预共享密钥 + + +- Chnage time Zone +- 更改时区 ++ ++ EditPreSharedKey ++ + + +- Set time Manually +- 手动设置时间 ++ ++ Show Password ++ 显示密码 + + +- Time date format setting +- 日期时间格式设置 ++ ++ Internet Key Exchange Protocol ++ 密钥交换协议 + +- +- +- TimezoneSettings + +- TimezoneSettings ++ ++ EditIpsecIKE + + + +- Select Time Zone +- 选择时区 ++ ++ Encapsulating Security Payload ++ 安全封装协议 + + +- ButtonSave ++ ++ EditIpsecESP + + ++ ++ ++ VpnIpvx + +- save +- 保存 +- +- +- ButtonReturn ++ ++ VpnIpvx + + + +- reset +- 重置 ++ ++ IPV4 Method ++ IPV4方法 + +- +- +- TopBar + +- ListExpansionSpace ++ ++ ComboBoxVPNIpv4Method + + + +- TITLE +- ++ ++ Only applied in corresponding resources ++ 仅用于相对应的网络上的资源 + + +- FLAG +- ++ ++ Preferred DNS ++ 首选DNS + +- +- +- TouchPadPage + +- Form ++ ++ EditVPNIpv4PreferredDNS + + + +- TouchPad Enabled +- 开启触摸板 ++ ++ Alternate DNS ++ 备选DNS + + +- SwitchTouchPadEnable ++ ++ EditIpv4AlternateDNS + + + +- Select TouchPad Hand +- 选择触摸板使用模式 ++ ++ Auto ++ 自动 + ++ ++ ++ VpnL2tpSetting + +- ComboTouchPadHand ++ ++ VpnL2tpSetting + + + +- TouchPad Motion Acceleration +- 触摸板移动加速 ++ ++ VPN name ++ VPN名称 + ++ ++ ++ VpnManager + +- SliderTouchPadMotionAcceleration ++ ++ ++ VpnManager + + + +- Slow +- ++ ++ VPN type ++ VPN类型 + + +- Fast +- ++ ++ Save ++ 保存 + + +- Select Click Method +- 设置点击触摸板方式 ++ ++ Return ++ 返回 + + +- ComboClickMethod +- ++ ++ VPN ++ VPN + + +- Select Scroll Method +- 滚动窗口方式 ++ ++ L2TP ++ + + +- ComboScrollMethod +- ++ ++ Tips ++ 提示 + + +- Natural Scroll +- 是否为自然滚动 ++ ++ Password required to connect to %1. ++ 连接网络 "%1" 需要密码 + ++ ++ ++ VpnPpp + +- ComboNaturalScroll ++ ++ VpnPpp + + + +- Enabled while Typing +- 打字时触摸板禁用 ++ ++ Use MPPE ++ 使用MPPE + + +- SwitchTypingEnable +- ++ ++ Security ++ 安全 + + +- Tap to Click +- 轻击(不按下)触摸板功能是否生效 ++ ++ ComboBoxMppeSecurity ++ + + +- SwtichTapToClick +- ++ ++ Stateful MPPE ++ 使用带状态的MPPE + + +- Right Hand Mode +- 右手模式 ++ ++ All available (default) ++ 都可用(默认) + + +- Left Hand Mode +- 左手模式 ++ ++ 40-bit (less secure) ++ 40位(较安全) + + +- Press and Tap +- 按键和轻触 ++ ++ 128-bit (most secure) ++ 128位(最安全) + + +- Tap +- 轻触 ++ ++ Refuse EAP Authentication ++ 拒绝EAP认证 + + +- Two Finger Scroll +- 两指滑动 ++ ++ Refuse PAP Authentication ++ 拒绝PAP认证 + + +- Edge Scroll +- 边缘滑动 ++ ++ Refuse CHAP Authentication ++ 拒绝CHAP认证 + +- +- +- TouchPadSettings + +- Touchpad Enabled +- 禁用触摸板 ++ ++ Refuse MSCHAP Authentication ++ 拒绝MSCHAP认证 + + +- Disable TouchPad +- 禁用触摸板 ++ ++ Refuse MSCHAPv2 Authentication ++ 拒绝MSCHAPv2认证 + + +- TouchPad Enabled +- 开启触摸板 ++ ++ No BSD Data Compression ++ 无BSD数据压缩 + + +- Select TouchPad Hand +- 选择触摸板使用模式 ++ ++ No Deflate Data Compression ++ 无Deflate数据压缩 + + +- TouchPad Motion Acceleration +- 触摸板移动加速 ++ ++ No TCP Header Compression ++ 无TCP头压缩 + + +- Select Click Method +- 设置点击触摸板方式 ++ ++ No Protocol Field Compression ++ 无协议字段压缩 + + +- Select Scroll Method +- 滚动窗口方式 ++ ++ No Address/Control Compression ++ 无地址/控制压缩 + + +- Natural Scroll +- 是否为自然滚动 ++ ++ Send PPP Echo Packets ++ 发送PPP回响包 + ++ ++ ++ VpnPptpSetting + +- Enabled while Typing +- 打字时触摸板禁用 ++ ++ VpnPptpSetting ++ + + +- Tap to Click +- 轻击(不按下)触摸板功能是否生效 ++ ++ VPN name ++ VPN名称 + ++ ++ ++ VpnWidget + +- Slow +- ++ ++ VpnWidget ++ + + +- Standard +- 标准 ++ ++ Gateway ++ 网关 + + +- Fast +- ++ ++ EditVPNGateway ++ + + +- Right Hand Mode +- 右手模式 ++ ++ User Name ++ 用户名 + + +- Left Hand Mode +- 左手模式 ++ ++ EditVPNUserName ++ + + +- Press and Tap +- 按键和轻触 ++ ++ Password Options ++ 密码选项 + + +- Tap +- 轻触 ++ ++ ComboBoxVPNPasswordOptions ++ + + +- Two Finger Scroll +- 两指滑动 ++ ++ Password ++ 密码 + + +- Edge Scroll +- 边缘滑动 ++ ++ EditVPNPassword ++ + +- +- +- TouchPadSubItem + +- TouchPad Settings +- 触摸板设置 ++ ++ ButtonPasswordVisual ++ + +- +- +- UKeyPage + +- Ukey +- UKey ++ ++ Show Password ++ 显示密码 + + +- Default Ukey device +- 默认UKey设备 ++ ++ NT Domain ++ NT域 + + +- List of devices bound to the Ukey +- 绑定UKey设备列表 ++ ++ EditNTDomain ++ + + +- error +- 错误 ++ ++ ++ ++ Required ++ 必填 + + +- No UKey device detected, pelease insert the UKey device and perform operations +- 未检测到UKey设备,请插入UKey设备再次执行操作 ++ ++ Saved ++ 已保存的 + + +- UKey Enroll +- UKey录入 ++ ++ Ask ++ 总是询问 + + +- Please enter the ukey pin code +- 请输入UKey PIN码 ++ ++ Not required ++ 不要求 + +- +- +- UKeyPinCodeDialog + +- UKey Enroll +- UKey录入 ++ ++ Gateway can not be empty ++ 网关不能为空 + + +- Please enter the ukey pin code +- 请输入UKey PIN码 ++ ++ Gateway invalid ++ 无效的网关 + + +- Confirm +- 确认 ++ ++ user name can not be empty ++ 用户名不能为空 + + +- Cancel +- 取消 ++ ++ password can not be empty ++ 密码不能为空 + + + +- UserInfoPage ++ Wallpaper + ++ + Form + + + +- Account +- ++ ++ Set wallpaper ++ 壁纸设置 + + +- Change password +- 修改密码 ++ ++ FrameLockScreenPreview ++ + + +- User id +- 用户ID ++ ++ FrameDesktopPreivew ++ + + +- User type +- 用户类型 ++ ++ Desktop Wallpaper Preview ++ 桌面壁纸预览 + + +- User status +- 启用用户 ++ ++ Lock Screen WallPaper Preview ++ 锁屏壁纸预览 + + +- auth manager +- 认证管理 ++ ++ Select wallpaper ++ 选择壁纸 + + +- Password expiration policy +- 密码过期策略 ++ ++ Select Wallpaper ++ 选择壁纸 + + +- Confirm +- 保存 ++ ++ Set Desktop Wallpaper ++ 选择桌面壁纸 + + +- Delete +- 删除用户 ++ ++ Set Lock Screen Wallpaper ++ 选择锁屏壁纸 + + +- Current password +- 当前密码 ++ ++ ++ set wallpaper ++ 壁纸设置 + + +- EditCurrentPasswd +- ++ ++ ++ Set wallpaper failed! ++ 壁纸设置失败! + + +- New password +- 新密码 ++ ++ select picture ++ 选择图片 + + +- EditNewPasswd +- ++ ++ image files(*.bmp *.jpg *.png *.tif *.gif *.pcx *.tga *.exif *.fpx *.svg *.psd *.cdr *.pcd *.dxf *.ufo *.eps *.ai *.raw *.WMF *.webp) ++ 图片文件(*.bmp *.jpg *.png *.tif *.gif *.pcx *.tga *.exif *.fpx *.svg *.psd *.cdr *.pcd *.dxf *.ufo *.eps *.ai *.raw *.WMF *.webp) + + +- Enter the new password again +- 再次输入新密码 ++ ++ Add Image Failed ++ 添加壁纸失败 + + +- EditNewPasswdAgain ++ ++ The image already exists! ++ 该壁纸已存在! ++ ++ ++ ++ WiredManager ++ ++ ++ WiredManager + + + +- EditPasswdSave ++ ++ ButtonSave + + + ++ + Save + 保存 + + +- EditPasswdCancel ++ ++ ButtonReturn + + + +- Cancel +- 取消 ++ ++ Return ++ 返回 + + +- Account type +- 帐户类型 ++ Wired Network Adapter ++ 有线网络配置 + + +- Account status +- 启用帐户 ++ The carrier is pulled out ++ 网线被拔出 + + +- standard +- 普通用户 ++ The current device is not available ++ 当前设备不可用 + ++ ++ ++ WiredSettingPage + +- administrator +- 管理员 ++ ++ WiredSettingPage ++ + + +- Please enter the new user password +- 请输入新密码 ++ ++ Network name ++ 网络名称 + ++ ++ ++ WirelessManager + +- Please enter the password again +- 请再次输入密码 ++ ++ WirelessManager ++ + + +- The password you enter must be the same as the former one +- 两次密码不相同,请核对后,再次输入 ++ ++ Save ++ 保存 + + +- Please enter the current user password +- 请输入当前密码 ++ ++ Return ++ 返回 + + +- The current password is incorrect +- 当前密码错误,请再次输入 ++ Wireless Network Adapter ++ 无线网卡 + + +- The new password cannot be the same as the current password +- 新密码不能和旧密码相同,请重新输入 ++ The current device is not available ++ 当前设备不可用 + + +- Error +- 错误 ++ Tips ++ 提示 + + +- Password encryption failed +- 密码加密失败 ++ Password required to connect to %1. ++ 连接网络 "%1" 需要密码 + ++ ++ ++ WirelessSecurityWidget + +- user information updated successfully +- 用户信息更新成功 ++ ++ WirelessSecurityWidget ++ + + +- Password updated successfully +- 密码更新成功 ++ ++ Security ++ 安全 + + +- The directory and files under the user's home directory are deleted with the user.Are you sure you want to delete the user(%1)? +- 用户目录下的目录和文件会随用户一起删除,确定要删除%1用户吗? ++ ++ ComboBoxWirelessSecurityOption ++ + + +- Warning +- 警告 ++ ++ Password Options ++ 密码选项 + + +- Account information updated successfully +- 帐户信息更新成功 ++ ++ ComboBoxWirelessPasswordOption ++ + +- +- +- UserlicenseAgreement + +- Export +- 导出 ++ ++ Password ++ 密码 + + +- Close +- 关闭 ++ ++ EditWirelessPassword ++ + + +- Save +- 保存 ++ ++ ButtonWirelessPasswordVisual ++ + + +- Export EULA +- 导出最终用户许可协议 ++ ++ PushButton ++ + + +- Export EULA failed! +- 导出最终用户许可协议失败! ++ ++ None ++ + + +- User End License Agreement +- 最终用户许可协议 ++ ++ WPA/WPA2 Personal ++ WPA/WPA2个人版 + + +- None +- 暂无 ++ ++ Save password for all users ++ 仅为该用户存储密码 + +- +- +- Wallpaper + +- Form +- ++ ++ Save password for this user ++ 存储所有用户密码 + + +- Set wallpaper +- 壁纸设置 ++ ++ Ask me always ++ 总是询问 + + +- FrameLockScreenPreview +- ++ ++ Required ++ 必填 + ++ ++ ++ WirelessSettingPage + +- FrameDesktopPreivew ++ ++ WirelessSettingPage + + + +- Desktop Wallpaper Preview +- 桌面壁纸预览 +- +- +- Lock Screen WallPaper Preview +- 锁屏壁纸预览 ++ ++ Wireless name ++ 无线网络名称 + ++ ++ ++ WirelessTrayWidget + +- Select wallpaper +- 选择壁纸 ++ ++ the network "%1" not found ++ 未找到网络 "%1" + ++ ++ ++ WirelessWidget + +- Select Wallpaper +- 选择壁纸 ++ ++ WirelessWidget ++ + + +- Set Desktop Wallpaper +- 选择桌面壁纸 ++ ++ SSID ++ + + +- Set Lock Screen Wallpaper +- 选择锁屏壁纸 ++ ++ EditSsid ++ + + +- set wallpaper +- 壁纸设置 ++ ++ MAC Address Of Device ++ 设备MAC地址 + + +- Set wallpaper failed! +- 壁纸设置失败! ++ ++ ComboBoxWirelessMacAddress ++ + + +- select picture +- 选择图片 ++ ++ Custom MTU ++ 自定义MTU + + +- image files(*.bmp *.jpg *.png *.tif *.gif *.pcx *.tga *.exif *.fpx *.svg *.psd *.cdr *.pcd *.dxf *.ufo *.eps *.ai *.raw *.WMF *.webp) +- 图片文件(*.bmp *.jpg *.png *.tif *.gif *.pcx *.tga *.exif *.fpx *.svg *.psd *.cdr *.pcd *.dxf *.ufo *.eps *.ai *.raw *.WMF *.webp) ++ ++ SpinBoxWirelessCustomMTU ++ + + +- Add Image Failed +- 添加壁纸失败 ++ ++ Required ++ 必填 + + +- The image already exists! +- 该壁纸已存在! ++ ++ No device specified ++ 不指定设备 + + + + YearSpinBox + ++ + yyyy + yyyy年 + +-- +2.27.0 + diff --git a/0001-fix-network-After-receiving-the-Connection-Update-si.patch b/0001-fix-network-After-receiving-the-Connection-Update-si.patch deleted file mode 100644 index c8338de..0000000 --- a/0001-fix-network-After-receiving-the-Connection-Update-si.patch +++ /dev/null @@ -1,121 +0,0 @@ -From c3f02b61332c2cbac185e0306ff2583f639e5ca8 Mon Sep 17 00:00:00 2001 -From: luoqing -Date: Tue, 22 Aug 2023 15:57:19 +0800 -Subject: [PATCH 1/5] fix(network):After receiving the Connection::Update - signal from an active connection, the connection is no longer automatically - reactivated -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 收到已激活的连接的更新信号Connection::Update后,不再自动重新激活连接 - -Related #13231 ---- - .../src/plugin/manager/wired-manager.cpp | 69 +++++++++---------- - 1 file changed, 32 insertions(+), 37 deletions(-) - -diff --git a/plugins/network/src/plugin/manager/wired-manager.cpp b/plugins/network/src/plugin/manager/wired-manager.cpp -index ffe33b3..32ac227 100644 ---- a/plugins/network/src/plugin/manager/wired-manager.cpp -+++ b/plugins/network/src/plugin/manager/wired-manager.cpp -@@ -91,27 +91,34 @@ void WiredManager::handleActivateSelectedConnection(const QString &connectionPat - - auto devicestate = device->state(); - KLOG_DEBUG() << "device state:" << devicestate ; -- if(devicestate != Device::Unavailable) -+ if(devicestate == Device::Unavailable) - { -- QDBusPendingReply reply = -- NetworkManager::activateConnection(connectionPath, m_devicePath, connectionParameter); -+ StatusNotification::connectitonFailedNotifyByReason(tr("The current device is not available")); -+ return; -+ } - -- reply.waitForFinished(); -- if (reply.isError()) -+ QDBusPendingReply reply = -+ NetworkManager::activateConnection(connectionPath, m_devicePath, connectionParameter); -+ -+ reply.waitForFinished(); -+ if (reply.isError()) -+ { -+ // 此处处理进入激活流程失败的原因,并不涉及流程中某个具体阶段失败的原因 -+ KLOG_ERROR() << "activate connection failed:" << reply.error(); -+ QString errorMessage = reply.error().message(); -+ if (errorMessage.contains("device has no carrier")) - { -- // 此处处理进入激活流程失败的原因,并不涉及流程中某个具体阶段失败的原因 -- KLOG_ERROR() << "activate connection failed:" << reply.error(); -- QString errorMessage = reply.error().message(); -- if (errorMessage.contains("device has no carrier")) -- StatusNotification::connectitonFailedNotifyByReason(tr("The carrier is pulled out")); -- else -- StatusNotification::connectitonFailedNotify(connectionPath); -+ StatusNotification::connectitonFailedNotifyByReason(tr("The carrier is pulled out")); - } - else -- KLOG_DEBUG() << "activateConnection reply:" << reply.reply(); -+ { -+ StatusNotification::connectitonFailedNotify(connectionPath); -+ } - } - else -- StatusNotification::connectitonFailedNotifyByReason(tr("The current device is not available")); -+ { -+ KLOG_DEBUG() << "activateConnection reply:" << reply.reply(); -+ } - } - - // 获取到当前激活对象后,开启等待动画,判断完激活状态后停止等待动画 -@@ -141,7 +148,7 @@ void WiredManager::handleActiveConnectionAdded(const QString &path) - break; - } - } -- connect(activatedConnection.data(), &ActiveConnection::stateChanged, this, &WiredManager::handleActiveConnectionStateChanged); -+ connect(activatedConnection.data(), &ActiveConnection::stateChanged, this, &WiredManager::handleActiveConnectionStateChanged, Qt::UniqueConnection); - } - } - -@@ -214,28 +221,16 @@ void WiredManager::handleConnectionUpdated(const QString &path) - { - KLOG_DEBUG() << "Connection updated:" << path; - Connection::Ptr updateConnection = findConnection(path); -- if (updateConnection->settings()->connectionType() == ConnectionSettings::Wired) -+ if (updateConnection->settings()->connectionType() != ConnectionSettings::Wired) - { -- //移除后再加载进来以更新信息 -- ui->connectionShowPage->removeConnectionFromList(path); -- ui->connectionShowPage->addConnection(updateConnection, ""); -- if (ui->stackedWidget->currentIndex() != PAGE_SETTING) -- handleReturnPreviousPage(); -- -- QString updateConnectionPath = updateConnection->path(); -- ActiveConnection::List activeConnectionLists = activeConnections(); -- //已连接的网络的配置被修改后,点击保存 ,应该重新连接网络,以使配置生效 -- for (auto activeConn : activeConnectionLists) -- { -- if (activeConn->connection()->path() == updateConnectionPath) -- { -- auto deviceLists = activeConn->devices(); -- if (deviceLists.contains(m_devicePath)) -- { -- QDBusPendingReply<> reply = NetworkManager::deactivateConnection(activeConn->connection()->path()); -- handleActivateSelectedConnection(updateConnectionPath, ""); -- } -- } -- } -+ return; -+ } -+ -+ //移除后再加载进来以更新信息 -+ ui->connectionShowPage->removeConnectionFromList(path); -+ ui->connectionShowPage->addConnection(updateConnection, ""); -+ if (ui->stackedWidget->currentIndex() != PAGE_SETTING) -+ { -+ handleReturnPreviousPage(); - } - } --- -2.33.0 - diff --git a/0002-feature-display-When-switching-resolutions-refresh-r.patch b/0002-feature-display-When-switching-resolutions-refresh-r.patch deleted file mode 100644 index 4c80fcd..0000000 --- a/0002-feature-display-When-switching-resolutions-refresh-r.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 8468d6df5794ede71a39905e2d31f4cadda244b7 Mon Sep 17 00:00:00 2001 -From: luoqing -Date: Wed, 23 Aug 2023 11:11:09 +0800 -Subject: [PATCH 2/5] feature(display):When switching resolutions, refresh rate - preferentially selects the recommended refresh rate -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 切换分辨率时,刷新率优先选择推荐的刷新率 - -Related #13283 ---- - plugins/display/src/display-page.cpp | 21 +++++++++++++++++---- - 1 file changed, 17 insertions(+), 4 deletions(-) - -diff --git a/plugins/display/src/display-page.cpp b/plugins/display/src/display-page.cpp -index a885b8b..23b5e8e 100644 ---- a/plugins/display/src/display-page.cpp -+++ b/plugins/display/src/display-page.cpp -@@ -263,22 +263,35 @@ void DisplayPage::initExtraComboBoxRefreshRate(QComboBox *comboBox, const QList< - { - comboBox->clear(); - -- QString recommend; - QList list = m_displayConfig->listPreferredModes(m_curMonitorPath); -+ double recommendRefreshRate; - if (!list.isEmpty()) - { -- double refreshRate = list.first().refreshRate; -- recommend = QString("%1HZ").arg(QString::asprintf("%.2f", refreshRate)); -+ recommendRefreshRate = list.first().refreshRate; - } - -+ QString strPostfix = tr(" (recommended)"); - QList t_refreshRateList = refreshRateList; - std::sort(t_refreshRateList.begin(), t_refreshRateList.end(), std::greater()); - foreach (double r, t_refreshRateList) - { - QString text = QString("%1HZ").arg(QString::asprintf("%.2f", r)); -- if (text == recommend) text += tr(" (recommended)"); -+ if (QString::asprintf("%.2f", r) == QString::asprintf("%.2f", recommendRefreshRate)) -+ { -+ text.append(strPostfix); -+ } - comboBox->addItem(text, r); - } -+ -+ for (size_t i = 0; i < comboBox->count(); i++) -+ { -+ double refreshRate = comboBox->itemData(i).toDouble(); -+ if(QString::asprintf("%.2f", refreshRate) == QString::asprintf("%.2f", recommendRefreshRate)) -+ { -+ comboBox->setCurrentIndex(i); -+ break; -+ } -+ } - } - - void DisplayPage::selectResolutionComboboxItem(QComboBox *comboBox, const int &w, const int &h) --- -2.33.0 - diff --git a/0002-fix-plugins-Fix-runtime-plugin-loading-errors.patch b/0002-fix-plugins-Fix-runtime-plugin-loading-errors.patch new file mode 100644 index 0000000..961ec22 --- /dev/null +++ b/0002-fix-plugins-Fix-runtime-plugin-loading-errors.patch @@ -0,0 +1,93 @@ +From 18e6891a56f471168cbe964c61c134f6d2aeb90d Mon Sep 17 00:00:00 2001 +From: liuxinhao +Date: Fri, 15 Dec 2023 21:06:06 +0800 +Subject: [PATCH] fix(plugins): Fix runtime plugin loading errors +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +- 修复运行时插件加载错误,补全相关依赖 +--- + CMakeLists.txt | 2 +- + common/plugin-subitem.h | 4 ++-- + plugins/account/CMakeLists.txt | 12 +++++++++--- + 3 files changed, 12 insertions(+), 6 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4fe9765..07a668d 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -102,4 +102,4 @@ add_subdirectory(lib) + add_subdirectory(libexec) + add_subdirectory(launcher) + add_subdirectory(plugins) +-add_subdirectory(data) +\ No newline at end of file ++add_subdirectory(data) +diff --git a/common/plugin-subitem.h b/common/plugin-subitem.h +index f6f6287..1315fda 100644 +--- a/common/plugin-subitem.h ++++ b/common/plugin-subitem.h +@@ -32,7 +32,7 @@ public: + m_pCreateWidget(func) + { + } +- ~PluginSubItem(); ++ ~PluginSubItem(){}; + + public: + // 功能项ID,用于区分功能项,应确保其唯一 +@@ -72,4 +72,4 @@ private: + QString m_icon; + int m_weight; + CreateWidgetFunc m_pCreateWidget = nullptr; +-}; +\ No newline at end of file ++}; +diff --git a/plugins/account/CMakeLists.txt b/plugins/account/CMakeLists.txt +index 98c5383..586c6c8 100644 +--- a/plugins/account/CMakeLists.txt ++++ b/plugins/account/CMakeLists.txt +@@ -5,6 +5,8 @@ if (PASSWD_EXPIRATION_POLICY_VISIBLE) + endif () + + pkg_search_module(CRYPTOPP REQUIRED cryptopp) ++pkg_search_module(PAM REQUIRED pam) ++pkg_search_module(LIBCRYPT REQUIRED libcrypt) + + file(GLOB_RECURSE ACCOUNT_SRC + ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp +@@ -22,11 +24,13 @@ target_include_directories(${TARGET_NAME} PRIVATE + ${CMAKE_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/pages + ${CMAKE_CURRENT_SOURCE_DIR}/utils ++ ${PAM_INCLUDE_DIRS} + ${KIRAN_WIDGETS_INCLUDE_DIRS} + ${KIRAN_CC_DAEMON_INCLUDE_DIRS} + ${KLOG_INCLUDE_DIRS} + ${KIRAN_STYLE_INCLUDE_DIRS} +- ${CRYPTOPP_INCLUDE_DIRS}) ++ ${CRYPTOPP_INCLUDE_DIRS} ++ ${LIBCRYPT_INCLUDE_DIRS}) + + target_link_libraries(${TARGET_NAME} + common-widgets +@@ -34,10 +38,12 @@ target_link_libraries(${TARGET_NAME} + Qt5::Widgets + Qt5::DBus + Qt5::Svg ++ ${PAM_LIBRARIES} + ${KIRAN_WIDGETS_LIBRARIES} + ${KIRAN_CC_DAEMON_LIBRARIES} + ${KLOG_LIBRARIES} + ${KIRAN_STYLE_LIBRARIES} +- ${CRYPTOPP_LIBRARIES}) ++ ${CRYPTOPP_LIBRARIES} ++ ${LIBCRYPT_LIBRARIES}) + +-install(TARGETS ${TARGET_NAME} DESTINATION ${PLUGIN_LIBS_DIR}/) +\ No newline at end of file ++install(TARGETS ${TARGET_NAME} DESTINATION ${PLUGIN_LIBS_DIR}/) +-- +2.27.0 + diff --git a/0003-fix-wallpaper-change-system-wallpaper-xml-path-to-ki.patch b/0003-fix-wallpaper-change-system-wallpaper-xml-path-to-ki.patch deleted file mode 100644 index 0d86368..0000000 --- a/0003-fix-wallpaper-change-system-wallpaper-xml-path-to-ki.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 22d4318174acee6af3008fe648f7b8fdf96404cb Mon Sep 17 00:00:00 2001 -From: yuanxing -Date: Fri, 25 Aug 2023 10:49:36 +0800 -Subject: [PATCH 3/5] fix(wallpaper):change system wallpaper xml path to kiran -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 修改获取的系统壁纸xml文件路径为kiran ---- - plugins/appearance/src/pages/wallpaper/wallpaper-def.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/plugins/appearance/src/pages/wallpaper/wallpaper-def.h b/plugins/appearance/src/pages/wallpaper/wallpaper-def.h -index d27c921..adefaf9 100644 ---- a/plugins/appearance/src/pages/wallpaper/wallpaper-def.h -+++ b/plugins/appearance/src/pages/wallpaper/wallpaper-def.h -@@ -30,7 +30,7 @@ enum WallpaperType - - #define SYSTEM_BACKGROUND_PATH "/usr/share/backgrounds/kiran/" - #define LOCAL_WALLPAPER_FILE ".config/kylinsec/kiran-cpanel-appearance/wallpaper.xml" --#define SYSTEM_WALLPAPER_FILE "/usr/share/mate-background-properties/kiran_background.xml" -+#define SYSTEM_WALLPAPER_FILE "/usr/share/kiran-background-properties/kiran_background.xml" - #define CACHE_IMAGE_DIR ".config/kylinsec/kiran-cpanel-appearance/" - - #define FILENAME "filename" --- -2.33.0 - diff --git a/0004-fix-wallpaper-don-t-call-xmlWriter-if-system-backgro.patch b/0004-fix-wallpaper-don-t-call-xmlWriter-if-system-backgro.patch deleted file mode 100644 index f5c7ecd..0000000 --- a/0004-fix-wallpaper-don-t-call-xmlWriter-if-system-backgro.patch +++ /dev/null @@ -1,44 +0,0 @@ -From ae26631a045b39aeb760ada4c1cfd98783599fda Mon Sep 17 00:00:00 2001 -From: yuanxing -Date: Fri, 25 Aug 2023 13:47:13 +0800 -Subject: [PATCH 4/5] fix(wallpaper):don't call xmlWriter if system background - xml not exists to solve segmentation fault -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 当系统系统壁纸xml文件不存在时,不调用xmlWriter函数,防止段错误 ---- - .../wallpaper/widget/xml-management/xml-management.cpp | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/plugins/appearance/src/pages/wallpaper/widget/xml-management/xml-management.cpp b/plugins/appearance/src/pages/wallpaper/widget/xml-management/xml-management.cpp -index 8d174ab..385eb9e 100644 ---- a/plugins/appearance/src/pages/wallpaper/widget/xml-management/xml-management.cpp -+++ b/plugins/appearance/src/pages/wallpaper/widget/xml-management/xml-management.cpp -@@ -38,8 +38,8 @@ void XmlManagement::loadXmlFiles() - if (!file.exists()) - { - KLOG_DEBUG() << "local xml file no exist"; -- xmlReader(SYSTEM_WALLPAPER_FILE); -- xmlWriter(); -+ if (xmlReader(SYSTEM_WALLPAPER_FILE)) -+ xmlWriter(); - } - xmlReader(localFile); - } -@@ -209,6 +209,11 @@ void XmlManagement::xmlUpdate(QList> updateList) - { - QString localFile = QString("%1/%2").arg(QDir::homePath()).arg(LOCAL_WALLPAPER_FILE); - QFile file(localFile); -+ if (!file.exists()) -+ { -+ KLOG_DEBUG() << localFile << " doesn't exists!"; -+ return; -+ } - if (!file.open(QFile::WriteOnly | QFile::Text)) - { - KLOG_DEBUG() << "open " << localFile << " failed!"; --- -2.33.0 - diff --git a/0005-fix-account-Fixed-issues-related-to-creating-and-del.patch b/0005-fix-account-Fixed-issues-related-to-creating-and-del.patch deleted file mode 100644 index d40b2e0..0000000 --- a/0005-fix-account-Fixed-issues-related-to-creating-and-del.patch +++ /dev/null @@ -1,129 +0,0 @@ -From 766a1ac3345852e3f95a005bd6ef2469ab9f1dd9 Mon Sep 17 00:00:00 2001 -From: liuxinhao -Date: Mon, 28 Aug 2023 19:17:41 +0800 -Subject: [PATCH 5/5] fix(account): Fixed issues related to creating and - deleting users in account management -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 修复账户管理创建删除用户中出现的相关问题 - -Closes #13994, #13990 ---- - plugins/account/src/kiran-account-manager.cpp | 15 ++++++--------- - .../account/src/widgets/animation-push-button.cpp | 11 +++++++++++ - .../account/src/widgets/animation-push-button.h | 1 + - .../account/src/widgets/avatar-item-button.cpp | 2 +- - plugins/account/src/widgets/mask-widget.cpp | 2 +- - 5 files changed, 20 insertions(+), 11 deletions(-) - -diff --git a/plugins/account/src/kiran-account-manager.cpp b/plugins/account/src/kiran-account-manager.cpp -index 01b4fbf..15653d9 100644 ---- a/plugins/account/src/kiran-account-manager.cpp -+++ b/plugins/account/src/kiran-account-manager.cpp -@@ -109,14 +109,11 @@ void KiranAccountManager::appendSiderbarItem(const QString &userPath) - void KiranAccountManager::setDefaultSiderbarItem() - { - //设置默认侧边栏项 -- if (m_tabList->count() > 1) -+ auto items = m_tabList->findItems(AccountsGlobalInfo::instance()->getCurrentUser(), Qt::MatchCaseSensitive); -+ if ( items.size() >= 1 ) - { -- auto items = m_tabList->findItems(AccountsGlobalInfo::instance()->getCurrentUser(), Qt::MatchCaseSensitive); -- if (items.size() == 1) -- { -- auto item = items.at(0); -- m_tabList->setCurrentRow(m_tabList->row(item)); -- } -+ auto item = items.at(0); -+ m_tabList->setCurrentRow(m_tabList->row(item)); - } - else - { -@@ -128,7 +125,7 @@ void KiranAccountManager::initUI() - { - /* 遮罩,用于繁忙时屏蔽用户操作 */ - m_maskWidget = new MaskWidget(this); -- m_maskWidget->setVisible(false); -+ m_maskWidget->setVisible(true); - - /* 初始化界面主布局 */ - auto contentLayout = new QHBoxLayout(this); -@@ -444,7 +441,7 @@ void KiranAccountManager::setMaskVisible(bool visible) - { - if (visible) - { -- this->stackUnder(m_maskWidget); -+ m_maskWidget->raise(); - m_maskWidget->show(); - } - else -diff --git a/plugins/account/src/widgets/animation-push-button.cpp b/plugins/account/src/widgets/animation-push-button.cpp -index 65791f0..d65b348 100644 ---- a/plugins/account/src/widgets/animation-push-button.cpp -+++ b/plugins/account/src/widgets/animation-push-button.cpp -@@ -16,6 +16,7 @@ - #include - #include - #include -+#include - - #include "animation-push-button.h" - -@@ -85,6 +86,16 @@ void AnimationPushButton::paintEvent(QPaintEvent *event) - } - } - -+void AnimationPushButton::mousePressEvent(QMouseEvent *e) -+{ -+ if( m_isBusy ) -+ { -+ e->ignore(); -+ return; -+ } -+ QPushButton::mousePressEvent(e); -+} -+ - void AnimationPushButton::initTimeLine() - { - m_timeLine.setCurrentTime(0); -diff --git a/plugins/account/src/widgets/animation-push-button.h b/plugins/account/src/widgets/animation-push-button.h -index 9a172e2..f39e9a4 100644 ---- a/plugins/account/src/widgets/animation-push-button.h -+++ b/plugins/account/src/widgets/animation-push-button.h -@@ -38,6 +38,7 @@ private: - - protected: - virtual void paintEvent(QPaintEvent *event) override; -+ virtual void mousePressEvent(QMouseEvent *e) override; - - private: - bool m_isBusy = false; -diff --git a/plugins/account/src/widgets/avatar-item-button.cpp b/plugins/account/src/widgets/avatar-item-button.cpp -index a078974..a9e5a4b 100644 ---- a/plugins/account/src/widgets/avatar-item-button.cpp -+++ b/plugins/account/src/widgets/avatar-item-button.cpp -@@ -106,7 +106,7 @@ void AvatarItemButton::paintEvent(QPaintEvent *event) - QPoint checkedIconLeftop((this->width() - checkedIconSize.width()) / 2, - (this->height() - checkedIconSize.height()) / 2); - QRect checkedIconRect(checkedIconLeftop, checkedIconSize); -- QSvgRenderer svgRenderer(QString(":/kcp-account/images/success-indicator.svg")); -+ QSvgRenderer svgRenderer(QString(":/kiran-control-panel/images/success-indicator.svg")); - svgRenderer.render(&painter, checkedIconRect); - } - } -diff --git a/plugins/account/src/widgets/mask-widget.cpp b/plugins/account/src/widgets/mask-widget.cpp -index 088fd48..476cbb3 100644 ---- a/plugins/account/src/widgets/mask-widget.cpp -+++ b/plugins/account/src/widgets/mask-widget.cpp -@@ -41,5 +41,5 @@ bool MaskWidget::eventFilter(QObject *watched, QEvent *event) - break; - } - } -- return QObject::eventFilter(watched, event); -+ return QWidget::eventFilter(watched, event); - } --- -2.33.0 - diff --git a/0006-feature-network-When-the-gateway-setting-item-is-0.0.patch b/0006-feature-network-When-the-gateway-setting-item-is-0.0.patch deleted file mode 100644 index 6f935df..0000000 --- a/0006-feature-network-When-the-gateway-setting-item-is-0.0.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 51ade1eede326506f4814081ac4141a97082ff53 Mon Sep 17 00:00:00 2001 -From: luoqing -Date: Fri, 25 Aug 2023 14:15:36 +0800 -Subject: [PATCH 1/2] feature(network):When the gateway setting item is - 0.0.0.0, the gateway setting item is null -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 当网关设置项为“0.0.0.0”时,网关设置项置空 - -Related #13150 ---- - .../network/src/plugin/setting-widget/ipv4-widget.cpp | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/plugins/network/src/plugin/setting-widget/ipv4-widget.cpp b/plugins/network/src/plugin/setting-widget/ipv4-widget.cpp -index 63d029c..8c39794 100644 ---- a/plugins/network/src/plugin/setting-widget/ipv4-widget.cpp -+++ b/plugins/network/src/plugin/setting-widget/ipv4-widget.cpp -@@ -162,7 +162,14 @@ void Ipv4Widget::showSettings() - - ui->ipv4Address->setText(address); - ui->ipv4Netmask->setText(netmask); -- ui->ipv4Gateway->setText(gateway); -+ if(gateway != "0.0.0.0") -+ { -+ ui->ipv4Gateway->setText(gateway); -+ } -+ else -+ { -+ ui->ipv4Gateway->clear(); -+ } - } - QString preferredDNS = ""; - QString alternateDNS = ""; --- -2.33.0 - diff --git a/0007-fix-audio-Fix-parsing-error-when-json-contains-Chine.patch b/0007-fix-audio-Fix-parsing-error-when-json-contains-Chine.patch deleted file mode 100644 index de338c2..0000000 --- a/0007-fix-audio-Fix-parsing-error-when-json-contains-Chine.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 6e8923c8712ce9875863408d3bd695375d8e8973 Mon Sep 17 00:00:00 2001 -From: luoqing -Date: Tue, 29 Aug 2023 15:21:50 +0800 -Subject: [PATCH 2/2] fix(audio):Fix parsing error when json contains Chinese - characters -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 修复json中包含中文字符时的解析错误 - -Related #13261 ---- - plugins/audio/src/plugin/input-page.cpp | 2 +- - plugins/audio/src/plugin/output-page.cpp | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/plugins/audio/src/plugin/input-page.cpp b/plugins/audio/src/plugin/input-page.cpp -index 00826b4..8b0ecaa 100644 ---- a/plugins/audio/src/plugin/input-page.cpp -+++ b/plugins/audio/src/plugin/input-page.cpp -@@ -202,7 +202,7 @@ void InputPage::initActivedPort() - KLOG_DEBUG() << "getPorts:" << getPorts; - //解析默认source的端口信息 - QJsonParseError jsonParseError; -- QJsonDocument doc = QJsonDocument::fromJson(getPorts.value().toLatin1(), &jsonParseError); -+ QJsonDocument doc = QJsonDocument::fromJson(getPorts.value().toUtf8(), &jsonParseError); - if (!doc.isNull() && jsonParseError.error == QJsonParseError::NoError) - { - if (doc.isArray() && jsonParseError.error == QJsonParseError::NoError) -diff --git a/plugins/audio/src/plugin/output-page.cpp b/plugins/audio/src/plugin/output-page.cpp -index ef52165..420cf98 100644 ---- a/plugins/audio/src/plugin/output-page.cpp -+++ b/plugins/audio/src/plugin/output-page.cpp -@@ -98,7 +98,7 @@ void OutputPage::initActivedPort() - - //解析默认sink的端口信息 - QJsonParseError jsonParseError; -- QJsonDocument doc = QJsonDocument::fromJson(getPorts.value().toLatin1(), &jsonParseError); -+ QJsonDocument doc = QJsonDocument::fromJson(getPorts.value().toUtf8(), &jsonParseError); - if (!doc.isNull() && jsonParseError.error == QJsonParseError::NoError) - { - if (doc.isArray() && jsonParseError.error == QJsonParseError::NoError) --- -2.33.0 - diff --git a/0008-fix-audio-tray-Fixed-an-issue-where-the-volume-tray-.patch b/0008-fix-audio-tray-Fixed-an-issue-where-the-volume-tray-.patch deleted file mode 100644 index 5a72931..0000000 --- a/0008-fix-audio-tray-Fixed-an-issue-where-the-volume-tray-.patch +++ /dev/null @@ -1,153 +0,0 @@ -From 2c6ae961ff33c45c9d9d7758715af3b52d2db052 Mon Sep 17 00:00:00 2001 -From: luoqing -Date: Thu, 7 Sep 2023 19:21:39 +0800 -Subject: [PATCH] fix(audio-tray):Fixed an issue where the volume tray icon did - not change with the volume after the default Sink was changed -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 修复默认Sink变更后,音量托盘图标不随音量大小改变的问题 - -Closed #14124 ---- - .../src/system-tray/audio-system-tray.cpp | 27 +++++++++++-------- - .../audio/src/system-tray/audio-system-tray.h | 1 - - .../src/system-tray/volume-setting-page.cpp | 2 ++ - .../src/system-tray/volume-setting-page.h | 22 ++++++++------- - 4 files changed, 30 insertions(+), 22 deletions(-) - -diff --git a/plugins/audio/src/system-tray/audio-system-tray.cpp b/plugins/audio/src/system-tray/audio-system-tray.cpp -index 00e90f7..0c6aca6 100644 ---- a/plugins/audio/src/system-tray/audio-system-tray.cpp -+++ b/plugins/audio/src/system-tray/audio-system-tray.cpp -@@ -41,7 +41,6 @@ AudioSystemTray::AudioSystemTray(QWidget *parent) : QWidget(parent) - initVolumeSettingPage(defaultSinkPath); - initMixedSettingPage(); - -- m_sink = new AudioDeviceInterface(AUDIO_DBUS_NAME, defaultSinkPath, QDBusConnection::sessionBus()); - m_statusNotifierManager = new StatusNotifierManagerInterface(STATUS_NOTIFIER_MANAGER, STATUS_NOTIFIER_MANAGER_OBJECT_NAME, QDBusConnection::sessionBus(), this); - m_systemTray = new QSystemTrayIcon(); - -@@ -82,8 +81,11 @@ void AudioSystemTray::initMixedSettingPage() - void AudioSystemTray::initTrayIcon() - { - getTrayIconStyle(); -- double currentVolumeDouble = m_sink->volume() * 100; -- KLOG_INFO() << "currentVolumeDouble" << round(currentVolumeDouble); -+ -+ QDBusPendingReply defaultSinkPath = m_audioInterface->GetDefaultSink(); -+ AudioDeviceInterface defaultSink (AUDIO_DBUS_NAME, defaultSinkPath, QDBusConnection::sessionBus()); -+ double currentVolumeDouble = defaultSink.volume() * 100; -+ KLOG_INFO() << "current Volume Double" << round(currentVolumeDouble); - setTrayIcon(round(currentVolumeDouble)); - } - -@@ -117,11 +119,12 @@ void AudioSystemTray::initConnect() - { - connect(m_systemTray, &QSystemTrayIcon::activated, this, &AudioSystemTray::handleAudioTrayClicked); - -- connect(m_sink, &AudioDeviceInterface::volumeChanged, [=](double value) -- { -- int currentVolume = round(value * 100); //表示数值的时候向上取整 -- KLOG_DEBUG() << "m_sink volumeChanged :" << currentVolume; -- setTrayIcon(currentVolume); }); -+ connect(m_volumeSettingPage,&VolumeSettingPage::volumeChanged,[=](double value) -+ { -+ int currentVolume = round(value * 100); //表示数值的时候向上取整 -+ KLOG_DEBUG() << "m_sink volumeChanged :" << currentVolume; -+ setTrayIcon(currentVolume); -+ }); - - connect(m_statusNotifierManager, &StatusNotifierManagerInterface::StyleChanged, [=](const QString &style) - { -@@ -129,9 +132,11 @@ void AudioSystemTray::initConnect() - //重新获取style - getTrayIconStyle(); - //获取当前音量值重新设置TrayIcon -- m_sink->volume(); -- double currentVolumeDouble = m_sink->volume() * 100; -- setTrayIcon(round(currentVolumeDouble)); }); -+ QDBusPendingReply defaultSinkPath = m_audioInterface->GetDefaultSink(); -+ AudioDeviceInterface defaultSink (AUDIO_DBUS_NAME, defaultSinkPath, QDBusConnection::sessionBus()); -+ double currentVolumeDouble = defaultSink.volume() * 100; -+ setTrayIcon(round(currentVolumeDouble)); -+ }); - } - - void AudioSystemTray::handleAudioTrayClicked(QSystemTrayIcon::ActivationReason reason) -diff --git a/plugins/audio/src/system-tray/audio-system-tray.h b/plugins/audio/src/system-tray/audio-system-tray.h -index 16846e6..a61284e 100644 ---- a/plugins/audio/src/system-tray/audio-system-tray.h -+++ b/plugins/audio/src/system-tray/audio-system-tray.h -@@ -68,7 +68,6 @@ private: - - StatusNotifierManagerInterface* m_statusNotifierManager; - AudioInterface* m_audioInterface; -- AudioDeviceInterface* m_sink; - - QString m_colorTheme; - int xTray, yTray, heightTray, widthTray; -diff --git a/plugins/audio/src/system-tray/volume-setting-page.cpp b/plugins/audio/src/system-tray/volume-setting-page.cpp -index fac69a6..54b8f10 100644 ---- a/plugins/audio/src/system-tray/volume-setting-page.cpp -+++ b/plugins/audio/src/system-tray/volume-setting-page.cpp -@@ -132,6 +132,7 @@ void VolumeSettingPage::handleVolumeChanged(double value) - setVolumeIcon(currentVolume); - ui->volumeSetting->setValue(currentVolume); - ui->volumeSetting->blockSignals(false); -+ emit volumeChanged(value); - } - - void VolumeSettingPage::handleMuteButtonClicked() -@@ -144,6 +145,7 @@ void VolumeSettingPage::handleMuteButtonClicked() - - void VolumeSettingPage::handleDefaultSinkChanged(int index) - { -+ KLOG_DEBUG() << "Default Sink Changed"; - // delete and restart init defaultSink - if (m_sink != nullptr) - { -diff --git a/plugins/audio/src/system-tray/volume-setting-page.h b/plugins/audio/src/system-tray/volume-setting-page.h -index 4719021..80f0098 100644 ---- a/plugins/audio/src/system-tray/volume-setting-page.h -+++ b/plugins/audio/src/system-tray/volume-setting-page.h -@@ -40,16 +40,6 @@ public: - QPixmap trayIconColorSwitch(const QString &iconPath); - void disableSettings(); - --private: -- void initDbusServiceWatcher(); -- void initAudioDevice(); -- void initAudioStream(); -- template -- void initSettings(Audio *audio); -- template -- void clickMuteButton(Audio *audio); -- -- - public slots: - void handleVolumeChanged(double value); - void handleMuteButtonClicked(); -@@ -60,6 +50,18 @@ public slots: - void setVolumeIcon(int value); - void hideLine(); - -+private: -+ void initDbusServiceWatcher(); -+ void initAudioDevice(); -+ void initAudioStream(); -+ template -+ void initSettings(Audio *audio); -+ template -+ void clickMuteButton(Audio *audio); -+ -+signals: -+ void volumeChanged(double value); -+ - private: - Ui::VolumeSettingPage *ui; - AudioInterface *m_audioInterface; --- -2.33.0 - diff --git a/0009-fix-audio-The-Sink-Source-device-list-displays-only-.patch b/0009-fix-audio-The-Sink-Source-device-list-displays-only-.patch deleted file mode 100644 index 0dc8b67..0000000 --- a/0009-fix-audio-The-Sink-Source-device-list-displays-only-.patch +++ /dev/null @@ -1,306 +0,0 @@ -From 091bc92282fd07e989747ca23157f7af5113c723 Mon Sep 17 00:00:00 2001 -From: luoqing -Date: Fri, 8 Sep 2023 15:53:56 +0800 -Subject: [PATCH] fix(audio):The Sink/Source device list displays only active - ports. The port selection function is temporarily disabled -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 输入输出设备列表只显示目前已激活的端口,暂时禁用选择端口的功能 - -Related #13261 ---- - .../audio/src/dbus/audio-device-interface.cpp | 33 +++++++++ - .../audio/src/dbus/audio-device-interface.h | 9 +++ - plugins/audio/src/plugin/input-page.cpp | 69 +++++++------------ - plugins/audio/src/plugin/input-page.h | 1 - - plugins/audio/src/plugin/output-page.cpp | 62 ++++++----------- - plugins/audio/src/plugin/output-page.h | 1 - - 6 files changed, 89 insertions(+), 86 deletions(-) - -diff --git a/plugins/audio/src/dbus/audio-device-interface.cpp b/plugins/audio/src/dbus/audio-device-interface.cpp -index a3a750f..7ec201d 100644 ---- a/plugins/audio/src/dbus/audio-device-interface.cpp -+++ b/plugins/audio/src/dbus/audio-device-interface.cpp -@@ -13,6 +13,7 @@ - */ - - #include "audio-device-interface.h" -+#include - - /* - * Implementation of interface class AudioDeviceInterface -@@ -28,6 +29,38 @@ AudioDeviceInterface::~AudioDeviceInterface() - { - } - -+QList AudioDeviceInterface::getPortsInfo() -+{ -+ QDBusPendingReply getPorts = GetPorts(); -+ KLOG_DEBUG() << "getPorts:" << getPorts; -+ -+ //解析默认sink的端口信息 -+ QJsonParseError jsonParseError; -+ QJsonDocument doc = QJsonDocument::fromJson(getPorts.value().toUtf8(), &jsonParseError); -+ -+ if((doc.isNull()) || (jsonParseError.error != QJsonParseError::NoError)) -+ { -+ return QList(); -+ } -+ -+ QList portInfoList; -+ if (doc.isArray() && jsonParseError.error == QJsonParseError::NoError) -+ { -+ QJsonArray array = doc.array(); -+ for (int i = 0; i < array.count(); ++i) -+ { -+ QJsonObject object = array.at(i).toObject(); -+ AudioPortInfo portInfo; -+ portInfo.description = object.value("description").toString(); -+ portInfo.name = object.value("name").toString(); -+ portInfo.priority = object.value("priority").toDouble(); -+ portInfoList << portInfo; -+ } -+ } -+ -+ return portInfoList; -+} -+ - void sendPropertyChangedDetailSignal(AudioDeviceInterface *ptr, const QString &propertyName, QVariant value) - { - if (propertyName == QStringLiteral("active_port")) -diff --git a/plugins/audio/src/dbus/audio-device-interface.h b/plugins/audio/src/dbus/audio-device-interface.h -index 29fbe6d..8bea01a 100644 ---- a/plugins/audio/src/dbus/audio-device-interface.h -+++ b/plugins/audio/src/dbus/audio-device-interface.h -@@ -26,6 +26,13 @@ - #include - #include "audio-device-interface.h" - -+struct AudioPortInfo -+{ -+ QString description; -+ QString name; -+ double priority; -+}; -+ - /* - * Proxy class for interface com.kylinsec.Kiran.SessionDaemon.Audio.Device - */ -@@ -103,6 +110,8 @@ public: - return qvariant_cast(property("volume")); - } - -+ QList getPortsInfo(); -+ - public Q_SLOTS: // METHODS - inline QDBusPendingReply GetPorts() - { -diff --git a/plugins/audio/src/plugin/input-page.cpp b/plugins/audio/src/plugin/input-page.cpp -index 8b0ecaa..11275ec 100644 ---- a/plugins/audio/src/plugin/input-page.cpp -+++ b/plugins/audio/src/plugin/input-page.cpp -@@ -198,48 +198,28 @@ void InputPage::initInputDevice() - - void InputPage::initActivedPort() - { -- QDBusPendingReply getPorts = m_defaultSource->GetPorts(); -- KLOG_DEBUG() << "getPorts:" << getPorts; -- //解析默认source的端口信息 -- QJsonParseError jsonParseError; -- QJsonDocument doc = QJsonDocument::fromJson(getPorts.value().toUtf8(), &jsonParseError); -- if (!doc.isNull() && jsonParseError.error == QJsonParseError::NoError) -- { -- if (doc.isArray() && jsonParseError.error == QJsonParseError::NoError) -- { -- QJsonArray array = doc.array(); -- for (int i = 0; i < array.count(); ++i) -- { -- KLOG_DEBUG() << "array.at(i)" << array.at(i); -- QJsonObject object = array.at(i).toObject(); -- QString description = object.value("description").toString(); -- QString name = object.value("name").toString(); -- double priority = object.value("priority").toDouble(); -- KLOG_DEBUG() << "description" << description; -- KLOG_DEBUG() << "name" << name; -- KLOG_DEBUG() << "priority" << priority; -- -- ui->inputDevices->insertItem(i, description); -- ui->inputDevices->setItemData(i, name, Qt::UserRole); //激活端口所需信息 -- //获取已激活的端口在comobox中的index -- if (m_defaultSource->active_port() == name) -- { -- m_defaultDeviceIndex = i; -- KLOG_DEBUG() << "m_defaultDeviceIndex" << m_defaultDeviceIndex; -- } -- } -- } -- //默认选中已激活的端口 -- m_isValidPort = true; -- ui->inputDevices->setCurrentIndex(m_defaultDeviceIndex); -- ui->inputDevices->setEnabled(true); -- ui->volumeSetting->setEnabled(true); -- } -- else -+ QList portsInfo = m_defaultSource->getPortsInfo(); -+ -+ if(portsInfo.isEmpty()) - { - KLOG_DEBUG() << "ports is null"; - disableSettings(); -+ return; - } -+ -+ Q_FOREACH (auto portInfo, portsInfo) -+ { -+ if(m_defaultSource->active_port() == portInfo.name) -+ { -+ ui->inputDevices->addItem(portInfo.description,portInfo.name); -+ break; -+ } -+ } -+ -+ //默认选中已激活的端口 -+ m_isValidPort = true; -+ ui->inputDevices->setEnabled(true); -+ ui->volumeSetting->setEnabled(true); - } - - void InputPage::initInputSettins() -@@ -304,13 +284,16 @@ void InputPage::disableSettings() - void InputPage::handleActivePortChanged(const QString &value) - { - KLOG_DEBUG() << "handleActivePortChanged :" << value; -- for (int i = 0; i < ui->inputDevices->count(); ++i) -+ -+ QList portsInfo = m_defaultSource->getPortsInfo(); -+ -+ Q_FOREACH (auto portInfo, portsInfo) - { -- QString name = ui->inputDevices->itemData(i, Qt::UserRole).toString(); -- if (name == value) -+ if(m_defaultSource->active_port() == portInfo.name) - { -- ui->inputDevices->setCurrentIndex(i); -- KLOG_DEBUG() << "handleActivePortChanged setCurrentIndex " << i; -+ ui->inputDevices->clear(); -+ ui->inputDevices->addItem(portInfo.description,portInfo.name); -+ break; - } - } - } -diff --git a/plugins/audio/src/plugin/input-page.h b/plugins/audio/src/plugin/input-page.h -index 3b57daf..e9f6909 100644 ---- a/plugins/audio/src/plugin/input-page.h -+++ b/plugins/audio/src/plugin/input-page.h -@@ -91,7 +91,6 @@ private: - AudioDeviceInterface *m_activedSource; - QMap m_inputDevicesMap; - int m_defaultSourceIndex; -- int m_defaultDeviceIndex; - bool m_isValidPort = false; - - QAudioInput *m_audioInput = nullptr; -diff --git a/plugins/audio/src/plugin/output-page.cpp b/plugins/audio/src/plugin/output-page.cpp -index 420cf98..1242b8a 100644 ---- a/plugins/audio/src/plugin/output-page.cpp -+++ b/plugins/audio/src/plugin/output-page.cpp -@@ -93,47 +93,25 @@ void OutputPage::initOutputDevice() - - void OutputPage::initActivedPort() - { -- QDBusPendingReply getPorts = m_defaultSink->GetPorts(); -- KLOG_DEBUG() << "getPorts:" << getPorts; -- -- //解析默认sink的端口信息 -- QJsonParseError jsonParseError; -- QJsonDocument doc = QJsonDocument::fromJson(getPorts.value().toUtf8(), &jsonParseError); -- if (!doc.isNull() && jsonParseError.error == QJsonParseError::NoError) -- { -- if (doc.isArray() && jsonParseError.error == QJsonParseError::NoError) -- { -- QJsonArray array = doc.array(); -- for (int i = 0; i < array.count(); ++i) -- { -- KLOG_DEBUG() << "array.at(i)" << array.at(i); -- QJsonObject object = array.at(i).toObject(); -- QString description = object.value("description").toString(); -- QString name = object.value("name").toString(); -- double priority = object.value("priority").toDouble(); -- KLOG_DEBUG() << "description" << description; -- KLOG_DEBUG() << "name" << name; -- KLOG_DEBUG() << "priority" << priority; -- ui->outputDevices->insertItem(i, description); -- ui->outputDevices->setItemData(i, name, Qt::UserRole); //激活端口所需信息 -- -- //获取已激活的端口在comobox中的index -- if (m_defaultSink->active_port() == name) -- { -- m_defaultDeviceIndex = i; -- } -- } -- } -- //默认选中已激活的端口 -- ui->outputDevices->setCurrentIndex(m_defaultDeviceIndex); -- initOutputSettins(); -- } -- else -+ QList portsInfo = m_defaultSink->getPortsInfo(); -+ if(portsInfo.isEmpty()) - { - //无激活端口则禁用音量设置和平衡 - KLOG_DEBUG() << "default sink ports is null"; - disableSettings(); -+ return; - } -+ -+ Q_FOREACH (auto portInfo, portsInfo) -+ { -+ if(m_defaultSink->active_port() == portInfo.name) -+ { -+ ui->outputDevices->addItem(portInfo.description,portInfo.name); -+ break; -+ } -+ } -+ -+ initOutputSettins(); - } - - void OutputPage::initOutputSettins() -@@ -202,13 +180,15 @@ void OutputPage::initConnect() - void OutputPage::handleActivePortChanged(const QString &value) - { - KLOG_DEBUG() << "handleActivePortChanged :" << value; -- for (int i = 0; i < ui->outputDevices->count(); ++i) -+ QList portsInfo = m_defaultSink->getPortsInfo(); -+ -+ Q_FOREACH (auto portInfo, portsInfo) - { -- QString name = ui->outputDevices->itemData(i, Qt::UserRole).toString(); -- if (name == value) -+ if(m_defaultSink->active_port() == portInfo.name) - { -- ui->outputDevices->setCurrentIndex(i); -- KLOG_DEBUG() << "handleActivePortChanged setCurrentIndex " << i; -+ ui->outputDevices->clear(); -+ ui->outputDevices->addItem(portInfo.description,portInfo.name); -+ break; - } - } - } -diff --git a/plugins/audio/src/plugin/output-page.h b/plugins/audio/src/plugin/output-page.h -index abaf9a1..dea45e7 100644 ---- a/plugins/audio/src/plugin/output-page.h -+++ b/plugins/audio/src/plugin/output-page.h -@@ -61,7 +61,6 @@ private: - AudioInterface *m_audioInterface; - QMap m_outputDevicesMap; - AudioDeviceInterface *m_defaultSink; -- int m_defaultDeviceIndex; - QDBusServiceWatcher *m_dbusServiceWatcher; - }; - --- -2.33.0 - diff --git a/0010-fix-kiran-control-panel-fits-the-Qt5.9.7-interface.patch b/0010-fix-kiran-control-panel-fits-the-Qt5.9.7-interface.patch deleted file mode 100644 index 582d128..0000000 --- a/0010-fix-kiran-control-panel-fits-the-Qt5.9.7-interface.patch +++ /dev/null @@ -1,332 +0,0 @@ -From 7c62cbc143a47fa47b432b5f8a57a5dda0d536eb Mon Sep 17 00:00:00 2001 -From: niko_yhc -Date: Tue, 12 Sep 2023 16:04:09 +0800 -Subject: [PATCH] fix(kiran-control-panel):fits the Qt5.9.7 interface -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 适配Qt5.9.7接口,修复编译报错 - -Closes:#15019 ---- - lib/common-widgets/kiran-tips/kiran-tips.cpp | 4 +++ - .../src/pages/face/face-page.cpp | 1 - - .../src/pages/finger/finger-page.cpp | 11 ++++---- - .../src/pages/iris/iris-page.cpp | 1 - - .../src/pages/prefs/prefs-page.cpp | 16 ++++++------ - .../src/pages/ukey/ukey-page.cpp | 1 - - .../src/widgets/general-bio-page.cpp | 8 ++++++ - .../network/src/tray/wired-tray-widget.cpp | 10 ++++---- - .../network/src/tray/wireless-tray-widget.cpp | 14 +++++------ - plugins/power/src/upower-interface.cpp | 4 +++ - .../hardware-information.cpp | 6 ++--- - .../change-host-name-widget.cpp | 5 ---- - .../system-information/system-information.cpp | 2 +- - src/main.cpp | 25 +++++++++++++++++++ - 14 files changed, 70 insertions(+), 38 deletions(-) - -diff --git a/lib/common-widgets/kiran-tips/kiran-tips.cpp b/lib/common-widgets/kiran-tips/kiran-tips.cpp -index 7a8dcab..34f0fa2 100644 ---- a/lib/common-widgets/kiran-tips/kiran-tips.cpp -+++ b/lib/common-widgets/kiran-tips/kiran-tips.cpp -@@ -279,7 +279,11 @@ QSize KiranTips::getRightSize() const - QFontMetrics fontMetrics(font); - QMargins layoutContentMargins = this->layout()->contentsMargins(); - -+#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)) - ui->label->setFixedWidth(fontMetrics.horizontalAdvance(ui->label->text()) + 10); -+#else -+ ui->label->setFixedWidth(fontMetrics.width(ui->label->text()) + 10); -+#endif - ui->label->setFixedHeight(fontMetrics.height()); - - QSize size; -diff --git a/plugins/authentication/src/pages/face/face-page.cpp b/plugins/authentication/src/pages/face/face-page.cpp -index 5e0a0db..4412631 100644 ---- a/plugins/authentication/src/pages/face/face-page.cpp -+++ b/plugins/authentication/src/pages/face/face-page.cpp -@@ -23,7 +23,6 @@ - #include - #include - #include --#include - #include - #include - -diff --git a/plugins/authentication/src/pages/finger/finger-page.cpp b/plugins/authentication/src/pages/finger/finger-page.cpp -index 86513a6..069ab94 100644 ---- a/plugins/authentication/src/pages/finger/finger-page.cpp -+++ b/plugins/authentication/src/pages/finger/finger-page.cpp -@@ -29,7 +29,6 @@ - #include - #include - #include --#include - #include - #include - -@@ -43,11 +42,11 @@ enum FingerPageIndexEnum - }; - - const std::list> FingerProgressRangePixmapList = { -- {0, ":/kcp-authentication/images/finger-0.svg"}, -- {25, ":/kcp-authentication/images/finger-25.svg"}, -- {50, ":/kcp-authentication/images/finger-50.svg"}, -- {75, ":/kcp-authentication/images/finger-75.svg"}, -- {100, ":/kcp-authentication/images/finger-100.svg"}}; -+ std::make_tuple(0, ":/kcp-authentication/images/finger-0.svg"), -+ std::make_tuple(25, ":/kcp-authentication/images/finger-25.svg"), -+ std::make_tuple(50, ":/kcp-authentication/images/finger-50.svg"), -+ std::make_tuple(75, ":/kcp-authentication/images/finger-75.svg"), -+ std::make_tuple(100, ":/kcp-authentication/images/finger-100.svg")}; - - FingerPage::FingerPage(KiranAuthDBusProxy* proxy, FingerAuthType type, QWidget* parent) - : QWidget(parent), -diff --git a/plugins/authentication/src/pages/iris/iris-page.cpp b/plugins/authentication/src/pages/iris/iris-page.cpp -index 714c9c0..cacc801 100644 ---- a/plugins/authentication/src/pages/iris/iris-page.cpp -+++ b/plugins/authentication/src/pages/iris/iris-page.cpp -@@ -23,7 +23,6 @@ - #include - #include - #include --#include - #include - #include - -diff --git a/plugins/authentication/src/pages/prefs/prefs-page.cpp b/plugins/authentication/src/pages/prefs/prefs-page.cpp -index 8bad280..a50cc15 100644 ---- a/plugins/authentication/src/pages/prefs/prefs-page.cpp -+++ b/plugins/authentication/src/pages/prefs/prefs-page.cpp -@@ -71,11 +71,11 @@ QWidget* PrefsPage::initAuthTypePage() - authTypeLayout->addStretch(); - - std::list> authTypes = { -- {KAD_AUTH_TYPE_FINGERPRINT, tr("fingerprint")}, -- {KAD_AUTH_TYPE_FINGERVEIN, tr("fingervein")}, -- {KAD_AUTH_TYPE_UKEY, tr("ukey")}, -- {KAD_AUTH_TYPE_IRIS, tr("iris")}, -- {KAD_AUTH_TYPE_FACE, tr("face")}}; -+ std::make_tuple(KAD_AUTH_TYPE_FINGERPRINT, tr("fingerprint")), -+ std::make_tuple(KAD_AUTH_TYPE_FINGERVEIN, tr("fingervein")), -+ std::make_tuple(KAD_AUTH_TYPE_UKEY, tr("ukey")), -+ std::make_tuple(KAD_AUTH_TYPE_IRIS, tr("iris")), -+ std::make_tuple(KAD_AUTH_TYPE_FACE, tr("face"))}; - - // fill auth types - for (auto iter : authTypes) -@@ -134,9 +134,9 @@ QWidget* PrefsPage::initAuthApplicationPage() - authAppLayout->addLayout(buttonLayout); - - std::list> authTypes = { -- {KAD_AUTH_APPLICATION_LOGIN, tr("login")}, -- {KAD_AUTH_APPLICATION_UNLOCK, tr("unlock")}, -- {KAD_AUTH_APPLICATION_EMPOWERMENT, tr("empowerment")}}; -+ std::make_tuple(KAD_AUTH_APPLICATION_LOGIN, tr("login")), -+ std::make_tuple(KAD_AUTH_APPLICATION_UNLOCK, tr("unlock")), -+ std::make_tuple(KAD_AUTH_APPLICATION_EMPOWERMENT, tr("empowerment"))}; - - // fill auth applications - for (auto iter : authTypes) -diff --git a/plugins/authentication/src/pages/ukey/ukey-page.cpp b/plugins/authentication/src/pages/ukey/ukey-page.cpp -index 38051ca..bdf4033 100644 ---- a/plugins/authentication/src/pages/ukey/ukey-page.cpp -+++ b/plugins/authentication/src/pages/ukey/ukey-page.cpp -@@ -27,7 +27,6 @@ - #include - #include - #include --#include - #include - - UKeyPage::UKeyPage(KiranAuthDBusProxy* proxy, QWidget* parent) -diff --git a/plugins/authentication/src/widgets/general-bio-page.cpp b/plugins/authentication/src/widgets/general-bio-page.cpp -index 36d0ef9..1047c3e 100644 ---- a/plugins/authentication/src/widgets/general-bio-page.cpp -+++ b/plugins/authentication/src/widgets/general-bio-page.cpp -@@ -12,7 +12,10 @@ - #include - #include - #include -+#include -+#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) - #include -+#endif - - #define MAX_FEATURE_NUMBER 1000 - -@@ -45,7 +48,12 @@ QString GeneralBioPage::autoGenerateFeatureName() - - for (int i = 0; i <= 10; ++i) - { -+#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) - auto featureNumber = QRandomGenerator::global()->bounded(1, MAX_FEATURE_NUMBER); -+#else -+ qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime())); -+ auto featureNumber = qrand() % MAX_FEATURE_NUMBER + 1; -+#endif - auto temp = QString("%1 %2").arg(m_featureNamePrefix).arg(featureNumber); - - if (!m_featureNameSet.contains(temp)) -diff --git a/plugins/network/src/tray/wired-tray-widget.cpp b/plugins/network/src/tray/wired-tray-widget.cpp -index 02fac75..67b2224 100644 ---- a/plugins/network/src/tray/wired-tray-widget.cpp -+++ b/plugins/network/src/tray/wired-tray-widget.cpp -@@ -59,11 +59,11 @@ void WiredTrayWidget::initUI() - - void WiredTrayWidget::initConnection() - { -- connect(m_connectionList, &TrayConnectionList::connectionUpdated, this, &WiredTrayWidget::handleConnectionUpdated, Qt::UniqueConnection); -- connect(m_connectionList, &TrayConnectionList::activateSelectedConnection, this, &WiredTrayWidget::handleActivateSelectedConnection, Qt::UniqueConnection); -- connect(m_connectionList, &TrayConnectionList::disconnect, this, &WiredTrayWidget::handleDisconnect, Qt::UniqueConnection); -- connect(m_connectionList, &TrayConnectionList::cancelConnection, this, &WiredTrayWidget::handleCancelConnection, Qt::UniqueConnection); -- connect(m_connectionList, &TrayConnectionList::sizeChanged, this, &WiredTrayWidget::sizeChanged, Qt::UniqueConnection); -+ connect(m_connectionList.data(), &TrayConnectionList::connectionUpdated, this, &WiredTrayWidget::handleConnectionUpdated, Qt::UniqueConnection); -+ connect(m_connectionList.data(), &TrayConnectionList::activateSelectedConnection, this, &WiredTrayWidget::handleActivateSelectedConnection, Qt::UniqueConnection); -+ connect(m_connectionList.data(), &TrayConnectionList::disconnect, this, &WiredTrayWidget::handleDisconnect, Qt::UniqueConnection); -+ connect(m_connectionList.data(), &TrayConnectionList::cancelConnection, this, &WiredTrayWidget::handleCancelConnection, Qt::UniqueConnection); -+ connect(m_connectionList.data(), &TrayConnectionList::sizeChanged, this, &WiredTrayWidget::sizeChanged, Qt::UniqueConnection); - - connect(m_wiredDevice.data(), &WiredDevice::carrierChanged, this, &WiredTrayWidget::handleCarrierChanged, Qt::UniqueConnection); - connect(m_wiredDevice.data(), &Device::stateChanged, this, &WiredTrayWidget::handleStateChanged, Qt::UniqueConnection); -diff --git a/plugins/network/src/tray/wireless-tray-widget.cpp b/plugins/network/src/tray/wireless-tray-widget.cpp -index 2054d99..7680376 100644 ---- a/plugins/network/src/tray/wireless-tray-widget.cpp -+++ b/plugins/network/src/tray/wireless-tray-widget.cpp -@@ -55,19 +55,19 @@ void WirelessTrayWidget::initUI() - - void WirelessTrayWidget::initConnection() - { -- connect(m_connectionList, &TrayConnectionList::activateSelectedWirelessNetwork, this, &WirelessTrayWidget::handleActivateSelectedWirelessNetwork); -- connect(m_connectionList, &TrayConnectionList::disconnect, this, &WirelessTrayWidget::handleDisconnect); -- connect(m_connectionList, &TrayConnectionList::cancelConnection, this, &WirelessTrayWidget::handleCancelConnection); -- connect(m_connectionList, &TrayConnectionList::ignoreConnection, this, &WirelessTrayWidget::handleIgnoreConnection); -+ connect(m_connectionList.data(), &TrayConnectionList::activateSelectedWirelessNetwork, this, &WirelessTrayWidget::handleActivateSelectedWirelessNetwork); -+ connect(m_connectionList.data(), &TrayConnectionList::disconnect, this, &WirelessTrayWidget::handleDisconnect); -+ connect(m_connectionList.data(), &TrayConnectionList::cancelConnection, this, &WirelessTrayWidget::handleCancelConnection); -+ connect(m_connectionList.data(), &TrayConnectionList::ignoreConnection, this, &WirelessTrayWidget::handleIgnoreConnection); - - connect(m_wirelessDevice.data(), &WirelessDevice::networkDisappeared, this, &WirelessTrayWidget::handleNetworkDisappeared); - connect(m_wirelessDevice.data(), &WirelessDevice::networkAppeared, this, &WirelessTrayWidget::handleNetworkAppeared); - -- connect(m_connectionList, &TrayConnectionList::sendPasswordToWirelessSetting, this, &WirelessTrayWidget::setSecurityPskAndActivateWirelessConnection); -- connect(m_connectionList, &TrayConnectionList::sendSsidToWireless, this, &WirelessTrayWidget::handleActivateHiddenNetwork); -+ connect(m_connectionList.data(), &TrayConnectionList::sendPasswordToWirelessSetting, this, &WirelessTrayWidget::setSecurityPskAndActivateWirelessConnection); -+ connect(m_connectionList.data(), &TrayConnectionList::sendSsidToWireless, this, &WirelessTrayWidget::handleActivateHiddenNetwork); - - connect(m_devicePtr.data(), &Device::stateChanged, this, &WirelessTrayWidget::handleDeviceStateChanged, Qt::UniqueConnection); -- connect(m_connectionList, &TrayConnectionList::sizeChanged, this, &WirelessTrayWidget::sizeChanged); -+ connect(m_connectionList.data(), &TrayConnectionList::sizeChanged, this, &WirelessTrayWidget::sizeChanged); - - connect(SignalForward::instance(), &SignalForward::wirelessConnectionAdded, this, &WirelessTrayWidget::handleNotifierConnectionAdded); - connect(SignalForward::instance(), &SignalForward::connectionRemoved, this, &WirelessTrayWidget::handleNotifierConnectionRemoved); -diff --git a/plugins/power/src/upower-interface.cpp b/plugins/power/src/upower-interface.cpp -index f929fbd..aa7960b 100644 ---- a/plugins/power/src/upower-interface.cpp -+++ b/plugins/power/src/upower-interface.cpp -@@ -32,7 +32,11 @@ bool UPowerInterface::haveBattery() - } - #endif - -+#if UP_CHECK_VERSION(0, 99, 8) - auto devices = up_client_get_devices2(upClient); -+#else -+ auto devices = up_client_get_devices(upClient); -+#endif - void *device = nullptr; - UpDeviceKind kind; - for (int i = 0; i < devices->len; i++) -diff --git a/plugins/system/src/pages/hardware-information/hardware-information.cpp b/plugins/system/src/pages/hardware-information/hardware-information.cpp -index 9e4ae2e..5232390 100644 ---- a/plugins/system/src/pages/hardware-information/hardware-information.cpp -+++ b/plugins/system/src/pages/hardware-information/hardware-information.cpp -@@ -88,9 +88,9 @@ void HardwareInformation::initUI(void) - ui->label_CPU_info->setToolTip(cpu); - - QList > hardwareMap = { -- {disks, ui->gridLayout_hard_disk}, -- {graphics, ui->gridLayout_graphics_card}, -- {eths, ui->gridLayout_network_card}}; -+ std::make_tuple(disks, ui->gridLayout_hard_disk), -+ std::make_tuple(graphics, ui->gridLayout_graphics_card), -+ std::make_tuple(eths, ui->gridLayout_network_card)}; - for (auto hardwareInitTuple : hardwareMap) - { - QStringList infos = std::get<0>(hardwareInitTuple); -diff --git a/plugins/system/src/pages/system-information/change-host-name-widget.cpp b/plugins/system/src/pages/system-information/change-host-name-widget.cpp -index c8ea9f6..7cad825 100644 ---- a/plugins/system/src/pages/system-information/change-host-name-widget.cpp -+++ b/plugins/system/src/pages/system-information/change-host-name-widget.cpp -@@ -61,11 +61,6 @@ void ChangeHostNameWidget::initUI() - setIcon(QIcon(":/images/kylin-about.png")); - - ui->btn_save->setEnabled(false); -- -- auto screen = QApplication::screenAt(QCursor::pos()); -- auto screenGeometry = screen->geometry(); -- this->move(screenGeometry.x() + (screenGeometry.width() - this->width()) / 2, -- screenGeometry.y() + (screenGeometry.height() - this->height()) / 2); - } - - void ChangeHostNameWidget::setNewHostName() -diff --git a/plugins/system/src/pages/system-information/system-information.cpp b/plugins/system/src/pages/system-information/system-information.cpp -index c249b69..9866d01 100644 ---- a/plugins/system/src/pages/system-information/system-information.cpp -+++ b/plugins/system/src/pages/system-information/system-information.cpp -@@ -268,7 +268,7 @@ void SystemInformation::handleChangeHostName() - { - if (hostNameWidget == nullptr) - { -- hostNameWidget = new ChangeHostNameWidget; -+ hostNameWidget = new ChangeHostNameWidget(this); - } - hostNameWidget->setAttribute(Qt::WA_QuitOnClose, false); - hostNameWidget->installEventFilter(this); -diff --git a/src/main.cpp b/src/main.cpp -index 2e75c10..2ff2737 100644 ---- a/src/main.cpp -+++ b/src/main.cpp -@@ -123,6 +123,27 @@ void dumpPluginManagerInfo() - #endif - } - -+#if (QT_VERSION < QT_VERSION_CHECK(5, 10, 0)) -+static QScreen *screenAt(const QPoint &point) -+{ -+ QVarLengthArray visitedScreens; -+ for (const QScreen *screen : QGuiApplication::screens()) { -+ if (visitedScreens.contains(screen)) -+ continue; -+ -+ // The virtual siblings include the screen itself, so iterate directly -+ for (QScreen *sibling : screen->virtualSiblings()) { -+ if (sibling->geometry().contains(point)) -+ return sibling; -+ -+ visitedScreens.append(sibling); -+ } -+ } -+ -+ return nullptr; -+} -+#endif -+ - int main(int argc, char *argv[]) - { - KiranSingleApplication app(argc, -@@ -165,7 +186,11 @@ int main(int argc, char *argv[]) - PanelWindow w; - w.jump(defaultCategory,defaultSubItem); - -+#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) - auto screen = QApplication::screenAt(QCursor::pos()); -+#else -+ auto screen = screenAt(QCursor::pos()); -+#endif - QRect screenGeometry = screen->geometry(); - w.resize(1031, 742); - w.move(screenGeometry.x() + (screenGeometry.width() - w.width()) / 2, --- -2.27.0 - diff --git a/0011-fix-tray-icon-Fixed-an-issue-where-the-tray-icon-was.patch b/0011-fix-tray-icon-Fixed-an-issue-where-the-tray-icon-was.patch deleted file mode 100644 index 8a61cfb..0000000 --- a/0011-fix-tray-icon-Fixed-an-issue-where-the-tray-icon-was.patch +++ /dev/null @@ -1,214 +0,0 @@ -From 5160a4eab524c2208ef3f4743331a762f7f50ca7 Mon Sep 17 00:00:00 2001 -From: liuxinhao -Date: Fri, 15 Sep 2023 11:18:58 +0800 -Subject: [PATCH] fix(tray icon): Fixed an issue where the tray icon was not - displayed due to late registration of DBus tray service -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 修复了由于DBus托盘服务注册晚导致托盘图标不显示的问题 - -Closes #14006,#11856 ---- - plugins/audio/src/system-tray/main.cpp | 63 ++++++++---------------- - plugins/network/src/tray/main.cpp | 67 ++++++++++---------------- - 2 files changed, 47 insertions(+), 83 deletions(-) - -diff --git a/plugins/audio/src/system-tray/main.cpp b/plugins/audio/src/system-tray/main.cpp -index 169eb4d..431e6c9 100644 ---- a/plugins/audio/src/system-tray/main.cpp -+++ b/plugins/audio/src/system-tray/main.cpp -@@ -20,13 +20,13 @@ - #include - #include - #include -+#include - #include - #include - #include --#include - #include - --#define MAX_WAIT_COUNTS 10 -+#define DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER "org.kde.StatusNotifierWatcher" - - int main(int argc, char *argv[]) - { -@@ -39,56 +39,35 @@ int main(int argc, char *argv[]) - if (translator.load(QLocale(), "kiran-cpanel-audio", ".", TRANSLATE_PREFIX, ".qm")) - { - a.installTranslator(&translator); -- KLOG_INFO() << "installTranslator load:" << a.installTranslator(&translator); -+ KLOG_DEBUG() << "installTranslator load:" << a.installTranslator(&translator); - } - else -- KLOG_INFO() << "installTranslator failed"; -+ { -+ KLOG_WARNING() << "installTranslator failed"; -+ } - - AudioSystemTray *audioSystemTray = nullptr; - -- QTimer timer; -- timer.setInterval(1000); -- int waitCounts = 0; -- QObject::connect(&timer, &QTimer::timeout, [&]() -- { -- if (QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.StatusNotifierWatcher")) -- { -- KLOG_INFO() << "org.kde.StatusNotifierWatcher isServiceRegistered" << QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.StatusNotifierWatcher"); -- KLOG_INFO() << "SessionDaemon.Audio isServiceRegistered " << QDBusConnection::sessionBus().interface()->isServiceRegistered("com.kylinsec.Kiran.SessionDaemon.Audio"); -- KLOG_INFO() << "QSystemTrayIcon::isSystemTrayAvailable():" << QSystemTrayIcon::isSystemTrayAvailable(); -- -- KLOG_INFO() << "init AudioSystemTray"; -- audioSystemTray = new AudioSystemTray; -- KLOG_INFO() << "wait loop : new AudioSystemTray sucess "; -- KLOG_INFO() << "currentDateTime:"< MAX_WAIT_COUNTS) -- { -- KLOG_INFO() << "超过等待次数,程序退出"; -- return QApplication::quit(); -- } -- } }); -- -- if (QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.StatusNotifierWatcher")) -+ if (QDBusConnection::sessionBus().interface()->isServiceRegistered(DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER)) - { -- KLOG_INFO() << "org.kde.StatusNotifierWatcher isServiceRegistered" << QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.StatusNotifierWatcher"); -- KLOG_INFO() << "SessionDaemon.Audio isServiceRegistered " << QDBusConnection::sessionBus().interface()->isServiceRegistered("com.kylinsec.Kiran.SessionDaemon.Audio"); -- KLOG_INFO() << "QSystemTrayIcon::isSystemTrayAvailable():" << QSystemTrayIcon::isSystemTrayAvailable(); -- -- KLOG_INFO() << "init AudioSystemTray"; -+ KLOG_DEBUG() << DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER << "is registered,create audio tray icon"; - audioSystemTray = new AudioSystemTray; -- KLOG_INFO() << "new AudioSystemTray sucess "; - } - else - { -- timer.start(); -- KLOG_INFO() << "start wait loop"; -- KLOG_INFO() << "currentDateTime:" << QDateTime::currentDateTime(); -+ KLOG_WARNING() << DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER << "is not registered,wait"; -+ QDBusServiceWatcher* dbusServiceWatcher = new QDBusServiceWatcher; -+ dbusServiceWatcher->setConnection(QDBusConnection::sessionBus()); -+ dbusServiceWatcher->addWatchedService(DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER); -+ QObject::connect(dbusServiceWatcher, &QDBusServiceWatcher::serviceRegistered, -+ [&dbusServiceWatcher, &audioSystemTray](const QString& service) -+ { -+ if (service != DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER) -+ return; -+ KLOG_INFO() << DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER << "is registered,create audio tray icon"; -+ audioSystemTray = new AudioSystemTray; -+ dbusServiceWatcher->removeWatchedService(DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER); -+ }); - } - return QApplication::exec(); - } -diff --git a/plugins/network/src/tray/main.cpp b/plugins/network/src/tray/main.cpp -index 26b04c7..2a62bf1 100644 ---- a/plugins/network/src/tray/main.cpp -+++ b/plugins/network/src/tray/main.cpp -@@ -17,67 +17,52 @@ - #include - #include - #include --#include -+#include - #include - #include "config.h" - #include "network-tray.h" --#define MAX_WAIT_COUNTS 10 - --int main(int argc, char *argv[]) { -+#define DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER "org.kde.StatusNotifierWatcher" -+ -+int main(int argc, char* argv[]) -+{ - KiranApplication a(argc, argv); - klog_qt5_init("", "kylinsec-session", "kiran-cpanel-network", "kiran-cpanel-network"); - - KLOG_INFO() << "autostart!"; -+ - QTranslator translator; - if (translator.load(QLocale(), "kiran-cpanel-network", ".", TRANSLATE_PREFIX, ".qm")) - { - a.installTranslator(&translator); -- KLOG_INFO() << "installTranslator load:" << a.installTranslator(&translator); -+ KLOG_DEBUG() << "installTranslator load:" << a.installTranslator(&translator); - } - else -- KLOG_INFO() << "installTranslator failed"; -- -- NetworkTray *tray = nullptr; -- QTimer timer; -- timer.setInterval(1000); -- int waitCounts = 0; -- QObject::connect(&timer, &QTimer::timeout, [&]() { -- if (QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.StatusNotifierWatcher")) -- { -- KLOG_INFO() << "org.kde.StatusNotifierWatcher isServiceRegistered" << QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.StatusNotifierWatcher"); -- KLOG_INFO() << "QSystemTrayIcon::isSystemTrayAvailable():" << QSystemTrayIcon::isSystemTrayAvailable(); -- -- KLOG_INFO() << "init NetworkTray"; -- tray = new NetworkTray; -- KLOG_INFO() << "wait loop : new NetworkTray sucess "; -- KLOG_INFO() << "currentDateTime:"< MAX_WAIT_COUNTS) -- { -- KLOG_INFO() << "超过等待次数,程序退出"; -- return QApplication::quit(); -- } -- } -- }); -+ { -+ KLOG_WARNING() << "installTranslator failed"; -+ } - -- if (QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.StatusNotifierWatcher")) -+ NetworkTray* tray = nullptr; -+ if (QDBusConnection::sessionBus().interface()->isServiceRegistered(DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER)) - { -- KLOG_INFO() << "org.kde.StatusNotifierWatcher isServiceRegistered" << QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.StatusNotifierWatcher"); -- KLOG_INFO() << "QSystemTrayIcon::isSystemTrayAvailable():" << QSystemTrayIcon::isSystemTrayAvailable(); -- KLOG_INFO() << "init NetworkTray"; -+ KLOG_DEBUG() << DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER << "is registered,create network tray icon"; - tray = new NetworkTray; -- KLOG_INFO() << "new NetworkTray sucess "; - } - else - { -- timer.start(); -- KLOG_INFO() << "start wait loop"; -- KLOG_INFO() << "currentDateTime:" << QDateTime::currentDateTime(); -+ KLOG_WARNING() << DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER << "is not registered,wait"; -+ QDBusServiceWatcher* dbusServiceWatcher = new QDBusServiceWatcher; -+ dbusServiceWatcher->setConnection(QDBusConnection::sessionBus()); -+ dbusServiceWatcher->addWatchedService(DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER); -+ QObject::connect(dbusServiceWatcher, &QDBusServiceWatcher::serviceRegistered, -+ [&dbusServiceWatcher, &tray](const QString& service) -+ { -+ if (service != DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER) -+ return; -+ KLOG_INFO() << DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER << "is registered,create network tray icon"; -+ tray = new NetworkTray; -+ dbusServiceWatcher->removeWatchedService(DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER); -+ }); - } - - return QApplication::exec(); --- -2.33.0 - diff --git a/0012-fix-network-tray-Improved-the-notification-logic.-Wi.patch b/0012-fix-network-tray-Improved-the-notification-logic.-Wi.patch deleted file mode 100644 index 805d2a6..0000000 --- a/0012-fix-network-tray-Improved-the-notification-logic.-Wi.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 5628b4b31eeb7493abe41bb9a6935955f0ca090a Mon Sep 17 00:00:00 2001 -From: luoqing -Date: Fri, 15 Sep 2023 16:19:15 +0800 -Subject: [PATCH] fix(network-tray):Improved the notification logic. "Wired - NIC: xxx is unavailable" and "Network is Unavailable" are no longer displayed - during sleep recovery. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 完善通知弹窗逻辑,从休眠中恢复过程中不再提示“有线网卡:xxx不可用”和“网络不可用”。 - -Close #15619 ---- - plugins/network/src/tray/network-tray.cpp | 16 ++++++++++++++-- - 1 file changed, 14 insertions(+), 2 deletions(-) - -diff --git a/plugins/network/src/tray/network-tray.cpp b/plugins/network/src/tray/network-tray.cpp -index 7397e28..dd5ff12 100644 ---- a/plugins/network/src/tray/network-tray.cpp -+++ b/plugins/network/src/tray/network-tray.cpp -@@ -473,9 +473,21 @@ void NetworkTray::handleDeviceStateChanged(NetworkManager::Device::State newstat - } - } - -- // 设备变为不可用时,如果无线和有线均不可用则显示网络不可用的提示 -- if (newstate == Device::Unavailable || newstate == Device::Unmanaged || newstate == Device::UnknownState) -+ QSet unavailableStates = { -+ Device::Unavailable, -+ Device::Unmanaged, -+ Device::UnknownState -+ }; -+ -+ // 非休眠的情况下,从可用状态到不可用状态通知 -+ if (!unavailableStates.contains(oldstate) -+ && -+ unavailableStates.contains(newstate) -+ && -+ reason != Device::SleepingReason -+ ) - { -+ // 设备变为不可用时,如果无线和有线均不可用则显示网络不可用的提示 - KLOG_DEBUG() << "device is unavailable"; - if ((NetworkUtils::getAvailableDeviceList(Device::Ethernet).count() == 0) && - (NetworkUtils::getAvailableDeviceList(Device::Wifi).count() == 0)) --- -2.33.0 - diff --git a/0013-fix-network-Modify-DNS-Settings-and-display-DNS-deta.patch b/0013-fix-network-Modify-DNS-Settings-and-display-DNS-deta.patch deleted file mode 100644 index 288d042..0000000 --- a/0013-fix-network-Modify-DNS-Settings-and-display-DNS-deta.patch +++ /dev/null @@ -1,370 +0,0 @@ -From 2fcd30a538df01ae8505cf5c1baf26d18b1d2cef Mon Sep 17 00:00:00 2001 -From: luoqing -Date: Mon, 18 Sep 2023 10:39:58 +0800 -Subject: [PATCH] fix(network):Modify DNS Settings and display DNS details -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 自动获取IP(DNS)后,网络详情显示自动获取到的DNS - 手动配置DNS,网络详情中DNS服务器仅显示手动配置的DNS - -Close #14000 ---- - .../connection-details-widget.cpp | 51 +++++-- - .../details-page/connection-details-widget.ui | 6 +- - .../src/plugin/setting-widget/ipv4-widget.cpp | 135 +++++++++--------- - .../src/plugin/setting-widget/ipv4-widget.ui | 8 +- - 4 files changed, 116 insertions(+), 84 deletions(-) - -diff --git a/plugins/network/src/plugin/details-page/connection-details-widget.cpp b/plugins/network/src/plugin/details-page/connection-details-widget.cpp -index d94b1bd..235c48d 100644 ---- a/plugins/network/src/plugin/details-page/connection-details-widget.cpp -+++ b/plugins/network/src/plugin/details-page/connection-details-widget.cpp -@@ -67,7 +67,7 @@ void ConnectionDetailsWidget::init() - void ConnectionDetailsWidget::initUI() - { - QList widgets = {ui->securityTypeWidget, ui->frequencyBandWidget, ui->channelWidget, ui->InterfaceWidget, -- ui->macWidget, ui->ipv4Widget, ui->gatewayWidget, ui->preferredDNSWidget, ui->subnetMaskWidget, -+ ui->macWidget, ui->ipv4Widget, ui->gatewayWidget, ui->DNSWidget, ui->subnetMaskWidget, - ui->ipv6Widget, ui->ipv6GatewayWidget, ui->prefixWidget, ui->rateWidget}; - - for (auto widget : widgets) -@@ -76,7 +76,7 @@ void ConnectionDetailsWidget::initUI() - } - - QList labels = {ui->securityType, ui->frequencyBand, ui->channel, ui->networkInterface, -- ui->mac, ui->ipv4, ui->ipv4Gateway, ui->preferredDNS, ui->subnetMask, -+ ui->mac, ui->ipv4, ui->ipv4Gateway, ui->DNS, ui->subnetMask, - ui->ipv6, ui->ipv6Gateway, ui->prefix, ui->rate}; - - for (auto label : labels) -@@ -151,25 +151,54 @@ void ConnectionDetailsWidget::setIpDetails() - ui->subnetMask->setText(netmask); - ui->ipv4Gateway->setText(gateway); - -- QString preferredDNS = "-"; - Dhcp4Config::Ptr dhcp = m_activeConnection->dhcp4Config(); - auto dhcpOptions = dhcp->options(); -+ -+ QStringList tmpDNS; -+ -+ QStringList dhcpDns; - if (!dhcpOptions.isEmpty()) - { - QVariant domainNameServers = dhcpOptions.value("domain_name_servers"); -- // 以空格为分隔 -- QStringList dns = domainNameServers.toString().split(" "); -- preferredDNS = dns.value(0); -+ dhcpDns = domainNameServers.toString().split(" "); - } -- else -+ -+ Ipv4Setting::Ptr ipv4Setting = m_connection->settings()->setting(Setting::Ipv4).dynamicCast(); -+ QList ipv4SettingDNS = ipv4Setting->dns(); -+ -+ QStringList manualDNS; -+ -+ for(auto &address : ipv4SettingDNS) -+ { -+ manualDNS << address.toString(); -+ } -+ /** -+ * NOTE: -+ * 1、自动获取IP(DNS)后,网络详情显示自动获取到的DNS -+ * 2、手动配置DNS,网络详情中DNS服务器仅显示手动配置的DNS -+ */ -+ -+ QString detailsDNS; -+ manualDNS.isEmpty() ? tmpDNS = dhcpDns : tmpDNS = manualDNS; -+ if(!tmpDNS.isEmpty()) - { -- Ipv4Setting::Ptr ipv4Setting = m_connection->settings()->setting(Setting::Ipv4).dynamicCast(); -- if (!ipv4Setting->dns().isEmpty()) -+ // 以空格为分隔,删除最后一个; -+ for(auto &dns : tmpDNS) - { -- preferredDNS = ipv4Setting->dns().value(0).toString(); -+ detailsDNS.append(dns); -+ detailsDNS.append(";"); - } -+ if(detailsDNS.endsWith(";")) -+ { -+ detailsDNS.remove(detailsDNS.size() - 1,1); -+ } -+ } -+ else -+ { -+ detailsDNS = "-"; - } -- ui->preferredDNS->setText(preferredDNS); -+ -+ ui->DNS->setText(detailsDNS); - - IpConfig ipV6Config = m_activeConnection->ipV6Config(); - IpAddress ipv6Address = ipV6Config.addresses().value(0); -diff --git a/plugins/network/src/plugin/details-page/connection-details-widget.ui b/plugins/network/src/plugin/details-page/connection-details-widget.ui -index c83af72..b781390 100644 ---- a/plugins/network/src/plugin/details-page/connection-details-widget.ui -+++ b/plugins/network/src/plugin/details-page/connection-details-widget.ui -@@ -518,7 +518,7 @@ - - - -- -+ - - - 0 -@@ -556,7 +556,7 @@ - - - -- Preferred DNS -+ DNS - - - -@@ -574,7 +574,7 @@ - - - -- -+ - - TextLabel - -diff --git a/plugins/network/src/plugin/setting-widget/ipv4-widget.cpp b/plugins/network/src/plugin/setting-widget/ipv4-widget.cpp -index 8c39794..8dc420f 100644 ---- a/plugins/network/src/plugin/setting-widget/ipv4-widget.cpp -+++ b/plugins/network/src/plugin/setting-widget/ipv4-widget.cpp -@@ -74,65 +74,68 @@ void Ipv4Widget::setErrorTips(KiranTips *errorTips) - - void Ipv4Widget::saveSettings() - { -- if (m_ipv4Setting != nullptr) -+ if (m_ipv4Setting == nullptr) - { -- IpAddress ipv4Address; -- Ipv4Setting::ConfigMethod method = ui->ipv4Method->currentData().value(); -- if (method == Ipv4Setting::ConfigMethod::Automatic) -- { -- m_ipv4Setting->setMethod(method); -- ipv4Address.setIp(QHostAddress("")); -- ipv4Address.setNetmask(QHostAddress("")); -- ipv4Address.setGateway(QHostAddress("")); -- m_ipv4Setting->setAddresses(QList() << ipv4Address); -- } -- else if (method == Ipv4Setting::ConfigMethod::Manual) -- { -- m_ipv4Setting->setMethod(method); -+ return; -+ } -+ -+ IpAddress ipv4Address; -+ Ipv4Setting::ConfigMethod method = ui->ipv4Method->currentData().value(); -+ if (method == Ipv4Setting::ConfigMethod::Automatic) -+ { -+ m_ipv4Setting->setMethod(method); -+ ipv4Address.setIp(QHostAddress("")); -+ ipv4Address.setNetmask(QHostAddress("")); -+ ipv4Address.setGateway(QHostAddress("")); -+ m_ipv4Setting->setAddresses(QList() << ipv4Address); -+ } -+ else if (method == Ipv4Setting::ConfigMethod::Manual) -+ { -+ m_ipv4Setting->setMethod(method); - -- ipv4Address.setIp(QHostAddress(ui->ipv4Address->text())); -- QString netMask = ui->ipv4Netmask->text(); -- if (!netMask.contains(".")) -+ ipv4Address.setIp(QHostAddress(ui->ipv4Address->text())); -+ QString netMask = ui->ipv4Netmask->text(); -+ if (!netMask.contains(".")) -+ { -+ int netPrefix = netMask.toInt(); -+ KLOG_DEBUG() << "netMask.toInt():" << netMask.toInt(); -+ if ((netPrefix > 0) & (netPrefix < 33)) - { -- int netPrefix = netMask.toInt(); -- KLOG_DEBUG() << "netMask.toInt():" << netMask.toInt(); -- if ((netPrefix > 0) & (netPrefix < 33)) -- { -- ipv4Address.setPrefixLength(netPrefix); -- } -- else -- { -- KLOG_DEBUG() << "Net prefix length error"; -- } -+ ipv4Address.setPrefixLength(netPrefix); - } - else - { -- ipv4Address.setNetmask(QHostAddress(netMask)); -+ KLOG_DEBUG() << "Net prefix length error"; - } -- -- ipv4Address.setGateway(QHostAddress(ui->ipv4Gateway->text())); -- KLOG_DEBUG() << "ipv4Address.ip():" << ipv4Address.ip(); -- KLOG_DEBUG() << "ipv4Address.netmask():" << ipv4Address.netmask(); -- KLOG_DEBUG() << "ipv4Address.prefixLength():" << ipv4Address.prefixLength(); -- KLOG_DEBUG() << "ipv4Address.gateway():" << ipv4Address.gateway(); -- -- QList ipv4AddresseList; -- ipv4AddresseList << ipv4Address; -- m_ipv4Setting->setAddresses(ipv4AddresseList); -- } -- -- QList ipv4DNS; -- if (!ui->ipv4PreferredDNS->text().isEmpty()) -- { -- ipv4DNS << QHostAddress(ui->ipv4PreferredDNS->text()); - } -- if (!ui->ipv4AlternateDNS->text().isEmpty()) -+ else - { -- ipv4DNS << QHostAddress(ui->ipv4AlternateDNS->text()); -+ ipv4Address.setNetmask(QHostAddress(netMask)); - } -- KLOG_DEBUG() << "ipv4DNS:" << ipv4DNS; -- m_ipv4Setting->setDns(ipv4DNS); -+ -+ ipv4Address.setGateway(QHostAddress(ui->ipv4Gateway->text())); -+ KLOG_DEBUG() << "ipv4Address.ip():" << ipv4Address.ip(); -+ KLOG_DEBUG() << "ipv4Address.netmask():" << ipv4Address.netmask(); -+ KLOG_DEBUG() << "ipv4Address.prefixLength():" << ipv4Address.prefixLength(); -+ KLOG_DEBUG() << "ipv4Address.gateway():" << ipv4Address.gateway(); -+ -+ QList ipv4AddresseList; -+ ipv4AddresseList << ipv4Address; -+ m_ipv4Setting->setAddresses(ipv4AddresseList); -+ } -+ -+ QList ipv4DNS; -+ if (!ui->ipv4FirstDNS->text().isEmpty()) -+ { -+ ipv4DNS << QHostAddress(ui->ipv4FirstDNS->text()); -+ } -+ if (!ui->ipv4SecondDNS->text().isEmpty()) -+ { -+ ipv4DNS << QHostAddress(ui->ipv4SecondDNS->text()); - } -+ KLOG_DEBUG() << "ipv4DNS:" << ipv4DNS; -+ m_ipv4Setting->setDns(ipv4DNS); -+ - } - - void Ipv4Widget::showSettings() -@@ -171,20 +174,20 @@ void Ipv4Widget::showSettings() - ui->ipv4Gateway->clear(); - } - } -- QString preferredDNS = ""; -- QString alternateDNS = ""; -+ QString firstDNS = ""; -+ QString secondDNS = ""; - if (!m_ipv4Setting->dns().isEmpty()) - { -- preferredDNS = m_ipv4Setting->dns().at(0).toString(); -+ firstDNS = m_ipv4Setting->dns().at(0).toString(); - if (m_ipv4Setting->dns().count() >= 2) - { -- alternateDNS = m_ipv4Setting->dns().at(1).toString(); -+ secondDNS = m_ipv4Setting->dns().at(1).toString(); - } - } -- KLOG_DEBUG() << "preferredDNS:" << preferredDNS; -- KLOG_DEBUG() << "alternateDNS:" << alternateDNS; -- ui->ipv4PreferredDNS->setText(preferredDNS); -- ui->ipv4AlternateDNS->setText(alternateDNS); -+ KLOG_DEBUG() << "firstDNS:" << firstDNS; -+ KLOG_DEBUG() << "secondDNS:" << secondDNS; -+ ui->ipv4FirstDNS->setText(firstDNS); -+ ui->ipv4SecondDNS->setText(secondDNS); - } - else - resetSettings(); -@@ -197,8 +200,8 @@ void Ipv4Widget::resetSettings() - ui->ipv4Address->clear(); - ui->ipv4Netmask->clear(); - ui->ipv4Gateway->clear(); -- ui->ipv4PreferredDNS->clear(); -- ui->ipv4AlternateDNS->clear(); -+ ui->ipv4FirstDNS->clear(); -+ ui->ipv4SecondDNS->clear(); - } - - void Ipv4Widget::clearPtr() -@@ -271,27 +274,27 @@ bool Ipv4Widget::isInputValid() - } - } - -- QString preferredDNS = ui->ipv4PreferredDNS->text(); -- if (!preferredDNS.isEmpty()) -+ QString firstDNS = ui->ipv4FirstDNS->text(); -+ if (!firstDNS.isEmpty()) - { -- if (!isIpv4AddressValid(preferredDNS)) -+ if (!isIpv4AddressValid(firstDNS)) - { - QString error = QString(tr("Ipv4 Preferred DNS invalid")); - m_errorTip->setText(error); -- m_errorTip->showTipAroundWidget(ui->ipv4PreferredDNS); -+ m_errorTip->showTipAroundWidget(ui->ipv4FirstDNS); - KLOG_DEBUG() << "Ipv4 Preferred DNS invalid"; - return false; - } - } - -- QString alternateDNS = ui->ipv4AlternateDNS->text(); -- if (!alternateDNS.isEmpty()) -+ QString secondDNS = ui->ipv4SecondDNS->text(); -+ if (!secondDNS.isEmpty()) - { -- if (!isIpv4AddressValid(alternateDNS)) -+ if (!isIpv4AddressValid(secondDNS)) - { - QString error = QString(tr("Ipv4 Alternate DNS invalid")); - m_errorTip->setText(error); -- m_errorTip->showTipAroundWidget(ui->ipv4AlternateDNS); -+ m_errorTip->showTipAroundWidget(ui->ipv4SecondDNS); - KLOG_DEBUG() << "Ipv4 Alternate DNS invalid"; - return false; - } -diff --git a/plugins/network/src/plugin/setting-widget/ipv4-widget.ui b/plugins/network/src/plugin/setting-widget/ipv4-widget.ui -index 026e26d..93b2355 100644 ---- a/plugins/network/src/plugin/setting-widget/ipv4-widget.ui -+++ b/plugins/network/src/plugin/setting-widget/ipv4-widget.ui -@@ -187,12 +187,12 @@ - - - -- Preferred DNS -+ DNS 1 - - - - -- -+ - - - 0 -@@ -220,12 +220,12 @@ - - - -- Alternate DNS -+ DNS 2 - - - - -- -+ - - - 0 --- -2.33.0 - diff --git a/0014-fix-tray-Fixed-the-tray-menu-using-the-X11-platform-.patch b/0014-fix-tray-Fixed-the-tray-menu-using-the-X11-platform-.patch deleted file mode 100644 index 0b3bb35..0000000 --- a/0014-fix-tray-Fixed-the-tray-menu-using-the-X11-platform-.patch +++ /dev/null @@ -1,288 +0,0 @@ -From 60cfb83ae452e20c1d974eb431b2be551db3432e Mon Sep 17 00:00:00 2001 -From: luoqing -Date: Thu, 21 Sep 2023 10:21:23 +0800 -Subject: [PATCH 1/2] fix(tray):Fixed the tray menu using the X11 platform, - which caused the missing voice and network icon in the lower right corner, - and the network icon in the taskbar was formatted incorrectly -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 修复托盘菜单使用X11平台,从而导致的右下角缺少声音和网络图标,以及任务栏网络图标格式不对的问题 - -Closes #13353,#11856,#14006 ---- - CMakeLists.txt | 1 + - include/dbus-tray-monitor.h | 111 +++++++++++++++++++++++++ - plugins/audio/CMakeLists.txt | 3 +- - plugins/audio/src/system-tray/main.cpp | 28 +++---- - plugins/network/CMakeLists.txt | 1 + - plugins/network/src/tray/main.cpp | 29 +++---- - 6 files changed, 141 insertions(+), 32 deletions(-) - create mode 100644 include/dbus-tray-monitor.h - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index bdffa50..210c938 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -77,6 +77,7 @@ target_link_libraries(${PROJECT_NAME} - ${KIRAN_STYLE_LIBRARIES} - ${GLIB_2_LIBRARIES}) - -+list(FILTER INCLUDE_SRC EXCLUDE REGEX ".*bus-tray-monitor.h$") - install(FILES "${CMAKE_SOURCE_DIR}/data/kiran-control-panel.svg" DESTINATION ${INSTALL_DATADIR}/icons/hicolor/) - install(FILES ${INCLUDE_SRC} DESTINATION ${KCP_INSTALL_INCLUDE}/) - install(FILES "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.desktop" DESTINATION "${INSTALL_DATADIR}/applications/") -diff --git a/include/dbus-tray-monitor.h b/include/dbus-tray-monitor.h -new file mode 100644 -index 0000000..652e7b1 ---- /dev/null -+++ b/include/dbus-tray-monitor.h -@@ -0,0 +1,111 @@ -+/** -+ * Copyright (c) 2022 KylinSec Co., Ltd. -+ * kiran-control-panel is licensed under Mulan PSL v2. -+ * You can use this software according to the terms and conditions of the Mulan PSL v2. -+ * You may obtain a copy of Mulan PSL v2 at: -+ * http://license.coscl.org.cn/MulanPSL2 -+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -+ * See the Mulan PSL v2 for more details. -+ * -+ * Author: luoqing -+ */ -+ -+#pragma once -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#define KDE_STATUS_NOTIFIER_WATCHER_SERVICE "org.kde.StatusNotifierWatcher" -+#define KDE_STATUS_NOTIFIER_WATCHER_PATH "/StatusNotifierWatcher" -+#define FREEDESKTOP_DBUS_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties" -+#define FREEDESKTOP_DBUS_PROPERTIES_CHANGED_METHOD "PropertiesChanged" -+ -+#define KDE_STATUS_NOTIFIER_HOST "org.kde.StatusNotifierHost" -+ -+namespace KiranControlPanel -+{ -+class DBusTrayMonitor : public QObject -+{ -+ Q_OBJECT -+public: -+ DBusTrayMonitor(QObject *parent = nullptr) -+ : QObject(parent), -+ m_connection(QDBusConnection::sessionBus()), -+ m_statusNotifierHostRegistered(false) -+ { -+ -+ QDBusInterface trayWatcherInterface(KDE_STATUS_NOTIFIER_WATCHER_SERVICE, KDE_STATUS_NOTIFIER_WATCHER_PATH, -+ KDE_STATUS_NOTIFIER_WATCHER_SERVICE, QDBusConnection::sessionBus()); -+ -+ // 确认托盘服务Watcher是否存在,检测Watcher IsStatusNotifierHostRegistered是否为true(满足QDBusTray可用的条件,具体可参考Qt代码) -+ if (trayWatcherInterface.isValid() && trayWatcherInterface.property("IsStatusNotifierHostRegistered").toBool()) -+ { -+ m_statusNotifierHostRegistered = true; -+ } -+ else -+ { -+ // 托盘服务Watcher不存在/Host未注册/IsStatusNotifierHostRegistered属性未更新 -+ // 连接到DBus Daemon,处理Watcher属性变化信号 -+ m_connection.connect(KDE_STATUS_NOTIFIER_WATCHER_SERVICE, -+ KDE_STATUS_NOTIFIER_WATCHER_PATH, -+ FREEDESKTOP_DBUS_PROPERTIES_INTERFACE, -+ FREEDESKTOP_DBUS_PROPERTIES_CHANGED_METHOD, -+ this, SLOT(onWatcherServicePropertyChanged(QDBusMessage))); -+ } -+ } -+ -+ ~DBusTrayMonitor() {} -+ -+ bool isStatusNotifierHostRegistered() const { return m_statusNotifierHostRegistered; } -+ -+private slots: -+ void onWatcherServicePropertyChanged(QDBusMessage msg) -+ { -+ // 若Host已注册过,无需判断 -+ if (m_statusNotifierHostRegistered) -+ return; -+ -+ QList args = msg.arguments(); -+ QVariantMap changedProps = qdbus_cast(args.at(1).value()); -+ for (auto iter = changedProps.begin(); iter != changedProps.end(); iter++) -+ { -+ if (iter.key() != "IsStatusNotifierHostRegistered") -+ continue; -+ -+ // IsStatusNotifierHostRegistered,属性变为true -+ // 发出DBus托盘服务可用信号(只在托盘初始化时发出) -+ // 后续属性变化不关注 -+ if (iter.value().toBool()) -+ { -+ m_statusNotifierHostRegistered = true; -+ KLOG_DEBUG() << "notifier host registered,dbus tray available!"; -+ emit dbusTrayAvailable(); -+ } -+ break; -+ } -+ } -+ -+signals: -+ void dbusTrayAvailable(); -+ -+private: -+ QDBusConnection m_connection; -+ bool m_statusNotifierHostRegistered; -+}; -+ -+static bool isDBusTrayAvailable() -+{ -+ bool dbusTrayAvailable = false; -+ DBusTrayMonitor conn; -+ if (conn.isStatusNotifierHostRegistered()) -+ dbusTrayAvailable = true; -+ return dbusTrayAvailable; -+} -+ -+} // namespace KiranControlPanel -diff --git a/plugins/audio/CMakeLists.txt b/plugins/audio/CMakeLists.txt -index ea568f1..55b07b2 100644 ---- a/plugins/audio/CMakeLists.txt -+++ b/plugins/audio/CMakeLists.txt -@@ -44,7 +44,8 @@ add_executable(${TRAY_PROCESS} - ${DBUS_SRC} - ${SYSTEM_TRAY_SRC} - ${AUDIO_QM_FILES} -- ${QRC}) -+ ${QRC} -+ ${PROJECT_SOURCE_DIR}/include/dbus-tray-monitor.h) - - target_include_directories(${TRAY_PROCESS} PRIVATE - ${CMAKE_BINARY_DIR} -diff --git a/plugins/audio/src/system-tray/main.cpp b/plugins/audio/src/system-tray/main.cpp -index 431e6c9..8c36383 100644 ---- a/plugins/audio/src/system-tray/main.cpp -+++ b/plugins/audio/src/system-tray/main.cpp -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include "dbus-tray-monitor.h" - - #define DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER "org.kde.StatusNotifierWatcher" - -@@ -47,27 +48,24 @@ int main(int argc, char *argv[]) - } - - AudioSystemTray *audioSystemTray = nullptr; -- -- if (QDBusConnection::sessionBus().interface()->isServiceRegistered(DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER)) -+ if (KiranControlPanel::isDBusTrayAvailable()) - { -- KLOG_DEBUG() << DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER << "is registered,create audio tray icon"; -+ KLOG_DEBUG() << KDE_STATUS_NOTIFIER_HOST << "is registered,create network tray icon"; - audioSystemTray = new AudioSystemTray; - } - else - { -- KLOG_WARNING() << DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER << "is not registered,wait"; -- QDBusServiceWatcher* dbusServiceWatcher = new QDBusServiceWatcher; -- dbusServiceWatcher->setConnection(QDBusConnection::sessionBus()); -- dbusServiceWatcher->addWatchedService(DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER); -- QObject::connect(dbusServiceWatcher, &QDBusServiceWatcher::serviceRegistered, -- [&dbusServiceWatcher, &audioSystemTray](const QString& service) -+ KLOG_WARNING() << KDE_STATUS_NOTIFIER_HOST << "is not registered,wait"; -+ -+ auto dBusTrayMonitor = new KiranControlPanel::DBusTrayMonitor(); -+ QObject::connect(dBusTrayMonitor, &KiranControlPanel::DBusTrayMonitor::dbusTrayAvailable, [&audioSystemTray]() - { -- if (service != DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER) -- return; -- KLOG_INFO() << DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER << "is registered,create audio tray icon"; -- audioSystemTray = new AudioSystemTray; -- dbusServiceWatcher->removeWatchedService(DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER); -- }); -+ if(audioSystemTray == nullptr) -+ { -+ KLOG_DEBUG() << KDE_STATUS_NOTIFIER_HOST << "is registered,create network tray icon"; -+ audioSystemTray = new AudioSystemTray; -+ } -+ }); - } - return QApplication::exec(); - } -diff --git a/plugins/network/CMakeLists.txt b/plugins/network/CMakeLists.txt -index 7ea6479..94de67a 100644 ---- a/plugins/network/CMakeLists.txt -+++ b/plugins/network/CMakeLists.txt -@@ -55,6 +55,7 @@ add_executable(${TRAY_PROCESS} - ${COMMON_SRC} - ${QRC} - ${NETWORK_QM_FILES} -+ ${PROJECT_SOURCE_DIR}/include/dbus-tray-monitor.h - ) - - target_include_directories(${TRAY_PROCESS} PRIVATE -diff --git a/plugins/network/src/tray/main.cpp b/plugins/network/src/tray/main.cpp -index 2a62bf1..5c4bb65 100644 ---- a/plugins/network/src/tray/main.cpp -+++ b/plugins/network/src/tray/main.cpp -@@ -20,10 +20,9 @@ - #include - #include - #include "config.h" -+#include "dbus-tray-monitor.h" - #include "network-tray.h" - --#define DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER "org.kde.StatusNotifierWatcher" -- - int main(int argc, char* argv[]) - { - KiranApplication a(argc, argv); -@@ -43,26 +42,24 @@ int main(int argc, char* argv[]) - } - - NetworkTray* tray = nullptr; -- if (QDBusConnection::sessionBus().interface()->isServiceRegistered(DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER)) -+ if (KiranControlPanel::isDBusTrayAvailable()) - { -- KLOG_DEBUG() << DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER << "is registered,create network tray icon"; -+ KLOG_DEBUG() << KDE_STATUS_NOTIFIER_HOST << "is registered,create network tray icon"; - tray = new NetworkTray; - } - else - { -- KLOG_WARNING() << DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER << "is not registered,wait"; -- QDBusServiceWatcher* dbusServiceWatcher = new QDBusServiceWatcher; -- dbusServiceWatcher->setConnection(QDBusConnection::sessionBus()); -- dbusServiceWatcher->addWatchedService(DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER); -- QObject::connect(dbusServiceWatcher, &QDBusServiceWatcher::serviceRegistered, -- [&dbusServiceWatcher, &tray](const QString& service) -+ KLOG_WARNING() << KDE_STATUS_NOTIFIER_HOST << "is not registered,wait"; -+ -+ auto dBusTrayMonitor = new KiranControlPanel::DBusTrayMonitor(); -+ QObject::connect(dBusTrayMonitor, &KiranControlPanel::DBusTrayMonitor::dbusTrayAvailable, [&tray]() - { -- if (service != DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER) -- return; -- KLOG_INFO() << DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER << "is registered,create network tray icon"; -- tray = new NetworkTray; -- dbusServiceWatcher->removeWatchedService(DBUS_SERVICE_KDE_STATUS_NOTIFIER_WATCHER); -- }); -+ if(tray == nullptr) -+ { -+ KLOG_DEBUG() << KDE_STATUS_NOTIFIER_HOST << "is registered,create network tray icon"; -+ tray = new NetworkTray; -+ } -+ }); - } - - return QApplication::exec(); --- -2.33.0 - diff --git a/0015-fix-network-tray-Fixed-an-issue-where-the-size-Setti.patch b/0015-fix-network-tray-Fixed-an-issue-where-the-size-Setti.patch deleted file mode 100644 index b777357..0000000 --- a/0015-fix-network-tray-Fixed-an-issue-where-the-size-Setti.patch +++ /dev/null @@ -1,81 +0,0 @@ -From c385edb7f7babef4d46ca77f1a979dd9f139b16e Mon Sep 17 00:00:00 2001 -From: luoqing -Date: Thu, 21 Sep 2023 10:33:42 +0800 -Subject: [PATCH 2/2] fix(network-tray):Fixed an issue where the size Settings - of widgets that are not currently displaying pages in the stackwidget did not - take effect when multiple nics were present during tray initialization -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 修复在托盘初始化时,存在多个网卡时,stackwidget中当前未显示页面的widget的设置大小未生效的问题 - -Close #13862 ---- - plugins/network/src/tray/tray-page.cpp | 35 ++++++++++++++++++++++++++ - plugins/network/src/tray/tray-page.h | 3 +++ - 2 files changed, 38 insertions(+) - -diff --git a/plugins/network/src/tray/tray-page.cpp b/plugins/network/src/tray/tray-page.cpp -index 753abc4..2e50f22 100644 ---- a/plugins/network/src/tray/tray-page.cpp -+++ b/plugins/network/src/tray/tray-page.cpp -@@ -53,6 +53,41 @@ void TrayPage::initUI() - { - setSingleDeviceWidget(); - } -+ -+ /** -+ * NOTE: -+ * 此处是修复当存在多个网卡时,stackwidget中当前未显示页面的widget的大小有问题 -+ * 推测原因在于,在初始化时,在页面未show的状态下,设置widget的尺寸不生效存在问题。 -+ */ -+ repolish(this); -+} -+ -+void TrayPage::repolish(QWidget *w) -+{ -+ QList children; -+ children.reserve(w->children().size() + 1); -+ for (auto child: qAsConst(w->children())) -+ children.append(child); -+ children.append(w); -+ updateObjects(children); -+} -+ -+void TrayPage::updateObjects(const QList& objects) -+{ -+ QEvent event(QEvent::StyleChange); -+ for (const QObject *object : objects) -+ { -+ if (auto widget = qobject_cast(const_cast(object))) -+ { -+ widget->style()->polish(widget); -+ QCoreApplication::sendEvent(widget, &event); -+ QList children; -+ children.reserve(widget->children().size() + 1); -+ for (auto child: qAsConst(widget->children())) -+ children.append(child); -+ updateObjects(children); -+ } -+ } - } - - void TrayPage::initConnection() -diff --git a/plugins/network/src/tray/tray-page.h b/plugins/network/src/tray/tray-page.h -index 28948a4..66a84f2 100644 ---- a/plugins/network/src/tray/tray-page.h -+++ b/plugins/network/src/tray/tray-page.h -@@ -44,6 +44,9 @@ public: - - QSize trayPageSize(); - -+ void repolish(QWidget *w); -+ void updateObjects(const QList& objects); -+ - public slots: - void handleDeviceComboBoxChanged(int index); - void handleAdjustedTraySize(QSize sizeHint); --- -2.33.0 - diff --git a/0016-fix-tray-Fixed-an-issue-where-the-popup-was-in-the-w.patch b/0016-fix-tray-Fixed-an-issue-where-the-popup-was-in-the-w.patch deleted file mode 100644 index 2adf2ff..0000000 --- a/0016-fix-tray-Fixed-an-issue-where-the-popup-was-in-the-w.patch +++ /dev/null @@ -1,125 +0,0 @@ -From 74f15f8c5e6bf30a990ebf71def1c29581e67c85 Mon Sep 17 00:00:00 2001 -From: luoqing -Date: Tue, 17 Oct 2023 09:33:24 +0800 -Subject: [PATCH] fix(tray):Fixed an issue where the popup was in the wrong - position when the tray was at the top of the screen -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 修复托盘在屏幕顶部时,弹窗位置不对的问题 - -Related #17279 ---- - .../src/system-tray/audio-system-tray.cpp | 32 +++++++++++++------ - .../audio/src/system-tray/audio-system-tray.h | 2 +- - plugins/network/src/tray/network-tray.cpp | 16 +++++++--- - 3 files changed, 35 insertions(+), 15 deletions(-) - -diff --git a/plugins/audio/src/system-tray/audio-system-tray.cpp b/plugins/audio/src/system-tray/audio-system-tray.cpp -index 0c6aca6..cc4015d 100644 ---- a/plugins/audio/src/system-tray/audio-system-tray.cpp -+++ b/plugins/audio/src/system-tray/audio-system-tray.cpp -@@ -162,7 +162,19 @@ void AudioSystemTray::setVolumeSettingPos() - int pageWidth = 300; - int pageHeight = 66; - -- m_volumenPopup->setGeometry(xTray - pageWidth / 2, yTray - pageHeight - offset, pageWidth, pageHeight); -+ int showPosY; -+ // 托盘程序在顶端 -+ if(m_yTray == 0) -+ { -+ showPosY = m_heightTray - offset; -+ } -+ else -+ { -+ //托盘程序在底部 -+ showPosY = m_yTray - pageHeight - offset; -+ } -+ -+ m_volumenPopup->setGeometry(m_xTray - pageWidth / 2, showPosY, pageWidth, pageHeight); - } - - void AudioSystemTray::handleMixedSettingClicked() -@@ -180,7 +192,7 @@ void AudioSystemTray::setMixedSettingPos() - int width = m_mixedPopup->sizeHint().width(); - - m_mixedPopup->setFixedHeight(height + offset * 2); -- m_mixedPopup->move(xTray - width / 2, yTray - height - offset); -+ m_mixedPopup->move(m_xTray - width / 2, m_yTray - height - offset); - } - - void AudioSystemTray::handleAdjustedMixedSettingPageSize() -@@ -228,15 +240,15 @@ void AudioSystemTray::getTrayGeometry() - } - } - } -- heightTray = static_cast(height); -- widthTray = static_cast(width); -- xTray = static_cast(x); -- yTray = static_cast(y); -+ m_heightTray = static_cast(height); -+ m_widthTray = static_cast(width); -+ m_xTray = static_cast(x); -+ m_yTray = static_cast(y); - KLOG_DEBUG() << "getTrayGeometry "; -- KLOG_DEBUG() << "heightTray" << heightTray; -- KLOG_DEBUG() << "widthTray" << widthTray; -- KLOG_DEBUG() << "xTray" << xTray; -- KLOG_DEBUG() << "yTray" << yTray; -+ KLOG_DEBUG() << "heightTray" << m_heightTray; -+ KLOG_DEBUG() << "widthTray" << m_widthTray; -+ KLOG_DEBUG() << "xTray" << m_xTray; -+ KLOG_DEBUG() << "yTray" << m_yTray; - } - - // XXX:频繁调用函数,需要优化 -diff --git a/plugins/audio/src/system-tray/audio-system-tray.h b/plugins/audio/src/system-tray/audio-system-tray.h -index a61284e..fd5f150 100644 ---- a/plugins/audio/src/system-tray/audio-system-tray.h -+++ b/plugins/audio/src/system-tray/audio-system-tray.h -@@ -70,7 +70,7 @@ private: - AudioInterface* m_audioInterface; - - QString m_colorTheme; -- int xTray, yTray, heightTray, widthTray; -+ int m_xTray, m_yTray, m_heightTray, m_widthTray; - - QDBusServiceWatcher *m_dbusServiceWatcher; - }; -diff --git a/plugins/network/src/tray/network-tray.cpp b/plugins/network/src/tray/network-tray.cpp -index dd5ff12..c43d8ff 100644 ---- a/plugins/network/src/tray/network-tray.cpp -+++ b/plugins/network/src/tray/network-tray.cpp -@@ -305,16 +305,24 @@ void NetworkTray::showOrHideTrayPage() - - void NetworkTray::setTrayPagePos() - { -- // KLOG_DEBUG() << "this->sizeHint():" << this->sizeHint(); -- // KLOG_DEBUG() << "this->size():" << this->size(); -- - int pageHeight = this->size().height(); - int pageWidth = this->size().width(); - - getTrayGeometry(); - // 抵消KiranRoundedTrayPopup的margin - int offset = 8; -- this->move(m_xTray - pageWidth / 2, m_yTray - pageHeight + offset); -+ int showPosY; -+ // 托盘程序在顶端 -+ if(m_yTray == 0) -+ { -+ showPosY = m_heightTray - offset; -+ } -+ else -+ { -+ //托盘程序在底部 -+ showPosY = m_yTray - pageHeight + offset; -+ } -+ this->move(m_xTray - pageWidth / 2, showPosY); - } - - void NetworkTray::getTrayGeometry() --- -2.33.0 - diff --git a/0017-fix-network-tray-Fixed-a-flash-issue-when-the-tray-p.patch b/0017-fix-network-tray-Fixed-a-flash-issue-when-the-tray-p.patch deleted file mode 100644 index 5aef0e5..0000000 --- a/0017-fix-network-tray-Fixed-a-flash-issue-when-the-tray-p.patch +++ /dev/null @@ -1,30 +0,0 @@ -From e21e0b228328722ded74ffa92668338544d9c0cd Mon Sep 17 00:00:00 2001 -From: luoqing -Date: Thu, 19 Oct 2023 13:59:27 +0800 -Subject: [PATCH 2/2] fix(network-tray):Fixed a flash issue when the tray - position changed from bottom to top, the first time to click the tray, the - page display position is not correct, resulting in a flash issue -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- 修复托盘位置由底部变为顶部时,第一次点击托盘,页面显示位置不对,导致的闪现问题 ---- - plugins/network/src/tray/network-tray.cpp | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/plugins/network/src/tray/network-tray.cpp b/plugins/network/src/tray/network-tray.cpp -index c43d8ff..9834a0e 100644 ---- a/plugins/network/src/tray/network-tray.cpp -+++ b/plugins/network/src/tray/network-tray.cpp -@@ -282,6 +282,7 @@ void NetworkTray::showOrHideTrayPage() - this->hide(); - else - { -+ setTrayPagePos(); - // XXX:托盘界面在不可见的情况,不方便去修改size和位置,暂时先显示后在调整大小和位置 - // this->setFixedSize(258, 258); - this->show(); --- -2.33.0 - diff --git a/kiran-control-panel-2.5.5.tar.gz b/kiran-control-panel-2.6.0.tar.gz similarity index 59% rename from kiran-control-panel-2.5.5.tar.gz rename to kiran-control-panel-2.6.0.tar.gz index 1a8d82f..8b60fae 100644 Binary files a/kiran-control-panel-2.5.5.tar.gz and b/kiran-control-panel-2.6.0.tar.gz differ diff --git a/kiran-control-panel.spec b/kiran-control-panel.spec index 6b42384..5922c1c 100644 --- a/kiran-control-panel.spec +++ b/kiran-control-panel.spec @@ -1,29 +1,15 @@ Name: kiran-control-panel -Version: 2.5.5 -Release: 13%{?dist} +Version: 2.6.0 +Release: 4%{?dist}.kb1 Summary: Kiran Control Panel Summary(zh_CN): Kiran桌面控制面板 License: MulanPSL-2.0 Source0: %{name}-%{version}.tar.gz -Patch0001: 0001-fix-network-After-receiving-the-Connection-Update-si.patch -Patch0002: 0002-feature-display-When-switching-resolutions-refresh-r.patch -Patch0003: 0003-fix-wallpaper-change-system-wallpaper-xml-path-to-ki.patch -Patch0004: 0004-fix-wallpaper-don-t-call-xmlWriter-if-system-backgro.patch -Patch0005: 0005-fix-account-Fixed-issues-related-to-creating-and-del.patch -Patch0006: 0006-feature-network-When-the-gateway-setting-item-is-0.0.patch -Patch0007: 0007-fix-audio-Fix-parsing-error-when-json-contains-Chine.patch -Patch0008: 0008-fix-audio-tray-Fixed-an-issue-where-the-volume-tray-.patch -Patch0009: 0009-fix-audio-The-Sink-Source-device-list-displays-only-.patch -Patch0010: 0010-fix-kiran-control-panel-fits-the-Qt5.9.7-interface.patch -Patch0011: 0011-fix-tray-icon-Fixed-an-issue-where-the-tray-icon-was.patch -Patch0012: 0012-fix-network-tray-Improved-the-notification-logic.-Wi.patch -Patch0013: 0013-fix-network-Modify-DNS-Settings-and-display-DNS-deta.patch -Patch0014: 0014-fix-tray-Fixed-the-tray-menu-using-the-X11-platform-.patch -Patch0015: 0015-fix-network-tray-Fixed-an-issue-where-the-size-Setti.patch -Patch0016: 0016-fix-tray-Fixed-an-issue-where-the-popup-was-in-the-w.patch -Patch0017: 0017-fix-network-tray-Fixed-a-flash-issue-when-the-tray-p.patch +Patch0000: 0000-fix-pkgconfig-Fix-the-issue-of-incorrect-content-in-.patch +Patch0001: 0001-fix-appearance-remove-the-Kiran-and-Adwaita-icon-the.patch +Patch0002: 0002-fix-plugins-Fix-runtime-plugin-loading-errors.patch BuildRequires: gcc-c++ BuildRequires: cmake >= 3.2 @@ -49,6 +35,8 @@ BuildRequires: kiran-qt5-integration-devel BuildRequires: kiran-qdbusxml2cpp BuildRequires: kiran-cc-daemon-devel BuildRequires: kiran-authentication-service-devel >= 2.5 +BuildRequires: libqtxdg-devel +BuildRequires: kf5-kconfig-devel Requires: qt5-qtbase Requires: qt5-qtbase-gui @@ -63,7 +51,6 @@ Requires: kiran-qt5-integration >= 2.4 Requires: kiran-system-daemon >= 2.4 Requires: kiran-session-daemon >= 2.4 Requires: kiran-authentication-service >= 2.5 -Requires: kiran-wallpapers >= 2.3.0-6 Requires: glib2 Requires: upower @@ -71,6 +58,8 @@ Requires: zeromq Requires: libnotify Requires: pam Requires: cryptopp +Requires: libqtxdg +Requires: kf5-kconfig Requires: NetworkManager-l2tp #Requires: NetworkManager-pptp @@ -129,15 +118,7 @@ Summary: Development files for kiran control panel plugin %build %{__mkdir} -p %{buildroot} -%if "%{ks_custom_name}" == "GC" - %cmake -DENABLE_USER_GROUP:BOOL=ON \ - -DENABLE_NETWORK:BOOL=OFF \ - -DENABLE_AUDIO:BOOL=OFF \ - -DMOUSE_WHEEL_TEST_VISIBLE:BOOL=ON \ - -DMODIFIER_LOCK_TIPS_VISIBLE:BOOL=ON -%else - %cmake -%endif +%cmake make %{?_smp_mflags} @@ -151,22 +132,18 @@ make %{?_smp_mflags} %{_datadir}/kiran-control-panel/* %{_datadir}/icons/hicolor/* %exclude %{_datadir}/applications/kiran-control-panel.desktop - -#account -%{_sysconfdir}/kiran-cpanel-account/ %{_libexecdir}/kiran-avatar-editor -%{_datadir}/kiran-cpanel-account/* -%if "%{ks_custom_name}" != "GC" - #audio - %{_sysconfdir}/xdg/autostart/kiran-audio-status-icon.desktop - %{_bindir}/kiran-audio-status-icon - #network - %{_sysconfdir}/xdg/autostart/kiran-network-status-icon.desktop - %{_bindir}/kiran-network-status-icon - /etc/NetworkManager/conf.d/00-server.conf -%endif +#audio +%{_sysconfdir}/xdg/autostart/kiran-audio-status-icon.desktop +%{_bindir}/kiran-audio-status-icon + +#network +%{_sysconfdir}/xdg/autostart/kiran-network-status-icon.desktop +%{_bindir}/kiran-network-status-icon +/etc/NetworkManager/conf.d/00-server.conf + %files -n kiran-cpanel-launcher %{_bindir}/kiran-cpanel-launcher @@ -180,65 +157,79 @@ make %{?_smp_mflags} rm -rf %{buildroot} %changelog -* Mon Oct 23 2023 luoqing - 2.5.5-13 -- KYOS-F: Fixed a flash issue when the tray position changed from bottom to top, the first time to click the tray, the page display position is not correct, resulting in a flash issue +* Fri Dec 15 2023 liuxinhao - 2.6.0-4.kb1 +- KYOS-B: Fix runtime plugin loading errors -* Tue Oct 17 2023 luoqing - 2.5.5-12 -- KYOS-F: Fixed an issue where the popup was in the wrong position when the tray was at the top of the screen (#17279) +* Wed Dec 13 2023 yuanxing - 2.6.0-3.kb1 +- KYOS-F: remove the Kiran and Adwaita icon theme in ui and translate the icon name for show -* Thu Sep 21 2023 luoqing - 2.5.5-11 -- KYOS-F: Fixed an issue where the size Settings of widgets that are not currently displaying pages in the stackwidget did not take effect when multiple nics were present during tray initialization(#13862) -- KYOS-F: Fixed the tray menu using the X11 platform, which caused the missing voice and network icon in the lower right corner, and the network icon in the taskbar was formatted incorrectly(#13353,#11856,#14006) +* Wed Dec 13 2023 liuxinhao - 2.6.0-2.kb1 +- KYOS-B: Fix the issue of incorrect content in the PC file provided by pkgconfig -* Mon Sep 18 2023 luoqing - 2.5.5-10 -- KYOS-F: Modify DNS Settings and display DNS details(#14000) -- KYOS-F: Improved the notification logic. "Wired NIC: xxx is unavailable" and "Network is Unavailable" are no longer displayed during sleep recovery.(#15619) +*Tue Dec 12 2023 luoqing - 2.6.0-1.kb1 +- KYOS-F: Add AutoBoot application Settings to kiran-control-panel (#11367,#11368,#11369) +- KYOS-F: Adjust directory structure and optimize plugin implementation +- KYOS-F: add new common-widget KiranCollapse +- KYOS-F: add Spring and Summer icon theme and fix the build error of variable Names +- KYOS-F: add expand/collapse interface +- KYOS-F: add privacy policy in system information (#23443) +- KYOS-F: fix plugin-application run failed and fix some warnings. +- KYOS-F: Modify button and text spacing (#21567) +- KYOS-F: Optimize font size settings and reduce font types +- KYOS-F: The DNS configuration is optimized. Multiple DNS names are separated by semicolons (#20293) +- KYOS-F: Add the Internet connectivity check; Add the case that the network is connected but cannot access the Internet (#20294) +- KYOS-F: Volume tray icon optimization (#20296) +- KYOS-F: supports sound card selection (#20196) +- KYOS-F: After the volume back-end is set to mute, the volume value is no longer set to zero. Therefore, after clicking the mute button, the volume is set to 0 +- KYOS-F: Merge the volume translation file into kiran-control-panel.zh_CN.ts +- KYOS-F: Fixed incomplete display of network details and added logs (#22716) +- KYOS-F: The cable network configuration mode is adjusted;Wireless network interface adjustment (#20295,#22263) +- KYOS-F: Modify the audio and network code according to the review +- KYOS-F: fix some build problems -* Fri Sep 15 2023 liuxinhao - 2.5.5-9 -- KYOS-F: Fixed an issue where the tray icon was not displayed due to late registration of DBus tray service(#14006,#11856) -* Tue Sep 12 2023 yinhongchang - 2.5.5-8 +* Wed Dec 06 2023 liuxinhao - 2.5.5-9.kb1 +- rebuild for KiranUI-2.6-next +- KYOS-B: Fixed a flash issue when the tray position changed from bottom to top +- KYOS-B: Fixed an issue where the popup was in the wrong position +- KYOS-B: Fixed an issue where the size Settings of widgets that are not currently displaying pages in the stackwidget did not take effect when multiple nics were present during tray initialization +- KYOS-B: Fixed the tray menu missing voice and network icon in the lower right corner +- KYOS-B: Modify DNS Settings and display DNS details +- KYOS-B: Improved the network notification logic +- KYOS-B: Fixed an issue where the tray icon was not displayed + +* Tue Sep 13 2023 yinhongchang - 2.5.5-8.kb1 - KYOS-F: fits the Qt5.9.7 interface(#15019) -* Fri Sep 08 2023 luoqing - 2.5.5-7 +* Tue Sep 13 2023 luoqing - 2.5.5-7.kb1 - KYOS-F: The Sink/Source device list displays only active ports. The port selection function is temporarily disabled(#13261) -* Fri Sep 08 2023 luoqing - 2.5.5-6 +* Tue Sep 13 2023 luoqing - 2.5.5-6.kb1 - KYOS-F: Fixed an issue where the volume tray icon did not change with the volume after the default Sink was changed(#14124) -* Wed Aug 30 2023 luoqing - 2.5.5-5 +* Tue Sep 13 2023 luoqing - 2.5.5-5.kb1 - KYOS-F: Fix parsing error when json contains Chinese character(#13261) - KYOS-F: When the gateway setting item is 0.0.0.0, the gateway setting item is null(#13150) -* Mon Aug 28 2023 liuxinhao - 2.5.5-4 +* Tue Sep 13 2023 liuxinhao - 2.5.5-4.kb1 - KYOS-F: Fixed issues related to creating and deleting users in account management(#13994,#13990) -* Fri Aug 25 2023 yuanxing - 2.5.5-3 +* Tue Sep 13 2023 yuanxing - 2.5.5-3.kb1 - KYOS-F: search system wallpaper xml path from kiran-background-properties - KYOS-F: don't call xmlWriter if system background xml not exists to solve segmentation fault -* Wed Aug 23 2023 luoqing - 2.5.5-2 +* Tue Sep 13 2023 luoqing - 2.5.5-2.kb1 - KYOS-F: After receiving the Connection::Update signal from an active connection, the connection is no longer automatically reactivated (#13231) - KYOS-F: When switching resolutions, refresh rate preferentially selects the recommended refresh rate (#13283) -* Tue Aug 15 2023 luoqing - 2.5.5-1 -- KYOS-F: Added pop-up prompt when inserting or removing a network cable (#11814) -- KYOS-F: Change the name "Wired Network 1" in the left column to the name of the network card, corresponding to the network tray(10429) +* Tue Sep 12 2023 yinhongchang - 2.5.5-1.kb1 +- update version to 2.5.5 -* Fri Jul 14 2023 yuanxing - 2.5.4-2.gc -- KYOS-F: add mouse wheel direction test with MOUSE_WHEEL_TEST_VISIBLE=ON (#9124) -- KYOS-F: add modifier lock tips with MODIFIER_LOCK_TIPS_VISIBLE=ON (#9379) +* Fri Jun 16 2023 kpkg - 2.5.3-2.kb2 +- rebuild for KiranUI-2.5-next -* Sun Jul 09 2023 liuxinhao - 2.5.4-1.gc -- KYOS-F: KYOS-F: Add specific screensaver settings to the GC version(#9381) -- KYOS-F: using kiran-cc-daemon backend to set computer mode for GC version - -* Mon Aug 14 2023 yuanxing - 2.5.3-4 -- KYOS-F: chang the keyborad test describtion to enter repeat char to test (#7581) - -* Thu Jul 13 2023 yuanxing - 2.5.3-3 -- KYOS-F: add mouse wheel direction test with MOUSE_WHEEL_TEST_VISIBLE=ON (#9124) -- KYOS-F: add modifier lock tips with MODIFIER_LOCK_TIPS_VISIBLE=ON (#9379) +* Fri Jun 16 2023 kpkg - 2.5.3-2.kb1 +- rebuild for KiranUI-2.5-next * Wed May 31 2023 liuxinhao - 2.5.3-2 - KYOS-B: Fix problem rename group name input box display incomplete(#67654) @@ -444,3 +435,4 @@ rm -rf %{buildroot} * Mon Jun 07 2021 liuxinhao - 1.0.0-1.kb1 - Package init +