static void sync_active_char (GucharmapChartable *chartable, GParamSpec *pspec, GucharmapChartableAccessible *accessible) { GucharmapChartableAccessiblePrivate *priv = GET_PRIVATE (accessible); gunichar uc; AtkObject *child; AtkObject *focus_obj; uc = gucharmap_chartable_get_active_character (chartable); child = find_object (chartable, uc, ATK_OBJECT (accessible)); focus_obj = priv->focus_obj; if (focus_obj != child) { if (focus_obj) gucharmap_chartable_cell_accessible_remove_state (GUCHARMAP_CHARTABLE_CELL_ACCESSIBLE (focus_obj), ATK_STATE_FOCUSED, FALSE); gucharmap_chartable_cell_accessible_add_state (GUCHARMAP_CHARTABLE_CELL_ACCESSIBLE (child), ATK_STATE_FOCUSED, FALSE); } if (focus_obj) g_object_unref (focus_obj); priv->focus_obj = child; /* adopts the reference from find_object */ g_signal_emit_by_name (accessible, "active-descendant-changed", child); }
static void set_cell_visibility (GucharmapChartable *chartable, GucharmapChartableCellAccessible *cell, gboolean emit_signal) { GucharmapChartablePrivate *chartable_priv = chartable->priv; gucharmap_chartable_cell_accessible_add_state (cell, ATK_STATE_VISIBLE, emit_signal); if (cell->index >= chartable_priv->page_first_cell && cell->index < chartable_priv->page_first_cell + chartable_priv->rows * chartable_priv->cols) { gucharmap_chartable_cell_accessible_add_state (cell, ATK_STATE_SHOWING, emit_signal); } else { gucharmap_chartable_cell_accessible_remove_state (cell, ATK_STATE_SHOWING, emit_signal); } }