1
0
mirror of https://github.com/emilk/egui.git synced 2026-06-27 23:13:13 -04:00

Fix window interaction, when a sync embedded=false window was shown other embedded windows will not work!

This commit is contained in:
Konkitoman
2023-08-08 17:28:28 +03:00
parent c68908a6a8
commit 3ab6ee1116

View File

@@ -84,6 +84,9 @@ pub struct Memory {
#[cfg_attr(feature = "persistence", serde(skip))]
pub(crate) window_interaction: Option<window::WindowInteraction>,
#[cfg_attr(feature = "persistence", serde(skip))]
pub(crate) window_interactions: HashMap<u64, window::WindowInteraction>,
#[cfg_attr(feature = "persistence", serde(skip))]
pub(crate) drag_value: crate::widgets::drag_value::MonoState,
@@ -381,11 +384,16 @@ impl Memory {
.unwrap_or_default();
if !prev_input.pointer.any_down() {
self.window_interactions.remove(&viewport_id);
self.window_interaction = None;
}
}
pub(crate) fn pause_frame(&mut self, viewport_id: u64) {
if let Some(window_interaction) = self.window_interaction {
self.window_interactions
.insert(viewport_id, window_interaction);
}
self.interactions
.insert(viewport_id, std::mem::take(&mut self.interaction));
self.viewports_areas
@@ -408,12 +416,15 @@ impl Memory {
self.drag_value.end_frame(input);
self.interactions.retain(|id, _| viewports.contains(id));
self.viewports_areas.retain(|id, _| viewports.contains(id));
self.window_interactions
.retain(|id, _| viewports.contains(id));
}
pub(crate) fn resume_frame(&mut self, viewport_id: u64) {
self.interaction = self.interactions.remove(&viewport_id).unwrap();
self.areas = self.viewports_areas.remove(&viewport_id).unwrap();
self.viewport_id = viewport_id;
self.window_interaction = self.window_interactions.remove(&viewport_id);
}
/// Top-most layer at the given position.