summaryrefslogtreecommitdiff
path: root/libnautilus-private/nautilus-icon-container.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnautilus-private/nautilus-icon-container.c')
-rw-r--r--libnautilus-private/nautilus-icon-container.c126
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);
}