diff options
Diffstat (limited to 'libnautilus-private/nautilus-icon-container.c')
-rw-r--r-- | libnautilus-private/nautilus-icon-container.c | 126 |
1 files changed, 47 insertions, 79 deletions
diff --git a/libnautilus-private/nautilus-icon-container.c b/libnautilus-private/nautilus-icon-container.c index 1a06c815f..d6a59a5ac 100644 --- a/libnautilus-private/nautilus-icon-container.c +++ b/libnautilus-private/nautilus-icon-container.c @@ -205,10 +205,6 @@ static int compare_icons_vertical (NautilusIconContainer *container, static void store_layout_timestamps_now (NautilusIconContainer *container); static void remove_search_entry_timeout (NautilusIconContainer *container); -static gpointer accessible_parent_class; - -static GQuark accessible_private_data_quark = 0; - static const char *nautilus_icon_container_accessible_action_names[] = { "activate", "menu", @@ -8479,20 +8475,16 @@ nautilus_icon_container_set_highlighted_for_clipboard (NautilusIconContainer *co } /* NautilusIconContainerAccessible */ - -static NautilusIconContainerAccessiblePrivate * -accessible_get_priv (AtkObject *accessible) -{ +typedef struct { + EelCanvasAccessible parent; NautilusIconContainerAccessiblePrivate *priv; - - priv = g_object_get_qdata (G_OBJECT (accessible), - accessible_private_data_quark); +} NautilusIconContainerAccessible; - return priv; -} +typedef EelCanvasAccessibleClass NautilusIconContainerAccessibleClass; -/* AtkAction interface */ +#define GET_ACCESSIBLE_PRIV(o) ((NautilusIconContainerAccessible *) o)->priv +/* AtkAction interface */ static gboolean nautilus_icon_container_accessible_do_action (AtkAction *accessible, int i) { @@ -8541,7 +8533,7 @@ nautilus_icon_container_accessible_action_get_description (AtkAction *accessible g_assert (i < LAST_ACTION); - priv = accessible_get_priv (ATK_OBJECT (accessible)); + priv = GET_ACCESSIBLE_PRIV (accessible); if (priv->action_descriptions[i]) { return priv->action_descriptions[i]; @@ -8576,7 +8568,7 @@ nautilus_icon_container_accessible_action_set_description (AtkAction *accessible g_assert (i < LAST_ACTION); - priv = accessible_get_priv (ATK_OBJECT (accessible)); + priv = GET_ACCESSIBLE_PRIV (accessible); if (priv->action_descriptions[i]) { g_free (priv->action_descriptions[i]); @@ -8608,8 +8600,7 @@ nautilus_icon_container_accessible_update_selection (AtkObject *accessible) NautilusIcon *icon; container = NAUTILUS_ICON_CONTAINER (gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible))); - - priv = accessible_get_priv (accessible); + priv = GET_ACCESSIBLE_PRIV (accessible); if (priv->selection) { g_list_free (priv->selection); @@ -8685,7 +8676,6 @@ nautilus_icon_container_accessible_cleared_cb (NautilusIconContainer *container, g_signal_emit_by_name (data, "children_changed", 0, NULL, NULL); } - static gboolean nautilus_icon_container_accessible_add_selection (AtkSelection *accessible, int i) @@ -8741,13 +8731,13 @@ static AtkObject * nautilus_icon_container_accessible_ref_selection (AtkSelection *accessible, int i) { - AtkObject *atk_object; NautilusIconContainerAccessiblePrivate *priv; + AtkObject *atk_object; GList *item; NautilusIcon *icon; nautilus_icon_container_accessible_update_selection (ATK_OBJECT (accessible)); - priv = accessible_get_priv (ATK_OBJECT (accessible)); + priv = GET_ACCESSIBLE_PRIV (accessible); item = (g_list_nth (priv->selection, i)); @@ -8767,14 +8757,13 @@ nautilus_icon_container_accessible_ref_selection (AtkSelection *accessible, static int nautilus_icon_container_accessible_get_selection_count (AtkSelection *accessible) { - int count; NautilusIconContainerAccessiblePrivate *priv; + int count; + priv = GET_ACCESSIBLE_PRIV (accessible); nautilus_icon_container_accessible_update_selection (ATK_OBJECT (accessible)); - priv = accessible_get_priv (ATK_OBJECT (accessible)); - count = g_list_length (priv->selection); - + return count; } @@ -8806,8 +8795,8 @@ static gboolean nautilus_icon_container_accessible_remove_selection (AtkSelection *accessible, int i) { - NautilusIconContainer *container; NautilusIconContainerAccessiblePrivate *priv; + NautilusIconContainer *container; GList *l; GList *selection; NautilusIcon *icon; @@ -8818,11 +8807,10 @@ nautilus_icon_container_accessible_remove_selection (AtkSelection *accessible, return FALSE; } + container = NAUTILUS_ICON_CONTAINER (widget); nautilus_icon_container_accessible_update_selection (ATK_OBJECT (accessible)); - priv = accessible_get_priv (ATK_OBJECT (accessible)); - container = NAUTILUS_ICON_CONTAINER (widget); - + priv = GET_ACCESSIBLE_PRIV (accessible); l = g_list_nth (priv->selection, i); if (l) { icon = l->data; @@ -8908,6 +8896,7 @@ nautilus_icon_container_accessible_get_n_children (AtkObject *accessible) if (container->details->rename_widget) { i++; } + return i; } @@ -8934,7 +8923,7 @@ nautilus_icon_container_accessible_ref_child (AtkObject *accessible, int i) atk_object = atk_gobject_accessible_for_object (G_OBJECT (icon->item)); g_object_ref (atk_object); - + return atk_object; } else { if (i == g_list_length (container->details->icons)) { @@ -8949,37 +8938,36 @@ nautilus_icon_container_accessible_ref_child (AtkObject *accessible, int i) } } +G_DEFINE_TYPE_WITH_CODE (NautilusIconContainerAccessible, nautilus_icon_container_accessible, + eel_canvas_accessible_get_type (), + G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, nautilus_icon_container_accessible_action_interface_init) + G_IMPLEMENT_INTERFACE (ATK_TYPE_SELECTION, nautilus_icon_container_accessible_selection_interface_init)) + static void nautilus_icon_container_accessible_initialize (AtkObject *accessible, gpointer data) { NautilusIconContainer *container; - NautilusIconContainerAccessiblePrivate *priv; - if (ATK_OBJECT_CLASS (accessible_parent_class)->initialize) { - ATK_OBJECT_CLASS (accessible_parent_class)->initialize (accessible, data); + if (ATK_OBJECT_CLASS (nautilus_icon_container_accessible_parent_class)->initialize) { + ATK_OBJECT_CLASS (nautilus_icon_container_accessible_parent_class)->initialize (accessible, data); } - priv = g_new0 (NautilusIconContainerAccessiblePrivate, 1); - g_object_set_qdata (G_OBJECT (accessible), - accessible_private_data_quark, - priv); - if (GTK_IS_ACCESSIBLE (accessible)) { nautilus_icon_container_accessible_update_selection (ATK_OBJECT (accessible)); container = NAUTILUS_ICON_CONTAINER (gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible))); - g_signal_connect (G_OBJECT (container), "selection_changed", + g_signal_connect (container, "selection_changed", G_CALLBACK (nautilus_icon_container_accessible_selection_changed_cb), accessible); - g_signal_connect (G_OBJECT (container), "icon_added", + g_signal_connect (container, "icon_added", G_CALLBACK (nautilus_icon_container_accessible_icon_added_cb), accessible); - g_signal_connect (G_OBJECT (container), "icon_removed", + g_signal_connect (container, "icon_removed", G_CALLBACK (nautilus_icon_container_accessible_icon_removed_cb), accessible); - g_signal_connect (G_OBJECT (container), "cleared", + g_signal_connect (container, "cleared", G_CALLBACK (nautilus_icon_container_accessible_cleared_cb), accessible); } @@ -8991,7 +8979,8 @@ nautilus_icon_container_accessible_finalize (GObject *object) NautilusIconContainerAccessiblePrivate *priv; int i; - priv = accessible_get_priv (ATK_OBJECT (object)); + priv = GET_ACCESSIBLE_PRIV (object); + if (priv->selection) { g_list_free (priv->selection); } @@ -9001,63 +8990,42 @@ nautilus_icon_container_accessible_finalize (GObject *object) g_free (priv->action_descriptions[i]); } } - - g_free (priv); - G_OBJECT_CLASS (accessible_parent_class)->finalize (object); + G_OBJECT_CLASS (nautilus_icon_container_accessible_parent_class)->finalize (object); } static void -nautilus_icon_container_accessible_class_init (AtkObjectClass *klass) +nautilus_icon_container_accessible_init (NautilusIconContainerAccessible *self) { - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, nautilus_icon_container_accessible_get_type (), + NautilusIconContainerAccessiblePrivate); +} - accessible_parent_class = g_type_class_peek_parent (klass); +static void +nautilus_icon_container_accessible_class_init (NautilusIconContainerAccessibleClass *klass) +{ + AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass); + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = nautilus_icon_container_accessible_finalize; - klass->get_n_children = nautilus_icon_container_accessible_get_n_children; - klass->ref_child = nautilus_icon_container_accessible_ref_child; - klass->initialize = nautilus_icon_container_accessible_initialize; + atk_class->get_n_children = nautilus_icon_container_accessible_get_n_children; + atk_class->ref_child = nautilus_icon_container_accessible_ref_child; + atk_class->initialize = nautilus_icon_container_accessible_initialize; - accessible_private_data_quark = g_quark_from_static_string ("icon-container-accessible-private-data"); + g_type_class_add_private (klass, sizeof (NautilusIconContainerAccessiblePrivate)); } static AtkObject * get_accessible (GtkWidget *widget) { - static GType type = 0; AtkObject *accessible; if ((accessible = eel_accessibility_get_atk_object (widget))) { return accessible; } - if (!type) { - const GInterfaceInfo atk_action_info = { - (GInterfaceInitFunc) nautilus_icon_container_accessible_action_interface_init, - (GInterfaceFinalizeFunc) NULL, - NULL - }; - - const GInterfaceInfo atk_selection_info = { - (GInterfaceInitFunc) nautilus_icon_container_accessible_selection_interface_init, - (GInterfaceFinalizeFunc) NULL, - NULL - }; - - type = eel_accessibility_create_accessible_gtype - ("NautilusIconContainerAccessible", - widget, - (GClassInitFunc) nautilus_icon_container_accessible_class_init); - - g_type_add_interface_static (type, ATK_TYPE_ACTION, - &atk_action_info); - g_type_add_interface_static (type, ATK_TYPE_SELECTION, - &atk_selection_info); - } - - accessible = g_object_new (type, "widget", widget, NULL); + accessible = g_object_new (nautilus_icon_container_accessible_get_type (), "widget", widget, NULL); return eel_accessibility_set_atk_object_return (widget, accessible); } |