diff options
author | Matthias Clasen <mclasen@redhat.com> | 2011-06-27 22:55:54 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2011-07-05 16:08:54 -0400 |
commit | c750139c851f38cb13d5044257bc29f30b32dc3f (patch) | |
tree | 18869af76a12e7a9bc03e1bb7fe46e8b40fcbd51 /gtk/a11y/gtkpanedaccessible.c | |
parent | 7f58482d4efc833dc8abbf96381dfc84f597f8b9 (diff) | |
download | gtk+-c750139c851f38cb13d5044257bc29f30b32dc3f.tar.gz |
Convert GailPaned to GtkPanedAccessible
Diffstat (limited to 'gtk/a11y/gtkpanedaccessible.c')
-rw-r--r-- | gtk/a11y/gtkpanedaccessible.c | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/gtk/a11y/gtkpanedaccessible.c b/gtk/a11y/gtkpanedaccessible.c new file mode 100644 index 0000000000..939087021c --- /dev/null +++ b/gtk/a11y/gtkpanedaccessible.c @@ -0,0 +1,158 @@ +/* GAIL - The GNOME Accessibility Enabling Library + * Copyright 2001, 2002, 2003 Sun Microsystems Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * 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. + */ + +#include "config.h" + +#include <string.h> +#include <gtk/gtk.h> +#include "gtkpanedaccessible.h" + +static void atk_value_interface_init (AtkValueIface *iface); + +G_DEFINE_TYPE_WITH_CODE (GtkPanedAccessible, gtk_paned_accessible, GAIL_TYPE_CONTAINER, + G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, atk_value_interface_init)) + +static void +gtk_paned_accessible_size_allocate_gtk (GtkWidget *widget, + GtkAllocation *allocation) +{ + AtkObject *obj = gtk_widget_get_accessible (widget); + + g_object_notify (G_OBJECT (obj), "accessible-value"); +} + +static void +gtk_paned_accessible_initialize (AtkObject *obj, + gpointer data) +{ + ATK_OBJECT_CLASS (gtk_paned_accessible_parent_class)->initialize (obj, data); + + g_signal_connect (data, + "size_allocate", + G_CALLBACK (gtk_paned_accessible_size_allocate_gtk), + NULL); + + obj->role = ATK_ROLE_SPLIT_PANE; +} + +static void +gtk_paned_accessible_class_init (GtkPanedAccessibleClass *klass) +{ + AtkObjectClass *class = ATK_OBJECT_CLASS (klass); + + class->initialize = gtk_paned_accessible_initialize; +} + +static void +gtk_paned_accessible_init (GtkPanedAccessible *paned) +{ +} + +static void +gtk_paned_accessible_get_current_value (AtkValue *obj, + GValue *value) +{ + GtkWidget* widget; + gint current_value; + + widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); + if (widget == NULL) + return; + + current_value = gtk_paned_get_position (GTK_PANED (widget)); + memset (value, 0, sizeof (GValue)); + g_value_init (value, G_TYPE_INT); + g_value_set_int (value,current_value); +} + +static void +gtk_paned_accessible_get_maximum_value (AtkValue *obj, + GValue *value) +{ + GtkWidget* widget; + gint maximum_value; + + widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); + if (widget == NULL) + return; + + g_object_get (GTK_PANED (widget), + "max-position", &maximum_value, + NULL); + memset (value, 0, sizeof (GValue)); + g_value_init (value, G_TYPE_INT); + g_value_set_int (value, maximum_value); +} + +static void +gtk_paned_accessible_get_minimum_value (AtkValue *obj, + GValue *value) +{ + GtkWidget* widget; + gint minimum_value; + + widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); + if (widget == NULL) + return; + + g_object_get (GTK_PANED (widget), + "min-position", &minimum_value, + NULL); + memset (value, 0, sizeof (GValue)); + g_value_init (value, G_TYPE_INT); + g_value_set_int (value, minimum_value); +} + +/* + * Calling atk_value_set_current_value() is no guarantee that the value + * is acceptable; it is necessary to listen for accessible-value signals + * and check whether the current value has been changed or check what the + * maximum and minimum values are. + */ + +static gboolean +gtk_paned_accessible_set_current_value (AtkValue *obj, + const GValue *value) +{ + GtkWidget* widget; + gint new_value; + + widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); + if (widget == NULL) + return FALSE; + + if (G_VALUE_HOLDS_INT (value)) + { + new_value = g_value_get_int (value); + gtk_paned_set_position (GTK_PANED (widget), new_value); + + return TRUE; + } + else + return FALSE; +} + +static void +atk_value_interface_init (AtkValueIface *iface) +{ + iface->get_current_value = gtk_paned_accessible_get_current_value; + iface->get_maximum_value = gtk_paned_accessible_get_maximum_value; + iface->get_minimum_value = gtk_paned_accessible_get_minimum_value; + iface->set_current_value = gtk_paned_accessible_set_current_value; +} |