egui-web: Update web_location_hash
when hash in URL changes (#1140)
This commit is contained in:
parent
a689b623a6
commit
30f9700f6c
3 changed files with 18 additions and 1 deletions
|
@ -8,6 +8,7 @@ All notable changes to the `egui_web` integration will be noted in this file.
|
||||||
* Made the WebGL painter opt-in ([#1020](https://github.com/emilk/egui/pull/1020)).
|
* Made the WebGL painter opt-in ([#1020](https://github.com/emilk/egui/pull/1020)).
|
||||||
* Fix glow failure Chrome ((#1092)[https://github.com/emilk/egui/pull/1092]).
|
* Fix glow failure Chrome ((#1092)[https://github.com/emilk/egui/pull/1092]).
|
||||||
* Shift-scroll will now result in horizontal scrolling on all platforms ((#1136)[https://github.com/emilk/egui/pull/1136]).
|
* Shift-scroll will now result in horizontal scrolling on all platforms ((#1136)[https://github.com/emilk/egui/pull/1136]).
|
||||||
|
* Update `epi::IntegrationInfo::web_location_hash` on `hashchange` event ([#1140](https://github.com/emilk/egui/pull/1140)).
|
||||||
|
|
||||||
|
|
||||||
## 0.16.0 - 2021-12-29
|
## 0.16.0 - 2021-12-29
|
||||||
|
|
|
@ -82,7 +82,7 @@ impl epi::backend::RepaintSignal for NeedRepaint {
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
pub struct AppRunner {
|
pub struct AppRunner {
|
||||||
frame: epi::Frame,
|
pub(crate) frame: epi::Frame,
|
||||||
egui_ctx: egui::Context,
|
egui_ctx: egui::Context,
|
||||||
painter: Box<dyn Painter>,
|
painter: Box<dyn Painter>,
|
||||||
pub(crate) input: WebInput,
|
pub(crate) input: WebInput,
|
||||||
|
|
|
@ -668,6 +668,22 @@ fn install_document_events(runner_ref: &AppRunnerRef) -> Result<(), JsValue> {
|
||||||
closure.forget();
|
closure.forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// hashchange
|
||||||
|
let runner_ref = runner_ref.clone();
|
||||||
|
let closure = Closure::wrap(Box::new(move || {
|
||||||
|
let runner_lock = runner_ref.0.lock();
|
||||||
|
let mut frame_lock = runner_lock.frame.lock();
|
||||||
|
|
||||||
|
// `epi::Frame::info(&self)` clones `epi::IntegrationInfo`, but we need to modify the original here
|
||||||
|
if let Some(web_info) = &mut frame_lock.info.web_info {
|
||||||
|
web_info.web_location_hash = location_hash().unwrap_or_default();
|
||||||
|
}
|
||||||
|
}) as Box<dyn FnMut()>);
|
||||||
|
window.add_event_listener_with_callback("hashchange", closure.as_ref().unchecked_ref())?;
|
||||||
|
closure.forget();
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue