diff --git a/android-activity/src/game_activity/mod.rs b/android-activity/src/game_activity/mod.rs index 8453ea3..3f36666 100644 --- a/android-activity/src/game_activity/mod.rs +++ b/android-activity/src/game_activity/mod.rs @@ -269,8 +269,11 @@ impl AndroidAppInner { } MainEvent::InitWindow { .. } => { let win_ptr = (*app_ptr.as_ptr()).window; + // It's important that we use ::clone_from_ptr() here + // because NativeWindow has a Drop implementation that + // will unconditionally _release() the native window *self.native_window.write().unwrap() = Some( - NativeWindow::from_ptr(NonNull::new(win_ptr).unwrap()), + NativeWindow::clone_from_ptr(NonNull::new(win_ptr).unwrap()), ); } MainEvent::TerminateWindow { .. } => { diff --git a/android-activity/src/native_activity/mod.rs b/android-activity/src/native_activity/mod.rs index 27d5c78..817328a 100644 --- a/android-activity/src/native_activity/mod.rs +++ b/android-activity/src/native_activity/mod.rs @@ -271,8 +271,11 @@ impl AndroidAppInner { } MainEvent::InitWindow { .. } => { let win_ptr = (*app_ptr.as_ptr()).window; + // It's important that we use ::clone_from_ptr() here + // because NativeWindow has a Drop implementation that + // will unconditionally _release() the native window *self.native_window.write().unwrap() = - Some(NativeWindow::from_ptr( + Some(NativeWindow::clone_from_ptr( NonNull::new(win_ptr).unwrap(), )); }