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 static void
gtk_model_button_update_state (GtkModelButton *button) gtk_model_button_update_state (GtkModelButton *button, GtkStateFlags previous_flags)
{ {
GtkStateFlags state; GtkStateFlags state;
GtkStateFlags indicator_state; GtkStateFlags indicator_state;
@ -252,7 +252,7 @@ gtk_model_button_update_state (GtkModelButton *button)
button->role == GTK_BUTTON_ROLE_RADIO) button->role == GTK_BUTTON_ROLE_RADIO)
{ {
AtkObject *object = _gtk_widget_peek_accessible (GTK_WIDGET (button)); 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, atk_object_notify_state_change (object, ATK_STATE_CHECKED,
(indicator_state & GTK_STATE_FLAG_CHECKED)); (indicator_state & GTK_STATE_FLAG_CHECKED));
} }
@ -290,7 +290,7 @@ static void
gtk_model_button_state_flags_changed (GtkWidget *widget, gtk_model_button_state_flags_changed (GtkWidget *widget,
GtkStateFlags previous_flags) 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); 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); GtkModelButton *button = GTK_MODEL_BUTTON (widget);
gtk_model_button_update_state (button); gtk_model_button_update_state (button, 0);
update_node_ordering (button); update_node_ordering (button);
GTK_WIDGET_CLASS (gtk_model_button_parent_class)->direction_changed (widget, previous_dir); 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); update_node_name (button);
gtk_model_button_update_state (button); gtk_model_button_update_state (button, 0);
gtk_widget_queue_draw (GTK_WIDGET (button)); gtk_widget_queue_draw (GTK_WIDGET (button));
g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_ROLE]); g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_ROLE]);
} }
@ -428,7 +428,7 @@ gtk_model_button_set_active (GtkModelButton *button,
return; return;
button->active = active; button->active = active;
gtk_model_button_update_state (button); gtk_model_button_update_state (button, 0);
gtk_widget_queue_draw (GTK_WIDGET (button)); gtk_widget_queue_draw (GTK_WIDGET (button));
g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_ACTIVE]); 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); button->menu_name = g_strdup (menu_name);
update_node_name (button); update_node_name (button);
gtk_model_button_update_state (button); gtk_model_button_update_state (button, 0);
gtk_widget_queue_resize (GTK_WIDGET (button)); gtk_widget_queue_resize (GTK_WIDGET (button));
g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_MENU_NAME]); g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_MENU_NAME]);
@ -456,7 +456,7 @@ gtk_model_button_set_inverted (GtkModelButton *button,
return; return;
button->inverted = inverted; button->inverted = inverted;
gtk_model_button_update_state (button); gtk_model_button_update_state (button, 0);
update_node_ordering (button); update_node_ordering (button);
gtk_widget_queue_resize (GTK_WIDGET (button)); gtk_widget_queue_resize (GTK_WIDGET (button));
g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_INVERTED]); 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); 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; return object;
} }