From 70b60071acd52141bb2bd63db09eb642315ce285 Mon Sep 17 00:00:00 2001 From: Setzer22 Date: Tue, 15 Nov 2022 19:33:07 +0100 Subject: [PATCH] Hack to fix node finder focus --- egui_node_graph/src/node_finder.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/egui_node_graph/src/node_finder.rs b/egui_node_graph/src/node_finder.rs index 87a9596..6b6f9e5 100644 --- a/egui_node_graph/src/node_finder.rs +++ b/egui_node_graph/src/node_finder.rs @@ -10,7 +10,7 @@ pub struct NodeFinder { pub query: String, /// Reset every frame. When set, the node finder will be moved at that position pub position: Option, - pub just_spawned: bool, + pub frames_since_spawned: u32, _phantom: PhantomData, } @@ -22,7 +22,7 @@ where NodeFinder { query: "".into(), position: Some(pos), - just_spawned: true, + frames_since_spawned: 0, _phantom: Default::default(), } } @@ -58,9 +58,13 @@ where frame.show(ui, |ui| { ui.vertical(|ui| { let resp = ui.text_edit_singleline(&mut self.query); - if self.just_spawned { + // HACK: The request_focus call doesn't succeed if we do it + // right after spawning the node finder, so we do it for a few + // frames until it works. This is could be a bug inside egui. + // The value 3 is the smallest number of frames that works. + if self.frames_since_spawned <= 3 { resp.request_focus(); - self.just_spawned = false; + self.frames_since_spawned += 1; } let mut query_submit = resp.lost_focus() && ui.input().key_down(Key::Enter);