pass Arc<Window> by reference instead of cloning
This commit is contained in:
parent
10d3870644
commit
0da82a4bdd
|
@ -7,7 +7,7 @@ use winapi::um::winuser::{DefWindowProcA, WM_MOUSEMOVE, WM_PAINT, WM_TIMER};
|
|||
|
||||
const WIN_FRAME_TIMER: usize = 4242;
|
||||
|
||||
unsafe fn handle_timer<A: AppWindow>(win: Arc<Mutex<Window<A>>>, timer_id: usize) {
|
||||
unsafe fn handle_timer<A: AppWindow>(win: &Arc<Mutex<Window<A>>>, timer_id: usize) {
|
||||
match timer_id {
|
||||
WIN_FRAME_TIMER => {}
|
||||
_ => (),
|
||||
|
@ -15,7 +15,7 @@ unsafe fn handle_timer<A: AppWindow>(win: Arc<Mutex<Window<A>>>, timer_id: usize
|
|||
}
|
||||
|
||||
pub(crate) unsafe fn handle_message<A: AppWindow>(
|
||||
win: Arc<Mutex<Window<A>>>,
|
||||
win: &Arc<Mutex<Window<A>>>,
|
||||
message: UINT,
|
||||
wparam: WPARAM,
|
||||
lparam: LPARAM,
|
||||
|
|
|
@ -59,15 +59,15 @@ unsafe extern "system" fn wnd_proc<A: AppWindow>(
|
|||
}
|
||||
_ => {
|
||||
if !win_ptr.is_null() {
|
||||
let win_ref: Arc<Mutex<Window<A>>> =
|
||||
let win: Arc<Mutex<Window<A>>> =
|
||||
Arc::from_raw(win_ptr as *mut Mutex<Window<A>>);
|
||||
let win = Arc::clone(&win_ref);
|
||||
let ret = handle_message(win, msg, wparam, lparam);
|
||||
|
||||
let ret = handle_message(&win, msg, wparam, lparam);
|
||||
|
||||
// todo: need_reconfigure thing?
|
||||
|
||||
// If we don't do this, the Arc will be dropped and we'll get a crash.
|
||||
let _ = Arc::into_raw(win_ref);
|
||||
let _ = Arc::into_raw(win);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -197,7 +197,7 @@ impl<A: AppWindow> Window<A> {
|
|||
break;
|
||||
}
|
||||
TranslateMessage(&mut msg);
|
||||
handle_message(Arc::clone(&win_p), msg.message, msg.wParam, msg.lParam);
|
||||
handle_message(&win_p, msg.message, msg.wParam, msg.lParam);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue