diff options
Diffstat (limited to 'src/win32/mod.rs')
-rw-r--r-- | src/win32/mod.rs | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/win32/mod.rs b/src/win32/mod.rs index 113bea1..c0708b8 100644 --- a/src/win32/mod.rs +++ b/src/win32/mod.rs @@ -262,7 +262,12 @@ impl Window { pub fn set_cursor_state(&self, state: CursorState) -> Result<(), String> { let mut current_state = self.cursor_state.lock().unwrap(); - match (state, *current_state) { + let foreground_thread_id = unsafe { user32::GetWindowThreadProcessId(self.window.0, ptr::null_mut()) }; + let current_thread_id = unsafe { kernel32::GetCurrentThreadId() }; + + unsafe { user32::AttachThreadInput(foreground_thread_id, current_thread_id, 1) }; + + let res = match (state, *current_state) { (CursorState::Normal, CursorState::Normal) => Ok(()), (CursorState::Hide, CursorState::Hide) => Ok(()), (CursorState::Grab, CursorState::Grab) => Ok(()), @@ -310,7 +315,11 @@ impl Window { }, _ => unimplemented!(), - } + }; + + unsafe { user32::AttachThreadInput(foreground_thread_id, current_thread_id, 0) }; + + res } pub fn hidpi_factor(&self) -> f32 { |