mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-26 13:41:07 +00:00
a11y: Fix the stack switcher selection implementation
This was listening for signals on the wrong object.
This commit is contained in:
parent
92d1d52c59
commit
7e251d81c2
@ -1003,13 +1003,13 @@ gtk_atspi_get_selection_vtable (GtkAccessible *accessible,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* {{{ GtkListView notification */
|
||||
|
||||
typedef struct {
|
||||
GtkAtspiSelectionCallback *changed;
|
||||
gpointer data;
|
||||
} SelectionChanged;
|
||||
|
||||
/* {{{ GtkListView notification */
|
||||
|
||||
typedef struct {
|
||||
GtkSelectionModel *model;
|
||||
GtkAtspiSelectionCallback *changed;
|
||||
@ -1048,6 +1048,47 @@ model_changed (GtkListBase *list,
|
||||
update_model (data, gtk_list_base_get_model (list));
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ Stackswitcher notification */
|
||||
|
||||
typedef struct {
|
||||
GtkStack *stack;
|
||||
GtkAtspiSelectionCallback *changed;
|
||||
gpointer data;
|
||||
} StackSwitcherData;
|
||||
|
||||
static void
|
||||
update_stack (StackSwitcherData *data,
|
||||
GtkStack *stack)
|
||||
{
|
||||
if (data->stack)
|
||||
g_signal_handlers_disconnect_by_func (data->stack, data->changed, data->data);
|
||||
|
||||
g_set_object (&data->stack, stack);
|
||||
|
||||
if (data->stack)
|
||||
g_signal_connect_swapped (data->stack, "notify::visible-child", G_CALLBACK (data->changed), data->data);
|
||||
}
|
||||
|
||||
static void
|
||||
stack_switcher_data_free (gpointer user_data)
|
||||
{
|
||||
StackSwitcherData *data = user_data;
|
||||
update_stack (data, NULL);
|
||||
g_free (data);
|
||||
}
|
||||
|
||||
static void
|
||||
stack_changed (GtkStackSwitcher *self,
|
||||
GParamSpec *pspec,
|
||||
gpointer unused)
|
||||
{
|
||||
StackSwitcherData *data;
|
||||
|
||||
data = (StackSwitcherData *) g_object_get_data (G_OBJECT (self), "accessible-selection-data");
|
||||
update_stack (data, gtk_stack_switcher_get_stack (self));
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
|
||||
void
|
||||
@ -1059,7 +1100,7 @@ gtk_atspi_connect_selection_signals (GtkAccessible *accessible,
|
||||
{
|
||||
SelectionChanged *changed;
|
||||
|
||||
changed = g_new (SelectionChanged, 1);
|
||||
changed = g_new0 (SelectionChanged, 1);
|
||||
changed->changed = selection_changed;
|
||||
changed->data = data;
|
||||
|
||||
@ -1071,7 +1112,7 @@ gtk_atspi_connect_selection_signals (GtkAccessible *accessible,
|
||||
{
|
||||
SelectionChanged *changed;
|
||||
|
||||
changed = g_new (SelectionChanged, 1);
|
||||
changed = g_new0 (SelectionChanged, 1);
|
||||
changed->changed = selection_changed;
|
||||
changed->data = data;
|
||||
|
||||
@ -1083,7 +1124,7 @@ gtk_atspi_connect_selection_signals (GtkAccessible *accessible,
|
||||
{
|
||||
SelectionChanged *changed;
|
||||
|
||||
changed = g_new (SelectionChanged, 1);
|
||||
changed = g_new0 (SelectionChanged, 1);
|
||||
changed->changed = selection_changed;
|
||||
changed->data = data;
|
||||
|
||||
@ -1093,22 +1134,23 @@ gtk_atspi_connect_selection_signals (GtkAccessible *accessible,
|
||||
}
|
||||
else if (GTK_IS_STACK_SWITCHER (accessible))
|
||||
{
|
||||
SelectionChanged *changed;
|
||||
StackSwitcherData *changed;
|
||||
|
||||
changed = g_new (SelectionChanged, 1);
|
||||
changed = g_new0 (StackSwitcherData, 1);
|
||||
changed->changed = selection_changed;
|
||||
changed->data = data;
|
||||
|
||||
g_object_set_data_full (G_OBJECT (accessible), "accessible-selection-data", changed, g_free);
|
||||
g_object_set_data_full (G_OBJECT (accessible), "accessible-selection-data", changed, stack_switcher_data_free);
|
||||
|
||||
g_signal_connect_swapped (accessible, "notify::visible-child", G_CALLBACK (selection_changed), data);
|
||||
g_signal_connect (accessible, "notify::stack", G_CALLBACK (stack_changed), NULL);
|
||||
stack_changed (GTK_STACK_SWITCHER (accessible), NULL, NULL);
|
||||
}
|
||||
else if (IS_NOTEBOOK_TAB_LIST (accessible, GTK_AT_CONTEXT (data)->accessible_role))
|
||||
{
|
||||
GtkWidget *notebook = gtk_widget_get_parent (gtk_widget_get_parent (GTK_WIDGET (accessible)));
|
||||
SelectionChanged *changed;
|
||||
|
||||
changed = g_new (SelectionChanged, 1);
|
||||
changed = g_new0 (SelectionChanged, 1);
|
||||
changed->changed = selection_changed;
|
||||
changed->data = data;
|
||||
|
||||
@ -1137,8 +1179,7 @@ gtk_atspi_disconnect_selection_signals (GtkAccessible *accessible)
|
||||
{
|
||||
if (GTK_IS_LIST_BOX (accessible) ||
|
||||
GTK_IS_FLOW_BOX (accessible) ||
|
||||
GTK_IS_COMBO_BOX (accessible) ||
|
||||
GTK_IS_STACK_SWITCHER (accessible))
|
||||
GTK_IS_COMBO_BOX (accessible))
|
||||
{
|
||||
SelectionChanged *changed;
|
||||
|
||||
@ -1148,6 +1189,12 @@ gtk_atspi_disconnect_selection_signals (GtkAccessible *accessible)
|
||||
|
||||
g_signal_handlers_disconnect_by_func (accessible, changed->changed, changed->data);
|
||||
|
||||
g_object_set_data (G_OBJECT (accessible), "accessible-selection-data", NULL);
|
||||
}
|
||||
else if (GTK_IS_STACK_SWITCHER (accessible))
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (accessible, stack_changed, NULL);
|
||||
|
||||
g_object_set_data (G_OBJECT (accessible), "accessible-selection-data", NULL);
|
||||
}
|
||||
else if (IS_NOTEBOOK_TAB_LIST (accessible, gtk_accessible_get_accessible_role (accessible)))
|
||||
|
Loading…
Reference in New Issue
Block a user