1
0
Fork 0

Fixed a bug causing 'already borrowed' error

Fixed a bug where an 'already borrowed' arror would occur when pressing keyboard keys in quick succession. Moving the borrow and borrow_mut of the window state inside the button down/up event seems to fix this.
This commit is contained in:
George Atkinson 2020-12-19 21:28:22 +00:00 committed by glowcoil
parent b76d416d7a
commit cc6ead3669

View file

@ -69,8 +69,6 @@ unsafe extern "system" fn wnd_proc(
let mut window = Window { hwnd }; let mut window = Window { hwnd };
let mut window = crate::Window(&mut window); let mut window = crate::Window(&mut window);
let mut mouse_button_counter = window_state.borrow().mouse_button_counter;
match msg { match msg {
WM_MOUSEMOVE => { WM_MOUSEMOVE => {
let x = (lparam & 0xFFFF) as i32; let x = (lparam & 0xFFFF) as i32;
@ -92,6 +90,9 @@ unsafe extern "system" fn wnd_proc(
} }
WM_LBUTTONDOWN | WM_LBUTTONUP | WM_MBUTTONDOWN | WM_MBUTTONUP | WM_LBUTTONDOWN | WM_LBUTTONUP | WM_MBUTTONDOWN | WM_MBUTTONUP |
WM_RBUTTONDOWN | WM_RBUTTONUP | WM_XBUTTONDOWN | WM_XBUTTONUP => { WM_RBUTTONDOWN | WM_RBUTTONUP | WM_XBUTTONDOWN | WM_XBUTTONUP => {
let mut mouse_button_counter = window_state.borrow().mouse_button_counter;
let button = match msg { let button = match msg {
WM_LBUTTONDOWN | WM_LBUTTONUP => Some(MouseButton::Left), WM_LBUTTONDOWN | WM_LBUTTONUP => Some(MouseButton::Left),
WM_MBUTTONDOWN | WM_MBUTTONUP => Some(MouseButton::Middle), WM_MBUTTONDOWN | WM_MBUTTONUP => Some(MouseButton::Middle),
@ -126,6 +127,8 @@ unsafe extern "system" fn wnd_proc(
} }
}; };
window_state.borrow_mut().mouse_button_counter = mouse_button_counter;
window_state.borrow_mut() window_state.borrow_mut()
.handler .handler
.on_event(&mut window, Event::Mouse(event)); .on_event(&mut window, Event::Mouse(event));
@ -169,7 +172,7 @@ unsafe extern "system" fn wnd_proc(
_ => {} _ => {}
} }
window_state.borrow_mut().mouse_button_counter = mouse_button_counter;
} }
return DefWindowProcW(hwnd, msg, wparam, lparam); return DefWindowProcW(hwnd, msg, wparam, lparam);