server list: F5 refreshes it, as in vanilla

This commit is contained in:
iLostName committed 2026-10-27 11:30:44 +01:00
1 parent 12e0094f1f
commit 4c4fcedf40
4 files changed
+40

No files matched your search

+5
View File
@@ -12530,6 +12530,11 @@ impl ApplicationHandler for Game<'_> {
}
self.save_title_options();
}
PhysicalKey::Code(KeyCode::F5) => {
if let Some(t) = self.title.as_mut() {
t.refresh_servers();
}
}
_ => self.title_edit(event.text.as_deref(), false),
}
}
@@ -167,6 +167,7 @@ impl StartupMenu {
}
match event.physical_key {
PhysicalKey::Code(KeyCode::Escape) => title.escape(),
PhysicalKey::Code(KeyCode::F5) => title.refresh_servers(),
PhysicalKey::Code(KeyCode::Tab) => title.tab(),
PhysicalKey::Code(KeyCode::Enter | KeyCode::NumpadEnter) => title.confirm_edit(),
PhysicalKey::Code(
+8
View File
@@ -1673,6 +1673,14 @@ impl Title {
_ => self.mode = Mode::Main,
}
}
/// `JoinMultiplayerScreen.keyPressed`: F5 refreshes the server list as
/// Refresh does (`refreshServerList`).
pub fn refresh_servers(&mut self) {
if let Mode::Multiplayer(screen @ crate::multiplayer::Screen::List { .. }) = &mut self.mode
{
*screen = crate::multiplayer::Screen::list(&self.saves);
}
}
}
fn centered(atlas: &HudAtlas, batch: &mut HudBatch, text: &str, y: f32, color: u32) {
batch.text(
+26
View File
@@ -117,6 +117,32 @@ fn direct_connection_remembers_the_address_on_cancel_escape_and_join() {
assert!(f.title.focused_field().unwrap().1.is_empty());
}
#[test]
fn f5_reloads_the_server_list() {
let mut f = Fixture::new();
f.click("Multiplayer");
let file = crate::multiplayer::servers_file(&f.title.saves);
horizon_protocol::servers::save(
&file,
&[horizon_protocol::servers::ServerEntry::new(
"Local",
"127.0.0.1:1",
)],
)
.unwrap();
let listed = |f: &Fixture| match &f.title.mode {
Mode::Multiplayer(crate::multiplayer::Screen::List { servers, .. }) => servers.len(),
_ => usize::MAX,
};
assert_eq!(listed(&f), 0);
f.title.refresh_servers();
assert_eq!(listed(&f), 1);
// Only the list refreshes.
f.title.mode = Mode::Main;
f.title.refresh_servers();
assert!(matches!(f.title.mode, Mode::Main));
}
#[test]
fn empty_singleplayer_opens_creation_and_cancel_returns_to_title() {
let mut f = Fixture::new();