a11y: Don't emit redundant checked notifications

The ModelButton update logic was unconditionally emitting them even if nothing
changed.

Fixes #6449.
This commit is contained in:
Lukáš Tyrychtr 2024-02-20 14:32:53 +01:00
parent 47c1ffaddf
commit bfad80e08e

View File

@ -195,7 +195,7 @@ indicator_is_left (GtkWidget *widget)
}
static void
gtk_model_button_update_state (GtkModelButton *button)
gtk_model_button_update_state (GtkModelButton *button, GtkStateFlags previous_flags)
{
GtkStateFlags state;
GtkStateFlags indicator_state;
@ -252,7 +252,7 @@ gtk_model_button_update_state (GtkModelButton *button)
button->role == GTK_BUTTON_ROLE_RADIO)
{
AtkObject *object = _gtk_widget_peek_accessible (GTK_WIDGET (button));
if (object)
if (object && (previous_flags & ATK_STATE_CHECKED) != (indicator_state & GTK_STATE_FLAG_CHECKED))
atk_object_notify_state_change (object, ATK_STATE_CHECKED,
(indicator_state & GTK_STATE_FLAG_CHECKED));
}
@ -290,7 +290,7 @@ static void
gtk_model_button_state_flags_changed (GtkWidget *widget,
GtkStateFlags previous_flags)
{
gtk_model_button_update_state (GTK_MODEL_BUTTON (widget));
gtk_model_button_update_state (GTK_MODEL_BUTTON (widget), previous_flags);
GTK_WIDGET_CLASS (gtk_model_button_parent_class)->state_flags_changed (widget, previous_flags);
}
@ -301,7 +301,7 @@ gtk_model_button_direction_changed (GtkWidget *widget,
{
GtkModelButton *button = GTK_MODEL_BUTTON (widget);
gtk_model_button_update_state (button);
gtk_model_button_update_state (button, 0);
update_node_ordering (button);
GTK_WIDGET_CLASS (gtk_model_button_parent_class)->direction_changed (widget, previous_dir);
@ -370,7 +370,7 @@ gtk_model_button_set_role (GtkModelButton *button,
update_node_name (button);
gtk_model_button_update_state (button);
gtk_model_button_update_state (button, 0);
gtk_widget_queue_draw (GTK_WIDGET (button));
g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_ROLE]);
}
@ -428,7 +428,7 @@ gtk_model_button_set_active (GtkModelButton *button,
return;
button->active = active;
gtk_model_button_update_state (button);
gtk_model_button_update_state (button, 0);
gtk_widget_queue_draw (GTK_WIDGET (button));
g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_ACTIVE]);
}
@ -441,7 +441,7 @@ gtk_model_button_set_menu_name (GtkModelButton *button,
button->menu_name = g_strdup (menu_name);
update_node_name (button);
gtk_model_button_update_state (button);
gtk_model_button_update_state (button, 0);
gtk_widget_queue_resize (GTK_WIDGET (button));
g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_MENU_NAME]);
@ -456,7 +456,7 @@ gtk_model_button_set_inverted (GtkModelButton *button,
return;
button->inverted = inverted;
gtk_model_button_update_state (button);
gtk_model_button_update_state (button, 0);
update_node_ordering (button);
gtk_widget_queue_resize (GTK_WIDGET (button));
g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_INVERTED]);
@ -1106,7 +1106,7 @@ gtk_model_button_get_accessible (GtkWidget *widget)
object = GTK_WIDGET_CLASS (gtk_model_button_parent_class)->get_accessible (widget);
gtk_model_button_update_state (GTK_MODEL_BUTTON (widget));
gtk_model_button_update_state (GTK_MODEL_BUTTON (widget), 0);
return object;
}