diff --git a/gtk/gtkmodelbutton.c b/gtk/gtkmodelbutton.c index aaf8739078..49b5f379af 100644 --- a/gtk/gtkmodelbutton.c +++ b/gtk/gtkmodelbutton.c @@ -1067,10 +1067,29 @@ switch_menu (GtkModelButton *button) stack = gtk_widget_get_ancestor (GTK_WIDGET (button), GTK_TYPE_STACK); if (stack != NULL) { + if (button->role == GTK_BUTTON_ROLE_NORMAL) + { + GtkWidget *title_button = gtk_widget_get_first_child (gtk_stack_get_child_by_name (GTK_STACK (stack), button->menu_name)); + gtk_accessible_update_state (GTK_ACCESSIBLE (button), + GTK_ACCESSIBLE_STATE_EXPANDED, TRUE, + -1); + gtk_accessible_update_state (GTK_ACCESSIBLE (title_button), + GTK_ACCESSIBLE_STATE_EXPANDED, TRUE, + -1); + g_object_set_data (G_OBJECT (title_button), "-gtk-model-button-parent", button); + } + else if (button->role == GTK_BUTTON_ROLE_TITLE) + { + GtkWidget *parent_button = g_object_get_data (G_OBJECT (button), "-gtk-model-button-parent"); + gtk_accessible_update_state (GTK_ACCESSIBLE (parent_button), + GTK_ACCESSIBLE_STATE_EXPANDED, FALSE, + -1); + gtk_accessible_update_state (GTK_ACCESSIBLE (button), + GTK_ACCESSIBLE_STATE_EXPANDED, FALSE, + -1); + g_object_set_data (G_OBJECT (button), "-gtk-model-button-parent", NULL); + } gtk_stack_set_visible_child_name (GTK_STACK (stack), button->menu_name); - gtk_accessible_update_state (GTK_ACCESSIBLE (button), - GTK_ACCESSIBLE_STATE_EXPANDED, TRUE, - -1); } }