fix(app-iced): 下载页页头「内容库」选中态反转(M229 复审 F3)

`pages/content.rs::section_switcher` 把 `on_content` 写死成 `true`,而下载页也调它,
于是版本管理页的页头把「内容库」画成选中、「版本管理」画成未选中。

改成由调用方给位置:下载页传 false、内容库页自己传 true;并加一条源码层面的调用点断言
(iced 的 Element 不可内省,判据只有一行,写错必红)。

不是 M229 引入的缺陷(M109 就有),按复审要求单独提交,不与收官换肤混在一起。
This commit is contained in:
AskaEth committed 2026-11-11 01:49:14 +08:00
1 parent db541c820e
commit f9877a89d8
3 files changed
+27 -2

No files matched your search

+5 -1
View File
@@ -105,9 +105,13 @@ pub fn demo(kind: ContentKind, lang: Lang) -> Content {
}
/// 页头那条一级切换(版本管理页也要用同一个函数:两页共用一个入口才不会各画一套)。
///
/// `on_content` 是**调用方自己**的位置:内容库页传 `true`、版本管理页传 `false`。
/// M229 复审 F3 之前这里写死 `true`,于是下载页页头的「内容库」也画成选中态(选中态反了)。
pub(crate) fn section_switcher<'a>(
ui: &'a Ui,
catalog: unlucky_i18n::Catalog,
on_content: bool,
) -> Element<'a, PageMessage> {
parts::section_switcher(ui, catalog, true)
parts::section_switcher(ui, catalog, on_content)
}
@@ -98,3 +98,22 @@ fn the_default_demo_screen_has_no_retry_surface() {
);
}
}
/// M229 复审 F3 的回归门:页头一级切换的选中态由**调用方所在页**决定,不是写死「内容库」。
///
/// 抓得住:`download.rs` 又传回 `true`(下载页页头的「内容库」被画成选中,正是 F3 的现场)。
/// 抓不住:像素长什么样(那要截图);iced 的 `Element` 不可内省,所以这条从源码层面钉住调用点——
/// 判据只有一行,读的人也不会误解。
#[test]
fn the_download_header_marks_versions_selected_not_content() {
let download = include_str!("../download.rs");
assert!(
download.contains("section_switcher(ui, catalog, false)"),
"下载页是「版本管理」那一侧,必须传 false(传 true = F3 复发)"
);
let content_view = include_str!("view.rs");
assert!(
content_view.contains("section_switcher(ui, catalog, true)"),
"内容库页自己那一份必须传 true"
);
}
+3 -1
View File
@@ -187,7 +187,9 @@ pub fn view_sized<'a>(
.subtitle(catalog.text(Key::DownloadSubtitle))
// M109:一级切换「版本管理 | 内容库」。两页共用同一条导航轨项(`NavSection::Download`),
// 所以这个切换是进内容库的唯一产品入口——少了它,内容库只能靠 `ULL_START_ROUTE` 到达。
.action(content::section_switcher(ui, catalog))
// 本页是「版本管理」那一侧:`on_content = false`(传 true 会让「内容库」画成选中,
// 这正是 M229 复审 F3 的现场)。
.action(content::section_switcher(ui, catalog, false))
.action(buttons::text(
ui,
Button::new(