diff --git a/README.md b/README.md index 887ee093..0be808de 100644 --- a/README.md +++ b/README.md @@ -171,7 +171,7 @@ sudo apt install "./crossdesk-virtual-desktop-xfce-linux-amd64-.deb" ### 检查更新 -客户端启动后会在后台检查版本,发现新版本时自动弹出更新提示,可查看更新说明并前往下载页面。关闭提示后,本次运行中的后台检查不会再次弹窗,主窗口菜单入口仍会显示更新提示;重新启动客户端后,如仍有新版本则再次提示。打开 **☰ → 关于** 可查看版本和更新说明,也可点击 **检查更新** 手动检查。 +客户端启动后会在后台检查版本,发现新版本时自动弹出更新提示,可查看更新说明并前往下载页面。关闭提示后,本次运行中的后台检查不会再次弹窗,主窗口菜单入口仍会显示更新提示;重新启动客户端后,如仍有新版本则再次提示。打开 **☰ → 关于** 可查看版本;有新版本时,点击版本信息下方的 **更新日志** 可再次打开更新提示,也可点击 **检查更新** 手动检查。

关于窗口与检查更新按钮,版本号和检查结果为演示数据 diff --git a/README_EN.md b/README_EN.md index e858850f..cda94408 100644 --- a/README_EN.md +++ b/README_EN.md @@ -171,7 +171,7 @@ Open **☰ → Settings** in the top-right corner and click **OK** to save. Conf ### Check for updates -The client checks for updates in the background after launch and automatically opens the update dialog when a new version is found, showing release notes and a link to the download page. After you dismiss the dialog, background checks will not reopen it during the current run, while the main window menu keeps its update indicator. Restarting the client shows the dialog again if an update is still available. Open **☰ → About** to view the version and release notes or click **Check for updates** to check manually. +The client checks for updates in the background after launch and automatically opens the update dialog when a new version is found, showing release notes and a link to the download page. After you dismiss the dialog, background checks will not reopen it during the current run, while the main window menu keeps its update indicator. Restarting the client shows the dialog again if an update is still available. Open **☰ → About** to view the version. When an update is available, click **Release notes** below the new version to reopen the update dialog, or click **Check for updates** to check manually.

About dialog with the Check for updates button; version and check result are demonstration data diff --git a/apps/desktop/src/gui/assets/localization/localization_data.h b/apps/desktop/src/gui/assets/localization/localization_data.h index b8e36db3..08a8f9fc 100644 --- a/apps/desktop/src/gui/assets/localization/localization_data.h +++ b/apps/desktop/src/gui/assets/localization/localization_data.h @@ -289,6 +289,7 @@ struct TranslationRow { "Check failed. Please try again later.", \ u8"Не удалось проверить обновления. Повторите позже.") \ X(release_notes, u8"更新内容", "Release Notes", u8"Содержание обновления") \ + X(view_release_notes, u8"更新日志", "Release notes", u8"История изменений") \ X(version, u8"版本", "Version", u8"Версия") \ X(release_date, u8"发布日期: ", "Release Date: ", u8"Дата релиза: ") \ X(access_website, u8"访问官网: ", \ diff --git a/apps/desktop/src/gui/ui/main_window.slint b/apps/desktop/src/gui/ui/main_window.slint index 4838ab01..64b9769c 100644 --- a/apps/desktop/src/gui/ui/main_window.slint +++ b/apps/desktop/src/gui/ui/main_window.slint @@ -72,6 +72,7 @@ export global UiStrings { in-out property up-to-date: "You’re up to date"; in-out property update-check-failed: "Check failed. Please try again later."; in-out property release-notes: "Release notes"; + in-out property view-release-notes: "Release notes"; in-out property later: "Later"; in-out property download: "Download"; in-out property input-password: "Input password"; @@ -1887,7 +1888,7 @@ export component MainWindow inherits Window { x: (root.width - self.width) / 2; y: (root.height - self.height) / 2; width: 320px; - height: 216px; + height: max(216px, about-content.preferred-height); border-radius: 7px; Rectangle { @@ -1901,8 +1902,8 @@ export component MainWindow inherits Window { Rectangle { y: parent.height - 7px; height: 7px; background: #d3d3d3; } Text { x: 6px; text: UiStrings.about; font-size: ImGuiFontStyle.base; font-weight: 600; color: #202124; vertical-alignment: center; } } - // Keep the dialog/footer stable while visible text rows determine - // each group's size and the layout redistributes the space between. + // Grow for update actions and wrapped translations while keeping + // the footer below the version and check result. about-content := VerticalLayout { padding: 16px; padding-top: 35px; @@ -1942,6 +1943,19 @@ export component MainWindow inherits Window { clicked => { root.about-open = false; root.update-open = true; } } } + if root.update-available: HorizontalLayout { + alignment: start; + padding-top: 4px; + CompactButton { + width: max(76px, release-notes-button-metrics.preferred-width + 20px); + text: UiStrings.view-release-notes; + accessible-role: button; + accessible-label: self.text; + accessible-action-default => { self.clicked(); } + clicked => { root.about-open = false; root.update-open = true; } + release-notes-button-metrics := Text { visible: false; text: UiStrings.view-release-notes; font-size: ImGuiFontStyle.body; } + } + } if root.update-status-text != "": Text { text: root.update-status-text; color: root.update-check-status == UpdateCheckStatus.failed ? #b3261e : #61656c; diff --git a/apps/desktop/src/gui/ui/ui_localization.h b/apps/desktop/src/gui/ui/ui_localization.h index d5b6c955..7001449a 100644 --- a/apps/desktop/src/gui/ui/ui_localization.h +++ b/apps/desktop/src/gui/ui/ui_localization.h @@ -120,6 +120,7 @@ inline int ApplyMainWindowStrings( strings.set_update_check_failed( Text(localization::update_check_failed[language])); strings.set_release_notes(Text(localization::release_notes[language])); + strings.set_view_release_notes(Text(localization::view_release_notes[language])); strings.set_download(Text(localization::update[language])); strings.set_input_password(Text(localization::input_password[language])); strings.set_reinput_password(Text(localization::reinput_password[language]));