Skip to content

Commit 0603ea5

Browse files
committed
add side-aware keys comparison on mod update
1 parent a223d77 commit 0603ea5

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

src/platform_impl/windows/event_loop.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -937,10 +937,17 @@ fn update_modifiers(window: HWND, userdata: &WindowData) {
937937
layouts.get_mods()
938938
};
939939

940+
let mut send_event = false;
940941
let mut window_state = userdata.window_state.lock().unwrap();
942+
if window_state.modifiers_keys != modifiers.pressed_mods() {
943+
window_state.modifiers_keys = modifiers.pressed_mods();
944+
send_event = true;
945+
}
941946
if window_state.modifiers_state != modifiers.state() {
942947
window_state.modifiers_state = modifiers.state();
943-
948+
send_event = true;
949+
}
950+
if send_event {
944951
// Drop lock
945952
drop(window_state);
946953

src/platform_impl/windows/window_state.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use windows_sys::Win32::UI::WindowsAndMessaging::{
1717
WS_MINIMIZEBOX, WS_OVERLAPPEDWINDOW, WS_POPUP, WS_SIZEBOX, WS_SYSMENU, WS_VISIBLE,
1818
};
1919
use winit_core::icon::Icon;
20-
use winit_core::keyboard::ModifiersState;
20+
use winit_core::keyboard::{ModifiersKeys, ModifiersState};
2121
use winit_core::monitor::Fullscreen;
2222
use winit_core::window::{Theme, WindowAttributes};
2323

@@ -41,6 +41,7 @@ pub(crate) struct WindowState {
4141
pub scale_factor: f64,
4242

4343
pub modifiers_state: ModifiersState,
44+
pub modifiers_keys: ModifiersKeys,
4445
pub fullscreen: Option<Fullscreen>,
4546
pub current_theme: Theme,
4647
pub preferred_theme: Option<Theme>,
@@ -172,6 +173,7 @@ impl WindowState {
172173
scale_factor,
173174

174175
modifiers_state: ModifiersState::default(),
176+
modifiers_keys: ModifiersKeys::default(),
175177
fullscreen: None,
176178
current_theme,
177179
preferred_theme,

winit-core/src/event.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,11 @@ impl Modifiers {
825825
self.state
826826
}
827827

828+
/// The logical state of the modifier keys.
829+
pub fn pressed_mods(&self) -> ModifiersKeys {
830+
self.pressed_mods
831+
}
832+
828833
/// The logical state of the left shift key.
829834
pub fn lshift_state(&self) -> ModifiersKeyState {
830835
self.mod_state(ModifiersKeys::LSHIFT)

0 commit comments

Comments
 (0)