use core::ffi::c_void; use flipperzero_sys as sys; use crate::{app::App, scenes}; #[derive(Primitive)] pub enum Views { Menu = 0, Popup = 1 } pub unsafe fn view_dispatcher_init(app: &mut App) { sys::view_dispatcher_enable_queue(app.view_dispatcher); sys::view_dispatcher_set_event_callback_context(app.view_dispatcher, &*app as *const App as *mut c_void); sys::view_dispatcher_set_custom_event_callback(app.view_dispatcher, Some(scenes::custom_event_callback)); sys::view_dispatcher_set_navigation_event_callback(app.view_dispatcher, Some(scenes::navigation_event_callback)); sys::view_dispatcher_add_view(app.view_dispatcher, Views::Menu as u32, sys::menu_get_view(app.menu)); sys::view_dispatcher_add_view(app.view_dispatcher, Views::Popup as u32, sys::popup_get_view(app.popup)); } pub unsafe extern "C" fn app_exit(_context: *mut core::ffi::c_void) -> u32 { 0xFFFFFFFF // Exit the view_dispatcher_run }