]> Pileus Git - ~andy/gtk/blobdiff - gtk/a11y/gtktextcellaccessible.c
filechooser: Show FUSE mounted locations in shortcuts
[~andy/gtk] / gtk / a11y / gtktextcellaccessible.c
index 5ccc53f4d1f2c4fecae6ec483ae0fe5aef96d5d1..32097e697757f46e8f7016b99dd6f6540d406172 100644 (file)
@@ -1,4 +1,4 @@
-/* GAIL - The GNOME Accessibility Enabling Library
+/* GTK+ - accessibility implementations
  * Copyright 2001 Sun Microsystems Inc.
  *
  * This library is free software; you can redistribute it and/or
@@ -12,9 +12,7 @@
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "config.h"
 #include "gtkcontainercellaccessible.h"
 #include "gtkcellaccessibleparent.h"
 
+struct _GtkTextCellAccessiblePrivate
+{
+  gchar *cell_text;
+  gint caret_pos;
+  gint cell_length;
+};
+
 static const gchar* gtk_text_cell_accessible_get_name    (AtkObject      *atk_obj);
 
 
@@ -84,7 +89,7 @@ static void gtk_text_cell_accessible_update_cache       (GtkCellAccessible *cell
 
 static void atk_text_interface_init (AtkTextIface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GtkTextCellAccessible, _gtk_text_cell_accessible, GTK_TYPE_RENDERER_CELL_ACCESSIBLE,
+G_DEFINE_TYPE_WITH_CODE (GtkTextCellAccessible, gtk_text_cell_accessible, GTK_TYPE_RENDERER_CELL_ACCESSIBLE,
                          G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_interface_init))
 
 static AtkStateSet *
@@ -92,7 +97,7 @@ gtk_text_cell_accessible_ref_state_set (AtkObject *accessible)
 {
   AtkStateSet *state_set;
 
-  state_set = ATK_OBJECT_CLASS (_gtk_text_cell_accessible_parent_class)->ref_state_set (accessible);
+  state_set = ATK_OBJECT_CLASS (gtk_text_cell_accessible_parent_class)->ref_state_set (accessible);
 
   atk_state_set_add_state (state_set, ATK_STATE_SINGLE_LINE);
 
@@ -104,9 +109,9 @@ gtk_text_cell_accessible_finalize (GObject *object)
 {
   GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (object);
 
-  g_free (text_cell->cell_text);
+  g_free (text_cell->priv->cell_text);
 
-  G_OBJECT_CLASS (_gtk_text_cell_accessible_parent_class)->finalize (object);
+  G_OBJECT_CLASS (gtk_text_cell_accessible_parent_class)->finalize (object);
 }
 
 static const gchar *
@@ -117,7 +122,7 @@ gtk_text_cell_accessible_get_name (AtkObject *atk_obj)
   if (atk_obj->name)
     return atk_obj->name;
 
-  return text_cell->cell_text;
+  return text_cell->priv->cell_text;
 }
 
 static void
@@ -128,19 +133,20 @@ gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell)
   gboolean rv = FALSE;
   gint temp_length;
   gchar *text;
+  GtkCellRenderer *renderer;
 
-  g_object_get (G_OBJECT (GTK_RENDERER_CELL_ACCESSIBLE (cell)->renderer),
-                "text", &text,
-                NULL);
+  g_object_get (cell, "renderer", &renderer, NULL);
+  g_object_get (renderer, "text", &text, NULL);
+  g_object_unref (renderer);
 
-  if (text_cell->cell_text)
+  if (text_cell->priv->cell_text)
     {
-      if (text == NULL || g_strcmp0 (text_cell->cell_text, text) != 0)
+      if (text == NULL || g_strcmp0 (text_cell->priv->cell_text, text) != 0)
         {
-          g_free (text_cell->cell_text);
-          temp_length = text_cell->cell_length;
-          text_cell->cell_text = NULL;
-          text_cell->cell_length = 0;
+          g_free (text_cell->priv->cell_text);
+          temp_length = text_cell->priv->cell_length;
+          text_cell->priv->cell_text = NULL;
+          text_cell->priv->cell_length = 0;
           g_signal_emit_by_name (cell, "text-changed::delete", 0, temp_length);
           if (obj->name == NULL)
             g_object_notify (G_OBJECT (obj), "accessible-name");
@@ -155,13 +161,13 @@ gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell)
     {
       if (text == NULL)
         {
-          text_cell->cell_text = g_strdup ("");
-          text_cell->cell_length = 0;
+          text_cell->priv->cell_text = g_strdup ("");
+          text_cell->priv->cell_length = 0;
         }
       else
         {
-          text_cell->cell_text = g_strdup (text);
-          text_cell->cell_length = g_utf8_strlen (text, -1);
+          text_cell->priv->cell_text = g_strdup (text);
+          text_cell->priv->cell_length = g_utf8_strlen (text, -1);
         }
     }
 
@@ -170,7 +176,7 @@ gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell)
   if (rv)
     {
       g_signal_emit_by_name (cell, "text-changed::insert",
-                             0, text_cell->cell_length);
+                             0, text_cell->priv->cell_length);
 
       if (obj->name == NULL)
         g_object_notify (G_OBJECT (obj), "accessible-name");
@@ -178,7 +184,7 @@ gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell)
 }
 
 static void
-_gtk_text_cell_accessible_class_init (GtkTextCellAccessibleClass *klass)
+gtk_text_cell_accessible_class_init (GtkTextCellAccessibleClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass);
@@ -190,14 +196,16 @@ _gtk_text_cell_accessible_class_init (GtkTextCellAccessibleClass *klass)
   atk_object_class->ref_state_set = gtk_text_cell_accessible_ref_state_set;
 
   gobject_class->finalize = gtk_text_cell_accessible_finalize;
+
+  g_type_class_add_private (klass, sizeof (GtkTextCellAccessiblePrivate));
 }
 
 static void
-_gtk_text_cell_accessible_init (GtkTextCellAccessible *text_cell)
+gtk_text_cell_accessible_init (GtkTextCellAccessible *text_cell)
 {
-  text_cell->cell_text = NULL;
-  text_cell->caret_pos = 0;
-  text_cell->cell_length = 0;
+  text_cell->priv = G_TYPE_INSTANCE_GET_PRIVATE (text_cell,
+                                                 GTK_TYPE_TEXT_CELL_ACCESSIBLE,
+                                                 GtkTextCellAccessiblePrivate);
 }
 
 static gchar *
@@ -207,7 +215,7 @@ gtk_text_cell_accessible_get_text (AtkText *atk_text,
 {
   gchar *text;
 
-  text = GTK_TEXT_CELL_ACCESSIBLE (atk_text)->cell_text;
+  text = GTK_TEXT_CELL_ACCESSIBLE (atk_text)->priv->cell_text;
   if (text)
     return g_utf8_substring (text, start_pos, end_pos > -1 ? end_pos : g_utf8_strlen (text, -1));
   else
@@ -268,8 +276,8 @@ gtk_text_cell_accessible_get_text_after_offset (AtkText         *atk_text,
 static gint
 gtk_text_cell_accessible_get_character_count (AtkText *text)
 {
-  if (GTK_TEXT_CELL_ACCESSIBLE (text)->cell_text != NULL)
-    return GTK_TEXT_CELL_ACCESSIBLE (text)->cell_length;
+  if (GTK_TEXT_CELL_ACCESSIBLE (text)->priv->cell_text != NULL)
+    return GTK_TEXT_CELL_ACCESSIBLE (text)->priv->cell_length;
   else
     return 0;
 }
@@ -277,7 +285,7 @@ gtk_text_cell_accessible_get_character_count (AtkText *text)
 static gint
 gtk_text_cell_accessible_get_caret_offset (AtkText *text)
 {
-  return GTK_TEXT_CELL_ACCESSIBLE (text)->caret_pos;
+  return GTK_TEXT_CELL_ACCESSIBLE (text)->priv->caret_pos;
 }
 
 static gboolean
@@ -286,16 +294,16 @@ gtk_text_cell_accessible_set_caret_offset (AtkText *text,
 {
   GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (text);
 
-  if (text_cell->cell_text == NULL)
+  if (text_cell->priv->cell_text == NULL)
     return FALSE;
   else
     {
       /* Only set the caret within the bounds and if it is to a new position. */
       if (offset >= 0 &&
-          offset <= text_cell->cell_length &&
-          offset != text_cell->caret_pos)
+          offset <= text_cell->priv->cell_length &&
+          offset != text_cell->priv->caret_pos)
         {
-          text_cell->caret_pos = offset;
+          text_cell->priv->caret_pos = offset;
 
           /* emit the signal */
           g_signal_emit_by_name (text, "text-caret-moved", offset);
@@ -394,7 +402,7 @@ create_pango_layout (GtkTextCellAccessible *text)
   GtkCellRendererText *gtk_renderer;
 
   gail_renderer = GTK_RENDERER_CELL_ACCESSIBLE (text);
-  gtk_renderer = GTK_CELL_RENDERER_TEXT (gail_renderer->renderer);
+  g_object_get (gail_renderer, "renderer", &gtk_renderer, NULL);
 
   g_object_get (gtk_renderer,
                 "text", &renderer_text,
@@ -411,6 +419,7 @@ create_pango_layout (GtkTextCellAccessible *text)
                 "rise-set", &rise_set,
                 "rise", &rise,
                 NULL);
+  g_object_unref (gtk_renderer);
 
   layout = gtk_widget_create_pango_layout (get_widget (text), renderer_text);
 
@@ -530,23 +539,22 @@ gtk_text_cell_accessible_get_character_extents (AtkText      *text,
   gint xpad, ypad;
   gint x_window, y_window, x_toplevel, y_toplevel;
 
-  if (!GTK_TEXT_CELL_ACCESSIBLE (text)->cell_text)
+  if (!GTK_TEXT_CELL_ACCESSIBLE (text)->priv->cell_text)
     {
       *x = *y = *height = *width = 0;
       return;
     }
-  if (offset < 0 || offset >= GTK_TEXT_CELL_ACCESSIBLE (text)->cell_length)
+  if (offset < 0 || offset >= GTK_TEXT_CELL_ACCESSIBLE (text)->priv->cell_length)
     {
       *x = *y = *height = *width = 0;
       return;
     }
   gail_renderer = GTK_RENDERER_CELL_ACCESSIBLE (text);
-  gtk_renderer = GTK_CELL_RENDERER_TEXT (gail_renderer->renderer);
-
+  g_object_get (gail_renderer, "renderer", &gtk_renderer, NULL);
   g_object_get (gtk_renderer, "text", &renderer_text, NULL);
-  if (text == NULL)
+  if (renderer_text == NULL)
     {
-      g_free (renderer_text);
+      g_object_unref (gtk_renderer);
       return;
     }
 
@@ -555,9 +563,9 @@ gtk_text_cell_accessible_get_character_extents (AtkText      *text,
     parent = atk_object_get_parent (parent);
   widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (parent));
   g_return_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent));
-  _gtk_cell_accessible_parent_get_cell_area (GTK_CELL_ACCESSIBLE_PARENT (parent),
-                                             GTK_CELL_ACCESSIBLE (text),
-                                             &rendered_rect);
+  gtk_cell_accessible_parent_get_cell_area (GTK_CELL_ACCESSIBLE_PARENT (parent),
+                                            GTK_CELL_ACCESSIBLE (text),
+                                            &rendered_rect);
 
   gtk_cell_renderer_get_preferred_size (GTK_CELL_RENDERER (gtk_renderer),
                                         widget,
@@ -574,7 +582,7 @@ gtk_text_cell_accessible_get_character_extents (AtkText      *text,
   index = g_utf8_offset_to_pointer (renderer_text, offset) - renderer_text;
   pango_layout_index_to_pos (layout, index, &char_rect);
 
-  gtk_cell_renderer_get_padding (gail_renderer->renderer, &xpad, &ypad);
+  gtk_cell_renderer_get_padding (GTK_CELL_RENDERER (gtk_renderer), &xpad, &ypad);
 
   get_origins (widget, &x_window, &y_window, &x_toplevel, &y_toplevel);
 
@@ -598,6 +606,7 @@ gtk_text_cell_accessible_get_character_extents (AtkText      *text,
 
   g_free (renderer_text);
   g_object_unref (layout);
+  g_object_unref (gtk_renderer);
 }
 
 static gint
@@ -621,16 +630,17 @@ gtk_text_cell_accessible_get_offset_at_point (AtkText      *text,
   gint x_temp, y_temp;
   gboolean ret;
 
-  if (!GTK_TEXT_CELL_ACCESSIBLE (text)->cell_text)
+  if (!GTK_TEXT_CELL_ACCESSIBLE (text)->priv->cell_text)
     return -1;
 
   gail_renderer = GTK_RENDERER_CELL_ACCESSIBLE (text);
-  gtk_renderer = GTK_CELL_RENDERER_TEXT (gail_renderer->renderer);
+  g_object_get (gail_renderer, "renderer", &gtk_renderer, NULL);
   parent = atk_object_get_parent (ATK_OBJECT (text));
 
   g_object_get (gtk_renderer, "text", &renderer_text, NULL);
   if (text == NULL)
     {
+      g_object_unref (gtk_renderer);
       g_free (renderer_text);
       return -1;
     }
@@ -641,9 +651,9 @@ gtk_text_cell_accessible_get_offset_at_point (AtkText      *text,
   widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (parent));
 
   g_return_val_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent), -1);
-  _gtk_cell_accessible_parent_get_cell_area (GTK_CELL_ACCESSIBLE_PARENT (parent),
-                                             GTK_CELL_ACCESSIBLE (text),
-                                             &rendered_rect);
+  gtk_cell_accessible_parent_get_cell_area (GTK_CELL_ACCESSIBLE_PARENT (parent),
+                                            GTK_CELL_ACCESSIBLE (text),
+                                            &rendered_rect);
 
   gtk_cell_renderer_get_preferred_size (GTK_CELL_RENDERER (gtk_renderer),
                                         widget,
@@ -656,7 +666,7 @@ gtk_text_cell_accessible_get_offset_at_point (AtkText      *text,
 
   layout = create_pango_layout (GTK_TEXT_CELL_ACCESSIBLE (text));
 
-  gtk_cell_renderer_get_padding (gail_renderer->renderer, &xpad, &ypad);
+  gtk_cell_renderer_get_padding (GTK_CELL_RENDERER (gtk_renderer), &xpad, &ypad);
 
   get_origins (widget, &x_window, &y_window, &x_toplevel, &y_toplevel);
 
@@ -683,6 +693,8 @@ gtk_text_cell_accessible_get_offset_at_point (AtkText      *text,
     }
 
   g_object_unref (layout);
+  g_object_unref (gtk_renderer);
+
   if (index == -1)
     {
       if (coords == ATK_XY_WINDOW || coords == ATK_XY_SCREEN)
@@ -718,7 +730,7 @@ gtk_text_cell_accessible_get_character_at_offset (AtkText *text,
   gchar *index;
   gchar *string;
 
-  string = GTK_TEXT_CELL_ACCESSIBLE(text)->cell_text;
+  string = GTK_TEXT_CELL_ACCESSIBLE(text)->priv->cell_text;
 
   if (!string)
     return '\0';