From 9648b40d855b0dc6212af761842f0f59803ea7f1 Mon Sep 17 00:00:00 2001 From: dbr Date: Sat, 19 Mar 2022 21:03:52 +1100 Subject: [PATCH 1/3] 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, } From 5cd71fef4c722ae62f988db5cdef1602428bb948 Mon Sep 17 00:00:00 2001 From: dbr Date: Sat, 19 Mar 2022 21:10:22 +1100 Subject: [PATCH 2/3] cargo fmt --all --- imgui-winit-support/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/imgui-winit-support/src/lib.rs b/imgui-winit-support/src/lib.rs index c733b80..9000dd9 100644 --- a/imgui-winit-support/src/lib.rs +++ b/imgui-winit-support/src/lib.rs @@ -941,14 +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; } - }, + } _ => (), } } From 7861355fe84d2055faa21bb3f8c8b16e99e7372c Mon Sep 17 00:00:00 2001 From: dbr Date: Tue, 22 Mar 2022 20:36:51 +1100 Subject: [PATCH 3/3] Docstring for app_focus_lost --- imgui/src/io.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/imgui/src/io.rs b/imgui/src/io.rs index 4bf8ba1..50f8975 100644 --- a/imgui/src/io.rs +++ b/imgui/src/io.rs @@ -339,6 +339,10 @@ 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, + + /// Clear buttons state when focus is lost (this is useful so + /// e.g. releasing Alt after focus loss on Alt-Tab doesn't trigger + /// the Alt menu toggle) pub app_focus_lost: bool, input_queue_surrogate: sys::ImWchar16, input_queue_characters: ImVector,