mirror of
https://github.com/emilk/egui.git
synced 2026-09-03 15:20:05 -04:00
Fix window interaction, when a sync embedded=false window was shown other embedded windows will not work!
This commit is contained in:
@@ -84,6 +84,9 @@ pub struct Memory {
|
|||||||
#[cfg_attr(feature = "persistence", serde(skip))]
|
#[cfg_attr(feature = "persistence", serde(skip))]
|
||||||
pub(crate) window_interaction: Option<window::WindowInteraction>,
|
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))]
|
#[cfg_attr(feature = "persistence", serde(skip))]
|
||||||
pub(crate) drag_value: crate::widgets::drag_value::MonoState,
|
pub(crate) drag_value: crate::widgets::drag_value::MonoState,
|
||||||
|
|
||||||
@@ -381,11 +384,16 @@ impl Memory {
|
|||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
|
|
||||||
if !prev_input.pointer.any_down() {
|
if !prev_input.pointer.any_down() {
|
||||||
|
self.window_interactions.remove(&viewport_id);
|
||||||
self.window_interaction = None;
|
self.window_interaction = None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn pause_frame(&mut self, viewport_id: u64) {
|
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
|
self.interactions
|
||||||
.insert(viewport_id, std::mem::take(&mut self.interaction));
|
.insert(viewport_id, std::mem::take(&mut self.interaction));
|
||||||
self.viewports_areas
|
self.viewports_areas
|
||||||
@@ -408,12 +416,15 @@ impl Memory {
|
|||||||
self.drag_value.end_frame(input);
|
self.drag_value.end_frame(input);
|
||||||
self.interactions.retain(|id, _| viewports.contains(id));
|
self.interactions.retain(|id, _| viewports.contains(id));
|
||||||
self.viewports_areas.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) {
|
pub(crate) fn resume_frame(&mut self, viewport_id: u64) {
|
||||||
self.interaction = self.interactions.remove(&viewport_id).unwrap();
|
self.interaction = self.interactions.remove(&viewport_id).unwrap();
|
||||||
self.areas = self.viewports_areas.remove(&viewport_id).unwrap();
|
self.areas = self.viewports_areas.remove(&viewport_id).unwrap();
|
||||||
self.viewport_id = viewport_id;
|
self.viewport_id = viewport_id;
|
||||||
|
self.window_interaction = self.window_interactions.remove(&viewport_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Top-most layer at the given position.
|
/// Top-most layer at the given position.
|
||||||
|
|||||||
Reference in New Issue
Block a user