/* element: the root element es: event source handler, can be NULL eh: event handler to process the source events gh: graphics handler */ void m2_InitM2(m2_p m2, m2_rom_void_p element, m2_es_fnptr es, m2_eh_fnptr eh, m2_gfx_fnptr gh) { m2->arg1 = 0; m2->arg2 = 0; m2->is_frame_draw_at_end = 0; m2->key_queue_len = 0; m2->key_queue_pos = 0; m2->is_last_key_touch_screen_press = 0; m2->element_focus = NULL; m2->eh = eh; m2->gh = gh; m2->root_change_callback = m2_root_change_default_cb; /* called in m2navinit.c */ m2_gfx_init(gh); m2->is_frame_draw_at_end = m2_gfx_is_frame_draw_at_end(); //m2->forced_key = M2_KEY_REFRESH; m2->debounce_state = M2_DEBOUNCE_STATE_WAIT_FOR_KEY_PRESS; m2->home = element; m2->home2 = element; /* m2_SetHomeM2(m2, element); */ m2_nav_init(m2_get_nav(m2), element); if ( m2_GetRootM2(m2) != &m2_null_element ) /* only refresh screen for none empty menues, issue 97 */ m2_PutKeyIntoQueue(m2, M2_KEY_REFRESH); m2_get_nav(m2)->root_change_value = 0; m2_SetEventSourceHandlerM2(m2, es); }
/* currently this is called in the event step procedure m2_ep_step() in m2ep.c */ uint8_t m2_nav_check_and_assign_new_root(m2_nav_p nav) { if ( nav->new_root_element != NULL ) { m2_nav_init(nav, nav->new_root_element); return 1; } return 0; }