From b8e8d095c8178e77fb87b0cac635342f215bfba7 Mon Sep 17 00:00:00 2001 From: Konkitoman Date: Sun, 30 Jul 2023 21:34:15 +0300 Subject: [PATCH] Sets Areas per viewport I don't really know why but fixes when other window is rendering to take focus from the main one, but apparently if the main window is rendering can take focus from other windows --- crates/egui/src/memory.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/crates/egui/src/memory.rs b/crates/egui/src/memory.rs index 04dda036f..5ca45e01b 100644 --- a/crates/egui/src/memory.rs +++ b/crates/egui/src/memory.rs @@ -87,8 +87,12 @@ pub struct Memory { #[cfg_attr(feature = "persistence", serde(skip))] pub(crate) drag_value: crate::widgets::drag_value::MonoState, + #[cfg_attr(feature = "persistence", serde(skip))] pub(crate) areas: Areas, + #[cfg_attr(feature = "persistence", serde(skip))] + pub(crate) viewports_areas: HashMap, + /// Which popup-window is open (if any)? /// Could be a combo box, color picker, menu etc. #[cfg_attr(feature = "persistence", serde(skip))] @@ -371,6 +375,10 @@ impl Memory { .or_default() .begin_frame(prev_input, new_input); self.interaction = self.interactions.remove(&viewport_id).unwrap(); + self.areas = self + .viewports_areas + .remove(&viewport_id) + .unwrap_or_default(); if !prev_input.pointer.any_down() { self.window_interaction = None; @@ -388,8 +396,11 @@ impl Memory { self.interaction.focus.end_frame(used_ids); self.interactions .insert(self.viewport_id, std::mem::take(&mut self.interaction)); + self.viewports_areas + .insert(self.viewport_id, std::mem::take(&mut self.areas)); 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)); } /// Top-most layer at the given position.