wayvr overlay removal
This commit is contained in:
@@ -353,10 +353,11 @@ impl WayVR {
|
||||
continue;
|
||||
};
|
||||
|
||||
if let Some(oid) = self.state.window_to_overlay.get(&window_handle) {
|
||||
if let Some(oid) = self.state.window_to_overlay.remove(&window_handle) {
|
||||
app.tasks.enqueue(TaskType::Overlay(OverlayTask::Drop(
|
||||
OverlaySelector::Id(*oid),
|
||||
OverlaySelector::Id(oid),
|
||||
)));
|
||||
self.state.overlay_to_window.remove(oid);
|
||||
}
|
||||
|
||||
self.state.wm.remove_window(window_handle);
|
||||
@@ -389,6 +390,11 @@ impl WayVR {
|
||||
.tasks
|
||||
.send(WayVRTask::ProcessTerminationRequest(process_handle));
|
||||
}
|
||||
|
||||
pub fn overlay_added(&mut self, oid: OverlayID, window: window::WindowHandle) {
|
||||
self.state.overlay_to_window.insert(oid, window);
|
||||
self.state.window_to_overlay.insert(window, oid);
|
||||
}
|
||||
}
|
||||
|
||||
impl WayVRState {
|
||||
|
||||
@@ -226,8 +226,12 @@ impl OverlayBackend for WayVRBackend {
|
||||
fn notify(
|
||||
&mut self,
|
||||
_app: &mut state::AppState,
|
||||
_event_data: OverlayEventData,
|
||||
event_data: OverlayEventData,
|
||||
) -> anyhow::Result<()> {
|
||||
if let OverlayEventData::IdAssigned(oid) = event_data {
|
||||
let wayvr = &mut self.wayvr.borrow_mut().data;
|
||||
wayvr.overlay_added(oid, self.window.clone());
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
@@ -115,6 +115,8 @@ pub struct OverlayMeta {
|
||||
|
||||
#[allow(clippy::enum_variant_names)]
|
||||
pub enum OverlayEventData {
|
||||
/// Notifies a newly added overlay of its ID, even before the overlay is shown.
|
||||
IdAssigned(OverlayID),
|
||||
ActiveSetChanged(Option<usize>),
|
||||
NumSetsChanged(usize),
|
||||
EditModeChanged(bool),
|
||||
|
||||
@@ -636,6 +636,12 @@ impl<T> OverlayWindowManager<T> {
|
||||
}
|
||||
}
|
||||
|
||||
self.overlays[oid]
|
||||
.config
|
||||
.backend
|
||||
.notify(app, OverlayEventData::IdAssigned(oid))
|
||||
.unwrap(); // IdAssigned not expected to fail
|
||||
|
||||
if !shown && show_on_spawn {
|
||||
log::debug!("activating {name} due to show_on_spawn");
|
||||
self.overlays[oid].config.activate(app);
|
||||
|
||||
Reference in New Issue
Block a user