-/* 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
* 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);
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 *
{
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);
{
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 *
if (atk_obj->name)
return atk_obj->name;
- return text_cell->cell_text;
+ return text_cell->priv->cell_text;
}
static void
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");
{
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);
}
}
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");
}
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);
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 *
{
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
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;
}
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
{
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);
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", >k_renderer, NULL);
g_object_get (gtk_renderer,
"text", &renderer_text,
"rise-set", &rise_set,
"rise", &rise,
NULL);
+ g_object_unref (gtk_renderer);
layout = gtk_widget_create_pango_layout (get_widget (text), renderer_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", >k_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;
}
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,
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);
g_free (renderer_text);
g_object_unref (layout);
+ g_object_unref (gtk_renderer);
}
static gint
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", >k_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;
}
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,
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);
}
g_object_unref (layout);
+ g_object_unref (gtk_renderer);
+
if (index == -1)
{
if (coords == ATK_XY_WINDOW || coords == ATK_XY_SCREEN)
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';