Skip to content

Commit

Permalink
egui-web: Update web_location_hash when hash in URL changes
Browse files Browse the repository at this point in the history
Fixes #1139
  • Loading branch information
awaken1ng committed Jan 20, 2022
1 parent e4aa1e6 commit cc46410
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 1 deletion.
1 change: 1 addition & 0 deletions egui_web/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ All notable changes to the `egui_web` integration will be noted in this file.
* The default painter is now glow instead of WebGL ([#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]).
* Update `epi::IntegrationInfo::web_location_hash` on `hashchange` event ([#1140](https://github.com/emilk/egui/pull/1140)).


## 0.16.0 - 2021-12-29
Expand Down
2 changes: 1 addition & 1 deletion egui_web/src/backend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ impl epi::backend::RepaintSignal for NeedRepaint {
// ----------------------------------------------------------------------------

pub struct AppRunner {
frame: epi::Frame,
pub(crate) frame: epi::Frame,
egui_ctx: egui::Context,
painter: Box<dyn Painter>,
pub(crate) input: WebInput,
Expand Down
16 changes: 16 additions & 0 deletions egui_web/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -668,6 +668,22 @@ fn install_document_events(runner_ref: &AppRunnerRef) -> Result<(), JsValue> {
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(())
}

Expand Down

0 comments on commit cc46410

Please sign in to comment.