minor optimizations: fix extra changed event emission

This commit is contained in:
yggverse 2025-10-12 01:27:02 +03:00
parent ffca1d3d60
commit 4998ec62c1
2 changed files with 62 additions and 43 deletions

View file

@ -83,21 +83,35 @@ impl Item {
let page = page.clone();
move |this, _| {
this.set_enabled(false);
if let Some(uri) = page.navigation.request.home() {
let request = uri.to_string();
page.navigation.request.entry.set_text(&request);
client.handle(&request, true, false);
match page.navigation.request.home() {
Some(uri) => {
let request = uri.to_string();
// prevent `changed` event extra emission
// but make sure the entry is always up-to-date
if page.navigation.request.entry.text() != request {
page.navigation.request.entry.set_text(&request)
}
client.handle(&request, true, false)
}
None => panic!(), // unexpected
}
}
});
action.load.connect_activate({
let page = page.clone();
let client = client.clone();
let c = client.clone();
let e = page.navigation.request.entry.clone();
move |request, is_snap_history, is_redirect| {
if let Some(request) = request {
page.navigation.request.entry.set_text(&request);
client.handle(&request, is_snap_history, is_redirect);
match request {
Some(request) => {
// prevent `changed` event extra emission
// but make sure the entry is always up-to-date
if e.text() != request {
e.set_text(&request)
}
c.handle(&request, is_snap_history, is_redirect)
}
None => panic!(), // unexpected
}
}
});
@ -144,11 +158,13 @@ impl Item {
});
// Handle immediately on request
if let Some(request) = request {
page.navigation.request.entry.set_text(request);
if is_load {
client.handle(request, true, false)
if is_load && let Some(request) = request {
// prevent `changed` event extra emission
// but make sure the entry is always up-to-date
if page.navigation.request.entry.text() != request {
page.navigation.request.entry.set_text(request)
}
client.handle(request, true, false)
}
Self {