gtk+ r19539 - in branches/gtk-2-12: . gtk
- From: matthiasc svn gnome org
- To: svn-commits-list gnome org
- Subject: gtk+ r19539 - in branches/gtk-2-12: . gtk
- Date: Tue, 12 Feb 2008 16:53:17 +0000 (GMT)
Author: matthiasc
Date: Tue Feb 12 16:53:17 2008
New Revision: 19539
URL: http://svn.gnome.org/viewvc/gtk+?rev=19539&view=rev
Log:
2008-02-12 Matthias Clasen <mclasen redhat com>
* gtk/gtkiconview.c: Fix state change reporting for
accessibility. (#499835, Rich Burridge, patch by LiYan Zhang)
Modified:
branches/gtk-2-12/ChangeLog
branches/gtk-2-12/gtk/gtkiconview.c
Modified: branches/gtk-2-12/gtk/gtkiconview.c
==============================================================================
--- branches/gtk-2-12/gtk/gtkiconview.c (original)
+++ branches/gtk-2-12/gtk/gtkiconview.c Tue Feb 12 16:53:17 2008
@@ -396,6 +396,8 @@
GtkIconViewItem *item,
GtkIconViewCellInfo *cell_info,
GdkEvent *event);
+static void gtk_icon_view_item_selected_changed (GtkIconView *icon_view,
+ GtkIconViewItem *item);
static void gtk_icon_view_put (GtkIconView *icon_view,
GtkWidget *widget,
GtkIconViewItem *item,
@@ -1674,6 +1676,25 @@
}
static void
+gtk_icon_view_item_selected_changed (GtkIconView *icon_view,
+ GtkIconViewItem *item)
+{
+ AtkObject *obj;
+ AtkObject *item_obj;
+
+ obj = gtk_widget_get_accessible (GTK_WIDGET (icon_view));
+ if (obj != NULL)
+ {
+ item_obj = atk_object_ref_accessible_child (obj, item->index);
+ if (item_obj != NULL)
+ {
+ atk_object_notify_state_change (item_obj, ATK_STATE_SELECTED, item->selected);
+ g_object_unref (item_obj);
+ }
+ }
+}
+
+static void
gtk_icon_view_put (GtkIconView *icon_view,
GtkWidget *widget,
GtkIconViewItem *item,
@@ -2327,6 +2348,7 @@
item->selected = FALSE;
dirty = TRUE;
gtk_icon_view_queue_draw_item (icon_view, item);
+ gtk_icon_view_item_selected_changed (icon_view, item);
}
}
@@ -2475,6 +2497,7 @@
icon_view->priv->cursor_item->selected = !icon_view->priv->cursor_item->selected;
g_signal_emit (icon_view, icon_view_signals[SELECTION_CHANGED], 0);
+ gtk_icon_view_item_selected_changed (icon_view, icon_view->priv->cursor_item);
gtk_icon_view_queue_draw_item (icon_view, icon_view->priv->cursor_item);
break;
}
@@ -3219,14 +3242,23 @@
{
AtkObject *obj;
AtkObject *item_obj;
+ AtkObject *cursor_item_obj;
if (icon_view->priv->cursor_item == item &&
(cursor_cell < 0 || cursor_cell == icon_view->priv->cursor_cell))
return;
+ obj = gtk_widget_get_accessible (GTK_WIDGET (icon_view));
if (icon_view->priv->cursor_item != NULL)
- gtk_icon_view_queue_draw_item (icon_view, icon_view->priv->cursor_item);
-
+ {
+ gtk_icon_view_queue_draw_item (icon_view, icon_view->priv->cursor_item);
+ if (obj != NULL)
+ {
+ cursor_item_obj = atk_object_ref_accessible_child (obj, icon_view->priv->cursor_item->index);
+ if (cursor_item_obj != NULL)
+ atk_object_notify_state_change (cursor_item_obj, ATK_STATE_FOCUSED, FALSE);
+ }
+ }
icon_view->priv->cursor_item = item;
if (cursor_cell >= 0)
icon_view->priv->cursor_cell = cursor_cell;
@@ -3234,12 +3266,12 @@
gtk_icon_view_queue_draw_item (icon_view, item);
/* Notify that accessible focus object has changed */
- obj = gtk_widget_get_accessible (GTK_WIDGET (icon_view));
item_obj = atk_object_ref_accessible_child (obj, item->index);
if (item_obj != NULL)
{
atk_focus_tracker_notify (item_obj);
+ atk_object_notify_state_change (item_obj, ATK_STATE_FOCUSED, TRUE);
g_object_unref (item_obj);
}
}
@@ -3346,9 +3378,10 @@
item->selected = TRUE;
- gtk_icon_view_queue_draw_item (icon_view, item);
-
+ gtk_icon_view_item_selected_changed (icon_view, item);
g_signal_emit (icon_view, icon_view_signals[SELECTION_CHANGED], 0);
+
+ gtk_icon_view_queue_draw_item (icon_view, item);
}
@@ -3368,6 +3401,7 @@
item->selected = FALSE;
+ gtk_icon_view_item_selected_changed (icon_view, item);
g_signal_emit (icon_view, icon_view_signals[SELECTION_CHANGED], 0);
gtk_icon_view_queue_draw_item (icon_view, item);
@@ -3865,10 +3899,11 @@
col1 <= item->col && item->col <= col2)
{
if (!item->selected)
- dirty = TRUE;
-
- item->selected = TRUE;
-
+ {
+ dirty = TRUE;
+ item->selected = TRUE;
+ gtk_icon_view_item_selected_changed (icon_view, item);
+ }
gtk_icon_view_queue_draw_item (icon_view, item);
}
}
@@ -8497,6 +8532,10 @@
atk_state_set_add_state (item->state_set, ATK_STATE_FOCUSED);
else
atk_state_set_remove_state (item->state_set, ATK_STATE_FOCUSED);
+ if (item->item->selected)
+ atk_state_set_add_state (item->state_set, ATK_STATE_SELECTED);
+ else
+ atk_state_set_remove_state (item->state_set, ATK_STATE_SELECTED);
return g_object_ref (item->state_set);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]