From 9648b40d855b0dc6212af761842f0f59803ea7f1 Mon Sep 17 00:00:00 2001 From: dbr Date: Sat, 19 Mar 2022 21:03:52 +1100 Subject: [PATCH] Handle window focus lost event Avoids keys getting stuck when window loses focus (e.g alt+tab) Closes #602 --- imgui-winit-support/src/lib.rs | 23 ++++++++++++++++++++++- imgui/src/io.rs | 2 +- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/imgui-winit-support/src/lib.rs b/imgui-winit-support/src/lib.rs index 3c2c65d..c733b80 100644 --- a/imgui-winit-support/src/lib.rs +++ b/imgui-winit-support/src/lib.rs @@ -941,7 +941,14 @@ impl WinitPlatform { } _ => (), } - } + }, + WindowEvent::Focused(newly_focused) => { + if !newly_focused { + // Set focus-lost to avoid stuck keys (like 'alt' + // when alt-tabbing) + io.app_focus_lost = true; + } + }, _ => (), } } @@ -1052,6 +1059,13 @@ impl WinitPlatform { _ => (), } } + WindowEvent::Focused(newly_focused) => { + if !newly_focused { + // Set focus-lost to avoid stuck keys (like 'alt' + // when alt-tabbing) + io.app_focus_lost = true; + } + } _ => (), } } @@ -1161,6 +1175,13 @@ impl WinitPlatform { _ => (), } } + WindowEvent::Focused(newly_focused) => { + if !newly_focused { + // Set focus-lost to avoid stuck keys (like 'alt' + // when alt-tabbing) + io.app_focus_lost = true; + } + } _ => (), } } diff --git a/imgui/src/io.rs b/imgui/src/io.rs index 2362c31..4bf8ba1 100644 --- a/imgui/src/io.rs +++ b/imgui/src/io.rs @@ -339,7 +339,7 @@ pub struct Io { nav_inputs_down_duration: [f32; NavInput::COUNT + NavInput::INTERNAL_COUNT], nav_inputs_down_duration_prev: [f32; NavInput::COUNT + NavInput::INTERNAL_COUNT], pen_pressure: f32, - app_focus_lost: bool, + pub app_focus_lost: bool, input_queue_surrogate: sys::ImWchar16, input_queue_characters: ImVector, }