@@ -197,16 +197,14 @@ void window_state_unlock(struct window_state *state) {
197197 SDL_UnlockMutex (state -> mutex );
198198}
199199
200- accesskit_opt_node_id window_state_focus (struct window_state * state ) {
201- accesskit_opt_node_id result ;
202- result .has_value = state -> is_window_focused ;
203- if (result .has_value ) {
204- result .value = state -> focus ;
200+ void window_state_set_tree_update_focus (const struct window_state * state ,
201+ accesskit_tree_update * update ) {
202+ if (state -> is_window_focused ) {
203+ accesskit_tree_update_set_focus (update , state -> focus );
205204 }
206- return result ;
207205}
208206
209- accesskit_node * window_state_build_root (struct window_state * state ) {
207+ accesskit_node * window_state_build_root (const struct window_state * state ) {
210208 accesskit_node_builder * builder =
211209 accesskit_node_builder_new (ACCESSKIT_ROLE_WINDOW );
212210 accesskit_node_builder_push_child (builder , BUTTON_1_ID );
@@ -219,27 +217,23 @@ accesskit_node *window_state_build_root(struct window_state *state) {
219217}
220218
221219accesskit_tree_update * window_state_build_initial_tree (
222- struct window_state * state ) {
220+ const struct window_state * state ) {
223221 accesskit_node * root = window_state_build_root (state );
224222 accesskit_node * button_1 =
225223 build_button (BUTTON_1_ID , "Button 1" , state -> node_classes );
226224 accesskit_node * button_2 =
227225 build_button (BUTTON_2_ID , "Button 2" , state -> node_classes );
228- accesskit_tree_update * result =
229- accesskit_tree_update_new ((state -> announcement != NULL ) ? 4 : 3 );
230- result -> tree .has_value = true;
231- result -> tree .value = accesskit_tree_new (WINDOW_ID );
232- result -> focus = window_state_focus (state );
233- result -> ids [0 ] = WINDOW_ID ;
234- result -> nodes [0 ] = root ;
235- result -> ids [1 ] = BUTTON_1_ID ;
236- result -> nodes [1 ] = button_1 ;
237- result -> ids [2 ] = BUTTON_2_ID ;
238- result -> nodes [2 ] = button_2 ;
226+ accesskit_tree_update * result = accesskit_tree_update_with_capacity (
227+ (state -> announcement != NULL ) ? 4 : 3 );
228+ accesskit_tree_update_set_tree (result , accesskit_tree_new (WINDOW_ID ));
229+ window_state_set_tree_update_focus (state , result );
230+ accesskit_tree_update_push_node (result , WINDOW_ID , root );
231+ accesskit_tree_update_push_node (result , BUTTON_1_ID , button_1 );
232+ accesskit_tree_update_push_node (result , BUTTON_2_ID , button_2 );
239233 if (state -> announcement != NULL ) {
240- result -> ids [3 ] = ANNOUNCEMENT_ID ;
241- result -> nodes [3 ] =
234+ accesskit_node * announcement =
242235 build_announcement (state -> announcement , state -> node_classes );
236+ accesskit_tree_update_push_node (result , ANNOUNCEMENT_ID , announcement );
243237 }
244238 return result ;
245239}
@@ -249,12 +243,10 @@ accesskit_tree_update *build_tree_update_for_button_press(void *userdata) {
249243 accesskit_node * announcement =
250244 build_announcement (state -> announcement , state -> node_classes );
251245 accesskit_node * root = window_state_build_root (state );
252- accesskit_tree_update * update = accesskit_tree_update_new (2 );
253- update -> ids [0 ] = ANNOUNCEMENT_ID ;
254- update -> nodes [0 ] = announcement ;
255- update -> ids [1 ] = WINDOW_ID ;
256- update -> nodes [1 ] = root ;
257- update -> focus = window_state_focus (state );
246+ accesskit_tree_update * update = accesskit_tree_update_with_capacity (2 );
247+ accesskit_tree_update_push_node (update , ANNOUNCEMENT_ID , announcement );
248+ accesskit_tree_update_push_node (update , WINDOW_ID , root );
249+ accesskit_tree_update_set_focus (update , state -> focus );
258250 return update ;
259251}
260252
@@ -274,9 +266,8 @@ void window_state_press_button(struct window_state *state,
274266
275267accesskit_tree_update * build_tree_update_for_focus_update (void * userdata ) {
276268 struct window_state * state = userdata ;
277- accesskit_opt_node_id focus = window_state_focus (state );
278- accesskit_tree_update * update = accesskit_tree_update_new (0 );
279- update -> focus = focus ;
269+ accesskit_tree_update * update = accesskit_tree_update_new ();
270+ accesskit_tree_update_set_focus (update , state -> focus );
280271 return update ;
281272}
282273
@@ -376,9 +367,11 @@ int main(int argc, char *argv[]) {
376367 window_state_update_focus (& state , & adapter );
377368 window_state_unlock (& state );
378369 break ;
370+ case SDL_WINDOWEVENT_MAXIMIZED :
379371 case SDL_WINDOWEVENT_MOVED :
380- accesskit_sdl_adapter_update_root_window_bounds (& adapter , window );
381- break ;
372+ case SDL_WINDOWEVENT_RESIZED :
373+ case SDL_WINDOWEVENT_RESTORED :
374+ case SDL_WINDOWEVENT_SIZE_CHANGED :
382375 case SDL_WINDOWEVENT_SHOWN :
383376 accesskit_sdl_adapter_update_root_window_bounds (& adapter , window );
384377 break ;
0 commit comments