diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2020-06-16 16:41:59 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2020-07-26 20:31:14 +0100 |
commit | c63087a5631e72cd1c45bdc5a41bf605195be64c (patch) | |
tree | 5336167dacb3d88a5d23220d0846f7847605590c /gtk | |
parent | ea0fc7619ddd0ad20cd7c83e3e8c8672004c20c9 (diff) | |
download | gtk+-c63087a5631e72cd1c45bdc5a41bf605195be64c.tar.gz |
Remove ATK
To build a better world sometimes means having to tear the old one down.
-- Alexander Pierce, "Captain America: The Winter Soldier"
ATK served us well for nearly 20 years, but the world has changed, and
GTK has changed with it. Now ATK is mostly a hindrance towards improving
the accessibility stack:
- it maps to a very specific implementation, AT-SPI, which is Linux and
Unix specific
- it requires implementing the same functionality in three different
layers of the stack: AT-SPI, ATK, and GTK
- only GTK uses it; every other Linux and Unix toolkit and application
talks to AT-SPI directly, including assistive technologies
Sadly, we cannot incrementally port GTK to a new accessibility stack;
since ATK insulates us entirely from the underlying implementation, we
cannot replace it piecemeal. Instead, we're going to remove everything
and then incrementally build on a clean slate:
- add an "accessible" interface, implemented by GTK objects directly,
which describe the accessible role and state changes for every UI
element
- add an "assistive technology context" to proxy a native accessibility
API, and assign it to every widget
- implement the AT context depending on the platform
For more information, see: https://gitlab.gnome.org/GNOME/gtk/-/issues/2833
Diffstat (limited to 'gtk')
218 files changed, 10 insertions, 27962 deletions
diff --git a/gtk/a11y/gtk-a11y-autocleanups.h b/gtk/a11y/gtk-a11y-autocleanups.h deleted file mode 100644 index 33be4124c0..0000000000 --- a/gtk/a11y/gtk-a11y-autocleanups.h +++ /dev/null @@ -1,67 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * 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, see <http://www.gnu.org/licenses/>. - */ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#ifndef __GI_SCANNER__ - -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkBooleanCellAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkButtonAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkCellAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkCellAccessibleParent, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkComboBoxAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkContainerCellAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkEntryAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkExpanderAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkFlowBoxAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkFlowBoxChildAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkFrameAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkIconViewAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkImageAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkImageCellAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkLabelAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkLevelBarAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkLinkButtonAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkListBoxAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkListBoxRowAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkLockButtonAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkMenuButtonAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkNotebookAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkNotebookPageAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkPanedAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkPopoverAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkProgressBarAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkRadioButtonAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkRangeAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkRendererCellAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkScaleAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkScaleButtonAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkScrolledWindowAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkSpinButtonAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkSpinnerAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkStatusbarAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkSwitchAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkTextCellAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkTextViewAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkToggleButtonAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkToplevelAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkTreeViewAccessible, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkWindowAccessible, g_object_unref) - -#endif diff --git a/gtk/a11y/gtkaccessibility.c b/gtk/a11y/gtkaccessibility.c deleted file mode 100644 index ad9d3b0e1c..0000000000 --- a/gtk/a11y/gtkaccessibility.c +++ /dev/null @@ -1,43 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtkaccessibility.h" -#include "gtkaccessibilityutil.h" - -#ifdef GDK_WINDOWING_X11 -#include <atk-bridge.h> -#endif - -static int initialized = FALSE; - -void -_gtk_accessibility_init (void) -{ - if (initialized) - return; - - initialized = TRUE; - - _gtk_accessibility_override_atk_util (); - -#ifdef GDK_WINDOWING_X11 - atk_bridge_adaptor_init (NULL, NULL); -#endif - -} diff --git a/gtk/a11y/gtkaccessibility.h b/gtk/a11y/gtkaccessibility.h deleted file mode 100644 index 67401f8e96..0000000000 --- a/gtk/a11y/gtkaccessibility.h +++ /dev/null @@ -1,30 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 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, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_ACCESSIBILITY_H__ -#define __GTK_ACCESSIBILITY_H__ - -#include <glib.h> -#include "gtk/gtkwidget.h" - -G_BEGIN_DECLS - -void _gtk_accessibility_init (void); - -G_END_DECLS - -#endif /* __GTK_ACCESSIBILITY_H__ */ diff --git a/gtk/a11y/gtkaccessibilityutil.c b/gtk/a11y/gtkaccessibilityutil.c deleted file mode 100644 index 78bef37c3b..0000000000 --- a/gtk/a11y/gtkaccessibilityutil.c +++ /dev/null @@ -1,109 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2011, F123 Consulting & Mais Diferenças - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <stdlib.h> -#include <gtk/gtk.h> -#include "gtkaccessibility.h" -#include "gtkaccessibilityutil.h" -#include "gtktoplevelaccessible.h" - -static GSList *key_listener_list = NULL; - -typedef struct { - AtkKeySnoopFunc func; - gpointer data; - guint key; -} KeyEventListener; - -static guint -add_key_event_listener (AtkKeySnoopFunc listener_func, - gpointer listener_data) -{ - static guint key = 0; - KeyEventListener *listener; - - key++; - - listener = g_slice_new0 (KeyEventListener); - listener->func = listener_func; - listener->data = listener_data; - listener->key = key; - - key_listener_list = g_slist_append (key_listener_list, listener); - - return key; -} - -static void -remove_key_event_listener (guint listener_key) -{ - GSList *l; - - for (l = key_listener_list; l; l = l->next) - { - KeyEventListener *listener = l->data; - - if (listener->key == listener_key) - { - g_slice_free (KeyEventListener, listener); - key_listener_list = g_slist_delete_link (key_listener_list, l); - - break; - } - } -} - -static AtkObject * -get_root (void) -{ - static AtkObject *root = NULL; - - if (!root) - { - root = g_object_new (GTK_TYPE_TOPLEVEL_ACCESSIBLE, NULL); - atk_object_initialize (root, NULL); - } - - return root; -} - -static const char * -get_toolkit_name (void) -{ - return "gtk"; -} - -static const char * -get_toolkit_version (void) -{ - return GTK_VERSION; -} - -void -_gtk_accessibility_override_atk_util (void) -{ - AtkUtilClass *atk_class = ATK_UTIL_CLASS (g_type_class_ref (ATK_TYPE_UTIL)); - - atk_class->add_key_event_listener = add_key_event_listener; - atk_class->remove_key_event_listener = remove_key_event_listener; - atk_class->get_root = get_root; - atk_class->get_toolkit_name = get_toolkit_name; - atk_class->get_toolkit_version = get_toolkit_version; -} diff --git a/gtk/a11y/gtkaccessibilityutil.h b/gtk/a11y/gtkaccessibilityutil.h deleted file mode 100644 index 7ab28c39ef..0000000000 --- a/gtk/a11y/gtkaccessibilityutil.h +++ /dev/null @@ -1,29 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_ACCESSIBILITY_UTIL_H__ -#define __GTK_ACCESSIBILITY_UTIL_H__ - -#include <atk/atk.h> - -G_BEGIN_DECLS - -void _gtk_accessibility_override_atk_util (void); - -G_END_DECLS - -#endif /* __GTK_ACCESSIBILITY_UTIL_H__ */ diff --git a/gtk/a11y/gtkbooleancellaccessible.c b/gtk/a11y/gtkbooleancellaccessible.c deleted file mode 100644 index 634bfd449d..0000000000 --- a/gtk/a11y/gtkbooleancellaccessible.c +++ /dev/null @@ -1,164 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <gtk/gtk.h> -#include <glib/gi18n-lib.h> -#include "gtkbooleancellaccessible.h" - -struct _GtkBooleanCellAccessiblePrivate -{ - gboolean cell_value; - gboolean cell_sensitive; -}; - -static AtkActionIface *parent_action_iface; - -static int -gtk_boolean_cell_accessible_get_n_actions (AtkAction *action) -{ - return parent_action_iface->get_n_actions (action) + 1; -} - -static const char * -gtk_boolean_cell_accessible_get_description (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action description", "Toggles the cell"); - - return parent_action_iface->get_description (action, i - 1); -} - -static const char * -gtk_boolean_cell_accessible_action_get_name (AtkAction *action, - int i) -{ - if (i == 0) - return "toggle"; - - return parent_action_iface->get_description (action, i - 1); -} - -static const char * -gtk_boolean_cell_accessible_action_get_localized_name (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action name", "Toggle"); - - return parent_action_iface->get_description (action, i - 1); -} - -static gboolean -gtk_boolean_cell_accessible_do_action (AtkAction *action, - int i) -{ - if (i == 0) - return parent_action_iface->do_action (action, 2); - - return parent_action_iface->do_action (action, i - 1); -} - -static void -gtk_boolean_cell_accessible_action_interface_init (AtkActionIface *iface) -{ - parent_action_iface = g_type_interface_peek_parent (iface); - - iface->do_action = gtk_boolean_cell_accessible_do_action; - iface->get_n_actions = gtk_boolean_cell_accessible_get_n_actions; - iface->get_description = gtk_boolean_cell_accessible_get_description; - iface->get_name = gtk_boolean_cell_accessible_action_get_name; - iface->get_localized_name = gtk_boolean_cell_accessible_action_get_localized_name; -} - - -G_DEFINE_TYPE_WITH_CODE (GtkBooleanCellAccessible, gtk_boolean_cell_accessible, GTK_TYPE_RENDERER_CELL_ACCESSIBLE, - G_ADD_PRIVATE (GtkBooleanCellAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, gtk_boolean_cell_accessible_action_interface_init)) - - -static AtkStateSet * -gtk_boolean_cell_accessible_ref_state_set (AtkObject *accessible) -{ - GtkBooleanCellAccessible *cell = GTK_BOOLEAN_CELL_ACCESSIBLE (accessible); - AtkStateSet *state_set; - - state_set = ATK_OBJECT_CLASS (gtk_boolean_cell_accessible_parent_class)->ref_state_set (accessible); - - if (cell->priv->cell_value) - atk_state_set_add_state (state_set, ATK_STATE_CHECKED); - - if (cell->priv->cell_sensitive) - atk_state_set_add_state (state_set, ATK_STATE_SENSITIVE); - else - atk_state_set_remove_state (state_set, ATK_STATE_SENSITIVE); - - return state_set; -} - -static void -gtk_boolean_cell_accessible_update_cache (GtkCellAccessible *cell, - gboolean emit_signal) -{ - GtkBooleanCellAccessible *boolean_cell = GTK_BOOLEAN_CELL_ACCESSIBLE (cell); - gboolean active; - gboolean sensitive; - GtkCellRenderer *renderer; - - g_object_get (cell, "renderer", &renderer, NULL); - g_object_get (renderer, - "active", &active, - "sensitive", &sensitive, - NULL); - g_object_unref (renderer); - - if (boolean_cell->priv->cell_value != active) - { - boolean_cell->priv->cell_value = !boolean_cell->priv->cell_value; - - if (emit_signal) - atk_object_notify_state_change (ATK_OBJECT (cell), ATK_STATE_CHECKED, active); - } - - if (boolean_cell->priv->cell_sensitive != sensitive) - { - boolean_cell->priv->cell_sensitive = !boolean_cell->priv->cell_sensitive; - - if (emit_signal) - atk_object_notify_state_change (ATK_OBJECT (cell), ATK_STATE_SENSITIVE, sensitive); - } -} - -static void -gtk_boolean_cell_accessible_class_init (GtkBooleanCellAccessibleClass *klass) -{ - GtkCellAccessibleClass *cell_class = GTK_CELL_ACCESSIBLE_CLASS (klass); - AtkObjectClass *atkobject_class = ATK_OBJECT_CLASS (klass); - - atkobject_class->ref_state_set = gtk_boolean_cell_accessible_ref_state_set; - - cell_class->update_cache = gtk_boolean_cell_accessible_update_cache; -} - -static void -gtk_boolean_cell_accessible_init (GtkBooleanCellAccessible *cell) -{ - cell->priv = gtk_boolean_cell_accessible_get_instance_private (cell); -} - diff --git a/gtk/a11y/gtkbooleancellaccessible.h b/gtk/a11y/gtkbooleancellaccessible.h deleted file mode 100644 index ba344e6cfc..0000000000 --- a/gtk/a11y/gtkbooleancellaccessible.h +++ /dev/null @@ -1,58 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_BOOLEAN_CELL_ACCESSIBLE_H__ -#define __GTK_BOOLEAN_CELL_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <atk/atk.h> -#include <gtk/a11y/gtkrenderercellaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE (gtk_boolean_cell_accessible_get_type ()) -#define GTK_BOOLEAN_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE, GtkBooleanCellAccessible)) -#define GTK_BOOLEAN_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAIL_BOOLEAN_CELL, GtkBooleanCellAccessibleClass)) -#define GTK_IS_BOOLEAN_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE)) -#define GTK_IS_BOOLEAN_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE)) -#define GTK_BOOLEAN_CELL_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE, GtkBooleanCellAccessibleClass)) - -typedef struct _GtkBooleanCellAccessible GtkBooleanCellAccessible; -typedef struct _GtkBooleanCellAccessibleClass GtkBooleanCellAccessibleClass; -typedef struct _GtkBooleanCellAccessiblePrivate GtkBooleanCellAccessiblePrivate; - -struct _GtkBooleanCellAccessible -{ - GtkRendererCellAccessible parent; - - GtkBooleanCellAccessiblePrivate *priv; -}; - -struct _GtkBooleanCellAccessibleClass -{ - GtkRendererCellAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_boolean_cell_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GAIL_TREE_VIEW_BOOLEAN_CELL_H__ */ diff --git a/gtk/a11y/gtkbuttonaccessible.c b/gtk/a11y/gtkbuttonaccessible.c deleted file mode 100644 index b01d5ceefb..0000000000 --- a/gtk/a11y/gtkbuttonaccessible.c +++ /dev/null @@ -1,436 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <string.h> -#include <gtk/gtk.h> -#include <glib/gi18n-lib.h> -#include "gtkbuttonaccessible.h" - - -static void atk_action_interface_init (AtkActionIface *iface); -static void atk_image_interface_init (AtkImageIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkButtonAccessible, gtk_button_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE, atk_image_interface_init)) - -static void -gtk_button_accessible_initialize (AtkObject *obj, - gpointer data) -{ - GtkWidget *parent; - - ATK_OBJECT_CLASS (gtk_button_accessible_parent_class)->initialize (obj, data); - - parent = gtk_widget_get_parent (gtk_accessible_get_widget (GTK_ACCESSIBLE (obj))); - if (GTK_IS_TREE_VIEW (parent)) - { - /* Even though the accessible parent of the column header will - * be reported as the table because the parent widget of the - * GtkTreeViewColumn's button is the GtkTreeView we set - * the accessible parent for column header to be the table - * to ensure that atk_object_get_index_in_parent() returns - * the correct value; see gail_widget_get_index_in_parent(). - */ - atk_object_set_parent (obj, gtk_widget_get_accessible (parent)); - obj->role = ATK_ROLE_TABLE_COLUMN_HEADER; - } - else - obj->role = ATK_ROLE_PUSH_BUTTON; -} - -static GtkWidget * -get_image_from_button (GtkWidget *button) -{ - GtkWidget *image; - - image = gtk_button_get_child (GTK_BUTTON (button)); - if (GTK_IS_IMAGE (image)) - return image; - - return NULL; -} - -static GtkWidget * -find_label_child (GtkWidget *widget) -{ - GtkWidget *child; - - for (child = gtk_widget_get_first_child (widget); - child != NULL; - child = gtk_widget_get_next_sibling (widget)) - { - if (GTK_IS_LABEL (child)) - return child; - else - { - GtkWidget *w = find_label_child (child); - if (w) - return w; - } - } - - return NULL; -} - -static GtkWidget * -get_label_from_button (GtkWidget *button) -{ - GtkWidget *child; - - child = gtk_button_get_child (GTK_BUTTON (button)); - - if (!GTK_IS_LABEL (child)) - child = find_label_child (child); - - return child; -} - -static const char * -gtk_button_accessible_get_name (AtkObject *obj) -{ - const char *name = NULL; - GtkWidget *widget; - GtkWidget *child; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - name = ATK_OBJECT_CLASS (gtk_button_accessible_parent_class)->get_name (obj); - if (name != NULL) - return name; - - child = get_label_from_button (widget); - if (GTK_IS_LABEL (child)) - name = gtk_label_get_text (GTK_LABEL (child)); - else - { - GtkWidget *image; - - image = get_image_from_button (widget); - if (GTK_IS_IMAGE (image)) - { - AtkObject *atk_obj; - - atk_obj = gtk_widget_get_accessible (image); - name = atk_object_get_name (atk_obj); - } - } - - return name; -} - -static int -gtk_button_accessible_get_n_children (AtkObject* obj) -{ - return 0; -} - -static AtkObject * -gtk_button_accessible_ref_child (AtkObject *obj, - int i) -{ - return NULL; -} - -static AtkStateSet * -gtk_button_accessible_ref_state_set (AtkObject *obj) -{ - AtkStateSet *state_set; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - state_set = ATK_OBJECT_CLASS (gtk_button_accessible_parent_class)->ref_state_set (obj); - - if ((gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_ACTIVE) != 0) - atk_state_set_add_state (state_set, ATK_STATE_ARMED); - - if (!gtk_widget_get_can_focus (widget)) - atk_state_set_remove_state (state_set, ATK_STATE_SELECTABLE); - - return state_set; -} - -void -gtk_button_accessible_update_label (GtkButtonAccessible *self) -{ - g_return_if_fail (GTK_IS_BUTTON_ACCESSIBLE (self)); - - /* If we don't have an overridden name, we use the label as the - * accessible name - */ - if (atk_object_get_name (ATK_OBJECT (self)) == NULL) - g_object_notify (G_OBJECT (self), "accessible-name"); - - g_signal_emit_by_name (self, "visible-data-changed"); -} - -static void -gtk_button_accessible_class_init (GtkButtonAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->get_name = gtk_button_accessible_get_name; - class->get_n_children = gtk_button_accessible_get_n_children; - class->ref_child = gtk_button_accessible_ref_child; - class->ref_state_set = gtk_button_accessible_ref_state_set; - class->initialize = gtk_button_accessible_initialize; -} - -static void -gtk_button_accessible_init (GtkButtonAccessible *button) -{ -} - -static gboolean -gtk_button_accessible_do_action (AtkAction *action, - int i) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return FALSE; - - if (i != 0) - return FALSE; - - if (!gtk_widget_is_sensitive (widget) || !gtk_widget_get_visible (widget)) - return FALSE; - - g_signal_emit_by_name (widget, "clicked"); - return TRUE; -} - -static int -gtk_button_accessible_get_n_actions (AtkAction *action) -{ - return 1; -} - -static const char * -gtk_button_accessible_get_keybinding (AtkAction *action, - int i) -{ - char *return_value = NULL; - GtkWidget *widget; - GtkWidget *label; - guint key_val; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return NULL; - - if (i != 0) - return NULL; - - label = get_label_from_button (widget); - if (GTK_IS_LABEL (label)) - { - key_val = gtk_label_get_mnemonic_keyval (GTK_LABEL (label)); - if (key_val != GDK_KEY_VoidSymbol) - return_value = gtk_accelerator_name (key_val, GDK_ALT_MASK); - } - if (return_value == NULL) - { - /* Find labelled-by relation */ - AtkRelationSet *set; - AtkRelation *relation; - GPtrArray *target; - gpointer target_object; - - set = atk_object_ref_relation_set (ATK_OBJECT (action)); - if (set) - { - relation = atk_relation_set_get_relation_by_type (set, ATK_RELATION_LABELLED_BY); - if (relation) - { - target = atk_relation_get_target (relation); - target_object = g_ptr_array_index (target, 0); - label = gtk_accessible_get_widget (GTK_ACCESSIBLE (target_object)); - } - g_object_unref (set); - } - - if (GTK_IS_LABEL (label)) - { - key_val = gtk_label_get_mnemonic_keyval (GTK_LABEL (label)); - if (key_val != GDK_KEY_VoidSymbol) - return_value = gtk_accelerator_name (key_val, GDK_ALT_MASK); - } - } - return return_value; -} - -static const char * -gtk_button_accessible_action_get_name (AtkAction *action, - int i) -{ - if (i == 0) - return "click"; - return NULL; -} - -static const char * -gtk_button_accessible_action_get_localized_name (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action name", "Click"); - return NULL; -} - -static const char * -gtk_button_accessible_action_get_description (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action description", "Clicks the button"); - return NULL; -} - -static void -atk_action_interface_init (AtkActionIface *iface) -{ - iface->do_action = gtk_button_accessible_do_action; - iface->get_n_actions = gtk_button_accessible_get_n_actions; - iface->get_keybinding = gtk_button_accessible_get_keybinding; - iface->get_name = gtk_button_accessible_action_get_name; - iface->get_localized_name = gtk_button_accessible_action_get_localized_name; - iface->get_description = gtk_button_accessible_action_get_description; -} - -static const char * -gtk_button_accessible_get_image_description (AtkImage *image) -{ - GtkWidget *widget; - GtkWidget *button_image; - AtkObject *obj; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (image)); - if (widget == NULL) - return NULL; - - button_image = get_image_from_button (widget); - if (GTK_IS_IMAGE (button_image)) - { - obj = gtk_widget_get_accessible (button_image); - return atk_image_get_image_description (ATK_IMAGE (obj)); - } - - return NULL; -} - -static void -gtk_button_accessible_get_image_position (AtkImage *image, - int *x, - int *y, - AtkCoordType coord_type) -{ - GtkWidget *widget; - GtkWidget *button_image; - AtkObject *obj; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (image)); - if (widget == NULL) - { - *x = G_MININT; - *y = G_MININT; - return; - } - - button_image = get_image_from_button (widget); - if (button_image != NULL) - { - obj = gtk_widget_get_accessible (button_image); - atk_component_get_extents (ATK_COMPONENT (obj), x, y, NULL, NULL, - coord_type); - } - else - { - *x = G_MININT; - *y = G_MININT; - } -} - -static void -gtk_button_accessible_get_image_size (AtkImage *image, - int *width, - int *height) -{ - GtkWidget *widget; - GtkWidget *button_image; - AtkObject *obj; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (image)); - if (widget == NULL) - { - *width = -1; - *height = -1; - return; - } - - button_image = get_image_from_button (widget); - if (GTK_IS_IMAGE (button_image)) - { - obj = gtk_widget_get_accessible (GTK_WIDGET (button_image)); - atk_image_get_image_size (ATK_IMAGE (obj), width, height); - } - else - { - *width = -1; - *height = -1; - } -} - -static gboolean -gtk_button_accessible_set_image_description (AtkImage *image, - const char *description) -{ - GtkWidget *widget; - GtkWidget *button_image; - AtkObject *obj; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (image)); - - if (widget == NULL) - return FALSE; - - button_image = get_image_from_button (widget); - if (GTK_IMAGE (button_image)) - { - obj = gtk_widget_get_accessible (GTK_WIDGET (button_image)); - return atk_image_set_image_description (ATK_IMAGE (obj), description); - } - - return FALSE; -} - -static void -atk_image_interface_init (AtkImageIface *iface) -{ - iface->get_image_description = gtk_button_accessible_get_image_description; - iface->get_image_position = gtk_button_accessible_get_image_position; - iface->get_image_size = gtk_button_accessible_get_image_size; - iface->set_image_description = gtk_button_accessible_set_image_description; -} diff --git a/gtk/a11y/gtkbuttonaccessible.h b/gtk/a11y/gtkbuttonaccessible.h deleted file mode 100644 index 1c49c329b6..0000000000 --- a/gtk/a11y/gtkbuttonaccessible.h +++ /dev/null @@ -1,60 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_BUTTON_ACCESSIBLE_H__ -#define __GTK_BUTTON_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_BUTTON_ACCESSIBLE (gtk_button_accessible_get_type ()) -#define GTK_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_BUTTON_ACCESSIBLE, GtkButtonAccessible)) -#define GTK_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_BUTTON_ACCESSIBLE, GtkButtonAccessibleClass)) -#define GTK_IS_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_BUTTON_ACCESSIBLE)) -#define GTK_IS_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_BUTTON_ACCESSIBLE)) -#define GTK_BUTTON_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_BUTTON_ACCESSIBLE, GtkButtonAccessibleClass)) - -typedef struct _GtkButtonAccessible GtkButtonAccessible; -typedef struct _GtkButtonAccessibleClass GtkButtonAccessibleClass; -typedef struct _GtkButtonAccessiblePrivate GtkButtonAccessiblePrivate; - -struct _GtkButtonAccessible -{ - GtkWidgetAccessible parent; - - GtkButtonAccessiblePrivate *priv; -}; - -struct _GtkButtonAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_button_accessible_get_type (void); - -/*< private >*/ -void gtk_button_accessible_update_label (GtkButtonAccessible *self); - -G_END_DECLS - -#endif /* __GTK_BUTTON_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkcellaccessible.c b/gtk/a11y/gtkcellaccessible.c deleted file mode 100644 index 71ef303ea3..0000000000 --- a/gtk/a11y/gtkcellaccessible.c +++ /dev/null @@ -1,533 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <glib/gi18n-lib.h> -#include <gtk/gtk.h> -#include "gtkcontainercellaccessible.h" -#include "gtkcellaccessibleprivate.h" -#include "gtkcellaccessibleparent.h" - -struct _GtkCellAccessiblePrivate -{ - AtkObject *parent; -}; - -static const struct { - AtkState atk_state; - GtkCellRendererState renderer_state; - gboolean invert; -} state_map[] = { - { ATK_STATE_SENSITIVE, GTK_CELL_RENDERER_INSENSITIVE, TRUE }, - { ATK_STATE_ENABLED, GTK_CELL_RENDERER_INSENSITIVE, TRUE }, - { ATK_STATE_SELECTED, GTK_CELL_RENDERER_SELECTED, FALSE }, - /* XXX: why do we map ACTIVE here? */ - { ATK_STATE_ACTIVE, GTK_CELL_RENDERER_FOCUSED, FALSE }, - { ATK_STATE_FOCUSED, GTK_CELL_RENDERER_FOCUSED, FALSE }, - { ATK_STATE_EXPANDABLE,GTK_CELL_RENDERER_EXPANDABLE, FALSE }, - { ATK_STATE_EXPANDED, GTK_CELL_RENDERER_EXPANDED, FALSE }, -}; - -static GtkCellRendererState gtk_cell_accessible_get_state (GtkCellAccessible *cell); -static void atk_action_interface_init (AtkActionIface *iface); -static void atk_component_interface_init (AtkComponentIface *iface); -static void atk_table_cell_interface_init (AtkTableCellIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkCellAccessible, gtk_cell_accessible, GTK_TYPE_ACCESSIBLE, - G_ADD_PRIVATE (GtkCellAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, atk_component_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_TABLE_CELL, atk_table_cell_interface_init)) - -static int -gtk_cell_accessible_get_index_in_parent (AtkObject *obj) -{ - GtkCellAccessible *cell; - AtkObject *parent; - - cell = GTK_CELL_ACCESSIBLE (obj); - - if (GTK_IS_CONTAINER_CELL_ACCESSIBLE (cell->priv->parent)) - return g_list_index (gtk_container_cell_accessible_get_children (GTK_CONTAINER_CELL_ACCESSIBLE (cell->priv->parent)), obj); - - parent = gtk_widget_get_accessible (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell))); - if (parent == NULL) - return -1; - - return gtk_cell_accessible_parent_get_child_index (GTK_CELL_ACCESSIBLE_PARENT (cell->priv->parent), cell); -} - -static AtkRelationSet * -gtk_cell_accessible_ref_relation_set (AtkObject *object) -{ - GtkCellAccessible *cell; - AtkRelationSet *relationset; - AtkObject *parent; - - relationset = ATK_OBJECT_CLASS (gtk_cell_accessible_parent_class)->ref_relation_set (object); - if (relationset == NULL) - relationset = atk_relation_set_new (); - - cell = GTK_CELL_ACCESSIBLE (object); - parent = gtk_widget_get_accessible (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell))); - - gtk_cell_accessible_parent_update_relationset (GTK_CELL_ACCESSIBLE_PARENT (parent), - cell, - relationset); - - return relationset; -} - -static AtkStateSet * -gtk_cell_accessible_ref_state_set (AtkObject *accessible) -{ - GtkCellAccessible *cell_accessible; - AtkStateSet *state_set; - GtkCellRendererState flags; - guint i; - - cell_accessible = GTK_CELL_ACCESSIBLE (accessible); - - state_set = atk_state_set_new (); - - if (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell_accessible)) == NULL) - { - atk_state_set_add_state (state_set, ATK_STATE_DEFUNCT); - return state_set; - } - - flags = gtk_cell_accessible_get_state (cell_accessible); - - atk_state_set_add_state (state_set, ATK_STATE_FOCUSABLE); - atk_state_set_add_state (state_set, ATK_STATE_SELECTABLE); - atk_state_set_add_state (state_set, ATK_STATE_TRANSIENT); - atk_state_set_add_state (state_set, ATK_STATE_VISIBLE); - - for (i = 0; i < G_N_ELEMENTS (state_map); i++) - { - if (flags & state_map[i].renderer_state) - { - if (!state_map[i].invert) - atk_state_set_add_state (state_set, state_map[i].atk_state); - } - else - { - if (state_map[i].invert) - atk_state_set_add_state (state_set, state_map[i].atk_state); - } - } - - if (gtk_widget_get_mapped (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell_accessible)))) - atk_state_set_add_state (state_set, ATK_STATE_SHOWING); - - return state_set; -} - -static AtkObject * -gtk_cell_accessible_get_parent (AtkObject *object) -{ - GtkCellAccessible *cell = GTK_CELL_ACCESSIBLE (object); - - return cell->priv->parent; -} - -static void -gtk_cell_accessible_class_init (GtkCellAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->get_index_in_parent = gtk_cell_accessible_get_index_in_parent; - class->ref_state_set = gtk_cell_accessible_ref_state_set; - class->ref_relation_set = gtk_cell_accessible_ref_relation_set; - class->get_parent = gtk_cell_accessible_get_parent; -} - -static void -gtk_cell_accessible_init (GtkCellAccessible *cell) -{ - cell->priv = gtk_cell_accessible_get_instance_private (cell); -} - -void -_gtk_cell_accessible_initialize (GtkCellAccessible *cell, - GtkWidget *widget, - AtkObject *parent) -{ - gtk_accessible_set_widget (GTK_ACCESSIBLE (cell), widget); - cell->priv->parent = parent; -} - -gboolean -_gtk_cell_accessible_add_state (GtkCellAccessible *cell, - AtkStateType state_type, - gboolean emit_signal) -{ - /* The signal should only be generated if the value changed, - * not when the cell is set up. So states that are set - * initially should pass FALSE as the emit_signal argument. - */ - if (emit_signal) - { - atk_object_notify_state_change (ATK_OBJECT (cell), state_type, TRUE); - /* If state_type is ATK_STATE_VISIBLE, additional notification */ - if (state_type == ATK_STATE_VISIBLE) - g_signal_emit_by_name (cell, "visible-data-changed"); - } - - /* If the parent is a flyweight container cell, propagate the state - * change to it also - */ - if (GTK_IS_CONTAINER_CELL_ACCESSIBLE (cell->priv->parent)) - _gtk_cell_accessible_add_state (GTK_CELL_ACCESSIBLE (cell->priv->parent), state_type, emit_signal); - - return TRUE; -} - -gboolean -_gtk_cell_accessible_remove_state (GtkCellAccessible *cell, - AtkStateType state_type, - gboolean emit_signal) -{ - /* The signal should only be generated if the value changed, - * not when the cell is set up. So states that are set - * initially should pass FALSE as the emit_signal argument. - */ - if (emit_signal) - { - atk_object_notify_state_change (ATK_OBJECT (cell), state_type, FALSE); - /* If state_type is ATK_STATE_VISIBLE, additional notification */ - if (state_type == ATK_STATE_VISIBLE) - g_signal_emit_by_name (cell, "visible-data-changed"); - } - - /* If the parent is a flyweight container cell, propagate the state - * change to it also - */ - if (GTK_IS_CONTAINER_CELL_ACCESSIBLE (cell->priv->parent)) - _gtk_cell_accessible_remove_state (GTK_CELL_ACCESSIBLE (cell->priv->parent), state_type, emit_signal); - - return TRUE; -} - -static int -gtk_cell_accessible_action_get_n_actions (AtkAction *action) -{ - return 3; -} - -static const char * -gtk_cell_accessible_action_get_name (AtkAction *action, - int index) -{ - switch (index) - { - case 0: - return "expand or contract"; - case 1: - return "edit"; - case 2: - return "activate"; - default: - return NULL; - } -} - -static const char * -gtk_cell_accessible_action_get_localized_name (AtkAction *action, - int index) -{ - switch (index) - { - case 0: - return C_("Action name", "Expand or contract"); - case 1: - return C_("Action name", "Edit"); - case 2: - return C_("Action name", "Activate"); - default: - return NULL; - } -} - -static const char * -gtk_cell_accessible_action_get_description (AtkAction *action, - int index) -{ - switch (index) - { - case 0: - return C_("Action description", "Expands or contracts the row in the tree view containing this cell"); - case 1: - return C_("Action description", "Creates a widget in which the contents of the cell can be edited"); - case 2: - return C_("Action description", "Activates the cell"); - default: - return NULL; - } -} - -static const char * -gtk_cell_accessible_action_get_keybinding (AtkAction *action, - int index) -{ - return NULL; -} - -static gboolean -gtk_cell_accessible_action_do_action (AtkAction *action, - int index) -{ - GtkCellAccessible *cell = GTK_CELL_ACCESSIBLE (action); - GtkCellAccessibleParent *parent; - - if (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell)) == NULL) - return FALSE; - - parent = GTK_CELL_ACCESSIBLE_PARENT (gtk_widget_get_accessible (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell)))); - - switch (index) - { - case 0: - gtk_cell_accessible_parent_expand_collapse (parent, cell); - break; - case 1: - gtk_cell_accessible_parent_edit (parent, cell); - break; - case 2: - gtk_cell_accessible_parent_activate (parent, cell); - break; - default: - return FALSE; - } - - return TRUE; -} - -static void -atk_action_interface_init (AtkActionIface *iface) -{ - iface->get_n_actions = gtk_cell_accessible_action_get_n_actions; - iface->do_action = gtk_cell_accessible_action_do_action; - iface->get_name = gtk_cell_accessible_action_get_name; - iface->get_localized_name = gtk_cell_accessible_action_get_localized_name; - iface->get_description = gtk_cell_accessible_action_get_description; - iface->get_keybinding = gtk_cell_accessible_action_get_keybinding; -} - -static void -gtk_cell_accessible_get_extents (AtkComponent *component, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coord_type) -{ - GtkCellAccessible *cell; - AtkObject *parent; - - cell = GTK_CELL_ACCESSIBLE (component); - parent = gtk_widget_get_accessible (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell))); - - gtk_cell_accessible_parent_get_cell_extents (GTK_CELL_ACCESSIBLE_PARENT (parent), - cell, - x, y, width, height, coord_type); -} - -static gboolean -gtk_cell_accessible_grab_focus (AtkComponent *component) -{ - GtkCellAccessible *cell; - AtkObject *parent; - - cell = GTK_CELL_ACCESSIBLE (component); - parent = gtk_widget_get_accessible (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell))); - - return gtk_cell_accessible_parent_grab_focus (GTK_CELL_ACCESSIBLE_PARENT (parent), cell); -} - -static void -atk_component_interface_init (AtkComponentIface *iface) -{ - iface->get_extents = gtk_cell_accessible_get_extents; - iface->grab_focus = gtk_cell_accessible_grab_focus; -} - -static int -gtk_cell_accessible_get_column_span (AtkTableCell *table_cell) -{ - return 1; -} - -static GPtrArray * -gtk_cell_accessible_get_column_header_cells (AtkTableCell *table_cell) -{ - GtkCellAccessible *cell; - AtkObject *parent; - - cell = GTK_CELL_ACCESSIBLE (table_cell); - parent = gtk_widget_get_accessible (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell))); - - return gtk_cell_accessible_parent_get_column_header_cells (GTK_CELL_ACCESSIBLE_PARENT (parent), - cell); -} - -static gboolean -gtk_cell_accessible_get_position (AtkTableCell *table_cell, - int *row, - int *column) -{ - GtkCellAccessible *cell; - AtkObject *parent; - - cell = GTK_CELL_ACCESSIBLE (table_cell); - parent = gtk_widget_get_accessible (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell))); - - gtk_cell_accessible_parent_get_cell_position (GTK_CELL_ACCESSIBLE_PARENT (parent), - cell, - row, column); - return ((row && *row > 0) || (column && *column > 0)); -} - -static int -gtk_cell_accessible_get_row_span (AtkTableCell *table_cell) -{ - return 1; -} - -static GPtrArray * -gtk_cell_accessible_get_row_header_cells (AtkTableCell *table_cell) -{ - GtkCellAccessible *cell; - AtkObject *parent; - - cell = GTK_CELL_ACCESSIBLE (table_cell); - parent = gtk_widget_get_accessible (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell))); - - return gtk_cell_accessible_parent_get_row_header_cells (GTK_CELL_ACCESSIBLE_PARENT (parent), - cell); -} - -static AtkObject * -gtk_cell_accessible_get_table (AtkTableCell *table_cell) -{ - AtkObject *obj; - - obj = ATK_OBJECT (table_cell); - do - { - AtkRole role; - obj = atk_object_get_parent (obj); - role = atk_object_get_role (obj); - if (role == ATK_ROLE_TABLE || role == ATK_ROLE_TREE_TABLE) - break; - } - while (obj); - return obj; -} - -static void -atk_table_cell_interface_init (AtkTableCellIface *iface) -{ - iface->get_column_span = gtk_cell_accessible_get_column_span; - iface->get_column_header_cells = gtk_cell_accessible_get_column_header_cells; - iface->get_position = gtk_cell_accessible_get_position; - iface->get_row_span = gtk_cell_accessible_get_row_span; - iface->get_row_header_cells = gtk_cell_accessible_get_row_header_cells; - iface->get_table = gtk_cell_accessible_get_table; -} - -static GtkCellRendererState -gtk_cell_accessible_get_state (GtkCellAccessible *cell) -{ - AtkObject *parent; - - g_return_val_if_fail (GTK_IS_CELL_ACCESSIBLE (cell), 0); - - parent = gtk_widget_get_accessible (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell))); - if (parent == NULL) - return 0; - - return gtk_cell_accessible_parent_get_renderer_state (GTK_CELL_ACCESSIBLE_PARENT (parent), cell); -} - -/* - * gtk_cell_accessible_state_changed: - * @cell: a #GtkCellAccessible - * @added: the flags that were added from @cell - * @removed: the flags that were removed from @cell - * - * Notifies @cell of state changes. Multiple states may be added - * or removed at the same time. A state that is @added may not be - * @removed at the same time. - **/ -void -_gtk_cell_accessible_state_changed (GtkCellAccessible *cell, - GtkCellRendererState added, - GtkCellRendererState removed) -{ - AtkObject *object; - guint i; - - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE (cell)); - g_return_if_fail ((added & removed) == 0); - - object = ATK_OBJECT (cell); - - for (i = 0; i < G_N_ELEMENTS (state_map); i++) - { - if (added & state_map[i].renderer_state) - atk_object_notify_state_change (object, - state_map[i].atk_state, - !state_map[i].invert); - if (removed & state_map[i].renderer_state) - atk_object_notify_state_change (object, - state_map[i].atk_state, - state_map[i].invert); - } -} - -/* - * gtk_cell_accessible_update_cache: - * @cell: the cell that is changed - * @emit_signal: whether or not to notify the ATK bridge - * - * Notifies the cell that the values in the data in the row that - * is used to feed the cell renderer with has changed. The - * cell_changed function of @cell is called to send update - * notifications for the properties it takes from its cell - * renderer. If @emit_signal is TRUE, also notify the ATK bridge - * of the change. The bridge should be notified when an existing - * cell changes; not when a newly-created cell is being set up. - * - * Note that there is no higher granularity available about which - * properties changed, so you will need to make do with this - * function. - **/ -void -_gtk_cell_accessible_update_cache (GtkCellAccessible *cell, - gboolean emit_signal) -{ - GtkCellAccessibleClass *klass; - - g_return_if_fail (GTK_CELL_ACCESSIBLE (cell)); - - klass = GTK_CELL_ACCESSIBLE_GET_CLASS (cell); - - if (klass->update_cache) - klass->update_cache (cell, emit_signal); -} diff --git a/gtk/a11y/gtkcellaccessible.h b/gtk/a11y/gtkcellaccessible.h deleted file mode 100644 index e144eed0ad..0000000000 --- a/gtk/a11y/gtkcellaccessible.h +++ /dev/null @@ -1,60 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_CELL_ACCESSIBLE_H__ -#define __GTK_CELL_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <atk/atk.h> -#include <gtk/gtkaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_CELL_ACCESSIBLE (gtk_cell_accessible_get_type ()) -#define GTK_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CELL_ACCESSIBLE, GtkCellAccessible)) -#define GTK_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CELL_ACCESSIBLE, GtkCellAccessibleClass)) -#define GTK_IS_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CELL_ACCESSIBLE)) -#define GTK_IS_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CELL_ACCESSIBLE)) -#define GTK_CELL_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CELL_ACCESSIBLE, GtkCellAccessibleClass)) - -typedef struct _GtkCellAccessible GtkCellAccessible; -typedef struct _GtkCellAccessibleClass GtkCellAccessibleClass; -typedef struct _GtkCellAccessiblePrivate GtkCellAccessiblePrivate; - -struct _GtkCellAccessible -{ - GtkAccessible parent; - - GtkCellAccessiblePrivate *priv; -}; - -struct _GtkCellAccessibleClass -{ - GtkAccessibleClass parent_class; - void (*update_cache) (GtkCellAccessible *cell, - gboolean emit_signal); -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_cell_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_CELL_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkcellaccessibleparent.c b/gtk/a11y/gtkcellaccessibleparent.c deleted file mode 100644 index f0389fc486..0000000000 --- a/gtk/a11y/gtkcellaccessibleparent.c +++ /dev/null @@ -1,271 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <gtk/gtk.h> -#include "gtkcellaccessibleparent.h" - -GType -gtk_cell_accessible_parent_get_type (void) -{ - static volatile gsize g_define_type_id__volatile = 0; - - if (g_once_init_enter (&g_define_type_id__volatile)) - { - GType g_define_type_id = - g_type_register_static_simple (G_TYPE_INTERFACE, - g_intern_static_string ("GtkCellAccessibleParent"), - sizeof (GtkCellAccessibleParentIface), - NULL, - 0, - NULL, - 0); - - g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); - } - - return g_define_type_id__volatile; -} - -/** - * gtk_cell_accessible_parent_get_cell_extents: - * @x: (out): - * @y: (out): - * @width: (out): - * @height: (out): - */ -void -gtk_cell_accessible_parent_get_cell_extents (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coord_type) -{ - GtkCellAccessibleParentIface *iface; - - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent)); - - iface = GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE (parent); - - if (iface->get_cell_extents) - (iface->get_cell_extents) (parent, cell, x, y, width, height, coord_type); -} - -/** - * gtk_cell_accessible_parent_get_cell_area: - * @cell_rect: (out): - */ -void -gtk_cell_accessible_parent_get_cell_area (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - GdkRectangle *cell_rect) -{ - GtkCellAccessibleParentIface *iface; - - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent)); - g_return_if_fail (cell_rect); - - iface = GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE (parent); - - if (iface->get_cell_area) - (iface->get_cell_area) (parent, cell, cell_rect); -} - -gboolean -gtk_cell_accessible_parent_grab_focus (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkCellAccessibleParentIface *iface; - - g_return_val_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent), FALSE); - - iface = GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE (parent); - - if (iface->grab_focus) - return (iface->grab_focus) (parent, cell); - else - return FALSE; -} - -int -gtk_cell_accessible_parent_get_child_index (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkCellAccessibleParentIface *iface; - - g_return_val_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent), FALSE); - - iface = GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE (parent); - - if (iface->get_child_index) - return (iface->get_child_index) (parent, cell); - else - return -1; -} - -GtkCellRendererState -gtk_cell_accessible_parent_get_renderer_state (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkCellAccessibleParentIface *iface; - - g_return_val_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent), 0); - g_return_val_if_fail (GTK_IS_CELL_ACCESSIBLE (cell), 0); - - iface = GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE (parent); - - if (iface->get_renderer_state) - return (iface->get_renderer_state) (parent, cell); - else - return 0; -} - -void -gtk_cell_accessible_parent_expand_collapse (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkCellAccessibleParentIface *iface; - - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent)); - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE (cell)); - - iface = GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE (parent); - - if (iface->expand_collapse) - (iface->expand_collapse) (parent, cell); -} - -void -gtk_cell_accessible_parent_activate (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkCellAccessibleParentIface *iface; - - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent)); - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE (cell)); - - iface = GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE (parent); - - if (iface->activate) - (iface->activate) (parent, cell); -} - -void -gtk_cell_accessible_parent_edit (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkCellAccessibleParentIface *iface; - - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent)); - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE (cell)); - - iface = GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE (parent); - - if (iface->edit) - (iface->edit) (parent, cell); -} - -void -gtk_cell_accessible_parent_update_relationset (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - AtkRelationSet *relationset) -{ - GtkCellAccessibleParentIface *iface; - - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent)); - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE (cell)); - g_return_if_fail (ATK_IS_RELATION_SET (relationset)); - - iface = GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE (parent); - - if (iface->update_relationset) - (iface->update_relationset) (parent, cell, relationset); -} - -/** - * gtk_cell_accessible_parent_get_cell_position: - * @row: (out): - * @column: (out): - */ -void -gtk_cell_accessible_parent_get_cell_position (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - int *row, - int *column) -{ - GtkCellAccessibleParentIface *iface; - - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent)); - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE (cell)); - - iface = GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE (parent); - - if (iface->get_cell_position) - (iface->get_cell_position) (parent, cell, row, column); - else - { - if (row) - *row = -1; - if (column) - *column = -1; - } -} - -/** - * gtk_cell_accessible_parent_get_column_header_cells: - * Returns: (transfer full) (element-type AtkObject) - */ -GPtrArray * -gtk_cell_accessible_parent_get_column_header_cells (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkCellAccessibleParentIface *iface; - - g_return_val_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent), NULL); - g_return_val_if_fail (GTK_IS_CELL_ACCESSIBLE (cell), NULL); - - iface = GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE (parent); - - if (iface->get_column_header_cells) - return (iface->get_column_header_cells) (parent, cell); - else - return NULL; -} - -/** - * gtk_cell_accessible_parent_get_row_header_cells: - * Returns: (transfer full) (element-type AtkObject) - */ -GPtrArray * -gtk_cell_accessible_parent_get_row_header_cells (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkCellAccessibleParentIface *iface; - - g_return_val_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent), NULL); - g_return_val_if_fail (GTK_IS_CELL_ACCESSIBLE (cell), NULL); - - iface = GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE (parent); - - if (iface->get_row_header_cells) - return (iface->get_row_header_cells) (parent, cell); - else - return NULL; -} diff --git a/gtk/a11y/gtkcellaccessibleparent.h b/gtk/a11y/gtkcellaccessibleparent.h deleted file mode 100644 index b724f71188..0000000000 --- a/gtk/a11y/gtkcellaccessibleparent.h +++ /dev/null @@ -1,140 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_CELL_ACCESSIBLE_PARENT_H__ -#define __GTK_CELL_ACCESSIBLE_PARENT_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <atk/atk.h> -#include <gtk/a11y/gtkcellaccessible.h> - -G_BEGIN_DECLS - -/* - * The GtkCellAccessibleParent interface should be supported by any object - * which contains children which are flyweights, i.e. do not have corresponding - * widgets and the children need help from their parent to provide - * functionality. One example is GtkTreeViewAccessible where the children - * GtkCellAccessible need help from the GtkTreeViewAccessible in order to - * implement atk_component_get_extents(). - */ - -#define GTK_TYPE_CELL_ACCESSIBLE_PARENT (gtk_cell_accessible_parent_get_type ()) -#define GTK_IS_CELL_ACCESSIBLE_PARENT(obj) G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CELL_ACCESSIBLE_PARENT) -#define GTK_CELL_ACCESSIBLE_PARENT(obj) G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CELL_ACCESSIBLE_PARENT, GtkCellAccessibleParent) -#define GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTK_TYPE_CELL_ACCESSIBLE_PARENT, GtkCellAccessibleParentIface)) - -typedef struct _GtkCellAccessibleParent GtkCellAccessibleParent; -typedef struct _GtkCellAccessibleParentIface GtkCellAccessibleParentIface; - -struct _GtkCellAccessibleParentIface -{ - GTypeInterface parent; - void ( *get_cell_extents) (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coord_type); - void ( *get_cell_area) (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - GdkRectangle *cell_rect); - gboolean ( *grab_focus) (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); - int ( *get_child_index) (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); - GtkCellRendererState - ( *get_renderer_state) (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); - /* actions */ - void ( *expand_collapse) (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); - void ( *activate) (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); - void ( *edit) (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); - /* end of actions */ - void ( *update_relationset) (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - AtkRelationSet *relationset); - void ( *get_cell_position) (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - int *row, - int *column); - GPtrArray * ( *get_column_header_cells) (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); - GPtrArray * ( *get_row_header_cells) (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_cell_accessible_parent_get_type (void); - -GDK_AVAILABLE_IN_ALL -void gtk_cell_accessible_parent_get_cell_extents (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coord_type); -GDK_AVAILABLE_IN_ALL -void gtk_cell_accessible_parent_get_cell_area (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - GdkRectangle *cell_rect); -GDK_AVAILABLE_IN_ALL -gboolean gtk_cell_accessible_parent_grab_focus (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); -GDK_AVAILABLE_IN_ALL -int gtk_cell_accessible_parent_get_child_index (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); -GDK_AVAILABLE_IN_ALL -GtkCellRendererState - gtk_cell_accessible_parent_get_renderer_state(GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); -GDK_AVAILABLE_IN_ALL -void gtk_cell_accessible_parent_expand_collapse (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); -GDK_AVAILABLE_IN_ALL -void gtk_cell_accessible_parent_activate (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); -GDK_AVAILABLE_IN_ALL -void gtk_cell_accessible_parent_edit (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); -GDK_AVAILABLE_IN_ALL -void gtk_cell_accessible_parent_update_relationset (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - AtkRelationSet *relationset); -GDK_AVAILABLE_IN_ALL -void gtk_cell_accessible_parent_get_cell_position(GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - int *row, - int *column); -GDK_AVAILABLE_IN_ALL -GPtrArray *gtk_cell_accessible_parent_get_column_header_cells (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); -GDK_AVAILABLE_IN_ALL -GPtrArray *gtk_cell_accessible_parent_get_row_header_cells (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell); - -G_END_DECLS - -#endif /* __GTK_CELL_ACCESSIBLE_PARENT_H__ */ diff --git a/gtk/a11y/gtkcellaccessibleprivate.h b/gtk/a11y/gtkcellaccessibleprivate.h deleted file mode 100644 index 80fb1435c9..0000000000 --- a/gtk/a11y/gtkcellaccessibleprivate.h +++ /dev/null @@ -1,42 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_CELL_ACCESSIBLE_PRIVATE_H__ -#define __GTK_CELL_ACCESSIBLE_PRIVATE_H__ - -#include <gtk/a11y/gtkcellaccessible.h> - -G_BEGIN_DECLS - -void _gtk_cell_accessible_state_changed (GtkCellAccessible *cell, - GtkCellRendererState added, - GtkCellRendererState removed); -void _gtk_cell_accessible_update_cache (GtkCellAccessible *cell, - gboolean emit_signal); -void _gtk_cell_accessible_initialize (GtkCellAccessible *cell, - GtkWidget *widget, - AtkObject *parent); -gboolean _gtk_cell_accessible_add_state (GtkCellAccessible *cell, - AtkStateType state_type, - gboolean emit_signal); -gboolean _gtk_cell_accessible_remove_state (GtkCellAccessible *cell, - AtkStateType state_type, - gboolean emit_signal); - -G_END_DECLS - -#endif /* __GTK_CELL_ACCESSIBLE_PRIVATE_H__ */ diff --git a/gtk/a11y/gtkcolorswatchaccessible.c b/gtk/a11y/gtkcolorswatchaccessible.c deleted file mode 100644 index 8ea77a6590..0000000000 --- a/gtk/a11y/gtkcolorswatchaccessible.c +++ /dev/null @@ -1,211 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2012 Red Hat, 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtkcolorswatchaccessibleprivate.h" -#include "gtkcolorswatchprivate.h" - -#include <glib/gi18n-lib.h> - -static void atk_action_interface_init (AtkActionIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkColorSwatchAccessible, _gtk_color_swatch_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)) - -static void -state_changed_cb (GtkWidget *widget, - GtkStateFlags previous_flags, - AtkObject *accessible) -{ - GtkStateFlags flags; - gboolean was_selected; - gboolean selected; - - flags = gtk_widget_get_state_flags (widget); - - was_selected = (previous_flags & GTK_STATE_FLAG_SELECTED) != 0; - selected = (flags & GTK_STATE_FLAG_SELECTED) != 0; - - if (selected && !was_selected) - atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, TRUE); - else if (!selected && was_selected) - atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, FALSE); -} - -static void -on_selectable_changed_cb (GObject *gobject, - GParamSpec *pspec, - AtkObject *accessible) -{ - GtkColorSwatch *swatch = GTK_COLOR_SWATCH (gobject); - AtkRole role; - - if (gtk_color_swatch_get_selectable (swatch)) - role = ATK_ROLE_RADIO_BUTTON; - else - role = ATK_ROLE_PUSH_BUTTON; - - atk_object_set_role (accessible, role); -} - -static void -gtk_color_swatch_accessible_initialize (AtkObject *obj, - gpointer data) -{ - GtkColorSwatch *swatch = data; - - ATK_OBJECT_CLASS (_gtk_color_swatch_accessible_parent_class)->initialize (obj, data); - - g_signal_connect (data, "state-flags-changed", - G_CALLBACK (state_changed_cb), - obj); - g_signal_connect (data, "notify::selectable", - G_CALLBACK (on_selectable_changed_cb), - obj); - - obj->role = gtk_color_swatch_get_selectable (swatch) - ? ATK_ROLE_RADIO_BUTTON - : ATK_ROLE_PUSH_BUTTON; -} - -static AtkStateSet * -gtk_color_swatch_accessible_ref_state_set (AtkObject *accessible) -{ - GtkWidget *widget; - AtkStateSet *state_set; - - state_set = ATK_OBJECT_CLASS (_gtk_color_swatch_accessible_parent_class)->ref_state_set (accessible); - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget != NULL) - { - if ((gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_SELECTED) != 0) - atk_state_set_add_state (state_set, ATK_STATE_CHECKED); - } - - return state_set; -} - -static void -_gtk_color_swatch_accessible_class_init (GtkColorSwatchAccessibleClass *klass) -{ - AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass); - - atk_class->initialize = gtk_color_swatch_accessible_initialize; - atk_class->ref_state_set = gtk_color_swatch_accessible_ref_state_set; -} - -static void -_gtk_color_swatch_accessible_init (GtkColorSwatchAccessible *self) -{ - ATK_OBJECT (self)->role = ATK_ROLE_RADIO_BUTTON; -} - -static int -gtk_color_swatch_accessible_get_n_actions (AtkAction *action) -{ - return 3; -} - -static const char * -gtk_color_swatch_accessible_get_keybinding (AtkAction *action, - int i) -{ - return NULL; -} - -static const char * -gtk_color_swatch_accessible_get_name (AtkAction *action, - int i) -{ - switch (i) - { - case 0: return "select"; - case 1: return "activate"; - case 2: return "customize"; - default: return NULL; - } -} - -static const char * -gtk_color_swatch_accessible_get_localized_name (AtkAction *action, - int i) -{ - switch (i) - { - case 0: return C_("Action name", "Select"); - case 1: return C_("Action name", "Activate"); - case 2: return C_("Action name", "Customize"); - default: return NULL; - } -} - -static const char * -gtk_color_swatch_accessible_get_description (AtkAction *action, - int i) -{ - switch (i) - { - case 0: return C_("Action description", "Selects the color"); - case 1: return C_("Action description", "Activates the color"); - case 2: return C_("Action description", "Customizes the color"); - default: return NULL; - } -} - -static gboolean -gtk_color_swatch_accessible_do_action (AtkAction *action, - int i) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return FALSE; - - switch (i) - { - case 0: - gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_SELECTED, FALSE); - break; - - case 1: - g_signal_emit_by_name (widget, "activate"); - break; - - case 2: - g_signal_emit_by_name (widget, "customize"); - break; - - default: - return FALSE; - } - - return TRUE; -} - -static void -atk_action_interface_init (AtkActionIface *iface) -{ - iface->do_action = gtk_color_swatch_accessible_do_action; - iface->get_n_actions = gtk_color_swatch_accessible_get_n_actions; - iface->get_keybinding = gtk_color_swatch_accessible_get_keybinding; - iface->get_name = gtk_color_swatch_accessible_get_name; - iface->get_localized_name = gtk_color_swatch_accessible_get_localized_name; - iface->get_description = gtk_color_swatch_accessible_get_description; -} diff --git a/gtk/a11y/gtkcolorswatchaccessibleprivate.h b/gtk/a11y/gtkcolorswatchaccessibleprivate.h deleted file mode 100644 index 123f65f7a8..0000000000 --- a/gtk/a11y/gtkcolorswatchaccessibleprivate.h +++ /dev/null @@ -1,52 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2012, Red Hat, Inc - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_COLOR_SWATCH_ACCESSIBLE_H__ -#define __GTK_COLOR_SWATCH_ACCESSIBLE_H__ - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_COLOR_SWATCH_ACCESSIBLE (_gtk_color_swatch_accessible_get_type ()) -#define GTK_COLOR_SWATCH_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_COLOR_SWATCH_ACCESSIBLE, GtkColorSwatchAccessible)) -#define GTK_COLOR_SWATCH_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_COLOR_SWATCH_ACCESSIBLE, GtkColorSwatchAccessibleClass)) -#define GTK_IS_COLOR_SWATCH_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_COLOR_SWATCH_ACCESSIBLE)) -#define GTK_IS_COLOR_SWATCH_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_COLOR_SWATCH_ACCESSIBLE)) -#define GTK_COLOR_SWATCH_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_COLOR_SWATCH_ACCESSIBLE, GtkColorSwatchAccessibleClass)) - -typedef struct _GtkColorSwatchAccessible GtkColorSwatchAccessible; -typedef struct _GtkColorSwatchAccessibleClass GtkColorSwatchAccessibleClass; -typedef struct _GtkColorSwatchAccessiblePrivate GtkColorSwatchAccessiblePrivate; - -struct _GtkColorSwatchAccessible -{ - GtkWidgetAccessible parent; - - GtkColorSwatchAccessiblePrivate *priv; -}; - -struct _GtkColorSwatchAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GType _gtk_color_swatch_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_COLOR_SWATCH_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkcomboboxaccessible.c b/gtk/a11y/gtkcomboboxaccessible.c deleted file mode 100644 index 454b4730f3..0000000000 --- a/gtk/a11y/gtkcomboboxaccessible.c +++ /dev/null @@ -1,435 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2004 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <glib/gi18n-lib.h> -#include <gtk/gtk.h> -#include "gtkcomboboxaccessible.h" - -struct _GtkComboBoxAccessiblePrivate -{ - char *name; - int old_selection; - gboolean popup_set; -}; - -static void atk_action_interface_init (AtkActionIface *iface); -static void atk_selection_interface_init (AtkSelectionIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkComboBoxAccessible, gtk_combo_box_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_ADD_PRIVATE (GtkComboBoxAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_SELECTION, atk_selection_interface_init)) - -static void -changed_cb (GtkWidget *widget) -{ - GtkComboBox *combo_box; - AtkObject *obj; - GtkComboBoxAccessible *accessible; - int index; - - combo_box = GTK_COMBO_BOX (widget); - - index = gtk_combo_box_get_active (combo_box); - obj = gtk_widget_get_accessible (widget); - accessible = GTK_COMBO_BOX_ACCESSIBLE (obj); - if (accessible->priv->old_selection != index) - { - accessible->priv->old_selection = index; - g_object_notify (G_OBJECT (obj), "accessible-name"); - g_signal_emit_by_name (obj, "selection-changed"); - } -} - -static void -gtk_combo_box_accessible_initialize (AtkObject *obj, - gpointer data) -{ - GtkComboBox *combo_box; - GtkComboBoxAccessible *accessible; - AtkObject *popup; - - ATK_OBJECT_CLASS (gtk_combo_box_accessible_parent_class)->initialize (obj, data); - - combo_box = GTK_COMBO_BOX (data); - accessible = GTK_COMBO_BOX_ACCESSIBLE (obj); - - g_signal_connect (combo_box, "changed", G_CALLBACK (changed_cb), NULL); - accessible->priv->old_selection = gtk_combo_box_get_active (combo_box); - - popup = gtk_combo_box_get_popup_accessible (combo_box); - if (popup) - { - atk_object_set_parent (popup, obj); - accessible->priv->popup_set = TRUE; - } - if (gtk_combo_box_get_has_entry (combo_box)) - atk_object_set_parent (gtk_widget_get_accessible (gtk_combo_box_get_child (GTK_COMBO_BOX (combo_box))), obj); - - obj->role = ATK_ROLE_COMBO_BOX; -} - -static void -gtk_combo_box_accessible_finalize (GObject *object) -{ - GtkComboBoxAccessible *combo_box = GTK_COMBO_BOX_ACCESSIBLE (object); - - g_free (combo_box->priv->name); - - G_OBJECT_CLASS (gtk_combo_box_accessible_parent_class)->finalize (object); -} - -static const char * -gtk_combo_box_accessible_get_name (AtkObject *obj) -{ - GtkWidget *widget; - GtkComboBox *combo_box; - GtkComboBoxAccessible *accessible; - GtkTreeIter iter; - const char *name; - GtkTreeModel *model; - int n_columns; - int i; - - name = ATK_OBJECT_CLASS (gtk_combo_box_accessible_parent_class)->get_name (obj); - if (name) - return name; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - combo_box = GTK_COMBO_BOX (widget); - accessible = GTK_COMBO_BOX_ACCESSIBLE (obj); - if (gtk_combo_box_get_active_iter (combo_box, &iter)) - { - model = gtk_combo_box_get_model (combo_box); - n_columns = gtk_tree_model_get_n_columns (model); - for (i = 0; i < n_columns; i++) - { - GValue value = G_VALUE_INIT; - - gtk_tree_model_get_value (model, &iter, i, &value); - if (G_VALUE_HOLDS_STRING (&value)) - { - g_free (accessible->priv->name); - accessible->priv->name = g_strdup (g_value_get_string (&value)); - g_value_unset (&value); - break; - } - else - g_value_unset (&value); - } - } - return accessible->priv->name; -} - -static int -gtk_combo_box_accessible_get_n_children (AtkObject* obj) -{ - int n_children = 0; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return 0; - - n_children++; - if (gtk_combo_box_get_has_entry (GTK_COMBO_BOX (widget))) - n_children++; - - return n_children; -} - -static AtkObject * -gtk_combo_box_accessible_ref_child (AtkObject *obj, - int i) -{ - GtkWidget *widget; - AtkObject *child; - GtkComboBoxAccessible *box; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - if (i == 0) - { - child = gtk_combo_box_get_popup_accessible (GTK_COMBO_BOX (widget)); - box = GTK_COMBO_BOX_ACCESSIBLE (obj); - if (!box->priv->popup_set) - { - atk_object_set_parent (child, obj); - box->priv->popup_set = TRUE; - } - } - else if (i == 1 && gtk_combo_box_get_has_entry (GTK_COMBO_BOX (widget))) - { - child = gtk_widget_get_accessible (gtk_combo_box_get_child (GTK_COMBO_BOX (widget))); - } - else - { - return NULL; - } - - return g_object_ref (child); -} - -static void -gtk_combo_box_accessible_class_init (GtkComboBoxAccessibleClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - gobject_class->finalize = gtk_combo_box_accessible_finalize; - - class->get_name = gtk_combo_box_accessible_get_name; - class->get_n_children = gtk_combo_box_accessible_get_n_children; - class->ref_child = gtk_combo_box_accessible_ref_child; - class->initialize = gtk_combo_box_accessible_initialize; -} - -static void -gtk_combo_box_accessible_init (GtkComboBoxAccessible *combo_box) -{ - combo_box->priv = gtk_combo_box_accessible_get_instance_private (combo_box); - combo_box->priv->old_selection = -1; - combo_box->priv->name = NULL; - combo_box->priv->popup_set = FALSE; -} - -static gboolean -gtk_combo_box_accessible_do_action (AtkAction *action, - int i) -{ - GtkComboBox *combo_box; - GtkWidget *widget; - gboolean popup_shown; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return FALSE; - - if (!gtk_widget_get_sensitive (widget) || !gtk_widget_get_visible (widget)) - return FALSE; - - if (i != 0) - return FALSE; - - combo_box = GTK_COMBO_BOX (widget); - g_object_get (combo_box, "popup-shown", &popup_shown, NULL); - if (popup_shown) - gtk_combo_box_popdown (combo_box); - else - gtk_combo_box_popup (combo_box); - - return TRUE; -} - -static int -gtk_combo_box_accessible_get_n_actions (AtkAction *action) -{ - return 1; -} - -static const char * -gtk_combo_box_accessible_get_keybinding (AtkAction *action, - int i) -{ - GtkComboBoxAccessible *combo_box; - GtkWidget *widget; - GtkWidget *label; - AtkRelationSet *set; - AtkRelation *relation; - GPtrArray *target; - gpointer target_object; - guint key_val; - char *return_value = NULL; - - if (i != 0) - return NULL; - - combo_box = GTK_COMBO_BOX_ACCESSIBLE (action); - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (combo_box)); - if (widget == NULL) - return NULL; - - set = atk_object_ref_relation_set (ATK_OBJECT (action)); - if (set == NULL) - return NULL; - - label = NULL; - relation = atk_relation_set_get_relation_by_type (set, ATK_RELATION_LABELLED_BY); - if (relation) - { - target = atk_relation_get_target (relation); - target_object = g_ptr_array_index (target, 0); - label = gtk_accessible_get_widget (GTK_ACCESSIBLE (target_object)); - } - g_object_unref (set); - if (GTK_IS_LABEL (label)) - { - key_val = gtk_label_get_mnemonic_keyval (GTK_LABEL (label)); - if (key_val != GDK_KEY_VoidSymbol) - return_value = gtk_accelerator_name (key_val, GDK_ALT_MASK); - } - - return return_value; -} - -static const char * -gtk_combo_box_accessible_action_get_name (AtkAction *action, - int i) -{ - if (i == 0) - return "press"; - return NULL; -} - -static const char * -gtk_combo_box_accessible_action_get_localized_name (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action name", "Press"); - return NULL; -} - -static const char * -gtk_combo_box_accessible_action_get_description (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action description", "Presses the combobox"); - return NULL; -} - -static void -atk_action_interface_init (AtkActionIface *iface) -{ - iface->do_action = gtk_combo_box_accessible_do_action; - iface->get_n_actions = gtk_combo_box_accessible_get_n_actions; - iface->get_keybinding = gtk_combo_box_accessible_get_keybinding; - iface->get_name = gtk_combo_box_accessible_action_get_name; - iface->get_localized_name = gtk_combo_box_accessible_action_get_localized_name; - iface->get_description = gtk_combo_box_accessible_action_get_description; -} - -static gboolean -gtk_combo_box_accessible_add_selection (AtkSelection *selection, - int i) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return FALSE; - - gtk_combo_box_set_active (GTK_COMBO_BOX (widget), i); - - return TRUE; -} - -static gboolean -gtk_combo_box_accessible_clear_selection (AtkSelection *selection) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return FALSE; - - gtk_combo_box_set_active (GTK_COMBO_BOX (widget), -1); - - return TRUE; -} - -static AtkObject * -gtk_combo_box_accessible_ref_selection (AtkSelection *selection, - int i) -{ - GtkComboBox *combo_box; - GtkWidget *widget; - AtkObject *obj; - int index; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return NULL; - - if (i != 0) - return NULL; - - combo_box = GTK_COMBO_BOX (widget); - - obj = gtk_combo_box_get_popup_accessible (combo_box); - index = gtk_combo_box_get_active (combo_box); - - return atk_object_ref_accessible_child (obj, index); -} - -static int -gtk_combo_box_accessible_get_selection_count (AtkSelection *selection) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return 0; - - return (gtk_combo_box_get_active (GTK_COMBO_BOX (widget)) == -1) ? 0 : 1; -} - -static gboolean -gtk_combo_box_accessible_is_child_selected (AtkSelection *selection, - int i) -{ - GtkWidget *widget; - int j; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - - if (widget == NULL) - return FALSE; - - j = gtk_combo_box_get_active (GTK_COMBO_BOX (widget)); - - return (j == i); -} - -static gboolean -gtk_combo_box_accessible_remove_selection (AtkSelection *selection, - int i) -{ - if (atk_selection_is_child_selected (selection, i)) - atk_selection_clear_selection (selection); - - return TRUE; -} - -static void -atk_selection_interface_init (AtkSelectionIface *iface) -{ - iface->add_selection = gtk_combo_box_accessible_add_selection; - iface->clear_selection = gtk_combo_box_accessible_clear_selection; - iface->ref_selection = gtk_combo_box_accessible_ref_selection; - iface->get_selection_count = gtk_combo_box_accessible_get_selection_count; - iface->is_child_selected = gtk_combo_box_accessible_is_child_selected; - iface->remove_selection = gtk_combo_box_accessible_remove_selection; -} diff --git a/gtk/a11y/gtkcomboboxaccessible.h b/gtk/a11y/gtkcomboboxaccessible.h deleted file mode 100644 index 4ce10b1e8b..0000000000 --- a/gtk/a11y/gtkcomboboxaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2004 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_COMBO_BOX_ACCESSIBLE_H__ -#define __GTK_COMBO_BOX_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_COMBO_BOX_ACCESSIBLE (gtk_combo_box_accessible_get_type ()) -#define GTK_COMBO_BOX_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_COMBO_BOX_ACCESSIBLE, GtkComboBoxAccessible)) -#define GTK_COMBO_BOX_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_COMBO_BOX_ACCESSIBLE, GtkComboBoxAccessibleClass)) -#define GTK_IS_COMBO_BOX_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_COMBO_BOX_ACCESSIBLE)) -#define GTK_IS_COMBO_BOX_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_COMBO_BOX_ACCESSIBLE)) -#define GTK_COMBO_BOX_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_COMBO_BOX_ACCESSIBLE, GtkComboBoxAccessibleClass)) - -typedef struct _GtkComboBoxAccessible GtkComboBoxAccessible; -typedef struct _GtkComboBoxAccessibleClass GtkComboBoxAccessibleClass; -typedef struct _GtkComboBoxAccessiblePrivate GtkComboBoxAccessiblePrivate; - -struct _GtkComboBoxAccessible -{ - GtkWidgetAccessible parent; - - GtkComboBoxAccessiblePrivate *priv; -}; - -struct _GtkComboBoxAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_combo_box_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_COMBO_BOX_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkcompositeaccessible.c b/gtk/a11y/gtkcompositeaccessible.c deleted file mode 100644 index 8e8a6297b3..0000000000 --- a/gtk/a11y/gtkcompositeaccessible.c +++ /dev/null @@ -1,87 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2020 Red Hat, 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtkcompositeaccessible.h" - -#include <gtk/gtk.h> - -#include "gtkwidgetprivate.h" - -G_DEFINE_TYPE (GtkCompositeAccessible, gtk_composite_accessible, GTK_TYPE_WIDGET_ACCESSIBLE) - -static int -gtk_composite_accessible_get_n_children (AtkObject *obj) -{ - GtkWidget *widget; - GtkWidget *child; - int count = 0; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return 0; - - for (child = gtk_widget_get_first_child (widget); child; child = gtk_widget_get_next_sibling (child)) - count++; - - return count; -} - -static AtkObject * -gtk_composite_accessible_ref_child (AtkObject *obj, - int i) -{ - GtkWidget *widget; - GtkWidget *child; - int pos; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - for (child = gtk_widget_get_first_child (widget), pos = 0; child && pos < i; child = gtk_widget_get_next_sibling (child), pos++); - - if (child) - return g_object_ref (gtk_widget_get_accessible (GTK_WIDGET (child))); - - return NULL; -} - -static void -gtk_composite_accessible_initialize (AtkObject *obj, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_composite_accessible_parent_class)->initialize (obj, data); - - obj->role = ATK_ROLE_FILLER; -} - -static void -gtk_composite_accessible_class_init (GtkCompositeAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->initialize = gtk_composite_accessible_initialize; - class->get_n_children = gtk_composite_accessible_get_n_children; - class->ref_child = gtk_composite_accessible_ref_child; -} - -static void -gtk_composite_accessible_init (GtkCompositeAccessible *composite) -{ -} diff --git a/gtk/a11y/gtkcompositeaccessible.h b/gtk/a11y/gtkcompositeaccessible.h deleted file mode 100644 index bc6a2bbafc..0000000000 --- a/gtk/a11y/gtkcompositeaccessible.h +++ /dev/null @@ -1,55 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2020 Red Hat, Inc - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_COMPOSITE_ACCESSIBLE_H__ -#define __GTK_COMPOSITE_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/gtkwidget.h> -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_COMPOSITE_ACCESSIBLE (gtk_composite_accessible_get_type ()) -#define GTK_COMPOSITE_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_COMPOSITE_ACCESSIBLE, GtkCompositeAccessible)) -#define GTK_COMPOSITE_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_COMPOSITE_ACCESSIBLE, GtkCompositeAccessibleClass)) -#define GTK_IS_COMPOSITE_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_COMPOSITE_ACCESSIBLE)) -#define GTK_IS_COMPOSITE_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_COMPOSITE_ACCESSIBLE)) -#define GTK_COMPOSITE_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_COMPOSITE_ACCESSIBLE, GtkCompositeAccessibleClass)) - -typedef struct _GtkCompositeAccessible GtkCompositeAccessible; -typedef struct _GtkCompositeAccessibleClass GtkCompositeAccessibleClass; - -struct _GtkCompositeAccessible -{ - GtkWidgetAccessible parent; -}; - -struct _GtkCompositeAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_composite_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_COMPOSITE_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkcontainercellaccessible.c b/gtk/a11y/gtkcontainercellaccessible.c deleted file mode 100644 index e581d98afc..0000000000 --- a/gtk/a11y/gtkcontainercellaccessible.c +++ /dev/null @@ -1,180 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <gtk/gtk.h> -#include "gtkcontainercellaccessible.h" -#include "gtkcellaccessibleprivate.h" - -struct _GtkContainerCellAccessiblePrivate -{ - GList *children; - int n_children; -}; - -G_DEFINE_TYPE_WITH_PRIVATE (GtkContainerCellAccessible, gtk_container_cell_accessible, GTK_TYPE_CELL_ACCESSIBLE) - - -static void -gtk_container_cell_accessible_finalize (GObject *obj) -{ - GtkContainerCellAccessible *container = GTK_CONTAINER_CELL_ACCESSIBLE (obj); - - g_list_free_full (container->priv->children, g_object_unref); - - G_OBJECT_CLASS (gtk_container_cell_accessible_parent_class)->finalize (obj); -} - - -static int -gtk_container_cell_accessible_get_n_children (AtkObject *obj) -{ - GtkContainerCellAccessible *cell = GTK_CONTAINER_CELL_ACCESSIBLE (obj); - - return cell->priv->n_children; -} - -static AtkObject * -gtk_container_cell_accessible_ref_child (AtkObject *obj, - int child) -{ - GtkContainerCellAccessible *cell = GTK_CONTAINER_CELL_ACCESSIBLE (obj); - GList *l; - - l = g_list_nth (cell->priv->children, child); - if (l == NULL) - return NULL; - - return g_object_ref (ATK_OBJECT (l->data)); -} - -static void -gtk_container_cell_accessible_update_cache (GtkCellAccessible *cell, - gboolean emit_signal) -{ - GtkContainerCellAccessible *container = GTK_CONTAINER_CELL_ACCESSIBLE (cell); - GList *l; - - for (l = container->priv->children; l; l = l->next) - _gtk_cell_accessible_update_cache (l->data, emit_signal); -} - -static void -gtk_container_cell_widget_set (GtkAccessible *accessible) -{ - GtkContainerCellAccessible *container = GTK_CONTAINER_CELL_ACCESSIBLE (accessible); - GList *l; - - for (l = container->priv->children; l; l = l->next) - gtk_accessible_set_widget (l->data, gtk_accessible_get_widget (accessible)); - - GTK_ACCESSIBLE_CLASS (gtk_container_cell_accessible_parent_class)->widget_set (accessible); -} - -static void -gtk_container_cell_widget_unset (GtkAccessible *accessible) -{ - GtkContainerCellAccessible *container = GTK_CONTAINER_CELL_ACCESSIBLE (accessible); - GList *l; - - for (l = container->priv->children; l; l = l->next) - gtk_accessible_set_widget (l->data, NULL); - - GTK_ACCESSIBLE_CLASS (gtk_container_cell_accessible_parent_class)->widget_unset (accessible); -} - -static void -gtk_container_cell_accessible_class_init (GtkContainerCellAccessibleClass *klass) -{ - GtkCellAccessibleClass *cell_class = GTK_CELL_ACCESSIBLE_CLASS (klass); - GtkAccessibleClass *accessible_class = GTK_ACCESSIBLE_CLASS (klass); - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - GObjectClass *g_object_class = G_OBJECT_CLASS (klass); - - g_object_class->finalize = gtk_container_cell_accessible_finalize; - - class->get_n_children = gtk_container_cell_accessible_get_n_children; - class->ref_child = gtk_container_cell_accessible_ref_child; - - accessible_class->widget_set = gtk_container_cell_widget_set; - accessible_class->widget_unset = gtk_container_cell_widget_unset; - - cell_class->update_cache = gtk_container_cell_accessible_update_cache; -} - -static void -gtk_container_cell_accessible_init (GtkContainerCellAccessible *cell) -{ - cell->priv = gtk_container_cell_accessible_get_instance_private (cell); -} - -GtkContainerCellAccessible * -gtk_container_cell_accessible_new (void) -{ - GObject *object; - - object = g_object_new (GTK_TYPE_CONTAINER_CELL_ACCESSIBLE, NULL); - - ATK_OBJECT (object)->role = ATK_ROLE_TABLE_CELL; - - return GTK_CONTAINER_CELL_ACCESSIBLE (object); -} - -void -gtk_container_cell_accessible_add_child (GtkContainerCellAccessible *container, - GtkCellAccessible *child) -{ - g_return_if_fail (GTK_IS_CONTAINER_CELL_ACCESSIBLE (container)); - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE (child)); - - g_object_ref (child); - - container->priv->n_children++; - container->priv->children = g_list_append (container->priv->children, child); - atk_object_set_parent (ATK_OBJECT (child), ATK_OBJECT (container)); -} - -void -gtk_container_cell_accessible_remove_child (GtkContainerCellAccessible *container, - GtkCellAccessible *child) -{ - g_return_if_fail (GTK_IS_CONTAINER_CELL_ACCESSIBLE (container)); - g_return_if_fail (GTK_IS_CELL_ACCESSIBLE (child)); - g_return_if_fail (container->priv->n_children > 0); - - container->priv->children = g_list_remove (container->priv->children, child); - container->priv->n_children--; - - g_object_unref (child); -} - -/** - * gtk_container_cell_accessible_get_children: - * @container: the container - * - * Get a list of children. - * - * Returns: (transfer none) (element-type Gtk.CellAccessible) - */ -GList * -gtk_container_cell_accessible_get_children (GtkContainerCellAccessible *container) -{ - g_return_val_if_fail (GTK_IS_CONTAINER_CELL_ACCESSIBLE (container), NULL); - - return container->priv->children; -} diff --git a/gtk/a11y/gtkcontainercellaccessible.h b/gtk/a11y/gtkcontainercellaccessible.h deleted file mode 100644 index d05d8b19e0..0000000000 --- a/gtk/a11y/gtkcontainercellaccessible.h +++ /dev/null @@ -1,69 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_CONTAINER_CELL_ACCESSIBLE_H__ -#define __GTK_CONTAINER_CELL_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <atk/atk.h> -#include <gtk/a11y/gtkcellaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_CONTAINER_CELL_ACCESSIBLE (gtk_container_cell_accessible_get_type ()) -#define GTK_CONTAINER_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CONTAINER_CELL_ACCESSIBLE, GtkContainerCellAccessible)) -#define GTK_CONTAINER_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CONTAINER_CELL_ACCESSIBLE, GtkContainerCellAccessibleClass)) -#define GTK_IS_CONTAINER_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CONTAINER_CELL_ACCESSIBLE)) -#define GTK_IS_CONTAINER_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CONTAINER_CELL_ACCESSIBLE)) -#define GTK_CONTAINER_CELL_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CONTAINER_CELL_ACCESSIBLE, GtkContainerCellAccessibleClass)) - -typedef struct _GtkContainerCellAccessible GtkContainerCellAccessible; -typedef struct _GtkContainerCellAccessibleClass GtkContainerCellAccessibleClass; -typedef struct _GtkContainerCellAccessiblePrivate GtkContainerCellAccessiblePrivate; - -struct _GtkContainerCellAccessible -{ - GtkCellAccessible parent; - - GtkContainerCellAccessiblePrivate *priv; -}; - -struct _GtkContainerCellAccessibleClass -{ - GtkCellAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_container_cell_accessible_get_type (void); - -GDK_AVAILABLE_IN_ALL -GtkContainerCellAccessible *gtk_container_cell_accessible_new (void); -GDK_AVAILABLE_IN_ALL -void gtk_container_cell_accessible_add_child (GtkContainerCellAccessible *container, - GtkCellAccessible *child); -GDK_AVAILABLE_IN_ALL -void gtk_container_cell_accessible_remove_child (GtkContainerCellAccessible *container, - GtkCellAccessible *child); -GDK_AVAILABLE_IN_ALL -GList *gtk_container_cell_accessible_get_children (GtkContainerCellAccessible *container); - -G_END_DECLS - -#endif /* __GTK_CONTAINER_CELL_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkentryaccessible.c b/gtk/a11y/gtkentryaccessible.c deleted file mode 100644 index 19eec7ef49..0000000000 --- a/gtk/a11y/gtkentryaccessible.c +++ /dev/null @@ -1,1537 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtkentryaccessible.h" - -#include "gtkcomboboxaccessible.h" - -#include "gtkentryprivate.h" -#include "gtklabel.h" -#include "gtkpango.h" -#include "gtkstylecontextprivate.h" -#include "gtktextprivate.h" -#include "gtkwidgetprivate.h" - -#include "gdk/gdkeventsprivate.h" - -#include <glib/gi18n-lib.h> -#include <string.h> - -#define GTK_TYPE_ENTRY_ICON_ACCESSIBLE (gtk_entry_icon_accessible_get_type ()) -#define GTK_ENTRY_ICON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_ENTRY_ICON_ACCESSIBLE, GtkEntryIconAccessible)) -#define GTK_IS_ENTRY_ICON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_ENTRY_ICON_ACCESSIBLE)) - -struct _GtkEntryAccessiblePrivate -{ - int cursor_position; - int selection_bound; - AtkObject *icons[2]; -}; - -typedef struct _GtkEntryIconAccessible GtkEntryIconAccessible; -typedef struct _GtkEntryIconAccessibleClass GtkEntryIconAccessibleClass; - -struct _GtkEntryIconAccessible -{ - AtkObject parent; - - GtkEntryAccessible *entry; - GtkEntryIconPosition pos; -}; - -struct _GtkEntryIconAccessibleClass -{ - AtkObjectClass parent_class; -}; - -static void icon_atk_action_interface_init (AtkActionIface *iface); -static void icon_atk_component_interface_init (AtkComponentIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkEntryIconAccessible, gtk_entry_icon_accessible, ATK_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, icon_atk_action_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, icon_atk_component_interface_init)) - -static void -gtk_entry_icon_accessible_remove_entry (gpointer data, GObject *obj) -{ - GtkEntryIconAccessible *icon = data; - - if (icon->entry) - { - icon->entry = NULL; - g_object_notify (G_OBJECT (icon), "accessible-parent"); - atk_object_notify_state_change (ATK_OBJECT (icon), ATK_STATE_DEFUNCT, TRUE); - } -} - -static AtkObject * -gtk_entry_icon_accessible_new (GtkEntryAccessible *entry, - GtkEntryIconPosition pos) -{ - GtkEntryIconAccessible *icon; - AtkObject *accessible; - - icon = g_object_new (gtk_entry_icon_accessible_get_type (), NULL); - icon->entry = entry; - g_object_weak_ref (G_OBJECT (entry), - gtk_entry_icon_accessible_remove_entry, - icon); - icon->pos = pos; - - accessible = ATK_OBJECT (icon); - atk_object_initialize (accessible, NULL); - return accessible; -} - -static void -gtk_entry_icon_accessible_init (GtkEntryIconAccessible *icon) -{ -} - -static void -gtk_entry_icon_accessible_initialize (AtkObject *obj, - gpointer data) -{ - GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (obj); - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry)); - GtkEntry *gtk_entry = GTK_ENTRY (widget); - const char *name; - char *text; - - ATK_OBJECT_CLASS (gtk_entry_icon_accessible_parent_class)->initialize (obj, data); - atk_object_set_role (obj, ATK_ROLE_ICON); - - name = gtk_entry_get_icon_name (gtk_entry, icon->pos); - if (name) - atk_object_set_name (obj, name); - - text = gtk_entry_get_icon_tooltip_text (gtk_entry, icon->pos); - if (text) - { - atk_object_set_description (obj, text); - g_free (text); - } - - atk_object_set_parent (obj, ATK_OBJECT (icon->entry)); -} - -static AtkObject * -gtk_entry_icon_accessible_get_parent (AtkObject *accessible) -{ - GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (accessible); - - return ATK_OBJECT (icon->entry); -} - -static AtkStateSet * -gtk_entry_icon_accessible_ref_state_set (AtkObject *accessible) -{ - GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (accessible); - AtkStateSet *set = atk_state_set_new (); - AtkStateSet *entry_set; - GtkWidget *widget; - GtkEntry *gtk_entry; - - if (!icon->entry) - { - atk_state_set_add_state (set, ATK_STATE_DEFUNCT); - return set; - } - - entry_set = atk_object_ref_state_set (ATK_OBJECT (icon->entry)); - if (!entry_set || atk_state_set_contains_state (entry_set, ATK_STATE_DEFUNCT)) - { - atk_state_set_add_state (set, ATK_STATE_DEFUNCT); - g_clear_object (&entry_set); - return set; - } - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry)); - gtk_entry = GTK_ENTRY (widget); - - if (atk_state_set_contains_state (entry_set, ATK_STATE_ENABLED)) - atk_state_set_add_state (set, ATK_STATE_ENABLED); - if (atk_state_set_contains_state (entry_set, ATK_STATE_SENSITIVE)) - atk_state_set_add_state (set, ATK_STATE_SENSITIVE); - if (atk_state_set_contains_state (entry_set, ATK_STATE_SHOWING)) - atk_state_set_add_state (set, ATK_STATE_SHOWING); - if (atk_state_set_contains_state (entry_set, ATK_STATE_VISIBLE)) - atk_state_set_add_state (set, ATK_STATE_VISIBLE); - - if (!gtk_entry_get_icon_sensitive (gtk_entry, icon->pos)) - atk_state_set_remove_state (set, ATK_STATE_SENSITIVE); - if (!gtk_entry_get_icon_activatable (gtk_entry, icon->pos)) - atk_state_set_remove_state (set, ATK_STATE_ENABLED); - - g_object_unref (entry_set); - return set; -} - -static void -gtk_entry_icon_accessible_invalidate (GtkEntryIconAccessible *icon) -{ - if (!icon->entry) - return; - g_object_weak_unref (G_OBJECT (icon->entry), - gtk_entry_icon_accessible_remove_entry, - icon); - gtk_entry_icon_accessible_remove_entry (icon, NULL); -} - -static void -gtk_entry_icon_accessible_finalize (GObject *object) -{ - GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (object); - - gtk_entry_icon_accessible_invalidate (icon); - - G_OBJECT_CLASS (gtk_entry_icon_accessible_parent_class)->finalize (object); -} - -static void -gtk_entry_icon_accessible_class_init (GtkEntryIconAccessibleClass *klass) -{ - AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass); - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - atk_class->initialize = gtk_entry_icon_accessible_initialize; - atk_class->get_parent = gtk_entry_icon_accessible_get_parent; - atk_class->ref_state_set = gtk_entry_icon_accessible_ref_state_set; - - gobject_class->finalize = gtk_entry_icon_accessible_finalize; -} - -static gboolean -gtk_entry_icon_accessible_do_action (AtkAction *action, - int i) -{ - GtkEntryIconAccessible *icon = (GtkEntryIconAccessible *)action; - GtkWidget *widget; - GtkEntry *gtk_entry; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry)); - if (widget == NULL) - return FALSE; - - if (i != 0) - return FALSE; - - if (!gtk_widget_is_sensitive (widget) || !gtk_widget_get_visible (widget)) - return FALSE; - - gtk_entry = GTK_ENTRY (widget); - - if (!gtk_entry_get_icon_sensitive (gtk_entry, icon->pos) || - !gtk_entry_get_icon_activatable (gtk_entry, icon->pos)) - return FALSE; - - g_signal_emit_by_name (widget, "icon-press", 0, icon->pos); - return TRUE; -} - -static int -gtk_entry_icon_accessible_get_n_actions (AtkAction *action) -{ - GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (action); - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry)); - GtkEntry *gtk_entry = GTK_ENTRY (widget); - - return (gtk_entry_get_icon_activatable (gtk_entry, icon->pos) ? 1 : 0); -} - -static const char * -gtk_entry_icon_accessible_get_name (AtkAction *action, - int i) -{ - GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (action); - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry)); - GtkEntry *gtk_entry = GTK_ENTRY (widget); - - if (i != 0) - return NULL; - if (!gtk_entry_get_icon_activatable (gtk_entry, icon->pos)) - return NULL; - - return "activate"; -} - -static void -icon_atk_action_interface_init (AtkActionIface *iface) -{ - iface->do_action = gtk_entry_icon_accessible_do_action; - iface->get_n_actions = gtk_entry_icon_accessible_get_n_actions; - iface->get_name = gtk_entry_icon_accessible_get_name; -} - -static void -gtk_entry_icon_accessible_get_extents (AtkComponent *component, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coord_type) -{ - GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (component); - GdkRectangle icon_area; - GtkEntry *gtk_entry; - GtkWidget *widget; - - *x = G_MININT; - atk_component_get_extents (ATK_COMPONENT (icon->entry), x, y, width, height, - coord_type); - if (*x == G_MININT) - return; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry)); - gtk_entry = GTK_ENTRY (widget); - gtk_entry_get_icon_area (gtk_entry, icon->pos, &icon_area); - *width = icon_area.width; - *height = icon_area.height; - *x += icon_area.x; - *y += icon_area.y; -} - -static void -gtk_entry_icon_accessible_get_position (AtkComponent *component, - int *x, - int *y, - AtkCoordType coord_type) -{ - GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (component); - GdkRectangle icon_area; - GtkEntry *gtk_entry; - GtkWidget *widget; - - *x = G_MININT; - atk_component_get_extents (ATK_COMPONENT (icon->entry), x, y, NULL, NULL, - coord_type); - if (*x == G_MININT) - return; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry)); - gtk_entry = GTK_ENTRY (widget); - gtk_entry_get_icon_area (gtk_entry, icon->pos, &icon_area); - *x += icon_area.x; - *y += icon_area.y; -} - -static void -gtk_entry_icon_accessible_get_size (AtkComponent *component, - int *width, - int *height) -{ - GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (component); - GdkRectangle icon_area; - GtkEntry *gtk_entry; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry)); - gtk_entry = GTK_ENTRY (widget); - gtk_entry_get_icon_area (gtk_entry, icon->pos, &icon_area); - *width = icon_area.width; - *height = icon_area.height; -} - -static void -icon_atk_component_interface_init (AtkComponentIface *iface) -{ - iface->get_extents = gtk_entry_icon_accessible_get_extents; - iface->get_size = gtk_entry_icon_accessible_get_size; - iface->get_position = gtk_entry_icon_accessible_get_position; -} - -/* Callbacks */ -static gboolean check_for_selection_change (GtkEntryAccessible *entry, - GtkEditable *editable); - - -static void atk_editable_text_interface_init (AtkEditableTextIface *iface); -static void atk_text_interface_init (AtkTextIface *iface); -static void atk_action_interface_init (AtkActionIface *iface); - - -G_DEFINE_TYPE_WITH_CODE (GtkEntryAccessible, gtk_entry_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_ADD_PRIVATE (GtkEntryAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_EDITABLE_TEXT, atk_editable_text_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)) - -static GtkText * -get_text (AtkText *atk_text) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - if (widget == NULL) - return NULL; - - return gtk_entry_get_text_widget (GTK_ENTRY (widget)); -} - -static gboolean -check_for_selection_change (GtkEntryAccessible *accessible, - GtkEditable *editable) -{ - gboolean ret_val = FALSE; - int start, end; - - if (gtk_editable_get_selection_bounds (editable, &start, &end)) - { - if (end != accessible->priv->cursor_position || - start != accessible->priv->selection_bound) - /* - * This check is here as this function can be called - * for notification of selection_bound and current_pos. - * The values of current_pos and selection_bound may be the same - * for both notifications and we only want to generate one - * text_selection_changed signal. - */ - ret_val = TRUE; - } - else - { - /* We had a selection */ - ret_val = (accessible->priv->cursor_position != accessible->priv->selection_bound); - } - - accessible->priv->cursor_position = end; - accessible->priv->selection_bound = start; - - return ret_val; -} - -static void -insert_text_cb (GtkEditable *editable, - char *new_text, - int new_text_length, - int *position, - GtkEntryAccessible *self) -{ - int length; - - if (new_text_length == 0) - return; - - length = g_utf8_strlen (new_text, new_text_length); - - g_signal_emit_by_name (self, - "text-changed::insert", - *position - length, - length); -} - -/* We connect to GtkEditable::delete-text, since it carries - * the information we need. But we delay emitting our own - * text_changed::delete signal until the entry has update - * all its internal state and emits GtkEntry::changed. - */ -static void -delete_text_cb (GtkEditable *editable, - int start, - int end, - GtkEntryAccessible *self) -{ - GtkText *textw; - - textw = get_text (ATK_TEXT (self)); - if (textw == NULL) - return; - - if (end < 0) - { - char *text; - - text = gtk_text_get_display_text (textw, 0, -1); - end = g_utf8_strlen (text, -1); - g_free (text); - } - - if (end == start) - return; - - g_signal_emit_by_name (self, - "text-changed::delete", - start, - end - start); -} - -static void -on_notify (GObject *gobject, - GParamSpec *pspec, - GtkEntryAccessible *self) -{ - GtkWidget *widget; - AtkObject* atk_obj; - GtkEntryAccessiblePrivate *priv; - - widget = GTK_WIDGET (gobject); - atk_obj = gtk_widget_get_accessible (widget); - priv = gtk_entry_accessible_get_instance_private (self); - - if (g_strcmp0 (pspec->name, "cursor-position") == 0) - { - if (check_for_selection_change (self, GTK_EDITABLE (widget))) - g_signal_emit_by_name (atk_obj, "text-selection-changed"); - /* - * The entry cursor position has moved so generate the signal. - */ - g_signal_emit_by_name (atk_obj, "text-caret-moved", - gtk_editable_get_position (GTK_EDITABLE (widget))); - } - else if (g_strcmp0 (pspec->name, "selection-bound") == 0) - { - if (check_for_selection_change (self, GTK_EDITABLE (widget))) - g_signal_emit_by_name (atk_obj, "text-selection-changed"); - } - else if (g_strcmp0 (pspec->name, "editable") == 0) - { - gboolean value; - - g_object_get (gobject, "editable", &value, NULL); - atk_object_notify_state_change (atk_obj, ATK_STATE_EDITABLE, value); - } - else if (g_strcmp0 (pspec->name, "visibility") == 0) - { - gboolean visibility; - AtkRole new_role; - - visibility = gtk_entry_get_visibility (GTK_ENTRY (widget)); - new_role = visibility ? ATK_ROLE_TEXT : ATK_ROLE_PASSWORD_TEXT; - atk_object_set_role (atk_obj, new_role); - } - else if (g_strcmp0 (pspec->name, "primary-icon-storage-type") == 0) - { - if (gtk_entry_get_icon_storage_type (GTK_ENTRY (widget), GTK_ENTRY_ICON_PRIMARY) != GTK_IMAGE_EMPTY && - !priv->icons[GTK_ENTRY_ICON_PRIMARY]) - { - priv->icons[GTK_ENTRY_ICON_PRIMARY] = gtk_entry_icon_accessible_new (self, GTK_ENTRY_ICON_PRIMARY); - g_signal_emit_by_name (self, "children-changed::add", 0, - priv->icons[GTK_ENTRY_ICON_PRIMARY], NULL); - } - else if (gtk_entry_get_icon_storage_type (GTK_ENTRY (widget), GTK_ENTRY_ICON_PRIMARY) == GTK_IMAGE_EMPTY && - priv->icons[GTK_ENTRY_ICON_PRIMARY]) - { - gtk_entry_icon_accessible_invalidate (GTK_ENTRY_ICON_ACCESSIBLE (priv->icons[GTK_ENTRY_ICON_PRIMARY])); - g_signal_emit_by_name (self, "children-changed::remove", 0, - priv->icons[GTK_ENTRY_ICON_PRIMARY], NULL); - g_clear_object (&priv->icons[GTK_ENTRY_ICON_PRIMARY]); - } - } - else if (g_strcmp0 (pspec->name, "secondary-icon-storage-type") == 0) - { - int index = (priv->icons[GTK_ENTRY_ICON_PRIMARY] ? 1 : 0); - if (gtk_entry_get_icon_storage_type (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY) != GTK_IMAGE_EMPTY && - !priv->icons[GTK_ENTRY_ICON_SECONDARY]) - { - priv->icons[GTK_ENTRY_ICON_SECONDARY] = gtk_entry_icon_accessible_new (self, GTK_ENTRY_ICON_SECONDARY); - g_signal_emit_by_name (self, "children-changed::add", index, - priv->icons[GTK_ENTRY_ICON_SECONDARY], NULL); - } - else if (gtk_entry_get_icon_storage_type (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY) == GTK_IMAGE_EMPTY && - priv->icons[GTK_ENTRY_ICON_SECONDARY]) - { - gtk_entry_icon_accessible_invalidate (GTK_ENTRY_ICON_ACCESSIBLE (priv->icons[GTK_ENTRY_ICON_SECONDARY])); - g_signal_emit_by_name (self, "children-changed::remove", index, - priv->icons[GTK_ENTRY_ICON_SECONDARY], NULL); - g_clear_object (&priv->icons[GTK_ENTRY_ICON_SECONDARY]); - } - } - else if (g_strcmp0 (pspec->name, "primary-icon-name") == 0) - { - if (priv->icons[GTK_ENTRY_ICON_PRIMARY]) - { - const char *name; - name = gtk_entry_get_icon_name (GTK_ENTRY (widget), GTK_ENTRY_ICON_PRIMARY); - if (name) - atk_object_set_name (priv->icons[GTK_ENTRY_ICON_PRIMARY], name); - } - } - else if (g_strcmp0 (pspec->name, "secondary-icon-name") == 0) - { - if (priv->icons[GTK_ENTRY_ICON_SECONDARY]) - { - const char *name; - name = gtk_entry_get_icon_name (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY); - if (name) - atk_object_set_name (priv->icons[GTK_ENTRY_ICON_SECONDARY], name); - } - } - else if (g_strcmp0 (pspec->name, "primary-icon-tooltip-text") == 0) - { - if (priv->icons[GTK_ENTRY_ICON_PRIMARY]) - { - char *text; - text = gtk_entry_get_icon_tooltip_text (GTK_ENTRY (widget), GTK_ENTRY_ICON_PRIMARY); - if (text) - { - atk_object_set_description (priv->icons[GTK_ENTRY_ICON_PRIMARY], text); - g_free (text); - } - else - { - atk_object_set_description (priv->icons[GTK_ENTRY_ICON_PRIMARY], ""); - } - } - } - else if (g_strcmp0 (pspec->name, "secondary-icon-tooltip-text") == 0) - { - if (priv->icons[GTK_ENTRY_ICON_SECONDARY]) - { - char *text; - text = gtk_entry_get_icon_tooltip_text (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY); - if (text) - { - atk_object_set_description (priv->icons[GTK_ENTRY_ICON_SECONDARY], text); - g_free (text); - } - else - { - atk_object_set_description (priv->icons[GTK_ENTRY_ICON_SECONDARY], ""); - } - } - } - else if (g_strcmp0 (pspec->name, "primary-icon-activatable") == 0) - { - if (priv->icons[GTK_ENTRY_ICON_PRIMARY]) - { - gboolean on = gtk_entry_get_icon_activatable (GTK_ENTRY (widget), GTK_ENTRY_ICON_PRIMARY); - atk_object_notify_state_change (priv->icons[GTK_ENTRY_ICON_PRIMARY], - ATK_STATE_ENABLED, on); - } - } - else if (g_strcmp0 (pspec->name, "secondary-icon-activatable") == 0) - { - if (priv->icons[GTK_ENTRY_ICON_SECONDARY]) - { - gboolean on = gtk_entry_get_icon_activatable (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY); - atk_object_notify_state_change (priv->icons[GTK_ENTRY_ICON_SECONDARY], - ATK_STATE_ENABLED, on); - } - } - else if (g_strcmp0 (pspec->name, "primary-icon-sensitive") == 0) - { - if (priv->icons[GTK_ENTRY_ICON_PRIMARY]) - { - gboolean on = gtk_entry_get_icon_sensitive (GTK_ENTRY (widget), GTK_ENTRY_ICON_PRIMARY); - atk_object_notify_state_change (priv->icons[GTK_ENTRY_ICON_PRIMARY], - ATK_STATE_SENSITIVE, on); - } - } - else if (g_strcmp0 (pspec->name, "secondary-icon-sensitive") == 0) - { - if (priv->icons[GTK_ENTRY_ICON_SECONDARY]) - { - gboolean on = gtk_entry_get_icon_sensitive (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY); - atk_object_notify_state_change (priv->icons[GTK_ENTRY_ICON_SECONDARY], - ATK_STATE_SENSITIVE, on); - } - } -} - -static AtkStateSet * -gtk_entry_accessible_ref_state_set (AtkObject *accessible) -{ - AtkStateSet *state_set; - gboolean value; - GtkWidget *widget; - GtkWidget *text; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return NULL; - - text = gtk_widget_get_first_child (widget); - - state_set = ATK_OBJECT_CLASS (gtk_entry_accessible_parent_class)->ref_state_set (accessible); - - atk_state_set_add_state (state_set, ATK_STATE_FOCUSABLE); - if (gtk_widget_has_focus (text)) - atk_state_set_add_state (state_set, ATK_STATE_FOCUSED); - - g_object_get (G_OBJECT (widget), "editable", &value, NULL); - if (value) - atk_state_set_add_state (state_set, ATK_STATE_EDITABLE); - atk_state_set_add_state (state_set, ATK_STATE_SINGLE_LINE); - - return state_set; -} - -static AtkAttributeSet * -gtk_entry_accessible_get_attributes (AtkObject *accessible) -{ - GtkWidget *widget; - AtkAttributeSet *attributes; - AtkAttribute *placeholder_text; - char *text = NULL; - - attributes = ATK_OBJECT_CLASS (gtk_entry_accessible_parent_class)->get_attributes (accessible); - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return attributes; - - g_object_get (widget, "placeholder-text", &text, NULL); - if (text == NULL) - return attributes; - - placeholder_text = g_malloc (sizeof (AtkAttribute)); - placeholder_text->name = g_strdup ("placeholder-text"); - placeholder_text->value = text; - - attributes = g_slist_append (attributes, placeholder_text); - - return attributes; -} - -static void -gtk_entry_accessible_initialize (AtkObject *obj, - gpointer data) -{ - GtkWidget *widget; - GtkEntryAccessible *gtk_entry_accessible; - int start_pos, end_pos; - - ATK_OBJECT_CLASS (gtk_entry_accessible_parent_class)->initialize (obj, data); - - gtk_entry_accessible = GTK_ENTRY_ACCESSIBLE (obj); - - widget = GTK_WIDGET (data); - gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), &start_pos, &end_pos); - gtk_entry_accessible->priv->cursor_position = end_pos; - gtk_entry_accessible->priv->selection_bound = start_pos; - - /* Set up signal callbacks */ - g_signal_connect_after (widget, "insert-text", G_CALLBACK (insert_text_cb), obj); - g_signal_connect (widget, "delete-text", G_CALLBACK (delete_text_cb), obj); - g_signal_connect (widget, "notify", G_CALLBACK (on_notify), obj); -} - -static int -gtk_entry_accessible_get_index_in_parent (AtkObject *accessible) -{ - /* - * If the parent widget is a combo box then the index is 1 - * otherwise do the normal thing. - */ - if (accessible->accessible_parent) - if (GTK_IS_COMBO_BOX_ACCESSIBLE (accessible->accessible_parent)) - return 1; - - return ATK_OBJECT_CLASS (gtk_entry_accessible_parent_class)->get_index_in_parent (accessible); -} - -static int -gtk_entry_accessible_get_n_children (AtkObject* obj) -{ - GtkWidget *widget; - int count = 0; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return 0; - - if (gtk_entry_get_icon_storage_type (GTK_ENTRY (widget), GTK_ENTRY_ICON_PRIMARY) != GTK_IMAGE_EMPTY) - count++; - if (gtk_entry_get_icon_storage_type (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY) != GTK_IMAGE_EMPTY) - count++; - - return count; -} - -static AtkObject * -gtk_entry_accessible_ref_child (AtkObject *obj, - int i) -{ - GtkEntryAccessible *accessible = GTK_ENTRY_ACCESSIBLE (obj); - GtkEntryAccessiblePrivate *priv = accessible->priv; - GtkWidget *widget; - GtkEntryIconPosition pos; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - switch (i) - { - case 0: - if (gtk_entry_get_icon_storage_type (GTK_ENTRY (widget), GTK_ENTRY_ICON_PRIMARY) != GTK_IMAGE_EMPTY) - pos = GTK_ENTRY_ICON_PRIMARY; - else if (gtk_entry_get_icon_storage_type (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY) != GTK_IMAGE_EMPTY) - pos = GTK_ENTRY_ICON_SECONDARY; - else - return NULL; - break; - case 1: - if (gtk_entry_get_icon_storage_type (GTK_ENTRY (widget), GTK_ENTRY_ICON_PRIMARY) == GTK_IMAGE_EMPTY) - return NULL; - if (gtk_entry_get_icon_storage_type (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY) == GTK_IMAGE_EMPTY) - return NULL; - pos = GTK_ENTRY_ICON_SECONDARY; - break; - default: - return NULL; - } - - if (!priv->icons[pos]) - priv->icons[pos] = gtk_entry_icon_accessible_new (accessible, pos); - return g_object_ref (priv->icons[pos]); -} - -static void -gtk_entry_accessible_finalize (GObject *object) -{ - GtkEntryAccessible *entry = GTK_ENTRY_ACCESSIBLE (object); - GtkEntryAccessiblePrivate *priv = entry->priv; - - g_clear_object (&priv->icons[GTK_ENTRY_ICON_PRIMARY]); - g_clear_object (&priv->icons[GTK_ENTRY_ICON_SECONDARY]); - - G_OBJECT_CLASS (gtk_entry_accessible_parent_class)->finalize (object); -} - -static void -gtk_entry_accessible_class_init (GtkEntryAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - class->ref_state_set = gtk_entry_accessible_ref_state_set; - class->get_index_in_parent = gtk_entry_accessible_get_index_in_parent; - class->initialize = gtk_entry_accessible_initialize; - class->get_attributes = gtk_entry_accessible_get_attributes; - class->get_n_children = gtk_entry_accessible_get_n_children; - class->ref_child = gtk_entry_accessible_ref_child; - - gobject_class->finalize = gtk_entry_accessible_finalize; -} - -static void -gtk_entry_accessible_init (GtkEntryAccessible *entry) -{ - entry->priv = gtk_entry_accessible_get_instance_private (entry); - entry->priv->cursor_position = 0; - entry->priv->selection_bound = 0; - - ATK_OBJECT (entry)->role = ATK_ROLE_TEXT; -} - -static char * -gtk_entry_accessible_get_text (AtkText *atk_text, - int start_pos, - int end_pos) -{ - GtkText *text; - - text = get_text (atk_text); - - if (text == NULL) - return NULL; - - return gtk_text_get_display_text (text, start_pos, end_pos); -} - -static char * -gtk_entry_accessible_get_text_before_offset (AtkText *atk_text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkText *text; - - text = get_text (atk_text); - - if (text == NULL) - return NULL; - - return _gtk_pango_get_text_before (gtk_text_get_layout (text), - boundary_type, offset, - start_offset, end_offset); -} - -static char * -gtk_entry_accessible_get_text_at_offset (AtkText *atk_text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkText *text; - - text = get_text (atk_text); - - if (text == NULL) - return NULL; - - return _gtk_pango_get_text_at (gtk_text_get_layout (text), - boundary_type, offset, - start_offset, end_offset); -} - -static char * -gtk_entry_accessible_get_text_after_offset (AtkText *atk_text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkText *text; - - text = get_text (atk_text); - - if (text == NULL) - return NULL; - - return _gtk_pango_get_text_after (gtk_text_get_layout (text), - boundary_type, offset, - start_offset, end_offset); -} - -static int -gtk_entry_accessible_get_character_count (AtkText *atk_text) -{ - GtkText *text; - char *display_text; - int char_count; - - text = get_text (atk_text); - - if (text == NULL) - return 0; - - display_text = gtk_text_get_display_text (text, 0, -1); - - char_count = 0; - if (display_text) - { - char_count = g_utf8_strlen (display_text, -1); - g_free (display_text); - } - - return char_count; -} - -static int -gtk_entry_accessible_get_caret_offset (AtkText *text) -{ - GtkWidget *widget; - gboolean result; - int cursor_position; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return -1; - - result = gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), NULL, &cursor_position); - if (!result) - return -1; - - return cursor_position; -} - -static gboolean -gtk_entry_accessible_set_caret_offset (AtkText *text, - int offset) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - gtk_editable_set_position (GTK_EDITABLE (widget), offset); - - return TRUE; -} - -static AtkAttributeSet * -add_text_attribute (AtkAttributeSet *attributes, - AtkTextAttribute attr, - int i) -{ - AtkAttribute *at; - - at = g_new (AtkAttribute, 1); - at->name = g_strdup (atk_text_attribute_get_name (attr)); - at->value = g_strdup (atk_text_attribute_get_value (attr, i)); - - return g_slist_prepend (attributes, at); -} - -static AtkAttributeSet * -gtk_entry_accessible_get_run_attributes (AtkText *atk_text, - int offset, - int *start_offset, - int *end_offset) -{ - GtkText *text; - AtkAttributeSet *attributes; - - text = get_text (atk_text); - - if (text == NULL) - return NULL; - - attributes = NULL; - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_DIRECTION, - gtk_widget_get_direction (GTK_WIDGET (text))); - attributes = _gtk_pango_get_run_attributes (attributes, - gtk_text_get_layout (text), - offset, - start_offset, - end_offset); - - return attributes; -} - -static AtkAttributeSet * -gtk_entry_accessible_get_default_attributes (AtkText *atk_text) -{ - GtkText *text; - AtkAttributeSet *attributes; - - text = get_text (atk_text); - - if (text == NULL) - return NULL; - - attributes = NULL; - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_DIRECTION, - gtk_widget_get_direction (GTK_WIDGET (text))); - attributes = _gtk_pango_get_default_attributes (attributes, - gtk_text_get_layout (text)); - attributes = _gtk_style_context_get_attributes (attributes, - gtk_widget_get_style_context (GTK_WIDGET (text))); - - return attributes; -} - -static void -gtk_entry_accessible_get_character_extents (AtkText *atk_text, - int offset, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coords) -{ - GtkText *textw; - PangoRectangle char_rect; - char *entry_text; - int index, x_layout, y_layout; - GtkAllocation allocation; - - textw = get_text (atk_text); - - if (textw == NULL) - return; - - gtk_text_get_layout_offsets (textw, &x_layout, &y_layout); - entry_text = gtk_text_get_display_text (textw, 0, -1); - index = g_utf8_offset_to_pointer (entry_text, offset) - entry_text; - g_free (entry_text); - - pango_layout_index_to_pos (gtk_text_get_layout (textw), index, &char_rect); - pango_extents_to_pixels (&char_rect, NULL); - - gtk_widget_get_allocation (GTK_WIDGET (textw), &allocation); - - *x = allocation.x + x_layout + char_rect.x; - *y = allocation.y + y_layout + char_rect.y; - *width = char_rect.width; - *height = char_rect.height; -} - -static int -gtk_entry_accessible_get_offset_at_point (AtkText *atk_text, - int x, - int y, - AtkCoordType coords) -{ - GtkText *textw; - char *text; - int index, x_layout, y_layout; - int x_local, y_local; - glong offset; - - textw = get_text (atk_text); - - if (textw == NULL) - return 1; - - gtk_text_get_layout_offsets (textw, &x_layout, &y_layout); - - x_local = x - x_layout; - y_local = y - y_layout; - - if (!pango_layout_xy_to_index (gtk_text_get_layout (textw), - x_local * PANGO_SCALE, - y_local * PANGO_SCALE, - &index, NULL)) - { - if (x_local < 0 || y_local < 0) - index = 0; - else - index = -1; - } - - offset = -1; - if (index != -1) - { - text = gtk_text_get_display_text (textw, 0, -1); - offset = g_utf8_pointer_to_offset (text, text + index); - g_free (text); - } - - return offset; -} - -static int -gtk_entry_accessible_get_n_selections (AtkText *text) -{ - GtkWidget *widget; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return 0; - - if (gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), &start, &end)) - return 1; - - return 0; -} - -static char * -gtk_entry_accessible_get_selection (AtkText *text, - int selection_num, - int *start_pos, - int *end_pos) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - if (selection_num != 0) - return NULL; - - if (gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), start_pos, end_pos)) - return gtk_editable_get_chars (GTK_EDITABLE (widget), *start_pos, *end_pos); - - return NULL; -} - -static gboolean -gtk_entry_accessible_add_selection (AtkText *text, - int start_pos, - int end_pos) -{ - GtkEntry *entry; - GtkWidget *widget; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - entry = GTK_ENTRY (widget); - - if (!gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start, &end)) - { - gtk_editable_select_region (GTK_EDITABLE (entry), start_pos, end_pos); - return TRUE; - } - else - return FALSE; -} - -static gboolean -gtk_entry_accessible_remove_selection (AtkText *text, - int selection_num) -{ - GtkWidget *widget; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - if (selection_num != 0) - return FALSE; - - if (gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), &start, &end)) - { - gtk_editable_select_region (GTK_EDITABLE (widget), end, end); - return TRUE; - } - else - return FALSE; -} - -static gboolean -gtk_entry_accessible_set_selection (AtkText *text, - int selection_num, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - if (selection_num != 0) - return FALSE; - - if (gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), &start, &end)) - { - gtk_editable_select_region (GTK_EDITABLE (widget), start_pos, end_pos); - return TRUE; - } - else - return FALSE; -} - -static gunichar -gtk_entry_accessible_get_character_at_offset (AtkText *atk_text, - int offset) -{ - GtkText *textw; - char *text; - char *index; - gunichar result; - - result = '\0'; - - textw = get_text (atk_text); - - if (textw == NULL) - return 0; - - if (!gtk_text_get_visibility (textw)) - return result; - - text = gtk_text_get_display_text (textw, 0, -1); - if (offset < g_utf8_strlen (text, -1)) - { - index = g_utf8_offset_to_pointer (text, offset); - result = g_utf8_get_char (index); - g_free (text); - } - - return result; -} - -static void -atk_text_interface_init (AtkTextIface *iface) -{ - iface->get_text = gtk_entry_accessible_get_text; - iface->get_character_at_offset = gtk_entry_accessible_get_character_at_offset; - iface->get_text_before_offset = gtk_entry_accessible_get_text_before_offset; - iface->get_text_at_offset = gtk_entry_accessible_get_text_at_offset; - iface->get_text_after_offset = gtk_entry_accessible_get_text_after_offset; - iface->get_caret_offset = gtk_entry_accessible_get_caret_offset; - iface->set_caret_offset = gtk_entry_accessible_set_caret_offset; - iface->get_character_count = gtk_entry_accessible_get_character_count; - iface->get_n_selections = gtk_entry_accessible_get_n_selections; - iface->get_selection = gtk_entry_accessible_get_selection; - iface->add_selection = gtk_entry_accessible_add_selection; - iface->remove_selection = gtk_entry_accessible_remove_selection; - iface->set_selection = gtk_entry_accessible_set_selection; - iface->get_run_attributes = gtk_entry_accessible_get_run_attributes; - iface->get_default_attributes = gtk_entry_accessible_get_default_attributes; - iface->get_character_extents = gtk_entry_accessible_get_character_extents; - iface->get_offset_at_point = gtk_entry_accessible_get_offset_at_point; -} - -static void -gtk_entry_accessible_set_text_contents (AtkEditableText *text, - const char *string) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - if (!gtk_editable_get_editable (GTK_EDITABLE (widget))) - return; - - gtk_editable_set_text (GTK_EDITABLE (widget), string); -} - -static void -gtk_entry_accessible_insert_text (AtkEditableText *text, - const char *string, - int length, - int *position) -{ - GtkWidget *widget; - GtkEditable *editable; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - gtk_editable_insert_text (editable, string, length, position); - gtk_editable_set_position (editable, *position); -} - -static void -gtk_entry_accessible_copy_text (AtkEditableText *text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkEditable *editable; - char *str; - GdkClipboard *clipboard; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - str = gtk_editable_get_chars (editable, start_pos, end_pos); - clipboard = gtk_widget_get_clipboard (widget); - gdk_clipboard_set_text (clipboard, str); - g_free (str); -} - -static void -gtk_entry_accessible_cut_text (AtkEditableText *text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkEditable *editable; - char *str; - GdkClipboard *clipboard; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - str = gtk_editable_get_chars (editable, start_pos, end_pos); - clipboard = gtk_widget_get_clipboard (widget); - gdk_clipboard_set_text (clipboard, str); - gtk_editable_delete_text (editable, start_pos, end_pos); -} - -static void -gtk_entry_accessible_delete_text (AtkEditableText *text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkEditable *editable; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - gtk_editable_delete_text (editable, start_pos, end_pos); -} - -typedef struct -{ - GtkEntry* entry; - int position; -} PasteData; - -static void -paste_received_cb (GObject *clipboard, - GAsyncResult *result, - gpointer data) -{ - PasteData *paste = data; - char *text; - - text = gdk_clipboard_read_text_finish (GDK_CLIPBOARD (clipboard), result, NULL); - if (text) - gtk_editable_insert_text (GTK_EDITABLE (paste->entry), text, -1, - &paste->position); - - g_object_unref (paste->entry); - g_free (paste); - g_free (text); -} - -static void -gtk_entry_accessible_paste_text (AtkEditableText *text, - int position) -{ - GtkWidget *widget; - GtkEditable *editable; - PasteData *paste; - GdkClipboard *clipboard; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - paste = g_new0 (PasteData, 1); - paste->entry = GTK_ENTRY (widget); - paste->position = position; - - g_object_ref (paste->entry); - clipboard = gtk_widget_get_clipboard (widget); - gdk_clipboard_read_text_async (clipboard, NULL, paste_received_cb, paste); -} - -static void -atk_editable_text_interface_init (AtkEditableTextIface *iface) -{ - iface->set_text_contents = gtk_entry_accessible_set_text_contents; - iface->insert_text = gtk_entry_accessible_insert_text; - iface->copy_text = gtk_entry_accessible_copy_text; - iface->cut_text = gtk_entry_accessible_cut_text; - iface->delete_text = gtk_entry_accessible_delete_text; - iface->paste_text = gtk_entry_accessible_paste_text; - iface->set_run_attributes = NULL; -} - -static gboolean -gtk_entry_accessible_do_action (AtkAction *action, - int i) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return FALSE; - - if (!gtk_widget_get_sensitive (widget) || !gtk_widget_get_visible (widget)) - return FALSE; - - if (i != 0) - return FALSE; - - gtk_widget_activate (widget); - - return TRUE; -} - -static int -gtk_entry_accessible_get_n_actions (AtkAction *action) -{ - return 1; -} - -static const char * -gtk_entry_accessible_get_keybinding (AtkAction *action, - int i) -{ - GtkWidget *widget; - GtkWidget *label; - AtkRelationSet *set; - AtkRelation *relation; - GPtrArray *target; - gpointer target_object; - guint key_val; - - if (i != 0) - return NULL; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return NULL; - - set = atk_object_ref_relation_set (ATK_OBJECT (action)); - if (!set) - return NULL; - - label = NULL; - relation = atk_relation_set_get_relation_by_type (set, ATK_RELATION_LABELLED_BY); - if (relation) - { - target = atk_relation_get_target (relation); - - target_object = g_ptr_array_index (target, 0); - label = gtk_accessible_get_widget (GTK_ACCESSIBLE (target_object)); - } - - g_object_unref (set); - - if (GTK_IS_LABEL (label)) - { - key_val = gtk_label_get_mnemonic_keyval (GTK_LABEL (label)); - if (key_val != GDK_KEY_VoidSymbol) - return gtk_accelerator_name (key_val, GDK_ALT_MASK); - } - - return NULL; -} - -static const char * -gtk_entry_accessible_action_get_name (AtkAction *action, - int i) -{ - if (i == 0) - return "activate"; - return NULL; -} - -static const char * -gtk_entry_accessible_action_get_localized_name (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action name", "Activate"); - return NULL; -} - -static const char * -gtk_entry_accessible_action_get_description (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action description", "Activates the entry"); - return NULL; -} - -static void -atk_action_interface_init (AtkActionIface *iface) -{ - iface->do_action = gtk_entry_accessible_do_action; - iface->get_n_actions = gtk_entry_accessible_get_n_actions; - iface->get_keybinding = gtk_entry_accessible_get_keybinding; - iface->get_name = gtk_entry_accessible_action_get_name; - iface->get_localized_name = gtk_entry_accessible_action_get_localized_name; - iface->get_description = gtk_entry_accessible_action_get_description; -} diff --git a/gtk/a11y/gtkentryaccessible.h b/gtk/a11y/gtkentryaccessible.h deleted file mode 100644 index 7b1b5b787d..0000000000 --- a/gtk/a11y/gtkentryaccessible.h +++ /dev/null @@ -1,60 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_ENTRY_ACCESSIBLE_H__ -#define __GTK_ENTRY_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_ENTRY_ACCESSIBLE (gtk_entry_accessible_get_type ()) -#define GTK_ENTRY_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_ENTRY_ACCESSIBLE, GtkEntryAccessible)) -#define GTK_ENTRY_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_ENTRY_ACCESSIBLE, GtkEntryAccessibleClass)) -#define GTK_IS_ENTRY_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_ENTRY_ACCESSIBLE)) -#define GTK_IS_ENTRY_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_ENTRY_ACCESSIBLE)) -#define GTK_ENTRY_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_ENTRY_ACCESSIBLE, GtkEntryAccessibleClass)) - -typedef struct _GtkEntryAccessible GtkEntryAccessible; -typedef struct _GtkEntryAccessibleClass GtkEntryAccessibleClass; -typedef struct _GtkEntryAccessiblePrivate GtkEntryAccessiblePrivate; - -struct _GtkEntryAccessible -{ - GtkWidgetAccessible parent; - - GtkEntryAccessiblePrivate *priv; -}; - -struct _GtkEntryAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_entry_accessible_get_type (void); - -GDK_AVAILABLE_IN_ALL -GType gtk_entry_icon_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_ENTRY_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkexpanderaccessible.c b/gtk/a11y/gtkexpanderaccessible.c deleted file mode 100644 index 1610363beb..0000000000 --- a/gtk/a11y/gtkexpanderaccessible.c +++ /dev/null @@ -1,251 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtkexpanderaccessibleprivate.h" - -#include <glib/gi18n-lib.h> -#include <gtk/gtk.h> - -static void atk_action_interface_init (AtkActionIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkExpanderAccessible, gtk_expander_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)) - -static const char * -gtk_expander_accessible_get_full_text (GtkExpander *widget) -{ - GtkWidget *label_widget; - - label_widget = gtk_expander_get_label_widget (widget); - - if (!GTK_IS_LABEL (label_widget)) - return NULL; - - return gtk_label_get_text (GTK_LABEL (label_widget)); -} - -static const char * -gtk_expander_accessible_get_name (AtkObject *obj) -{ - GtkWidget *widget; - const char *name; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - name = ATK_OBJECT_CLASS (gtk_expander_accessible_parent_class)->get_name (obj); - if (name != NULL) - return name; - - return gtk_expander_accessible_get_full_text (GTK_EXPANDER (widget)); -} - -static int -gtk_expander_accessible_get_n_children (AtkObject *obj) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return 0; - - if (gtk_expander_get_child (GTK_EXPANDER (widget))) - return 1; - - return 0; -} - -static AtkObject * -gtk_expander_accessible_ref_child (AtkObject *obj, - int i) -{ - AtkObject *accessible; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - widget = gtk_expander_get_child (GTK_EXPANDER (widget)); - if (widget == NULL) - return NULL; - - accessible = gtk_widget_get_accessible (widget); - g_object_ref (accessible); - return accessible; -} - -void -gtk_expander_accessible_update_label (GtkExpanderAccessible *self) -{ - AtkObject *atk_obj = ATK_OBJECT (self); - - if (atk_obj->name == NULL) - g_object_notify (G_OBJECT (atk_obj), "accessible-name"); - - g_signal_emit_by_name (atk_obj, "visible-data-changed"); -} - -void -gtk_expander_accessible_update_state (GtkExpanderAccessible *self, - gboolean expanded) -{ - AtkObject *atk_obj = ATK_OBJECT (self); - - atk_object_notify_state_change (atk_obj, ATK_STATE_CHECKED, expanded); - atk_object_notify_state_change (atk_obj, ATK_STATE_EXPANDED, expanded); - - g_signal_emit_by_name (atk_obj, "visible-data-changed"); -} - -static AtkStateSet * -gtk_expander_accessible_ref_state_set (AtkObject *obj) -{ - AtkStateSet *state_set; - GtkWidget *widget; - GtkExpander *expander; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - state_set = ATK_OBJECT_CLASS (gtk_expander_accessible_parent_class)->ref_state_set (obj); - - expander = GTK_EXPANDER (widget); - - atk_state_set_add_state (state_set, ATK_STATE_EXPANDABLE); - - if (gtk_expander_get_expanded (expander)) - { - atk_state_set_add_state (state_set, ATK_STATE_CHECKED); - atk_state_set_add_state (state_set, ATK_STATE_EXPANDED); - } - - return state_set; -} - -static void -gtk_expander_accessible_class_init (GtkExpanderAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->get_name = gtk_expander_accessible_get_name; - class->get_n_children = gtk_expander_accessible_get_n_children; - class->ref_child = gtk_expander_accessible_ref_child; - class->ref_state_set = gtk_expander_accessible_ref_state_set; -} - -static void -gtk_expander_accessible_init (GtkExpanderAccessible *self) -{ - ATK_OBJECT (self)->role = ATK_ROLE_TOGGLE_BUTTON; -} - -static gboolean -gtk_expander_accessible_do_action (AtkAction *action, - int i) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return FALSE; - - if (!gtk_widget_is_sensitive (widget) || !gtk_widget_get_visible (widget)) - return FALSE; - - if (i != 0) - return FALSE; - - gtk_widget_activate (widget); - return TRUE; -} - -static int -gtk_expander_accessible_get_n_actions (AtkAction *action) -{ - return 1; -} - -static const char * -gtk_expander_accessible_get_keybinding (AtkAction *action, - int i) -{ - char *return_value = NULL; - GtkWidget *widget; - GtkWidget *label; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return NULL; - - if (i != 0) - return NULL; - - label = gtk_expander_get_label_widget (GTK_EXPANDER (widget)); - if (GTK_IS_LABEL (label)) - { - guint key_val; - - key_val = gtk_label_get_mnemonic_keyval (GTK_LABEL (label)); - if (key_val != GDK_KEY_VoidSymbol) - return_value = gtk_accelerator_name (key_val, GDK_ALT_MASK); - } - - return return_value; -} - -static const char * -gtk_expander_accessible_action_get_name (AtkAction *action, - int i) -{ - if (i == 0) - return "activate"; - return NULL; -} - -static const char * -gtk_expander_accessible_action_get_localized_name (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action name", "Activate"); - return NULL; -} - -static const char * -gtk_expander_accessible_action_get_description (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action description", "Activates the expander"); - return NULL; -} - -static void -atk_action_interface_init (AtkActionIface *iface) -{ - iface->do_action = gtk_expander_accessible_do_action; - iface->get_n_actions = gtk_expander_accessible_get_n_actions; - iface->get_keybinding = gtk_expander_accessible_get_keybinding; - iface->get_name = gtk_expander_accessible_action_get_name; - iface->get_localized_name = gtk_expander_accessible_action_get_localized_name; - iface->get_description = gtk_expander_accessible_action_get_description; -} diff --git a/gtk/a11y/gtkexpanderaccessible.h b/gtk/a11y/gtkexpanderaccessible.h deleted file mode 100644 index ecad612efe..0000000000 --- a/gtk/a11y/gtkexpanderaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2003 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_EXPANDER_ACCESSIBLE_H__ -#define __GTK_EXPANDER_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_EXPANDER_ACCESSIBLE (gtk_expander_accessible_get_type ()) -#define GTK_EXPANDER_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_EXPANDER_ACCESSIBLE, GtkExpanderAccessible)) -#define GTK_EXPANDER_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_EXPANDER_ACCESSIBLE, GtkExpanderAccessibleClass)) -#define GTK_IS_EXPANDER_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_EXPANDER_ACCESSIBLE)) -#define GTK_IS_EXPANDER_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_EXPANDER_ACCESSIBLE)) -#define GTK_EXPANDER_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_EXPANDER_ACCESSIBLE, GtkExpanderAccessibleClass)) - -typedef struct _GtkExpanderAccessible GtkExpanderAccessible; -typedef struct _GtkExpanderAccessibleClass GtkExpanderAccessibleClass; -typedef struct _GtkExpanderAccessiblePrivate GtkExpanderAccessiblePrivate; - -struct _GtkExpanderAccessible -{ - GtkWidgetAccessible parent; - - GtkExpanderAccessiblePrivate *priv; -}; - -struct _GtkExpanderAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_expander_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_EXPANDER_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkexpanderaccessibleprivate.h b/gtk/a11y/gtkexpanderaccessibleprivate.h deleted file mode 100644 index aab9ee5e5e..0000000000 --- a/gtk/a11y/gtkexpanderaccessibleprivate.h +++ /dev/null @@ -1,31 +0,0 @@ -/* gtkexpanderaccessibleprivate.h: GtkExpanderAccessible private API - * - * Copyright 2020 GNOME Foundation - * - * SPDX-License-Identifier: LGPL-2.1-or-later - * - * 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.1 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, see <http://www.gnu.org/licenses/>. - */ - -#pragma once - -#include "gtkexpanderaccessible.h" - -G_BEGIN_DECLS - -void gtk_expander_accessible_update_label (GtkExpanderAccessible *self); -void gtk_expander_accessible_update_state (GtkExpanderAccessible *self, - gboolean expanded); - -G_END_DECLS diff --git a/gtk/a11y/gtkflowboxaccessible.c b/gtk/a11y/gtkflowboxaccessible.c deleted file mode 100644 index 4b0a07d5f8..0000000000 --- a/gtk/a11y/gtkflowboxaccessible.c +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright (C) 2013 Red Hat, 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtkflowboxaccessibleprivate.h" - -#include "gtk/gtkflowbox.h" - -static void atk_selection_interface_init (AtkSelectionIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkFlowBoxAccessible, gtk_flow_box_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_SELECTION, atk_selection_interface_init)) - -static void -gtk_flow_box_accessible_init (GtkFlowBoxAccessible *accessible) -{ -} - -static void -gtk_flow_box_accessible_initialize (AtkObject *obj, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_flow_box_accessible_parent_class)->initialize (obj, data); - - obj->role = ATK_ROLE_TABLE; -} - -static AtkStateSet* -gtk_flow_box_accessible_ref_state_set (AtkObject *obj) -{ - AtkStateSet *state_set; - GtkWidget *widget; - - state_set = ATK_OBJECT_CLASS (gtk_flow_box_accessible_parent_class)->ref_state_set (obj); - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - - if (widget != NULL) - atk_state_set_add_state (state_set, ATK_STATE_MANAGES_DESCENDANTS); - - return state_set; -} - -static void -gtk_flow_box_accessible_class_init (GtkFlowBoxAccessibleClass *klass) -{ - AtkObjectClass *object_class = ATK_OBJECT_CLASS (klass); - - object_class->initialize = gtk_flow_box_accessible_initialize; - object_class->ref_state_set = gtk_flow_box_accessible_ref_state_set; -} - -static gboolean -gtk_flow_box_accessible_add_selection (AtkSelection *selection, - int idx) -{ - GtkWidget *box; - GtkWidget *child; - int pos; - - box = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (box == NULL) - return FALSE; - - for (child = gtk_widget_get_first_child (box), pos = 0; - child != NULL && pos < idx; - child = gtk_widget_get_next_sibling (child), pos++) ; - - if (child && pos == idx) - { - gtk_flow_box_select_child (GTK_FLOW_BOX (box), GTK_FLOW_BOX_CHILD (child)); - return TRUE; - } - - return FALSE; -} - -static gboolean -gtk_flow_box_accessible_remove_selection (AtkSelection *selection, - int idx) -{ - GtkWidget *box; - GtkWidget *child; - int pos; - - box = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (box == NULL) - return FALSE; - - for (child = gtk_widget_get_first_child (box), pos = 0; - child != NULL && pos < idx; - child = gtk_widget_get_next_sibling (child), pos++) ; - - if (child && pos == idx) - { - gtk_flow_box_unselect_child (GTK_FLOW_BOX (box), GTK_FLOW_BOX_CHILD (child)); - return TRUE; - } - - return FALSE; -} - -static gboolean -gtk_flow_box_accessible_clear_selection (AtkSelection *selection) -{ - GtkWidget *box; - - box = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (box == NULL) - return FALSE; - - gtk_flow_box_unselect_all (GTK_FLOW_BOX (box)); - return TRUE; -} - -static gboolean -gtk_flow_box_accessible_select_all (AtkSelection *selection) -{ - GtkWidget *box; - - box = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (box == NULL) - return FALSE; - - gtk_flow_box_select_all (GTK_FLOW_BOX (box)); - return TRUE; -} - -typedef struct -{ - int idx; - GtkWidget *child; -} FindSelectedData; - -static void -find_selected_child (GtkFlowBox *box, - GtkFlowBoxChild *child, - gpointer data) -{ - FindSelectedData *d = data; - - if (d->idx == 0) - { - if (d->child == NULL) - d->child = GTK_WIDGET (child); - } - else - d->idx -= 1; -} - -static AtkObject * -gtk_flow_box_accessible_ref_selection (AtkSelection *selection, - int idx) -{ - GtkWidget *box; - AtkObject *accessible; - FindSelectedData data; - - box = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (box == NULL) - return NULL; - - data.idx = idx; - data.child = NULL; - gtk_flow_box_selected_foreach (GTK_FLOW_BOX (box), find_selected_child, &data); - - if (data.child == NULL) - return NULL; - - accessible = gtk_widget_get_accessible (data.child); - g_object_ref (accessible); - return accessible; -} - -static void -count_selected (GtkFlowBox *box, - GtkFlowBoxChild *child, - gpointer data) -{ - int *count = data; - *count += 1; -} - -static int -gtk_flow_box_accessible_get_selection_count (AtkSelection *selection) -{ - GtkWidget *box; - int count; - - box = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (box == NULL) - return 0; - - count = 0; - gtk_flow_box_selected_foreach (GTK_FLOW_BOX (box), count_selected, &count); - - return count; -} - -static gboolean -gtk_flow_box_accessible_is_child_selected (AtkSelection *selection, - int idx) -{ - GtkWidget *box; - GtkFlowBoxChild *child; - - box = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (box == NULL) - return FALSE; - - child = gtk_flow_box_get_child_at_index (GTK_FLOW_BOX (box), idx); - - return gtk_flow_box_child_is_selected (child); -} - -static void atk_selection_interface_init (AtkSelectionIface *iface) -{ - iface->add_selection = gtk_flow_box_accessible_add_selection; - iface->remove_selection = gtk_flow_box_accessible_remove_selection; - iface->clear_selection = gtk_flow_box_accessible_clear_selection; - iface->ref_selection = gtk_flow_box_accessible_ref_selection; - iface->get_selection_count = gtk_flow_box_accessible_get_selection_count; - iface->is_child_selected = gtk_flow_box_accessible_is_child_selected; - iface->select_all_selection = gtk_flow_box_accessible_select_all; -} - -void -_gtk_flow_box_accessible_selection_changed (GtkWidget *box) -{ - AtkObject *accessible; - accessible = gtk_widget_get_accessible (box); - g_signal_emit_by_name (accessible, "selection-changed"); -} - -void -_gtk_flow_box_accessible_update_cursor (GtkWidget *box, - GtkWidget *child) -{ - AtkObject *accessible; - AtkObject *descendant; - accessible = gtk_widget_get_accessible (box); - descendant = child ? gtk_widget_get_accessible (child) : NULL; - g_signal_emit_by_name (accessible, "active-descendant-changed", descendant); -} diff --git a/gtk/a11y/gtkflowboxaccessible.h b/gtk/a11y/gtkflowboxaccessible.h deleted file mode 100644 index 8a5f8376c1..0000000000 --- a/gtk/a11y/gtkflowboxaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2013 Red Hat, 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, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_FLOW_BOX_ACCESSIBLE_H__ -#define __GTK_FLOW_BOX_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_FLOW_BOX_ACCESSIBLE (gtk_flow_box_accessible_get_type ()) -#define GTK_FLOW_BOX_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FLOW_BOX_ACCESSIBLE, GtkFlowBoxAccessible)) -#define GTK_FLOW_BOX_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_FLOW_BOX_ACCESSIBLE, GtkFlowBoxAccessibleClass)) -#define GTK_IS_FLOW_BOX_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FLOW_BOX_ACCESSIBLE)) -#define GTK_IS_FLOW_BOX_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_FLOW_BOX_ACCESSIBLE)) -#define GTK_FLOW_BOX_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_FLOW_BOX_ACCESSIBLE, GtkFlowBoxAccessibleClass)) - -typedef struct _GtkFlowBoxAccessible GtkFlowBoxAccessible; -typedef struct _GtkFlowBoxAccessibleClass GtkFlowBoxAccessibleClass; -typedef struct _GtkFlowBoxAccessiblePrivate GtkFlowBoxAccessiblePrivate; - -struct _GtkFlowBoxAccessible -{ - GtkWidgetAccessible parent; - - GtkFlowBoxAccessiblePrivate *priv; -}; - -struct _GtkFlowBoxAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_flow_box_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_FLOW_BOX_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkflowboxaccessibleprivate.h b/gtk/a11y/gtkflowboxaccessibleprivate.h deleted file mode 100644 index df19ba782a..0000000000 --- a/gtk/a11y/gtkflowboxaccessibleprivate.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2013 Red Hat, 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, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_FLOW_BOX_ACCESSIBLE_PRIVATE_H__ -#define __GTK_FLOW_BOX_ACCESSIBLE_PRIVATE_H__ - -#include <gtk/a11y/gtkflowboxaccessible.h> - -G_BEGIN_DECLS - -void _gtk_flow_box_accessible_selection_changed (GtkWidget *box); -void _gtk_flow_box_accessible_update_cursor (GtkWidget *box, - GtkWidget *child); -G_END_DECLS - -#endif /* __GTK_FLOW_BOX_ACCESSIBLE_PRIVATE_H__ */ diff --git a/gtk/a11y/gtkflowboxchildaccessible.c b/gtk/a11y/gtkflowboxchildaccessible.c deleted file mode 100644 index 794c4f5ee3..0000000000 --- a/gtk/a11y/gtkflowboxchildaccessible.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2013 Red Hat, 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtkflowboxchildaccessible.h" - -#include "gtk/gtkflowbox.h" - - -G_DEFINE_TYPE (GtkFlowBoxChildAccessible, gtk_flow_box_child_accessible, GTK_TYPE_WIDGET_ACCESSIBLE) - -static void -gtk_flow_box_child_accessible_init (GtkFlowBoxChildAccessible *accessible) -{ -} - -static void -gtk_flow_box_child_accessible_initialize (AtkObject *obj, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_flow_box_child_accessible_parent_class)->initialize (obj, data); - - obj->role = ATK_ROLE_TABLE_CELL; -} - -static AtkStateSet * -gtk_flow_box_child_accessible_ref_state_set (AtkObject *obj) -{ - AtkStateSet *state_set; - GtkWidget *widget, *parent; - - state_set = ATK_OBJECT_CLASS (gtk_flow_box_child_accessible_parent_class)->ref_state_set (obj); - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget != NULL) - { - parent = gtk_widget_get_parent (widget); - if (gtk_flow_box_get_selection_mode (GTK_FLOW_BOX (parent)) != GTK_SELECTION_NONE) - atk_state_set_add_state (state_set, ATK_STATE_SELECTABLE); - - if (gtk_flow_box_child_is_selected (GTK_FLOW_BOX_CHILD (widget))) - atk_state_set_add_state (state_set, ATK_STATE_SELECTED); - } - - return state_set; -} - -static void -gtk_flow_box_child_accessible_class_init (GtkFlowBoxChildAccessibleClass *klass) -{ - AtkObjectClass *object_class = ATK_OBJECT_CLASS (klass); - - object_class->initialize = gtk_flow_box_child_accessible_initialize; - object_class->ref_state_set = gtk_flow_box_child_accessible_ref_state_set; -} diff --git a/gtk/a11y/gtkflowboxchildaccessible.h b/gtk/a11y/gtkflowboxchildaccessible.h deleted file mode 100644 index c010ffe25d..0000000000 --- a/gtk/a11y/gtkflowboxchildaccessible.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2013 Red Hat, 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, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_FLOW_BOX_CHILD_ACCESSIBLE_H__ -#define __GTK_FLOW_BOX_CHILD_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_FLOW_BOX_CHILD_ACCESSIBLE (gtk_flow_box_child_accessible_get_type ()) -#define GTK_FLOW_BOX_CHILD_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FLOW_BOX_CHILD_ACCESSIBLE, GtkFlowBoxChildAccessible)) -#define GTK_FLOW_BOX_CHILD_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_FLOW_BOX_CHILD_ACCESSIBLE, GtkFlowBoxChildAccessibleClass)) -#define GTK_IS_FLOW_BOX_CHILD_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FLOW_BOX_CHILD_ACCESSIBLE)) -#define GTK_IS_FLOW_BOX_CHILD_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_FLOW_BOX_CHILD_ACCESSIBLE)) -#define GTK_FLOW_BOX_CHILD_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_FLOW_BOX_CHILD_ACCESSIBLE, GtkFlowBoxChildAccessibleClass)) - -typedef struct _GtkFlowBoxChildAccessible GtkFlowBoxChildAccessible; -typedef struct _GtkFlowBoxChildAccessibleClass GtkFlowBoxChildAccessibleClass; - -struct _GtkFlowBoxChildAccessible -{ - GtkWidgetAccessible parent; -}; - -struct _GtkFlowBoxChildAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_flow_box_child_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_FLOW_BOX_CHILD_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkframeaccessible.c b/gtk/a11y/gtkframeaccessible.c deleted file mode 100644 index 7c59bb237f..0000000000 --- a/gtk/a11y/gtkframeaccessible.c +++ /dev/null @@ -1,65 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <string.h> -#include <gtk/gtk.h> -#include "gtkframeaccessible.h" - - -G_DEFINE_TYPE (GtkFrameAccessible, gtk_frame_accessible, GTK_TYPE_WIDGET_ACCESSIBLE) - -static void -gtk_frame_accessible_initialize (AtkObject *accessible, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_frame_accessible_parent_class)->initialize (accessible, data); - - accessible->role = ATK_ROLE_PANEL; -} - -static const char * -gtk_frame_accessible_get_name (AtkObject *obj) -{ - const char *name; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - name = ATK_OBJECT_CLASS (gtk_frame_accessible_parent_class)->get_name (obj); - if (name != NULL) - return name; - - return gtk_frame_get_label (GTK_FRAME (widget)); -} - -static void -gtk_frame_accessible_class_init (GtkFrameAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->initialize = gtk_frame_accessible_initialize; - class->get_name = gtk_frame_accessible_get_name; -} - -static void -gtk_frame_accessible_init (GtkFrameAccessible *frame) -{ -} diff --git a/gtk/a11y/gtkframeaccessible.h b/gtk/a11y/gtkframeaccessible.h deleted file mode 100644 index a2cbb59c6e..0000000000 --- a/gtk/a11y/gtkframeaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_FRAME_ACCESSIBLE_H__ -#define __GTK_FRAME_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_FRAME_ACCESSIBLE (gtk_frame_accessible_get_type ()) -#define GTK_FRAME_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FRAME_ACCESSIBLE, GtkFrameAccessible)) -#define GTK_FRAME_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_FRAME_ACCESSIBLE, GtkFrameAccessibleClass)) -#define GTK_IS_FRAME_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FRAME_ACCESSIBLE)) -#define GTK_IS_FRAME_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_FRAME_ACCESSIBLE)) -#define GTK_FRAME_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_FRAME_ACCESSIBLE, GtkFrameAccessibleClass)) - -typedef struct _GtkFrameAccessible GtkFrameAccessible; -typedef struct _GtkFrameAccessibleClass GtkFrameAccessibleClass; -typedef struct _GtkFrameAccessiblePrivate GtkFrameAccessiblePrivate; - -struct _GtkFrameAccessible -{ - GtkWidgetAccessible parent; - - GtkFrameAccessiblePrivate *priv; -}; - -struct _GtkFrameAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_frame_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_FRAME_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkiconviewaccessible.c b/gtk/a11y/gtkiconviewaccessible.c deleted file mode 100644 index ded31c5e2b..0000000000 --- a/gtk/a11y/gtkiconviewaccessible.c +++ /dev/null @@ -1,1540 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright (C) 2002, 2004 Anders Carlsson <andersca@gnu.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtkiconviewaccessibleprivate.h" - -#include <string.h> - -#include "gtk/gtkadjustment.h" -#include "gtk/gtkiconviewprivate.h" -#include "gtk/gtkcellrendererpixbuf.h" -#include "gtk/gtkcellrenderertext.h" -#include "gtk/gtkpango.h" -#include "gtk/gtkwidgetprivate.h" - -#define GTK_TYPE_ICON_VIEW_ITEM_ACCESSIBLE (_gtk_icon_view_item_accessible_get_type ()) -#define GTK_ICON_VIEW_ITEM_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_ICON_VIEW_ITEM_ACCESSIBLE, GtkIconViewItemAccessible)) -#define GTK_IS_ICON_VIEW_ITEM_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_ICON_VIEW_ITEM_ACCESSIBLE)) - -typedef struct -{ - GList *items; - GtkTreeModel *model; -} GtkIconViewAccessiblePrivate; - -typedef struct -{ - AtkObject parent; - - GtkIconViewItem *item; - GtkWidget *widget; - AtkStateSet *state_set; - char *text; - char *action_description; - char *image_description; - guint action_idle_handler; -} GtkIconViewItemAccessible; - -typedef struct -{ - AtkObjectClass parent_class; - -} GtkIconViewItemAccessibleClass; - -GType _gtk_icon_view_item_accessible_get_type (void); - -static gboolean gtk_icon_view_item_accessible_is_showing (GtkIconViewItemAccessible *item); - -static void atk_component_item_interface_init (AtkComponentIface *iface); -static void atk_action_item_interface_init (AtkActionIface *iface); -static void atk_text_item_interface_init (AtkTextIface *iface); -static void atk_image_item_interface_init (AtkImageIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkIconViewItemAccessible, _gtk_icon_view_item_accessible, ATK_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, atk_component_item_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_item_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_item_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE, atk_image_item_interface_init)) - - -static gboolean -idle_do_action (gpointer data) -{ - GtkIconViewItemAccessible *item; - GtkIconView *icon_view; - GtkTreePath *path; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (data); - item->action_idle_handler = 0; - - if (item->widget != NULL) - { - icon_view = GTK_ICON_VIEW (item->widget); - path = gtk_tree_path_new_from_indices (item->item->index, -1); - gtk_icon_view_item_activated (icon_view, path); - gtk_tree_path_free (path); - } - - return FALSE; -} - -static gboolean -gtk_icon_view_item_accessible_do_action (AtkAction *action, - int i) -{ - GtkIconViewItemAccessible *item; - - if (i != 0) - return FALSE; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (action); - - if (!GTK_IS_ICON_VIEW (item->widget)) - return FALSE; - - if (atk_state_set_contains_state (item->state_set, ATK_STATE_DEFUNCT)) - return FALSE; - - if (!item->action_idle_handler) - { - item->action_idle_handler = g_idle_add (idle_do_action, item); - g_source_set_name_by_id (item->action_idle_handler, "[gtk] idle_do_action"); - } - - return TRUE; -} - -static int -gtk_icon_view_item_accessible_get_n_actions (AtkAction *action) -{ - return 1; -} - -static const char * -gtk_icon_view_item_accessible_get_description (AtkAction *action, - int i) -{ - GtkIconViewItemAccessible *item; - - if (i != 0) - return NULL; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (action); - - if (item->action_description) - return item->action_description; - else - return "Activate item"; -} - -static const char * -gtk_icon_view_item_accessible_get_name (AtkAction *action, - int i) -{ - if (i != 0) - return NULL; - - return "activate"; -} - -static gboolean -gtk_icon_view_item_accessible_set_description (AtkAction *action, - int i, - const char *description) -{ - GtkIconViewItemAccessible *item; - - if (i != 0) - return FALSE; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (action); - - g_free (item->action_description); - item->action_description = g_strdup (description); - - return TRUE; -} - -static void -atk_action_item_interface_init (AtkActionIface *iface) -{ - iface->do_action = gtk_icon_view_item_accessible_do_action; - iface->set_description = gtk_icon_view_item_accessible_set_description; - iface->get_name = gtk_icon_view_item_accessible_get_name; - iface->get_n_actions = gtk_icon_view_item_accessible_get_n_actions; - iface->get_description = gtk_icon_view_item_accessible_get_description; -} - -static const char * -gtk_icon_view_item_accessible_get_image_description (AtkImage *image) -{ - GtkIconViewItemAccessible *item; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (image); - - return item->image_description; -} - -static gboolean -gtk_icon_view_item_accessible_set_image_description (AtkImage *image, - const char *description) -{ - GtkIconViewItemAccessible *item; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (image); - - g_free (item->image_description); - item->image_description = g_strdup (description); - - return TRUE; -} - -typedef struct { - GdkRectangle box; - gboolean pixbuf_found; -} GetPixbufBoxData; - -static gboolean -get_pixbuf_foreach (GtkCellRenderer *renderer, - const GdkRectangle *cell_area, - const GdkRectangle *cell_background, - GetPixbufBoxData *data) -{ - if (GTK_IS_CELL_RENDERER_PIXBUF (renderer)) - { - data->box = *cell_area; - data->pixbuf_found = TRUE; - } - return (data->pixbuf_found != FALSE); -} - -static gboolean -get_pixbuf_box (GtkIconView *icon_view, - GtkIconViewItem *item, - GdkRectangle *box) -{ - GetPixbufBoxData data = { { 0, }, FALSE }; - GtkCellAreaContext *context; - - context = g_ptr_array_index (icon_view->priv->row_contexts, item->row); - - _gtk_icon_view_set_cell_data (icon_view, item); - gtk_cell_area_foreach_alloc (icon_view->priv->cell_area, context, - GTK_WIDGET (icon_view), - &item->cell_area, &item->cell_area, - (GtkCellAllocCallback)get_pixbuf_foreach, &data); - - *box = data.box; - - return data.pixbuf_found; -} - -static gboolean -get_text_foreach (GtkCellRenderer *renderer, - char **text) -{ - if (GTK_IS_CELL_RENDERER_TEXT (renderer)) - { - g_object_get (renderer, "text", text, NULL); - return TRUE; - } - return FALSE; -} - -static char * -get_text (GtkIconView *icon_view, - GtkIconViewItem *item) -{ - char *text = NULL; - - _gtk_icon_view_set_cell_data (icon_view, item); - gtk_cell_area_foreach (icon_view->priv->cell_area, - (GtkCellCallback) get_text_foreach, - &text); - - return text; -} - -static void -gtk_icon_view_item_accessible_get_image_size (AtkImage *image, - int *width, - int *height) -{ - GtkIconViewItemAccessible *item; - GdkRectangle box; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (image); - - if (!GTK_IS_ICON_VIEW (item->widget)) - return; - - if (atk_state_set_contains_state (item->state_set, ATK_STATE_DEFUNCT)) - return; - - *width = 0; - *height = 0; - - if (get_pixbuf_box (GTK_ICON_VIEW (item->widget), item->item, &box)) - { - *width = box.width; - *height = box.height; - } -} - -static void -gtk_icon_view_item_accessible_get_image_position (AtkImage *image, - int *x, - int *y, - AtkCoordType coord_type) -{ - GtkIconViewItemAccessible *item; - GdkRectangle box; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (image); - - if (!GTK_IS_ICON_VIEW (item->widget)) - return; - - if (atk_state_set_contains_state (item->state_set, ATK_STATE_DEFUNCT)) - return; - - atk_component_get_extents (ATK_COMPONENT (image), x, y, NULL, NULL, - coord_type); - - if (get_pixbuf_box (GTK_ICON_VIEW (item->widget), item->item, &box)) - { - *x+= box.x - item->item->cell_area.x; - *y+= box.y - item->item->cell_area.y; - } - -} - -static void -atk_image_item_interface_init (AtkImageIface *iface) -{ - iface->get_image_description = gtk_icon_view_item_accessible_get_image_description; - iface->set_image_description = gtk_icon_view_item_accessible_set_image_description; - iface->get_image_size = gtk_icon_view_item_accessible_get_image_size; - iface->get_image_position = gtk_icon_view_item_accessible_get_image_position; -} - -static char * -gtk_icon_view_item_accessible_get_text (AtkText *text, - int start_pos, - int end_pos) -{ - GtkIconViewItemAccessible *item; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (text); - if (atk_state_set_contains_state (item->state_set, ATK_STATE_DEFUNCT)) - return NULL; - - if (item->text) - return g_utf8_substring (item->text, start_pos, end_pos > -1 ? end_pos : g_utf8_strlen (item->text, -1)); - else - return g_strdup (""); -} - -static gunichar -gtk_icon_view_item_accessible_get_character_at_offset (AtkText *text, - int offset) -{ - GtkIconViewItemAccessible *item; - char *string; - char *index; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (text); - if (atk_state_set_contains_state (item->state_set, ATK_STATE_DEFUNCT)) - return '\0'; - - string = item->text; - - if (!string) - return '\0'; - - if (offset >= g_utf8_strlen (string, -1)) - return '\0'; - - index = g_utf8_offset_to_pointer (string, offset); - - return g_utf8_get_char (index); -} - -static PangoLayout * -create_pango_layout (GtkIconViewItemAccessible *item) -{ - PangoLayout *layout; - - layout = gtk_widget_create_pango_layout (item->widget, item->text); - - return layout; -} - -static char * -gtk_icon_view_item_accessible_get_text_before_offset (AtkText *atk_text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkIconViewItemAccessible *item; - PangoLayout *layout; - char *text; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (atk_text); - if (atk_state_set_contains_state (item->state_set, ATK_STATE_DEFUNCT)) - return NULL; - - layout = create_pango_layout (item); - text = _gtk_pango_get_text_before (layout, boundary_type, offset, start_offset, end_offset); - g_object_unref (layout); - - return text; -} - -static char * -gtk_icon_view_item_accessible_get_text_at_offset (AtkText *atk_text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkIconViewItemAccessible *item; - PangoLayout *layout; - char *text; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (atk_text); - if (atk_state_set_contains_state (item->state_set, ATK_STATE_DEFUNCT)) - return NULL; - - layout = create_pango_layout (item); - text = _gtk_pango_get_text_at (layout, boundary_type, offset, start_offset, end_offset); - g_object_unref (layout); - - return text; -} - -static char * -gtk_icon_view_item_accessible_get_text_after_offset (AtkText *atk_text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkIconViewItemAccessible *item; - PangoLayout *layout; - char *text; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (atk_text); - if (atk_state_set_contains_state (item->state_set, ATK_STATE_DEFUNCT)) - return NULL; - - layout = create_pango_layout (item); - text = _gtk_pango_get_text_after (layout, boundary_type, offset, start_offset, end_offset); - g_object_unref (layout); - - return text; -} - -static int -gtk_icon_view_item_accessible_get_character_count (AtkText *text) -{ - GtkIconViewItemAccessible *item; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (text); - if (atk_state_set_contains_state (item->state_set, ATK_STATE_DEFUNCT)) - return 0; - - if (item->text) - return g_utf8_strlen (item->text, -1); - else - return 0; -} - -static void -gtk_icon_view_item_accessible_get_character_extents (AtkText *text, - int offset, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coord_type) -{ - GtkIconViewItemAccessible *item; -#if 0 - GtkIconView *icon_view; - PangoRectangle char_rect; - const char *item_text; - int index; -#endif - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (text); - - if (!GTK_IS_ICON_VIEW (item->widget)) - return; - - if (atk_state_set_contains_state (item->state_set, ATK_STATE_DEFUNCT)) - return; - -#if 0 - icon_view = GTK_ICON_VIEW (item->widget); - /* FIXME we probably have to use GailTextCell to salvage this */ - gtk_icon_view_update_item_text (icon_view, item->item); - item_text = pango_layout_get_text (icon_view->priv->layout); - index = g_utf8_offset_to_pointer (item_text, offset) - item_text; - pango_layout_index_to_pos (icon_view->priv->layout, index, &char_rect); - - atk_component_get_position (ATK_COMPONENT (text), x, y, coord_type); - *x += item->item->layout_x - item->item->x + char_rect.x / PANGO_SCALE; - /* Look at gtk_icon_view_paint_item() to see where the text is. */ - *x -= ((item->item->width - item->item->layout_width) / 2) + (MAX (item->item->pixbuf_width, icon_view->priv->item_width) - item->item->width) / 2, - *y += item->item->layout_y - item->item->y + char_rect.y / PANGO_SCALE; - *width = char_rect.width / PANGO_SCALE; - *height = char_rect.height / PANGO_SCALE; -#endif -} - -static int -gtk_icon_view_item_accessible_get_offset_at_point (AtkText *text, - int x, - int y, - AtkCoordType coord_type) -{ - GtkIconViewItemAccessible *item; - int offset = 0; -#if 0 - GtkIconView *icon_view; - const char *item_text; - int index; - int l_x, l_y; -#endif - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (text); - - if (!GTK_IS_ICON_VIEW (item->widget)) - return -1; - - if (atk_state_set_contains_state (item->state_set, ATK_STATE_DEFUNCT)) - return -1; - -#if 0 - icon_view = GTK_ICON_VIEW (item->widget); - /* FIXME we probably have to use GailTextCell to salvage this */ - gtk_icon_view_update_item_text (icon_view, item->item); - atk_component_get_position (ATK_COMPONENT (text), &l_x, &l_y, coord_type); - x -= l_x + item->item->layout_x - item->item->x; - x += ((item->item->width - item->item->layout_width) / 2) + (MAX (item->item->pixbuf_width, icon_view->priv->item_width) - item->item->width) / 2, - y -= l_y + item->item->layout_y - item->item->y; - item_text = pango_layout_get_text (icon_view->priv->layout); - if (!pango_layout_xy_to_index (icon_view->priv->layout, - x * PANGO_SCALE, - y * PANGO_SCALE, - &index, NULL)) - { - if (x < 0 || y < 0) - index = 0; - else - index = -1; - } - if (index == -1) - offset = g_utf8_strlen (item_text, -1); - else - offset = g_utf8_pointer_to_offset (item_text, item_text + index); -#endif - return offset; -} - -static void -atk_text_item_interface_init (AtkTextIface *iface) -{ - iface->get_text = gtk_icon_view_item_accessible_get_text; - iface->get_character_at_offset = gtk_icon_view_item_accessible_get_character_at_offset; - iface->get_text_before_offset = gtk_icon_view_item_accessible_get_text_before_offset; - iface->get_text_at_offset = gtk_icon_view_item_accessible_get_text_at_offset; - iface->get_text_after_offset = gtk_icon_view_item_accessible_get_text_after_offset; - iface->get_character_count = gtk_icon_view_item_accessible_get_character_count; - iface->get_character_extents = gtk_icon_view_item_accessible_get_character_extents; - iface->get_offset_at_point = gtk_icon_view_item_accessible_get_offset_at_point; -} - -static void -gtk_icon_view_item_accessible_get_extents (AtkComponent *component, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coord_type) -{ - GtkIconViewItemAccessible *item; - AtkObject *parent_obj; - int l_x, l_y; - - g_return_if_fail (GTK_IS_ICON_VIEW_ITEM_ACCESSIBLE (component)); - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (component); - if (!GTK_IS_WIDGET (item->widget)) - return; - - if (atk_state_set_contains_state (item->state_set, ATK_STATE_DEFUNCT)) - return; - - *width = item->item->cell_area.width; - *height = item->item->cell_area.height; - if (gtk_icon_view_item_accessible_is_showing (item)) - { - parent_obj = gtk_widget_get_accessible (item->widget); - atk_component_get_extents (ATK_COMPONENT (parent_obj), &l_x, &l_y, - NULL, NULL, coord_type); - *x = l_x + item->item->cell_area.x; - *y = l_y + item->item->cell_area.y; - } - else - { - *x = G_MININT; - *y = G_MININT; - } -} - -static gboolean -gtk_icon_view_item_accessible_grab_focus (AtkComponent *component) -{ - GtkIconViewItemAccessible *item; - - g_return_val_if_fail (GTK_IS_ICON_VIEW_ITEM_ACCESSIBLE (component), FALSE); - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (component); - if (!GTK_IS_WIDGET (item->widget)) - return FALSE; - - gtk_widget_grab_focus (item->widget); - _gtk_icon_view_set_cursor_item (GTK_ICON_VIEW (item->widget), item->item, NULL); - - return TRUE; -} - -static void -atk_component_item_interface_init (AtkComponentIface *iface) -{ - iface->get_extents = gtk_icon_view_item_accessible_get_extents; - iface->grab_focus = gtk_icon_view_item_accessible_grab_focus; -} - -static gboolean -gtk_icon_view_item_accessible_add_state (GtkIconViewItemAccessible *item, - AtkStateType state_type, - gboolean emit_signal) -{ - gboolean rc; - - rc = atk_state_set_add_state (item->state_set, state_type); - - /* The signal should only be generated if the value changed, - * not when the item is set up. So states that are set - * initially should pass FALSE as the emit_signal argument. - */ - if (emit_signal) - { - atk_object_notify_state_change (ATK_OBJECT (item), state_type, TRUE); - /* If state_type is ATK_STATE_VISIBLE, additional notification */ - if (state_type == ATK_STATE_VISIBLE) - g_signal_emit_by_name (item, "visible-data-changed"); - } - - return rc; -} - -static gboolean -gtk_icon_view_item_accessible_remove_state (GtkIconViewItemAccessible *item, - AtkStateType state_type, - gboolean emit_signal) -{ - if (atk_state_set_contains_state (item->state_set, state_type)) - { - gboolean rc; - - rc = atk_state_set_remove_state (item->state_set, state_type); - - /* The signal should only be generated if the value changed, - * not when the item is set up. So states that are set - * initially should pass FALSE as the emit_signal argument. - */ - if (emit_signal) - { - atk_object_notify_state_change (ATK_OBJECT (item), state_type, FALSE); - /* If state_type is ATK_STATE_VISIBLE, additional notification */ - if (state_type == ATK_STATE_VISIBLE) - g_signal_emit_by_name (item, "visible-data-changed"); - } - - return rc; - } - else - return FALSE; -} - -static gboolean -gtk_icon_view_item_accessible_is_showing (GtkIconViewItemAccessible *item) -{ - GtkAllocation allocation; - GtkIconView *icon_view; - GdkRectangle visible_rect; - gboolean is_showing; - - /* An item is considered "SHOWING" if any part of the item - * is in the visible rectangle. - */ - if (!GTK_IS_ICON_VIEW (item->widget)) - return FALSE; - - if (item->item == NULL) - return FALSE; - - gtk_widget_get_allocation (item->widget, &allocation); - - icon_view = GTK_ICON_VIEW (item->widget); - visible_rect.x = 0; - if (icon_view->priv->hadjustment) - visible_rect.x += gtk_adjustment_get_value (icon_view->priv->hadjustment); - visible_rect.y = 0; - if (icon_view->priv->vadjustment) - visible_rect.y += gtk_adjustment_get_value (icon_view->priv->vadjustment); - visible_rect.width = allocation.width; - visible_rect.height = allocation.height; - - if (((item->item->cell_area.x + item->item->cell_area.width) < visible_rect.x) || - ((item->item->cell_area.y + item->item->cell_area.height) < (visible_rect.y)) || - (item->item->cell_area.x > (visible_rect.x + visible_rect.width)) || - (item->item->cell_area.y > (visible_rect.y + visible_rect.height))) - is_showing = FALSE; - else - is_showing = TRUE; - - return is_showing; -} - -static gboolean -gtk_icon_view_item_accessible_set_visibility (GtkIconViewItemAccessible *item, - gboolean emit_signal) -{ - if (gtk_icon_view_item_accessible_is_showing (item)) - return gtk_icon_view_item_accessible_add_state (item, ATK_STATE_SHOWING, - emit_signal); - else - return gtk_icon_view_item_accessible_remove_state (item, ATK_STATE_SHOWING, - emit_signal); -} - -static void -_gtk_icon_view_item_accessible_init (GtkIconViewItemAccessible *item) -{ - atk_object_set_role (ATK_OBJECT (item), ATK_ROLE_ICON); - - item->state_set = atk_state_set_new (); - atk_state_set_add_state (item->state_set, ATK_STATE_ENABLED); - atk_state_set_add_state (item->state_set, ATK_STATE_FOCUSABLE); - atk_state_set_add_state (item->state_set, ATK_STATE_SENSITIVE); - atk_state_set_add_state (item->state_set, ATK_STATE_SELECTABLE); - atk_state_set_add_state (item->state_set, ATK_STATE_VISIBLE); - - item->action_description = NULL; - item->image_description = NULL; - - item->action_idle_handler = 0; -} - -static void -_gtk_icon_view_item_accessible_finalize (GObject *object) -{ - GtkIconViewItemAccessible *item; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (object); - - if (item->widget) - g_object_remove_weak_pointer (G_OBJECT (item->widget), (gpointer) &item->widget); - - if (item->state_set) - g_object_unref (item->state_set); - - - g_free (item->text); - g_free (item->action_description); - g_free (item->image_description); - - if (item->action_idle_handler) - { - g_source_remove (item->action_idle_handler); - item->action_idle_handler = 0; - } - - G_OBJECT_CLASS (_gtk_icon_view_item_accessible_parent_class)->finalize (object); -} - -static AtkObject* -_gtk_icon_view_item_accessible_get_parent (AtkObject *obj) -{ - GtkIconViewItemAccessible *item; - - g_return_val_if_fail (GTK_IS_ICON_VIEW_ITEM_ACCESSIBLE (obj), NULL); - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (obj); - - if (item->widget) - return gtk_widget_get_accessible (item->widget); - else - return NULL; -} - -static int -_gtk_icon_view_item_accessible_get_index_in_parent (AtkObject *obj) -{ - GtkIconViewItemAccessible *item; - - g_return_val_if_fail (GTK_IS_ICON_VIEW_ITEM_ACCESSIBLE (obj), 0); - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (obj); - - return item->item->index; -} - -static AtkStateSet * -_gtk_icon_view_item_accessible_ref_state_set (AtkObject *obj) -{ - GtkIconViewItemAccessible *item; - GtkIconView *icon_view; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (obj); - g_return_val_if_fail (item->state_set, NULL); - - if (!item->widget) - return NULL; - - icon_view = GTK_ICON_VIEW (item->widget); - if (icon_view->priv->cursor_item == item->item) - atk_state_set_add_state (item->state_set, ATK_STATE_FOCUSED); - else - atk_state_set_remove_state (item->state_set, ATK_STATE_FOCUSED); - if (item->item->selected) - atk_state_set_add_state (item->state_set, ATK_STATE_SELECTED); - else - atk_state_set_remove_state (item->state_set, ATK_STATE_SELECTED); - - return g_object_ref (item->state_set); -} - -static void -_gtk_icon_view_item_accessible_class_init (GtkIconViewItemAccessibleClass *klass) -{ - GObjectClass *gobject_class; - AtkObjectClass *atk_class; - - gobject_class = (GObjectClass *)klass; - atk_class = (AtkObjectClass *)klass; - - gobject_class->finalize = _gtk_icon_view_item_accessible_finalize; - - atk_class->get_index_in_parent = _gtk_icon_view_item_accessible_get_index_in_parent; - atk_class->get_parent = _gtk_icon_view_item_accessible_get_parent; - atk_class->ref_state_set = _gtk_icon_view_item_accessible_ref_state_set; -} - -static void atk_component_interface_init (AtkComponentIface *iface); -static void atk_selection_interface_init (AtkSelectionIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkIconViewAccessible, gtk_icon_view_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_ADD_PRIVATE (GtkIconViewAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, atk_component_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_SELECTION, atk_selection_interface_init)) - -typedef struct -{ - AtkObject *item; - int index; -} ItemAccessibleInfo; - - -static void -gtk_icon_view_item_accessible_info_new (GtkIconViewAccessible *self, - GtkIconViewItemAccessible *item, - int index) -{ - GtkIconViewAccessiblePrivate *priv = gtk_icon_view_accessible_get_instance_private (self); - ItemAccessibleInfo *info; - ItemAccessibleInfo *tmp_info; - GList *items; - - info = g_new (ItemAccessibleInfo, 1); - info->item = ATK_OBJECT (item); - info->index = index; - - items = priv->items; - while (items) - { - tmp_info = items->data; - if (tmp_info->index > index) - break; - items = items->next; - } - - priv->items = g_list_insert_before (priv->items, items, info); -} - -static int -gtk_icon_view_accessible_get_n_children (AtkObject *accessible) -{ - GtkIconView *icon_view; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (!widget) - return 0; - - icon_view = GTK_ICON_VIEW (widget); - - return g_list_length (icon_view->priv->items); -} - -static GtkIconViewItemAccessible * -gtk_icon_view_accessible_find_child (GtkIconViewAccessible *self, - int index) -{ - GtkIconViewAccessiblePrivate *priv = gtk_icon_view_accessible_get_instance_private (self); - GList *items; - - items = priv->items; - - while (items) - { - ItemAccessibleInfo *info = items->data; - GList *next = items->next; - - if (info->index == index) - return GTK_ICON_VIEW_ITEM_ACCESSIBLE (info->item); - - items = next; - } - - return NULL; -} - -static AtkObject * -gtk_icon_view_accessible_ref_child (AtkObject *accessible, - int index) -{ - GtkIconViewAccessible *self = GTK_ICON_VIEW_ACCESSIBLE (accessible); - GtkIconViewItemAccessible *a11y_item; - GtkIconView *icon_view; - GtkWidget *widget; - GList *icons; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return NULL; - - icon_view = GTK_ICON_VIEW (widget); - icons = g_list_nth (icon_view->priv->items, index); - if (icons) - { - GtkIconViewItem *item = icons->data; - - g_return_val_if_fail (item->index == index, NULL); - - a11y_item = gtk_icon_view_accessible_find_child (self, index); - if (a11y_item == NULL) - { - a11y_item = g_object_new (GTK_TYPE_ICON_VIEW_ITEM_ACCESSIBLE, NULL); - a11y_item->item = item; - a11y_item->widget = widget; - - g_free (a11y_item->text); - a11y_item->text = get_text (icon_view, item); - - gtk_icon_view_item_accessible_set_visibility (a11y_item, FALSE); - g_object_add_weak_pointer (G_OBJECT (widget), (gpointer) &(a11y_item->widget)); - - gtk_icon_view_item_accessible_info_new (self, a11y_item, index); - } - - g_object_ref (a11y_item); - - return ATK_OBJECT (a11y_item); - } - else - { - return NULL; - } -} - -static void -gtk_icon_view_accessible_traverse_items (GtkIconViewAccessible *self, - GList *list) -{ - GtkIconViewAccessiblePrivate *priv = gtk_icon_view_accessible_get_instance_private (self); - GtkWidget *widget; - gboolean act_on_item; - GList *items; - - if (priv->items == NULL) - return; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (self)); - if (widget == NULL) - return; - - items = priv->items; - - act_on_item = (list == NULL); - - while (items) - { - ItemAccessibleInfo *info = items->data; - GtkIconViewItemAccessible *item; - GList *next = items->next; - - item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (info->item); - - if (act_on_item == FALSE && list == items) - act_on_item = TRUE; - - if (act_on_item) - gtk_icon_view_item_accessible_set_visibility (item, TRUE); - - items = next; - } -} - -void -gtk_icon_view_accessible_adjustment_changed (GtkIconViewAccessible *self) -{ - gtk_icon_view_accessible_traverse_items (self, NULL); -} - -static void -gtk_icon_view_accessible_model_row_changed (GtkTreeModel *tree_model, - GtkTreePath *path, - GtkTreeIter *iter, - gpointer user_data) -{ - GtkIconViewAccessible *self = user_data; - GtkIconViewItemAccessible *a11y_item; - int index; - - index = gtk_tree_path_get_indices (path)[0]; - a11y_item = gtk_icon_view_accessible_find_child (self, index); - if (a11y_item) - { - GtkIconViewItem *item = a11y_item->item; - GtkIconView *icon_view = GTK_ICON_VIEW (gtk_accessible_get_widget (GTK_ACCESSIBLE (self))); - - const char *name = atk_object_get_name (ATK_OBJECT (a11y_item)); - if (name == NULL || *name == '\0') - { - g_free (a11y_item->text); - a11y_item->text = get_text (icon_view, item); - } - } - - g_signal_emit_by_name (self, "visible-data-changed"); -} - -static void -gtk_icon_view_accessible_model_row_inserted (GtkTreeModel *tree_model, - GtkTreePath *path, - GtkTreeIter *iter, - gpointer user_data) -{ - GtkIconViewAccessible *self = user_data; - GtkIconViewAccessiblePrivate *priv = gtk_icon_view_accessible_get_instance_private (self); - GList *items; - GList *tmp_list; - int index; - - index = gtk_tree_path_get_indices (path)[0]; - - items = priv->items; - tmp_list = NULL; - while (items) - { - ItemAccessibleInfo *info = items->data; - GtkIconViewItemAccessible *item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (info->item); - GList *next = items->next; - - if (info->index != item->item->index) - { - if (info->index < index) - g_warning ("Unexpected index value on insertion %d %d", index, info->index); - - if (tmp_list == NULL) - tmp_list = items; - - info->index = item->item->index; - } - - items = next; - } - - gtk_icon_view_accessible_traverse_items (self, tmp_list); - g_signal_emit_by_name (self, - "children-changed::add", - index, NULL, NULL); -} - -static void -gtk_icon_view_accessible_model_row_deleted (GtkTreeModel *tree_model, - GtkTreePath *path, - gpointer user_data) -{ - GtkIconViewAccessible *self = user_data; - GtkIconViewAccessiblePrivate *priv = gtk_icon_view_accessible_get_instance_private (self); - GList *items; - GList *tmp_list = NULL; - GList *deleted_item = NULL; - int index; - - index = gtk_tree_path_get_indices (path)[0]; - - items = priv->items; - while (items) - { - ItemAccessibleInfo *info = items->data; - GtkIconViewItemAccessible *item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (info->item); - GList *next = items->next; - - if (info->index == index) - { - deleted_item = items; - } - else if (info->index != item->item->index) - { - if (tmp_list == NULL) - tmp_list = items; - - info->index = item->item->index; - } - - items = next; - } - - if (deleted_item) - { - ItemAccessibleInfo *info = deleted_item->data; - - gtk_icon_view_item_accessible_add_state (GTK_ICON_VIEW_ITEM_ACCESSIBLE (info->item), - ATK_STATE_DEFUNCT, - TRUE); - - g_signal_emit_by_name (self, - "children-changed::remove", - index, NULL, NULL); - - priv->items = g_list_delete_link (priv->items, deleted_item); - g_object_unref (info->item); - g_free (info); - } - - gtk_icon_view_accessible_traverse_items (self, tmp_list); -} - -static int -gtk_icon_view_accessible_item_compare (ItemAccessibleInfo *i1, - ItemAccessibleInfo *i2) -{ - return i1->index - i2->index; -} - -static void -gtk_icon_view_accessible_model_rows_reordered (GtkTreeModel *tree_model, - GtkTreePath *path, - GtkTreeIter *iter, - int *new_order, - gpointer user_data) -{ - GtkIconViewAccessible *self = user_data; - GtkIconViewAccessiblePrivate *priv = gtk_icon_view_accessible_get_instance_private (self); - GtkIconView *icon_view; - GList *items; - int *order; - int length, i; - - icon_view = GTK_ICON_VIEW (gtk_accessible_get_widget (GTK_ACCESSIBLE (self))); - length = gtk_tree_model_iter_n_children (tree_model, NULL); - - order = g_new (int, length); - for (i = 0; i < length; i++) - order [new_order[i]] = i; - - items = priv->items; - while (items) - { - ItemAccessibleInfo *info = items->data; - GtkIconViewItemAccessible *item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (info->item); - GList *next = items->next; - - info->index = order[info->index]; - item->item = g_list_nth_data (icon_view->priv->items, info->index); - - items = next; - } - - g_free (order); - - priv->items = g_list_sort (priv->items, (GCompareFunc) gtk_icon_view_accessible_item_compare); -} - -static void -gtk_icon_view_accessible_disconnect_model_signals (GtkIconViewAccessible *self) -{ - GtkIconViewAccessiblePrivate *priv = gtk_icon_view_accessible_get_instance_private (self); - - g_signal_handlers_disconnect_by_func (priv->model, gtk_icon_view_accessible_model_row_changed, self); - g_signal_handlers_disconnect_by_func (priv->model, gtk_icon_view_accessible_model_row_inserted, self); - g_signal_handlers_disconnect_by_func (priv->model, gtk_icon_view_accessible_model_row_deleted, self); - g_signal_handlers_disconnect_by_func (priv->model, gtk_icon_view_accessible_model_rows_reordered, self); -} - -static void -gtk_icon_view_accessible_connect_model_signals (GtkIconViewAccessible *self) -{ - GtkIconViewAccessiblePrivate *priv = gtk_icon_view_accessible_get_instance_private (self); - - g_signal_connect_object (priv->model, "row-changed", - G_CALLBACK (gtk_icon_view_accessible_model_row_changed), - self, 0); - g_signal_connect_object (priv->model, "row-inserted", - G_CALLBACK (gtk_icon_view_accessible_model_row_inserted), - self, G_CONNECT_AFTER); - g_signal_connect_object (priv->model, "row-deleted", - G_CALLBACK (gtk_icon_view_accessible_model_row_deleted), - self, G_CONNECT_AFTER); - g_signal_connect_object (priv->model, "rows-reordered", - G_CALLBACK (gtk_icon_view_accessible_model_rows_reordered), - self, G_CONNECT_AFTER); -} - -static void -gtk_icon_view_accessible_clear_cache (GtkIconViewAccessible *self) -{ - GtkIconViewAccessiblePrivate *priv = gtk_icon_view_accessible_get_instance_private (self); - GList *items; - - if (priv->items == NULL) - return; - - items = priv->items; - while (items != NULL) - { - ItemAccessibleInfo *info = items->data; - GList *next = items->next; - - gtk_icon_view_item_accessible_add_state (GTK_ICON_VIEW_ITEM_ACCESSIBLE (info->item), - ATK_STATE_DEFUNCT, - TRUE); - g_object_unref (info->item); - g_free (info); - - items = next; - } - - g_clear_pointer (&priv->items, g_list_free); -} - -void -gtk_icon_view_accessible_update_model (GtkIconViewAccessible *self, - GtkTreeModel *model) -{ - GtkIconViewAccessiblePrivate *priv = gtk_icon_view_accessible_get_instance_private (self); - - if (priv->model != NULL) - { - g_object_remove_weak_pointer (G_OBJECT (priv->model), - (gpointer *) &priv->model); - gtk_icon_view_accessible_disconnect_model_signals (self); - } - - gtk_icon_view_accessible_clear_cache (self); - - priv->model = model; - - /* If there is no model the GtkIconView is probably being destroyed */ - if (priv->model != NULL) - { - g_object_add_weak_pointer (G_OBJECT (priv->model), (gpointer *) &priv->model); - gtk_icon_view_accessible_connect_model_signals (self); - } -} - -static void -gtk_icon_view_accessible_initialize (AtkObject *accessible, - gpointer data) -{ - GtkIconViewAccessible *self = GTK_ICON_VIEW_ACCESSIBLE (accessible); - GtkIconViewAccessiblePrivate *priv = gtk_icon_view_accessible_get_instance_private (self); - GtkIconView *icon_view = data; - - if (ATK_OBJECT_CLASS (gtk_icon_view_accessible_parent_class)->initialize) - ATK_OBJECT_CLASS (gtk_icon_view_accessible_parent_class)->initialize (accessible, data); - - priv->model = icon_view->priv->model; - if (priv->model) - { - g_object_add_weak_pointer (G_OBJECT (priv->model), (gpointer *) &priv->model); - gtk_icon_view_accessible_connect_model_signals (self); - } - - accessible->role = ATK_ROLE_LAYERED_PANE; -} - -static void -gtk_icon_view_accessible_finalize (GObject *object) -{ - GtkIconViewAccessible *view = GTK_ICON_VIEW_ACCESSIBLE (object); - - gtk_icon_view_accessible_clear_cache (view); - - G_OBJECT_CLASS (gtk_icon_view_accessible_parent_class)->finalize (object); -} - -static void -gtk_icon_view_accessible_class_init (GtkIconViewAccessibleClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass); - - gobject_class->finalize = gtk_icon_view_accessible_finalize; - - atk_class->get_n_children = gtk_icon_view_accessible_get_n_children; - atk_class->ref_child = gtk_icon_view_accessible_ref_child; - atk_class->initialize = gtk_icon_view_accessible_initialize; -} - -static void -gtk_icon_view_accessible_init (GtkIconViewAccessible *accessible) -{ -} - -static AtkObject* -gtk_icon_view_accessible_ref_accessible_at_point (AtkComponent *component, - int x, - int y, - AtkCoordType coord_type) -{ - GtkWidget *widget; - GtkIconView *icon_view; - GtkIconViewItem *item; - int x_pos, y_pos; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component)); - if (widget == NULL) - return NULL; - - icon_view = GTK_ICON_VIEW (widget); - atk_component_get_extents (component, &x_pos, &y_pos, NULL, NULL, coord_type); - item = _gtk_icon_view_get_item_at_coords (icon_view, x - x_pos, y - y_pos, TRUE, NULL); - if (item) - return gtk_icon_view_accessible_ref_child (ATK_OBJECT (component), item->index); - - return NULL; -} - -static void -atk_component_interface_init (AtkComponentIface *iface) -{ - iface->ref_accessible_at_point = gtk_icon_view_accessible_ref_accessible_at_point; -} - -static gboolean -gtk_icon_view_accessible_add_selection (AtkSelection *selection, - int i) -{ - GtkWidget *widget; - GtkIconView *icon_view; - GtkIconViewItem *item; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return FALSE; - - icon_view = GTK_ICON_VIEW (widget); - - item = g_list_nth_data (icon_view->priv->items, i); - if (!item) - return FALSE; - - _gtk_icon_view_select_item (icon_view, item); - - return TRUE; -} - -static gboolean -gtk_icon_view_accessible_clear_selection (AtkSelection *selection) -{ - GtkWidget *widget; - GtkIconView *icon_view; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return FALSE; - - icon_view = GTK_ICON_VIEW (widget); - gtk_icon_view_unselect_all (icon_view); - - return TRUE; -} - -static AtkObject* -gtk_icon_view_accessible_ref_selection (AtkSelection *selection, - int i) -{ - GList *l; - GtkWidget *widget; - GtkIconView *icon_view; - GtkIconViewItem *item; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return NULL; - - icon_view = GTK_ICON_VIEW (widget); - - l = icon_view->priv->items; - while (l) - { - item = l->data; - if (item->selected) - { - if (i == 0) - return atk_object_ref_accessible_child (gtk_widget_get_accessible (widget), item->index); - else - i--; - } - l = l->next; - } - - return NULL; -} - -static int -gtk_icon_view_accessible_get_selection_count (AtkSelection *selection) -{ - GtkWidget *widget; - GtkIconView *icon_view; - GtkIconViewItem *item; - GList *l; - int count; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return 0; - - icon_view = GTK_ICON_VIEW (widget); - - l = icon_view->priv->items; - count = 0; - while (l) - { - item = l->data; - - if (item->selected) - count++; - - l = l->next; - } - - return count; -} - -static gboolean -gtk_icon_view_accessible_is_child_selected (AtkSelection *selection, - int i) -{ - GtkWidget *widget; - GtkIconView *icon_view; - GtkIconViewItem *item; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return FALSE; - - icon_view = GTK_ICON_VIEW (widget); - - item = g_list_nth_data (icon_view->priv->items, i); - if (!item) - return FALSE; - - return item->selected; -} - -static gboolean -gtk_icon_view_accessible_remove_selection (AtkSelection *selection, - int i) -{ - GtkWidget *widget; - GtkIconView *icon_view; - GtkIconViewItem *item; - GList *l; - int count; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return FALSE; - - icon_view = GTK_ICON_VIEW (widget); - l = icon_view->priv->items; - count = 0; - while (l) - { - item = l->data; - if (item->selected) - { - if (count == i) - { - _gtk_icon_view_unselect_item (icon_view, item); - return TRUE; - } - count++; - } - l = l->next; - } - - return FALSE; -} - -static gboolean -gtk_icon_view_accessible_select_all_selection (AtkSelection *selection) -{ - GtkWidget *widget; - GtkIconView *icon_view; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return FALSE; - - icon_view = GTK_ICON_VIEW (widget); - gtk_icon_view_select_all (icon_view); - return TRUE; -} - -static void -atk_selection_interface_init (AtkSelectionIface *iface) -{ - iface->add_selection = gtk_icon_view_accessible_add_selection; - iface->clear_selection = gtk_icon_view_accessible_clear_selection; - iface->ref_selection = gtk_icon_view_accessible_ref_selection; - iface->get_selection_count = gtk_icon_view_accessible_get_selection_count; - iface->is_child_selected = gtk_icon_view_accessible_is_child_selected; - iface->remove_selection = gtk_icon_view_accessible_remove_selection; - iface->select_all_selection = gtk_icon_view_accessible_select_all_selection; -} diff --git a/gtk/a11y/gtkiconviewaccessible.h b/gtk/a11y/gtkiconviewaccessible.h deleted file mode 100644 index a6c51151a6..0000000000 --- a/gtk/a11y/gtkiconviewaccessible.h +++ /dev/null @@ -1,54 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright (C) 2002, 2004 Anders Carlsson <andersca@gnu.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_ICON_VIEW_ACCESSIBLE_H__ -#define __GTK_ICON_VIEW_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_ICON_VIEW_ACCESSIBLE (gtk_icon_view_accessible_get_type ()) -#define GTK_ICON_VIEW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_ICON_VIEW_ACCESSIBLE, GtkIconViewAccessible)) -#define GTK_ICON_VIEW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_ICON_VIEW_ACCESSIBLE, GtkIconViewAccessibleClass)) -#define GTK_IS_ICON_VIEW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_ICON_VIEW_ACCESSIBLE)) -#define GTK_IS_ICON_VIEW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_ICON_VIEW_ACCESSIBLE)) -#define GTK_ICON_VIEW_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_ICON_VIEW_ACCESSIBLE, GtkIconViewAccessibleClass)) - -typedef struct _GtkIconViewAccessible GtkIconViewAccessible; -typedef struct _GtkIconViewAccessibleClass GtkIconViewAccessibleClass; - -struct _GtkIconViewAccessible -{ - GtkWidgetAccessible parent; -}; - -struct _GtkIconViewAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_icon_view_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_ICON_VIEW_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkiconviewaccessibleprivate.h b/gtk/a11y/gtkiconviewaccessibleprivate.h deleted file mode 100644 index f5f36694ed..0000000000 --- a/gtk/a11y/gtkiconviewaccessibleprivate.h +++ /dev/null @@ -1,33 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright (C) 2002, 2004 Anders Carlsson <andersca@gnu.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_ICON_VIEW_ACCESSIBLE_PRIVATE_H__ -#define __GTK_ICON_VIEW_ACCESSIBLE_PRIVATE_H__ - -#include <gtk/a11y/gtkiconviewaccessible.h> -#include <gtk/gtkiconview.h> - -G_BEGIN_DECLS - -void gtk_icon_view_accessible_adjustment_changed (GtkIconViewAccessible *self); - -void gtk_icon_view_accessible_update_model (GtkIconViewAccessible *self, - GtkTreeModel *model); - -G_END_DECLS - -#endif /* __GTK_ICON_VIEW_ACCESSIBLE_PRIVATE_H__ */ diff --git a/gtk/a11y/gtkimageaccessible.c b/gtk/a11y/gtkimageaccessible.c deleted file mode 100644 index a86a1074ef..0000000000 --- a/gtk/a11y/gtkimageaccessible.c +++ /dev/null @@ -1,338 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <string.h> -#include <gtk/gtk.h> -#include "gtkimageaccessible.h" -#include "gtkimageprivate.h" -#include "gtkintl.h" - -struct _GtkImageAccessiblePrivate -{ - char *image_description; - char *stock_name; -}; - -static void atk_image_interface_init (AtkImageIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkImageAccessible, gtk_image_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_ADD_PRIVATE (GtkImageAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE, atk_image_interface_init)) - -static void -gtk_image_accessible_initialize (AtkObject *accessible, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_image_accessible_parent_class)->initialize (accessible, data); - - accessible->role = ATK_ROLE_ICON; -} - -typedef struct { - const char *name; - const char *label; -} NameMapEntry; - -static const NameMapEntry name_map[] = { - { "help-about", NC_("Stock label", "_About") }, - { "list-add", NC_("Stock label", "_Add") }, - { "format-text-bold", NC_("Stock label", "_Bold") }, - { "media-optical", NC_("Stock label", "_CD-ROM") }, - { "edit-clear", NC_("Stock label", "_Clear") }, - { "window-close", NC_("Stock label", "_Close") }, - { "window-minimize", N_("Minimize") }, - { "window-maximize", N_("Maximize") }, - { "window-restore", N_("Restore") }, - { "edit-copy", NC_("Stock label", "_Copy") }, - { "edit-cut", NC_("Stock label", "Cu_t") }, - { "edit-delete", NC_("Stock label", "_Delete") }, - { "dialog-error", NC_("Stock label", "Error") }, - { "dialog-information", NC_("Stock label", "Information") }, - { "dialog-question", NC_("Stock label", "Question") }, - { "dialog-warning", NC_("Stock label", "Warning") }, - { "system-run", NC_("Stock label", "_Execute") }, - { "text-x-generic", NC_("Stock label", "_File") }, - { "edit-find", NC_("Stock label", "_Find") }, - { "edit-find-replace", NC_("Stock label", "Find and _Replace") }, - { "media-floppy", NC_("Stock label", "_Floppy") }, - { "view-fullscreen", NC_("Stock label", "_Fullscreen") }, - { "go-bottom", NC_("Stock label, navigation", "_Bottom") }, - { "go-first", NC_("Stock label, navigation", "_First") }, - { "go-last", NC_("Stock label, navigation", "_Last") }, - { "go-top", NC_("Stock label, navigation", "_Top") }, - { "go-previous", NC_("Stock label, navigation", "_Back") }, - { "go-down", NC_("Stock label, navigation", "_Down") }, - { "go-next", NC_("Stock label, navigation", "_Forward") }, - { "go-up", NC_("Stock label, navigation", "_Up") }, - { "drive-harddisk", NC_("Stock label", "_Hard Disk") }, - { "help-contents", NC_("Stock label", "_Help") }, - { "go-home", NC_("Stock label", "_Home") }, - { "format-indent-more", NC_("Stock label", "Increase Indent") }, - { "format-text-italic", NC_("Stock label", "_Italic") }, - { "go-jump", NC_("Stock label", "_Jump to") }, - { "format-justify-center", NC_("Stock label", "_Center") }, - { "format-justify-fill", NC_("Stock label", "_Fill") }, - { "format-justify-left", NC_("Stock label", "_Left") }, - { "format-justify-right", NC_("Stock label", "_Right") }, - { "view-restore", NC_("Stock label", "_Leave Fullscreen") }, - { "media-seek-forward", NC_("Stock label, media", "_Forward") }, - { "media-skip-forward", NC_("Stock label, media", "_Next") }, - { "media-playback-pause", NC_("Stock label, media", "P_ause") }, - { "media-playback-start", NC_("Stock label, media", "_Play") }, - { "media-skip-backward", NC_("Stock label, media", "Pre_vious") }, - { "media-record", NC_("Stock label, media", "_Record") }, - { "media-seek-backward", NC_("Stock label, media", "R_ewind") }, - { "media-playback-stop", NC_("Stock label, media", "_Stop") }, - { "network-idle", NC_("Stock label", "_Network") }, - { "document-new", NC_("Stock label", "_New") }, - { "document-open", NC_("Stock label", "_Open") }, - { "edit-paste", NC_("Stock label", "_Paste") }, - { "document-print", NC_("Stock label", "_Print") }, - { "document-print-preview", NC_("Stock label", "Print Pre_view") }, - { "document-properties", NC_("Stock label", "_Properties") }, - { "application-exit", NC_("Stock label", "_Quit") }, - { "edit-redo", NC_("Stock label", "_Redo") }, - { "view-refresh", NC_("Stock label", "_Refresh") }, - { "list-remove", NC_("Stock label", "_Remove") }, - { "document-revert", NC_("Stock label", "_Revert") }, - { "document-save", NC_("Stock label", "_Save") }, - { "document-save-as", NC_("Stock label", "Save _As") }, - { "edit-select-all", NC_("Stock label", "Select _All") }, - { "view-sort-ascending", NC_("Stock label", "_Ascending") }, - { "view-sort-descending", NC_("Stock label", "_Descending") }, - { "tools-check-spelling", NC_("Stock label", "_Spell Check") }, - { "process-stop", NC_("Stock label", "_Stop") }, - { "format-text-strikethrough", NC_("Stock label", "_Strikethrough") }, - { "format-text-underline", NC_("Stock label", "_Underline") }, - { "edit-undo", NC_("Stock label", "_Undo") }, - { "format-indent-less", NC_("Stock label", "Decrease Indent") }, - { "zoom-original", NC_("Stock label", "_Normal Size") }, - { "zoom-fit-best", NC_("Stock label", "Best _Fit") }, - { "zoom-in", NC_("Stock label", "Zoom _In") }, - { "zoom-out", NC_("Stock label", "Zoom _Out") } -}; - -/* GTK+ internal methods */ -static char * -elide_underscores (const char *original) -{ - char *q, *result; - const char *p, *end; - gsize len; - gboolean last_underscore; - - if (!original) - return NULL; - - len = strlen (original); - q = result = g_malloc (len + 1); - last_underscore = FALSE; - - end = original + len; - for (p = original; p < end; p++) - { - if (!last_underscore && *p == '_') - last_underscore = TRUE; - else - { - last_underscore = FALSE; - if (original + 2 <= p && p + 1 <= end && - p[-2] == '(' && p[-1] == '_' && p[0] != '_' && p[1] == ')') - { - q--; - *q = '\0'; - p++; - } - else - *q++ = *p; - } - } - - if (last_underscore) - *q++ = '_'; - - *q = '\0'; - - return result; -} - -static char * -name_from_icon_name (const char *icon_name) -{ - char *name; - const char *label; - int i; - - name = g_strdup (icon_name); - if (g_str_has_suffix (name, "-symbolic")) - name[strlen (name) - strlen ("-symbolic")] = '\0'; - - for (i = 0; i < G_N_ELEMENTS (name_map); i++) - { - if (g_str_equal (name, name_map[i].name)) - { - label = g_dpgettext2 (GETTEXT_PACKAGE, "Stock label", name_map[i].label); - g_free (name); - - return elide_underscores (label); - } - } - - g_free (name); - return NULL; -} - -static void -gtk_image_accessible_finalize (GObject *object) -{ - GtkImageAccessible *aimage = GTK_IMAGE_ACCESSIBLE (object); - - g_free (aimage->priv->image_description); - g_free (aimage->priv->stock_name); - - G_OBJECT_CLASS (gtk_image_accessible_parent_class)->finalize (object); -} - -static const char * -gtk_image_accessible_get_name (AtkObject *accessible) -{ - GtkWidget* widget; - GtkImage *image; - GtkImageAccessible *image_accessible; - const char *name; - GtkImageType storage_type; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return NULL; - - name = ATK_OBJECT_CLASS (gtk_image_accessible_parent_class)->get_name (accessible); - if (name) - return name; - - image = GTK_IMAGE (widget); - image_accessible = GTK_IMAGE_ACCESSIBLE (accessible); - - g_free (image_accessible->priv->stock_name); - image_accessible->priv->stock_name = NULL; - - storage_type = gtk_image_get_storage_type (image); - - if (storage_type == GTK_IMAGE_ICON_NAME) - { - image_accessible->priv->stock_name = name_from_icon_name (gtk_image_get_icon_name (image)); - } - else if (storage_type == GTK_IMAGE_GICON) - { - GIcon *icon; - const char * const *icon_names; - - icon = gtk_image_get_gicon (image); - if (G_IS_THEMED_ICON (icon)) - { - icon_names = g_themed_icon_get_names (G_THEMED_ICON (icon)); - image_accessible->priv->stock_name = name_from_icon_name (icon_names[0]); - } - } - - return image_accessible->priv->stock_name; -} - -static void -gtk_image_accessible_class_init (GtkImageAccessibleClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - gobject_class->finalize = gtk_image_accessible_finalize; - class->initialize = gtk_image_accessible_initialize; - class->get_name = gtk_image_accessible_get_name; -} - -static void -gtk_image_accessible_init (GtkImageAccessible *image) -{ - image->priv = gtk_image_accessible_get_instance_private (image); -} - -static const char * -gtk_image_accessible_get_image_description (AtkImage *image) -{ - GtkImageAccessible *accessible = GTK_IMAGE_ACCESSIBLE (image); - - return accessible->priv->image_description; -} - -static void -gtk_image_accessible_get_image_position (AtkImage *image, - int *x, - int *y, - AtkCoordType coord_type) -{ - atk_component_get_extents (ATK_COMPONENT (image), x, y, NULL, NULL, - coord_type); -} - -static void -gtk_image_accessible_get_image_size (AtkImage *image, - int *width, - int *height) -{ - GtkWidget* widget; - GtkImage *gtk_image; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (image)); - if (widget == NULL) - { - *height = -1; - *width = -1; - return; - } - - gtk_image = GTK_IMAGE (widget); - - if (gtk_image_get_storage_type (gtk_image) != GTK_IMAGE_EMPTY) - gtk_image_get_image_size (gtk_image, width, height); - else - { - *height = 0; - *width = 0; - } -} - -static gboolean -gtk_image_accessible_set_image_description (AtkImage *image, - const char *description) -{ - GtkImageAccessible* accessible = GTK_IMAGE_ACCESSIBLE (image); - - g_free (accessible->priv->image_description); - accessible->priv->image_description = g_strdup (description); - - return TRUE; -} - -static void -atk_image_interface_init (AtkImageIface *iface) -{ - iface->get_image_description = gtk_image_accessible_get_image_description; - iface->get_image_position = gtk_image_accessible_get_image_position; - iface->get_image_size = gtk_image_accessible_get_image_size; - iface->set_image_description = gtk_image_accessible_set_image_description; -} diff --git a/gtk/a11y/gtkimageaccessible.h b/gtk/a11y/gtkimageaccessible.h deleted file mode 100644 index 47e0edc403..0000000000 --- a/gtk/a11y/gtkimageaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_IMAGE_ACCESSIBLE_H__ -#define __GTK_IMAGE_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_IMAGE_ACCESSIBLE (gtk_image_accessible_get_type ()) -#define GTK_IMAGE_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_IMAGE_ACCESSIBLE, GtkImageAccessible)) -#define GTK_IMAGE_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_IMAGE_ACCESSIBLE, GtkImageAccessibleClass)) -#define GTK_IS_IMAGE_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_IMAGE_ACCESSIBLE)) -#define GTK_IS_IMAGE_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_IMAGE_ACCESSIBLE)) -#define GTK_IMAGE_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_IMAGE_ACCESSIBLE, GtkImageAccessibleClass)) - -typedef struct _GtkImageAccessible GtkImageAccessible; -typedef struct _GtkImageAccessibleClass GtkImageAccessibleClass; -typedef struct _GtkImageAccessiblePrivate GtkImageAccessiblePrivate; - -struct _GtkImageAccessible -{ - GtkWidgetAccessible parent; - - GtkImageAccessiblePrivate *priv; -}; - -struct _GtkImageAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_image_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_IMAGE_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkimagecellaccessible.c b/gtk/a11y/gtkimagecellaccessible.c deleted file mode 100644 index 4deb292cd6..0000000000 --- a/gtk/a11y/gtkimagecellaccessible.c +++ /dev/null @@ -1,123 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <gtk/gtk.h> -#include "gtkimagecellaccessible.h" - -struct _GtkImageCellAccessiblePrivate -{ - char *image_description; -}; - -static void atk_image_interface_init (AtkImageIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkImageCellAccessible, gtk_image_cell_accessible, GTK_TYPE_RENDERER_CELL_ACCESSIBLE, - G_ADD_PRIVATE (GtkImageCellAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE, atk_image_interface_init)) - -static void -gtk_image_cell_accessible_finalize (GObject *object) -{ - GtkImageCellAccessible *image_cell = GTK_IMAGE_CELL_ACCESSIBLE (object); - - g_free (image_cell->priv->image_description); - G_OBJECT_CLASS (gtk_image_cell_accessible_parent_class)->finalize (object); -} - -static void -gtk_image_cell_accessible_class_init (GtkImageCellAccessibleClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - gobject_class->finalize = gtk_image_cell_accessible_finalize; -} - -static void -gtk_image_cell_accessible_init (GtkImageCellAccessible *image_cell) -{ - image_cell->priv = gtk_image_cell_accessible_get_instance_private (image_cell); -} - -static const char * -gtk_image_cell_accessible_get_image_description (AtkImage *image) -{ - GtkImageCellAccessible *image_cell = GTK_IMAGE_CELL_ACCESSIBLE (image); - - return image_cell->priv->image_description; -} - -static gboolean -gtk_image_cell_accessible_set_image_description (AtkImage *image, - const char *description) -{ - GtkImageCellAccessible *image_cell = GTK_IMAGE_CELL_ACCESSIBLE (image); - - g_free (image_cell->priv->image_description); - image_cell->priv->image_description = g_strdup (description); - - if (image_cell->priv->image_description) - return TRUE; - else - return FALSE; -} - -static void -gtk_image_cell_accessible_get_image_position (AtkImage *image, - int *x, - int *y, - AtkCoordType coord_type) -{ - atk_component_get_extents (ATK_COMPONENT (image), x, y, NULL, NULL, - coord_type); -} - -static void -gtk_image_cell_accessible_get_image_size (AtkImage *image, - int *width, - int *height) -{ - GtkImageCellAccessible *cell = GTK_IMAGE_CELL_ACCESSIBLE (image); - GtkCellRenderer *cell_renderer; - GdkPixbuf *pixbuf = NULL; - - *width = 0; - *height = 0; - - g_object_get (cell, "renderer", &cell_renderer, NULL); - g_object_get (cell_renderer, - "pixbuf", &pixbuf, - NULL); - g_object_unref (cell_renderer); - - if (pixbuf) - { - *width = gdk_pixbuf_get_width (pixbuf); - *height = gdk_pixbuf_get_height (pixbuf); - g_object_unref (pixbuf); - } -} - -static void -atk_image_interface_init (AtkImageIface *iface) -{ - iface->get_image_description = gtk_image_cell_accessible_get_image_description; - iface->set_image_description = gtk_image_cell_accessible_set_image_description; - iface->get_image_position = gtk_image_cell_accessible_get_image_position; - iface->get_image_size = gtk_image_cell_accessible_get_image_size; -} diff --git a/gtk/a11y/gtkimagecellaccessible.h b/gtk/a11y/gtkimagecellaccessible.h deleted file mode 100644 index 5ab1c22e6e..0000000000 --- a/gtk/a11y/gtkimagecellaccessible.h +++ /dev/null @@ -1,58 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_IMAGE_CELL_ACCESSIBLE_H__ -#define __GTK_IMAGE_CELL_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <atk/atk.h> -#include <gtk/a11y/gtkrenderercellaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_IMAGE_CELL_ACCESSIBLE (gtk_image_cell_accessible_get_type ()) -#define GTK_IMAGE_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_IMAGE_CELL_ACCESSIBLE, GtkImageCellAccessible)) -#define GTK_IMAGE_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_IMAGE_CELL_ACCESSIBLE, GtkImageCellAccessibleClass)) -#define GTK_IS_IMAGE_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_IMAGE_CELL_ACCESSIBLE)) -#define GTK_IS_IMAGE_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_IMAGE_CELL_ACCESSIBLE)) -#define GTK_IMAGE_CELL_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_IMAGE_CELL_ACCESSIBLE, GtkImageCellAccessibleClass)) - -typedef struct _GtkImageCellAccessible GtkImageCellAccessible; -typedef struct _GtkImageCellAccessibleClass GtkImageCellAccessibleClass; -typedef struct _GtkImageCellAccessiblePrivate GtkImageCellAccessiblePrivate; - -struct _GtkImageCellAccessible -{ - GtkRendererCellAccessible parent; - - GtkImageCellAccessiblePrivate *priv; -}; - -struct _GtkImageCellAccessibleClass -{ - GtkRendererCellAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_image_cell_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_IMAGE_CELL_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtklabelaccessible.c b/gtk/a11y/gtklabelaccessible.c deleted file mode 100644 index ce20a4fb5e..0000000000 --- a/gtk/a11y/gtklabelaccessible.c +++ /dev/null @@ -1,1192 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -/* Preamble {{{1 */ - -#include "config.h" - -#include <gtk/gtk.h> -#include <gtk/gtkpango.h> -#include "gtkwidgetprivate.h" -#include "gtklabelprivate.h" -#include "gtklabelaccessible.h" -#include "gtklabelaccessibleprivate.h" -#include "gtkstylecontextprivate.h" - -struct _GtkLabelAccessiblePrivate -{ - int cursor_position; - int selection_bound; - - GList *links; -}; - -typedef struct _GtkLabelAccessibleLink GtkLabelAccessibleLink; -typedef struct _GtkLabelAccessibleLinkClass GtkLabelAccessibleLinkClass; - -struct _GtkLabelAccessibleLink -{ - AtkHyperlink parent; - - GtkLabelAccessible *label; - int index; - gboolean focused; -}; - -struct _GtkLabelAccessibleLinkClass -{ - AtkHyperlinkClass parent_class; -}; - -static GtkLabelAccessibleLink *gtk_label_accessible_link_new (GtkLabelAccessible *label, - int idx); - -typedef struct _GtkLabelAccessibleLinkImpl GtkLabelAccessibleLinkImpl; -typedef struct _GtkLabelAccessibleLinkImplClass GtkLabelAccessibleLinkImplClass; - -struct _GtkLabelAccessibleLinkImpl -{ - AtkObject parent; - - GtkLabelAccessibleLink *link; -}; - -struct _GtkLabelAccessibleLinkImplClass -{ - AtkObjectClass parent_class; -}; - -/* GtkLabelAccessibleLinkImpl {{{1 */ - -GType _gtk_label_accessible_link_impl_get_type (void); - -static void atk_hyperlink_impl_interface_init (AtkHyperlinkImplIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkLabelAccessibleLinkImpl, _gtk_label_accessible_link_impl, ATK_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (ATK_TYPE_HYPERLINK_IMPL, atk_hyperlink_impl_interface_init)) - -static AtkHyperlink * -gtk_label_accessible_link_impl_get_hyperlink (AtkHyperlinkImpl *atk_impl) -{ - GtkLabelAccessibleLinkImpl *impl = (GtkLabelAccessibleLinkImpl *)atk_impl; - - return (AtkHyperlink *)g_object_ref (impl->link); -} - -static void -atk_hyperlink_impl_interface_init (AtkHyperlinkImplIface *iface) -{ - iface->get_hyperlink = gtk_label_accessible_link_impl_get_hyperlink; -} - -static AtkStateSet * -gtk_label_accessible_link_impl_ref_state_set (AtkObject *obj) -{ - AtkStateSet *state_set; - GtkLabelAccessibleLink *link; - GtkWidget *widget; - - link = ((GtkLabelAccessibleLinkImpl *)obj)->link; - - state_set = atk_object_ref_state_set (atk_object_get_parent (obj)); - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_object_get_parent (obj))); - if (widget) - { - if (gtk_widget_get_can_focus (widget)) - { - atk_state_set_add_state (state_set, ATK_STATE_FOCUSABLE); - if (_gtk_label_get_link_focused (GTK_LABEL (widget), link->index)) - atk_state_set_add_state (state_set, ATK_STATE_FOCUSED); - else - atk_state_set_remove_state (state_set, ATK_STATE_FOCUSED); - } - - if (_gtk_label_get_link_visited (GTK_LABEL (widget), link->index)) - atk_state_set_add_state (state_set, ATK_STATE_VISITED); - } - - return state_set; -} - -static void -_gtk_label_accessible_link_impl_init (GtkLabelAccessibleLinkImpl *impl) -{ - atk_object_set_role (ATK_OBJECT (impl), ATK_ROLE_LINK); -} - -static void -_gtk_label_accessible_link_impl_finalize (GObject *obj) -{ - GtkLabelAccessibleLinkImpl *impl = (GtkLabelAccessibleLinkImpl *)obj; - - g_object_unref (impl->link); - - G_OBJECT_CLASS (_gtk_label_accessible_link_impl_parent_class)->finalize (obj); -} - -static void -_gtk_label_accessible_link_impl_class_init (GtkLabelAccessibleLinkImplClass *class) -{ - GObjectClass *object_class = G_OBJECT_CLASS (class); - AtkObjectClass *atk_obj_class = ATK_OBJECT_CLASS (class); - - object_class->finalize = _gtk_label_accessible_link_impl_finalize; - atk_obj_class->ref_state_set = gtk_label_accessible_link_impl_ref_state_set; -} - -/* 'Public' API {{{2 */ - -static GtkLabelAccessibleLinkImpl * -gtk_label_accessible_link_impl_new (GtkLabelAccessible *label, - int idx) -{ - GtkLabelAccessibleLinkImpl *impl; - - impl = g_object_new (_gtk_label_accessible_link_impl_get_type (), NULL); - impl->link = gtk_label_accessible_link_new (label, idx); - atk_object_set_parent (ATK_OBJECT (impl), ATK_OBJECT (label)); - - return impl; -} - -/* GtkLabelAccessibleLink {{{1 */ - -GType _gtk_label_accessible_link_get_type (void); - -static void atk_action_interface_init (AtkActionIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkLabelAccessibleLink, _gtk_label_accessible_link, ATK_TYPE_HYPERLINK, - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)) - -static char * -gtk_label_accessible_link_get_uri (AtkHyperlink *atk_link, - int i) -{ - GtkLabelAccessibleLink *link = (GtkLabelAccessibleLink *)atk_link; - GtkWidget *widget; - const char *uri; - - g_return_val_if_fail (i == 0, NULL); - - if (link->label == NULL) - return NULL; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (link->label)); - uri = _gtk_label_get_link_uri (GTK_LABEL (widget), link->index); - - return g_strdup (uri); -} - -static int -gtk_label_accessible_link_get_n_anchors (AtkHyperlink *atk_link) -{ - return 1; -} - -static gboolean -gtk_label_accessible_link_is_valid (AtkHyperlink *atk_link) -{ - return TRUE; -} - -static AtkObject * -gtk_label_accessible_link_get_object (AtkHyperlink *atk_link, - int i) -{ - GtkLabelAccessibleLink *link = (GtkLabelAccessibleLink *)atk_link; - - g_return_val_if_fail (i == 0, NULL); - - return ATK_OBJECT (link->label); -} - -static int -gtk_label_accessible_link_get_start_index (AtkHyperlink *atk_link) -{ - GtkLabelAccessibleLink *link = (GtkLabelAccessibleLink *)atk_link; - GtkWidget *widget; - int start, end; - - if (link->label == NULL) - return 0; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (link->label)); - _gtk_label_get_link_extent (GTK_LABEL (widget), link->index, &start, &end); - - return start; -} - -static int -gtk_label_accessible_link_get_end_index (AtkHyperlink *atk_link) -{ - GtkLabelAccessibleLink *link = (GtkLabelAccessibleLink *)atk_link; - GtkWidget *widget; - int start, end; - - if (link->label == NULL) - return 0; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (link->label)); - _gtk_label_get_link_extent (GTK_LABEL (widget), link->index, &start, &end); - - return end; -} - -static void -_gtk_label_accessible_link_init (GtkLabelAccessibleLink *link) -{ -} - -static void -_gtk_label_accessible_link_class_init (GtkLabelAccessibleLinkClass *class) -{ - AtkHyperlinkClass *atk_link_class = ATK_HYPERLINK_CLASS (class); - - atk_link_class->get_uri = gtk_label_accessible_link_get_uri; - atk_link_class->get_n_anchors = gtk_label_accessible_link_get_n_anchors; - atk_link_class->is_valid = gtk_label_accessible_link_is_valid; - atk_link_class->get_object = gtk_label_accessible_link_get_object; - atk_link_class->get_start_index = gtk_label_accessible_link_get_start_index; - atk_link_class->get_end_index = gtk_label_accessible_link_get_end_index; -} - -/* 'Public' API {{{2 */ - -static GtkLabelAccessibleLink * -gtk_label_accessible_link_new (GtkLabelAccessible *label, - int idx) -{ - GtkLabelAccessibleLink *link; - - link = g_object_new (_gtk_label_accessible_link_get_type (), NULL); - link->label = label; - link->index = idx; - - return link; -} - -/* AtkAction implementation {{{2 */ - -static gboolean -gtk_label_accessible_link_do_action (AtkAction *action, - int i) -{ - GtkLabelAccessibleLink *link = (GtkLabelAccessibleLink *)action; - GtkWidget *widget; - - if (i != 0) - return FALSE; - - if (link->label == NULL) - return FALSE; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (link->label)); - if (widget == NULL) - return FALSE; - - if (!gtk_widget_is_sensitive (widget) || !gtk_widget_get_visible (widget)) - return FALSE; - - _gtk_label_activate_link (GTK_LABEL (widget), link->index); - - return TRUE; -} - -static int -gtk_label_accessible_link_get_n_actions (AtkAction *action) -{ - return 1; -} - -static const char * -gtk_label_accessible_link_get_name (AtkAction *action, - int i) -{ - if (i != 0) - return NULL; - - return "activate"; -} - -static void -atk_action_interface_init (AtkActionIface *iface) -{ - iface->do_action = gtk_label_accessible_link_do_action; - iface->get_n_actions = gtk_label_accessible_link_get_n_actions; - iface->get_name = gtk_label_accessible_link_get_name; -} - -/* GtkLabelAccessible {{{1 */ - -static void atk_text_interface_init (AtkTextIface *iface); -static void atk_hypertext_interface_init (AtkHypertextIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkLabelAccessible, gtk_label_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_ADD_PRIVATE (GtkLabelAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_HYPERTEXT, atk_hypertext_interface_init)) - -static void -gtk_label_accessible_init (GtkLabelAccessible *label) -{ - label->priv = gtk_label_accessible_get_instance_private (label); -} - -static void -gtk_label_accessible_initialize (AtkObject *obj, - gpointer data) -{ - GtkWidget *widget; - - ATK_OBJECT_CLASS (gtk_label_accessible_parent_class)->initialize (obj, data); - - widget = GTK_WIDGET (data); - - _gtk_label_accessible_update_links (GTK_LABEL (widget)); - - /* Check whether ancestor of GtkLabel is a GtkButton - * and if so set accessible parent for GtkLabelAccessible - */ - while (widget != NULL) - { - widget = gtk_widget_get_parent (widget); - if (GTK_IS_BUTTON (widget)) - { - atk_object_set_parent (obj, gtk_widget_get_accessible (widget)); - break; - } - } - - obj->role = ATK_ROLE_LABEL; -} - -static gboolean -check_for_selection_change (GtkLabelAccessible *accessible, - GtkLabel *label) -{ - gboolean ret_val = FALSE; - int start, end; - - if (gtk_label_get_selection_bounds (label, &start, &end)) - { - if (end != accessible->priv->cursor_position || - start != accessible->priv->selection_bound) - ret_val = TRUE; - } - else - { - ret_val = (accessible->priv->cursor_position != accessible->priv->selection_bound); - } - - accessible->priv->cursor_position = end; - accessible->priv->selection_bound = start; - - return ret_val; -} - -/* atkobject.h */ - -static AtkStateSet * -gtk_label_accessible_ref_state_set (AtkObject *accessible) -{ - AtkStateSet *state_set; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return NULL; - - state_set = ATK_OBJECT_CLASS (gtk_label_accessible_parent_class)->ref_state_set (accessible); - atk_state_set_add_state (state_set, ATK_STATE_MULTI_LINE); - - return state_set; -} - -static AtkRelationSet * -gtk_label_accessible_ref_relation_set (AtkObject *obj) -{ - GtkWidget *widget; - AtkRelationSet *relation_set; - - g_return_val_if_fail (GTK_IS_LABEL_ACCESSIBLE (obj), NULL); - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - relation_set = ATK_OBJECT_CLASS (gtk_label_accessible_parent_class)->ref_relation_set (obj); - - if (!atk_relation_set_contains (relation_set, ATK_RELATION_LABEL_FOR)) - { - /* Get the mnemonic widget. - * The relation set is not updated if the mnemonic widget is changed - */ - GtkWidget *mnemonic_widget; - - mnemonic_widget = gtk_label_get_mnemonic_widget (GTK_LABEL (widget)); - - if (mnemonic_widget) - { - AtkObject *accessible_array[1]; - AtkRelation* relation; - - accessible_array[0] = gtk_widget_get_accessible (mnemonic_widget); - relation = atk_relation_new (accessible_array, 1, - ATK_RELATION_LABEL_FOR); - atk_relation_set_add (relation_set, relation); - /* - * Unref the relation so that it is not leaked. - */ - g_object_unref (relation); - } - } - return relation_set; -} - -static const char * -gtk_label_accessible_get_name (AtkObject *accessible) -{ - const char *name; - - g_return_val_if_fail (GTK_IS_LABEL_ACCESSIBLE (accessible), NULL); - - name = ATK_OBJECT_CLASS (gtk_label_accessible_parent_class)->get_name (accessible); - if (name != NULL) - return name; - else - { - /* - * Get the text on the label - */ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return NULL; - - g_return_val_if_fail (GTK_IS_LABEL (widget), NULL); - - return gtk_label_get_text (GTK_LABEL (widget)); - } -} - -static int -gtk_label_accessible_get_n_children (AtkObject *obj) -{ - GtkLabelAccessible *accessible = GTK_LABEL_ACCESSIBLE (obj); - - return g_list_length (accessible->priv->links); -} - -static AtkObject * -gtk_label_accessible_ref_child (AtkObject *obj, - int idx) -{ - GtkLabelAccessible *accessible = GTK_LABEL_ACCESSIBLE (obj); - AtkObject *child; - - child = g_list_nth_data (accessible->priv->links, idx); - - if (child) - g_object_ref (child); - - return child; -} - -static void clear_links (GtkLabelAccessible *accessible); - -static void -gtk_label_accessible_finalize (GObject *obj) -{ - GtkLabelAccessible *accessible = GTK_LABEL_ACCESSIBLE (obj); - - clear_links (accessible); - - G_OBJECT_CLASS (gtk_label_accessible_parent_class)->finalize (obj); -} - -static void -gtk_label_accessible_class_init (GtkLabelAccessibleClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - object_class->finalize = gtk_label_accessible_finalize; - - class->get_name = gtk_label_accessible_get_name; - class->ref_state_set = gtk_label_accessible_ref_state_set; - class->ref_relation_set = gtk_label_accessible_ref_relation_set; - class->initialize = gtk_label_accessible_initialize; - - class->get_n_children = gtk_label_accessible_get_n_children; - class->ref_child = gtk_label_accessible_ref_child; -} - -/* 'Public' API {{{2 */ - - -void -_gtk_label_accessible_selection_bound_changed (GtkLabel *label) -{ - AtkObject *obj; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (label)); - if (obj == NULL) - return; - - if (check_for_selection_change (GTK_LABEL_ACCESSIBLE (obj), label)) - g_signal_emit_by_name (obj, "text-selection-changed"); -} - -void -_gtk_label_accessible_cursor_position_changed (GtkLabel *label) -{ - AtkObject *obj; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (label)); - if (obj == NULL) - return; - - g_signal_emit_by_name (obj, "text-caret-moved", _gtk_label_get_cursor_position (label)); - - if (check_for_selection_change (GTK_LABEL_ACCESSIBLE (obj), label)) - g_signal_emit_by_name (obj, "text-selection-changed"); -} - -void -_gtk_label_accessible_text_deleted (GtkLabel *label) -{ - AtkObject *obj; - const char *text; - guint length; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (label)); - if (obj == NULL) - return; - - text = gtk_label_get_text (label); - length = g_utf8_strlen (text, -1); - if (length > 0) - g_signal_emit_by_name (obj, "text-changed::delete", 0, length); -} - -void -_gtk_label_accessible_text_inserted (GtkLabel *label) -{ - AtkObject *obj; - const char *text; - guint length; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (label)); - if (obj == NULL) - return; - - text = gtk_label_get_text (label); - length = g_utf8_strlen (text, -1); - if (length > 0) - g_signal_emit_by_name (obj, "text-changed::insert", 0, length); - - if (obj->name == NULL) - /* The label has changed so notify a change in accessible-name */ - g_object_notify (G_OBJECT (obj), "accessible-name"); - - g_signal_emit_by_name (obj, "visible-data-changed"); -} - -static void -clear_links (GtkLabelAccessible *accessible) -{ - GList *l; - int i; - GtkLabelAccessibleLinkImpl *impl; - - for (l = accessible->priv->links, i = 0; l; l = l->next, i++) - { - impl = l->data; - g_signal_emit_by_name (accessible, "children-changed::remove", i, impl, NULL); - atk_object_set_parent (ATK_OBJECT (impl), NULL); - impl->link->label = NULL; - } - g_list_free_full (accessible->priv->links, g_object_unref); - accessible->priv->links = NULL; -} - -static void -create_links (GtkLabelAccessible *accessible) -{ - GtkWidget *widget; - int n, i; - GtkLabelAccessibleLinkImpl *impl; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - - n = _gtk_label_get_n_links (GTK_LABEL (widget)); - for (i = 0; i < n; i++) - { - impl = gtk_label_accessible_link_impl_new (accessible, i); - accessible->priv->links = g_list_append (accessible->priv->links, impl); - g_signal_emit_by_name (accessible, "children-changed::add", i, impl, NULL); - } -} - -void -_gtk_label_accessible_update_links (GtkLabel *label) -{ - AtkObject *obj; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (label)); - if (obj == NULL) - return; - - clear_links (GTK_LABEL_ACCESSIBLE (obj)); - create_links (GTK_LABEL_ACCESSIBLE (obj)); -} - -void -_gtk_label_accessible_focus_link_changed (GtkLabel *label) -{ - AtkObject *obj; - GtkLabelAccessible *accessible; - GList *l; - GtkLabelAccessibleLinkImpl *impl; - gboolean focused; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (label)); - if (obj == NULL) - return; - - accessible = GTK_LABEL_ACCESSIBLE (obj); - - for (l = accessible->priv->links; l; l = l->next) - { - impl = l->data; - focused = _gtk_label_get_link_focused (label, impl->link->index); - if (impl->link->focused != focused) - { - impl->link->focused = focused; - atk_object_notify_state_change (ATK_OBJECT (impl), ATK_STATE_FOCUSED, focused); - } - } -} - -/* AtkText implementation {{{2 */ - -static char * -gtk_label_accessible_get_text (AtkText *atk_text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - const char *text; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - if (widget == NULL) - return NULL; - - text = gtk_label_get_text (GTK_LABEL (widget)); - - if (text) - { - guint length; - const char *start, *end; - - length = g_utf8_strlen (text, -1); - if (end_pos < 0 || end_pos > length) - end_pos = length; - if (start_pos > length) - start_pos = length; - if (end_pos <= start_pos) - return g_strdup (""); - start = g_utf8_offset_to_pointer (text, start_pos); - end = g_utf8_offset_to_pointer (start, end_pos - start_pos); - return g_strndup (start, end - start); - } - - return NULL; -} - -static char * -gtk_label_accessible_get_text_before_offset (AtkText *text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - return _gtk_pango_get_text_before (gtk_label_get_layout (GTK_LABEL (widget)), - boundary_type, offset, - start_offset, end_offset); -} - -static char * -gtk_label_accessible_get_text_at_offset (AtkText *text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - return _gtk_pango_get_text_at (gtk_label_get_layout (GTK_LABEL (widget)), - boundary_type, offset, - start_offset, end_offset); -} - -static char * -gtk_label_accessible_get_text_after_offset (AtkText *text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - return _gtk_pango_get_text_after (gtk_label_get_layout (GTK_LABEL (widget)), - boundary_type, offset, - start_offset, end_offset); -} - -static int -gtk_label_accessible_get_character_count (AtkText *atk_text) -{ - GtkWidget *widget; - const char *text; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - if (widget == NULL) - return 0; - - text = gtk_label_get_text (GTK_LABEL (widget)); - - if (text) - return g_utf8_strlen (text, -1); - - return 0; -} - -static int -gtk_label_accessible_get_caret_offset (AtkText *text) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return -1; - - /* Non-selectable labels cannot have a caret. */ - if (!gtk_label_get_selectable (GTK_LABEL (widget))) - return -1; - - return _gtk_label_get_cursor_position (GTK_LABEL (widget)); -} - -static gboolean -gtk_label_accessible_set_caret_offset (AtkText *text, - int offset) -{ - GtkWidget *widget; - GtkLabel *label; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - label = GTK_LABEL (widget); - - if (!gtk_label_get_selectable (label)) - return FALSE; - - gtk_label_select_region (label, offset, offset); - - return TRUE; -} - -static int -gtk_label_accessible_get_n_selections (AtkText *text) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return 0; - - if (gtk_label_get_selection_bounds (GTK_LABEL (widget), NULL, NULL)) - return 1; - - return 0; -} - -static char * -gtk_label_accessible_get_selection (AtkText *atk_text, - int selection_num, - int *start_pos, - int *end_pos) -{ - GtkWidget *widget; - GtkLabel *label; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - if (widget == NULL) - return NULL; - - if (selection_num != 0) - return NULL; - - label = GTK_LABEL (widget); - - if (gtk_label_get_selection_bounds (label, start_pos, end_pos)) - { - const char *text; - - text = gtk_label_get_text (label); - - if (text) - return g_utf8_substring (text, *start_pos, *end_pos); - } - - return NULL; -} - -static gboolean -gtk_label_accessible_add_selection (AtkText *text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkLabel *label; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - label = GTK_LABEL (widget); - - if (!gtk_label_get_selectable (label)) - return FALSE; - - if (!gtk_label_get_selection_bounds (label, &start, &end)) - { - gtk_label_select_region (label, start_pos, end_pos); - return TRUE; - } - else - return FALSE; -} - -static gboolean -gtk_label_accessible_remove_selection (AtkText *text, - int selection_num) -{ - GtkWidget *widget; - GtkLabel *label; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - if (selection_num != 0) - return FALSE; - - label = GTK_LABEL (widget); - - if (!gtk_label_get_selectable (label)) - return FALSE; - - if (gtk_label_get_selection_bounds (label, &start, &end)) - { - gtk_label_select_region (label, end, end); - return TRUE; - } - else - return FALSE; -} - -static gboolean -gtk_label_accessible_set_selection (AtkText *text, - int selection_num, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkLabel *label; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - if (selection_num != 0) - return FALSE; - - label = GTK_LABEL (widget); - - if (!gtk_label_get_selectable (label)) - return FALSE; - - if (gtk_label_get_selection_bounds (label, &start, &end)) - { - gtk_label_select_region (label, start_pos, end_pos); - return TRUE; - } - else - return FALSE; -} - -static void -gtk_label_accessible_get_character_extents (AtkText *text, - int offset, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coords) -{ - GtkWidget *widget; - GtkLabel *label; - PangoRectangle char_rect; - const char *label_text; - int index, x_layout, y_layout; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - label = GTK_LABEL (widget); - - gtk_label_get_layout_offsets (label, &x_layout, &y_layout); - label_text = gtk_label_get_text (label); - index = g_utf8_offset_to_pointer (label_text, offset) - label_text; - pango_layout_index_to_pos (gtk_label_get_layout (label), index, &char_rect); - pango_extents_to_pixels (&char_rect, NULL); - - *x = x_layout + char_rect.x; - *y = y_layout + char_rect.y; - *width = char_rect.width; - *height = char_rect.height; -} - -static int -gtk_label_accessible_get_offset_at_point (AtkText *atk_text, - int x, - int y, - AtkCoordType coords) -{ - GtkWidget *widget; - GtkLabel *label; - const char *text; - int index, x_layout, y_layout; - int x_local, y_local; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - if (widget == NULL) - return -1; - - label = GTK_LABEL (widget); - - gtk_label_get_layout_offsets (label, &x_layout, &y_layout); - - x_local = x - x_layout; - y_local = y - y_layout; - - if (!pango_layout_xy_to_index (gtk_label_get_layout (label), - x_local * PANGO_SCALE, - y_local * PANGO_SCALE, - &index, NULL)) - { - if (x_local < 0 || y_local < 0) - index = 0; - else - index = -1; - } - - if (index != -1) - { - text = gtk_label_get_text (label); - return g_utf8_pointer_to_offset (text, text + index); - } - - return -1; -} - -static AtkAttributeSet * -add_attribute (AtkAttributeSet *attributes, - AtkTextAttribute attr, - const char *value) -{ - AtkAttribute *at; - - at = g_new (AtkAttribute, 1); - at->name = g_strdup (atk_text_attribute_get_name (attr)); - at->value = g_strdup (value); - - return g_slist_prepend (attributes, at); -} - -static AtkAttributeSet* -gtk_label_accessible_get_run_attributes (AtkText *text, - int offset, - int *start_offset, - int *end_offset) -{ - GtkWidget *widget; - AtkAttributeSet *attributes; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - attributes = NULL; - attributes = add_attribute (attributes, ATK_TEXT_ATTR_DIRECTION, - atk_text_attribute_get_value (ATK_TEXT_ATTR_DIRECTION, - gtk_widget_get_direction (widget))); - attributes = _gtk_pango_get_run_attributes (attributes, - gtk_label_get_layout (GTK_LABEL (widget)), - offset, - start_offset, - end_offset); - - return attributes; -} - -static AtkAttributeSet * -gtk_label_accessible_get_default_attributes (AtkText *text) -{ - GtkWidget *widget; - AtkAttributeSet *attributes; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - attributes = NULL; - attributes = add_attribute (attributes, ATK_TEXT_ATTR_DIRECTION, - atk_text_attribute_get_value (ATK_TEXT_ATTR_DIRECTION, - gtk_widget_get_direction (widget))); - attributes = _gtk_pango_get_default_attributes (attributes, - gtk_label_get_layout (GTK_LABEL (widget))); - attributes = _gtk_style_context_get_attributes (attributes, - gtk_widget_get_style_context (widget)); - - return attributes; -} - -static gunichar -gtk_label_accessible_get_character_at_offset (AtkText *atk_text, - int offset) -{ - GtkWidget *widget; - const char *text; - char *index; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - if (widget == NULL) - return '\0'; - - text = gtk_label_get_text (GTK_LABEL (widget)); - if (offset >= g_utf8_strlen (text, -1)) - return '\0'; - - index = g_utf8_offset_to_pointer (text, offset); - - return g_utf8_get_char (index); -} - -static void -atk_text_interface_init (AtkTextIface *iface) -{ - iface->get_text = gtk_label_accessible_get_text; - iface->get_character_at_offset = gtk_label_accessible_get_character_at_offset; - iface->get_text_before_offset = gtk_label_accessible_get_text_before_offset; - iface->get_text_at_offset = gtk_label_accessible_get_text_at_offset; - iface->get_text_after_offset = gtk_label_accessible_get_text_after_offset; - iface->get_character_count = gtk_label_accessible_get_character_count; - iface->get_caret_offset = gtk_label_accessible_get_caret_offset; - iface->set_caret_offset = gtk_label_accessible_set_caret_offset; - iface->get_n_selections = gtk_label_accessible_get_n_selections; - iface->get_selection = gtk_label_accessible_get_selection; - iface->add_selection = gtk_label_accessible_add_selection; - iface->remove_selection = gtk_label_accessible_remove_selection; - iface->set_selection = gtk_label_accessible_set_selection; - iface->get_character_extents = gtk_label_accessible_get_character_extents; - iface->get_offset_at_point = gtk_label_accessible_get_offset_at_point; - iface->get_run_attributes = gtk_label_accessible_get_run_attributes; - iface->get_default_attributes = gtk_label_accessible_get_default_attributes; -} - -/* AtkHypertext implementation {{{2 */ - -static AtkHyperlink * -gtk_label_accessible_get_link (AtkHypertext *hypertext, - int idx) -{ - GtkLabelAccessible *label = GTK_LABEL_ACCESSIBLE (hypertext); - GtkLabelAccessibleLinkImpl *impl; - - impl = (GtkLabelAccessibleLinkImpl *)g_list_nth_data (label->priv->links, idx); - - if (impl) - return ATK_HYPERLINK (impl->link); - - return NULL; -} - -static int -gtk_label_accessible_get_n_links (AtkHypertext *hypertext) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (hypertext)); - - return _gtk_label_get_n_links (GTK_LABEL (widget)); -} - -static int -gtk_label_accessible_get_link_index (AtkHypertext *hypertext, - int char_index) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (hypertext)); - - return _gtk_label_get_link_at (GTK_LABEL (widget), char_index); -} - -static void -atk_hypertext_interface_init (AtkHypertextIface *iface) -{ - iface->get_link = gtk_label_accessible_get_link; - iface->get_n_links = gtk_label_accessible_get_n_links; - iface->get_link_index = gtk_label_accessible_get_link_index; -} - -/* vim:set foldmethod=marker expandtab: */ diff --git a/gtk/a11y/gtklabelaccessible.h b/gtk/a11y/gtklabelaccessible.h deleted file mode 100644 index 886d34cf2c..0000000000 --- a/gtk/a11y/gtklabelaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_LABEL_ACCESSIBLE_H__ -#define __GTK_LABEL_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_LABEL_ACCESSIBLE (gtk_label_accessible_get_type ()) -#define GTK_LABEL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_LABEL_ACCESSIBLE, GtkLabelAccessible)) -#define GTK_LABEL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_LABEL_ACCESSIBLE, GtkLabelAccessibleClass)) -#define GTK_IS_LABEL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_LABEL_ACCESSIBLE)) -#define GTK_IS_LABEL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_LABEL_ACCESSIBLE)) -#define GTK_LABEL_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_LABEL_ACCESSIBLE, GtkLabelAccessibleClass)) - -typedef struct _GtkLabelAccessible GtkLabelAccessible; -typedef struct _GtkLabelAccessibleClass GtkLabelAccessibleClass; -typedef struct _GtkLabelAccessiblePrivate GtkLabelAccessiblePrivate; - -struct _GtkLabelAccessible -{ - GtkWidgetAccessible parent; - - GtkLabelAccessiblePrivate *priv; -}; - -struct _GtkLabelAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_label_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_LABEL_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtklabelaccessibleprivate.h b/gtk/a11y/gtklabelaccessibleprivate.h deleted file mode 100644 index bd8e8ca0cb..0000000000 --- a/gtk/a11y/gtklabelaccessibleprivate.h +++ /dev/null @@ -1,34 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright (C) 2002, 2004 Anders Carlsson <andersca@gnu.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_LABEL_ACCESSIBLE_PRIVATE_H__ -#define __GTK_LABEL_ACCESSIBLE_PRIVATE_H__ - -#include <gtk/a11y/gtklabelaccessible.h> - -G_BEGIN_DECLS - -void _gtk_label_accessible_text_deleted (GtkLabel *label); -void _gtk_label_accessible_text_inserted (GtkLabel *label); -void _gtk_label_accessible_update_links (GtkLabel *label); -void _gtk_label_accessible_focus_link_changed (GtkLabel *label); -void _gtk_label_accessible_selection_bound_changed (GtkLabel *label); -void _gtk_label_accessible_cursor_position_changed (GtkLabel *label); - -G_END_DECLS - -#endif /* __GTK_LABEL_ACCESSIBLE_PRIVATE_H__ */ diff --git a/gtk/a11y/gtklevelbaraccessible.c b/gtk/a11y/gtklevelbaraccessible.c deleted file mode 100644 index cb25428710..0000000000 --- a/gtk/a11y/gtklevelbaraccessible.c +++ /dev/null @@ -1,178 +0,0 @@ -/* GAIL - The GNOME Accessibility Implementation Library - * Copyright 2001, 2002, 2003 Sun Microsystems Inc. - * Copyright 2013 SUSE LLC. - * - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtklevelbaraccessible.h" - -#include "gtklevelbar.h" - -#include <string.h> - -static void atk_value_interface_init (AtkValueIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkLevelBarAccessible, gtk_level_bar_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, atk_value_interface_init)) - -static void -on_value_changed (GObject *gobject, - GParamSpec *pspec, - gpointer user_data) -{ - GtkLevelBarAccessible *self = user_data; - - g_object_notify (G_OBJECT (self), "accessible-value"); -} - -static void -gtk_level_bar_accessible_initialize (AtkObject *object, - gpointer data) -{ - GtkLevelBar *level_bar = data; - - g_signal_connect (level_bar, "notify::value", G_CALLBACK (on_value_changed), object); -} - -static void -gtk_level_bar_accessible_class_init (GtkLevelBarAccessibleClass *klass) -{ - AtkObjectClass *object_class = ATK_OBJECT_CLASS (klass); - - object_class->initialize = gtk_level_bar_accessible_initialize; -} - -static void -gtk_level_bar_accessible_init (GtkLevelBarAccessible *self) -{ - ATK_OBJECT (self)->role = ATK_ROLE_LEVEL_BAR; -} - -static void -gtk_level_bar_accessible_get_current_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkLevelBar *level_bar; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - level_bar = GTK_LEVEL_BAR (widget); - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_level_bar_get_value (level_bar)); -} - -static void -gtk_level_bar_accessible_get_maximum_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkLevelBar *level_bar; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - level_bar = GTK_LEVEL_BAR (widget); - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_level_bar_get_max_value (level_bar)); -} - -static void -gtk_level_bar_accessible_get_minimum_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkLevelBar *level_bar; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - level_bar = GTK_LEVEL_BAR (widget); - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_level_bar_get_min_value (level_bar)); -} - -static gboolean -gtk_level_bar_accessible_set_current_value (AtkValue *obj, - const GValue *value) -{ - GtkWidget *widget; - GtkLevelBar *level_bar; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - level_bar = GTK_LEVEL_BAR (widget); - - gtk_level_bar_set_value (level_bar, g_value_get_double (value)); - - return TRUE; -} - -static void -gtk_level_bar_accessible_get_value_and_text (AtkValue *obj, - double *value, - char **text) -{ - GtkWidget *widget; - GtkLevelBar *level_bar; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - level_bar = GTK_LEVEL_BAR (widget); - - *value = gtk_level_bar_get_value (level_bar); - *text = NULL; -} - -static AtkRange * -gtk_level_bar_accessible_get_range (AtkValue *obj) -{ - GtkWidget *widget; - GtkLevelBar *level_bar; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - level_bar = GTK_LEVEL_BAR (widget); - - return atk_range_new (gtk_level_bar_get_min_value (level_bar), - gtk_level_bar_get_max_value (level_bar), - NULL); -} - -static void -gtk_level_bar_accessible_set_value (AtkValue *obj, - const double value) -{ - GtkWidget *widget; - GtkLevelBar *level_bar; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - level_bar = GTK_LEVEL_BAR (widget); - - gtk_level_bar_set_value (level_bar, value); -} - -static void -atk_value_interface_init (AtkValueIface *iface) -{ - iface->get_current_value = gtk_level_bar_accessible_get_current_value; - iface->get_maximum_value = gtk_level_bar_accessible_get_maximum_value; - iface->get_minimum_value = gtk_level_bar_accessible_get_minimum_value; - iface->set_current_value = gtk_level_bar_accessible_set_current_value; - - iface->get_value_and_text = gtk_level_bar_accessible_get_value_and_text; - iface->get_range = gtk_level_bar_accessible_get_range; - iface->set_value = gtk_level_bar_accessible_set_value; -} diff --git a/gtk/a11y/gtklevelbaraccessible.h b/gtk/a11y/gtklevelbaraccessible.h deleted file mode 100644 index be037610ba..0000000000 --- a/gtk/a11y/gtklevelbaraccessible.h +++ /dev/null @@ -1,58 +0,0 @@ -/* GAIL - The GNOME Accessibility Implementation Library - * Copyright 2001 Sun Microsystems Inc. - * Copyright 2013 SUSE LLC. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_LEVEL_BAR_ACCESSIBLE_H__ -#define __GTK_LEVEL_BAR_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_LEVEL_BAR_ACCESSIBLE (gtk_level_bar_accessible_get_type ()) -#define GTK_LEVEL_BAR_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_LEVEL_BAR_ACCESSIBLE, GtkLevelBarAccessible)) -#define GTK_LEVEL_BAR_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_LEVEL_BAR_ACCESSIBLE, GtkLevelBarAccessibleClass)) -#define GTK_IS_LEVEL_BAR_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_LEVEL_BAR_ACCESSIBLE)) -#define GTK_IS_LEVEL_BAR_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_LEVEL_BAR_ACCESSIBLE)) -#define GTK_LEVEL_BAR_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_LEVEL_BAR_ACCESSIBLE, GtkLevelBarAccessibleClass)) - -typedef struct _GtkLevelBarAccessible GtkLevelBarAccessible; -typedef struct _GtkLevelBarAccessibleClass GtkLevelBarAccessibleClass; -typedef struct _GtkLevelBarAccessiblePrivate GtkLevelBarAccessiblePrivate; - -struct _GtkLevelBarAccessible -{ - GtkWidgetAccessible parent; - - GtkLevelBarAccessiblePrivate *priv; -}; - -struct _GtkLevelBarAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_level_bar_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_LEVEL_BAR_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtklinkbuttonaccessible.c b/gtk/a11y/gtklinkbuttonaccessible.c deleted file mode 100644 index f5738a78d3..0000000000 --- a/gtk/a11y/gtklinkbuttonaccessible.c +++ /dev/null @@ -1,234 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2011 Red Hat, 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <gtk/gtk.h> -#include "gtklinkbuttonaccessible.h" - -typedef struct _GtkLinkButtonAccessibleLink GtkLinkButtonAccessibleLink; -typedef struct _GtkLinkButtonAccessibleLinkClass GtkLinkButtonAccessibleLinkClass; - -struct _GtkLinkButtonAccessiblePrivate -{ - AtkHyperlink *link; -}; - -struct _GtkLinkButtonAccessibleLink -{ - AtkHyperlink parent; - - GtkLinkButtonAccessible *button; -}; - -struct _GtkLinkButtonAccessibleLinkClass -{ - AtkHyperlinkClass parent_class; -}; - -static void atk_action_interface_init (AtkActionIface *iface); - -GType _gtk_link_button_accessible_link_get_type (void); - -G_DEFINE_TYPE_WITH_CODE (GtkLinkButtonAccessibleLink, _gtk_link_button_accessible_link, ATK_TYPE_HYPERLINK, - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)) - -static AtkHyperlink * -gtk_link_button_accessible_link_new (GtkLinkButtonAccessible *button) -{ - GtkLinkButtonAccessibleLink *l; - - l = g_object_new (_gtk_link_button_accessible_link_get_type (), NULL); - l->button = button; - - return ATK_HYPERLINK (l); -} - -static char * -gtk_link_button_accessible_link_get_uri (AtkHyperlink *atk_link, - int i) -{ - GtkLinkButtonAccessibleLink *l = (GtkLinkButtonAccessibleLink *)atk_link; - GtkWidget *widget; - const char *uri; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (l->button)); - uri = gtk_link_button_get_uri (GTK_LINK_BUTTON (widget)); - - return g_strdup (uri); -} - -static int -gtk_link_button_accessible_link_get_n_anchors (AtkHyperlink *atk_link) -{ - return 1; -} - -static gboolean -gtk_link_button_accessible_link_is_valid (AtkHyperlink *atk_link) -{ - return TRUE; -} - -static AtkObject * -gtk_link_button_accessible_link_get_object (AtkHyperlink *atk_link, - int i) -{ - GtkLinkButtonAccessibleLink *l = (GtkLinkButtonAccessibleLink *)atk_link; - - return ATK_OBJECT (l->button); -} - -static void -_gtk_link_button_accessible_link_init (GtkLinkButtonAccessibleLink *l) -{ -} - -static void -_gtk_link_button_accessible_link_class_init (GtkLinkButtonAccessibleLinkClass *class) -{ - AtkHyperlinkClass *atk_link_class = ATK_HYPERLINK_CLASS (class); - - atk_link_class->get_uri = gtk_link_button_accessible_link_get_uri; - atk_link_class->get_n_anchors = gtk_link_button_accessible_link_get_n_anchors; - atk_link_class->is_valid = gtk_link_button_accessible_link_is_valid; - atk_link_class->get_object = gtk_link_button_accessible_link_get_object; -} - -static gboolean -gtk_link_button_accessible_link_do_action (AtkAction *action, - int i) -{ - GtkLinkButtonAccessibleLink *l = (GtkLinkButtonAccessibleLink *)action; - GtkWidget *widget; - - widget = GTK_WIDGET (l->button); - if (widget == NULL) - return FALSE; - - if (i != 0) - return FALSE; - - if (!gtk_widget_is_sensitive (widget) || !gtk_widget_get_visible (widget)) - return FALSE; - - g_signal_emit_by_name (widget, "clicked"); - - return TRUE; -} - -static int -gtk_link_button_accessible_link_get_n_actions (AtkAction *action) -{ - return 1; -} - -static const char * -gtk_link_button_accessible_link_get_name (AtkAction *action, - int i) -{ - if (i != 0) - return NULL; - - return "activate"; -} - -static void -atk_action_interface_init (AtkActionIface *iface) -{ - iface->do_action = gtk_link_button_accessible_link_do_action; - iface->get_n_actions = gtk_link_button_accessible_link_get_n_actions; - iface->get_name = gtk_link_button_accessible_link_get_name; -} - -static gboolean -activate_link (GtkLinkButton *button, - AtkHyperlink *atk_link) -{ - g_signal_emit_by_name (atk_link, "link-activated"); - - return FALSE; -} - -static AtkHyperlink * -gtk_link_button_accessible_get_hyperlink (AtkHyperlinkImpl *impl) -{ - GtkLinkButtonAccessible *button = GTK_LINK_BUTTON_ACCESSIBLE (impl); - - if (!button->priv->link) - { - button->priv->link = gtk_link_button_accessible_link_new (button); - g_signal_connect (gtk_accessible_get_widget (GTK_ACCESSIBLE (button)), - "activate-link", G_CALLBACK (activate_link), button->priv->link); - } - - return g_object_ref (button->priv->link); -} - -static void atk_hypertext_impl_interface_init (AtkHyperlinkImplIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkLinkButtonAccessible, gtk_link_button_accessible, GTK_TYPE_BUTTON_ACCESSIBLE, - G_ADD_PRIVATE (GtkLinkButtonAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_HYPERLINK_IMPL, atk_hypertext_impl_interface_init)) - -static void -gtk_link_button_accessible_init (GtkLinkButtonAccessible *button) -{ - button->priv = gtk_link_button_accessible_get_instance_private (button); -} - -static void -gtk_link_button_accessible_finalize (GObject *object) -{ - GtkLinkButtonAccessible *button = GTK_LINK_BUTTON_ACCESSIBLE (object); - - if (button->priv->link) - g_object_unref (button->priv->link); - - G_OBJECT_CLASS (gtk_link_button_accessible_parent_class)->finalize (object); -} - -static AtkStateSet * -gtk_link_button_ref_state_set (AtkObject *accessible) -{ - AtkStateSet *state_set; - GtkWidget *widget; - - state_set = ATK_OBJECT_CLASS (gtk_link_button_accessible_parent_class)->ref_state_set (accessible); - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget != NULL) - { - if (gtk_link_button_get_visited (GTK_LINK_BUTTON (widget))) - atk_state_set_add_state (state_set, ATK_STATE_VISITED); - } - - return state_set; -} - -static void -gtk_link_button_accessible_class_init (GtkLinkButtonAccessibleClass *klass) -{ - G_OBJECT_CLASS (klass)->finalize = gtk_link_button_accessible_finalize; - ATK_OBJECT_CLASS (klass)->ref_state_set = gtk_link_button_ref_state_set; -} - -static void -atk_hypertext_impl_interface_init (AtkHyperlinkImplIface *iface) -{ - iface->get_hyperlink = gtk_link_button_accessible_get_hyperlink; -} diff --git a/gtk/a11y/gtklinkbuttonaccessible.h b/gtk/a11y/gtklinkbuttonaccessible.h deleted file mode 100644 index afa52f9851..0000000000 --- a/gtk/a11y/gtklinkbuttonaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2011 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_LINK_BUTTON_ACCESSIBLE_H__ -#define __GTK_LINK_BUTTON_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkbuttonaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_LINK_BUTTON_ACCESSIBLE (gtk_link_button_accessible_get_type ()) -#define GTK_LINK_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_LINK_BUTTON_ACCESSIBLE, GtkLinkButtonAccessible)) -#define GTK_LINK_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_LINK_BUTTON_ACCESSIBLE, GtkLinkButtonAccessibleClass)) -#define GTK_IS_LINK_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_LINK_BUTTON_ACCESSIBLE)) -#define GTK_IS_LINK_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_LINK_BUTTON_ACCESSIBLE)) -#define GTK_LINK_BUTTON_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_LINK_BUTTON_ACCESSIBLE, GtkLinkButtonAccessibleClass)) - -typedef struct _GtkLinkButtonAccessible GtkLinkButtonAccessible; -typedef struct _GtkLinkButtonAccessibleClass GtkLinkButtonAccessibleClass; -typedef struct _GtkLinkButtonAccessiblePrivate GtkLinkButtonAccessiblePrivate; - -struct _GtkLinkButtonAccessible -{ - GtkButtonAccessible parent; - - GtkLinkButtonAccessiblePrivate *priv; -}; - -struct _GtkLinkButtonAccessibleClass -{ - GtkButtonAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_link_button_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_LINK_BUTTON_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtklistboxaccessible.c b/gtk/a11y/gtklistboxaccessible.c deleted file mode 100644 index 6ee7801337..0000000000 --- a/gtk/a11y/gtklistboxaccessible.c +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright (C) 2013 Red Hat, 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtklistboxaccessibleprivate.h" - -#include "gtk/gtklistbox.h" - -static void atk_selection_interface_init (AtkSelectionIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkListBoxAccessible, gtk_list_box_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_SELECTION, atk_selection_interface_init)) - -static void -gtk_list_box_accessible_init (GtkListBoxAccessible *accessible) -{ -} - -static void -gtk_list_box_accessible_initialize (AtkObject *obj, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_list_box_accessible_parent_class)->initialize (obj, data); - - obj->role = ATK_ROLE_LIST_BOX; -} - -static AtkStateSet* -gtk_list_box_accessible_ref_state_set (AtkObject *obj) -{ - AtkStateSet *state_set; - GtkWidget *widget; - - state_set = ATK_OBJECT_CLASS (gtk_list_box_accessible_parent_class)->ref_state_set (obj); - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - - if (widget != NULL) - atk_state_set_add_state (state_set, ATK_STATE_MANAGES_DESCENDANTS); - - return state_set; -} - -static void -gtk_list_box_accessible_class_init (GtkListBoxAccessibleClass *klass) -{ - AtkObjectClass *object_class = ATK_OBJECT_CLASS (klass); - - object_class->initialize = gtk_list_box_accessible_initialize; - object_class->ref_state_set = gtk_list_box_accessible_ref_state_set; -} - -static gboolean -gtk_list_box_accessible_add_selection (AtkSelection *selection, - int idx) -{ - GtkWidget *box; - GtkListBoxRow *row; - - box = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (box == NULL) - return FALSE; - - row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (box), idx); - if (row) - { - gtk_list_box_select_row (GTK_LIST_BOX (box), row); - return TRUE; - } - return FALSE; -} - -static gboolean -gtk_list_box_accessible_remove_selection (AtkSelection *selection, - int idx) -{ - GtkWidget *box; - GtkListBoxRow *row; - - box = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (box == NULL) - return FALSE; - - row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (box), idx); - if (row) - { - gtk_list_box_unselect_row (GTK_LIST_BOX (box), row); - return TRUE; - } - return FALSE; -} - -static gboolean -gtk_list_box_accessible_clear_selection (AtkSelection *selection) -{ - GtkWidget *box; - - box = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (box == NULL) - return FALSE; - - gtk_list_box_unselect_all (GTK_LIST_BOX (box)); - return TRUE; -} - -static gboolean -gtk_list_box_accessible_select_all (AtkSelection *selection) -{ - GtkWidget *box; - - box = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (box == NULL) - return FALSE; - - gtk_list_box_select_all (GTK_LIST_BOX (box)); - return TRUE; -} - -typedef struct -{ - int idx; - GtkWidget *row; -} FindSelectedData; - -static void -find_selected_row (GtkListBox *box, - GtkListBoxRow *row, - gpointer data) -{ - FindSelectedData *d = data; - - if (d->idx == 0) - { - if (d->row == NULL) - d->row = GTK_WIDGET (row); - } - else - d->idx -= 1; -} - -static AtkObject * -gtk_list_box_accessible_ref_selection (AtkSelection *selection, - int idx) -{ - GtkWidget *box; - AtkObject *accessible; - FindSelectedData data; - - box = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (box == NULL) - return NULL; - - data.idx = idx; - data.row = NULL; - gtk_list_box_selected_foreach (GTK_LIST_BOX (box), find_selected_row, &data); - - if (data.row == NULL) - return NULL; - - accessible = gtk_widget_get_accessible (data.row); - g_object_ref (accessible); - return accessible; -} - -static void -count_selected (GtkListBox *box, - GtkListBoxRow *row, - gpointer data) -{ - int *count = data; - *count += 1; -} - -static int -gtk_list_box_accessible_get_selection_count (AtkSelection *selection) -{ - GtkWidget *box; - int count; - - box = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (box == NULL) - return 0; - - count = 0; - gtk_list_box_selected_foreach (GTK_LIST_BOX (box), count_selected, &count); - - return count; -} - -static gboolean -gtk_list_box_accessible_is_child_selected (AtkSelection *selection, - int idx) -{ - GtkWidget *box; - GtkListBoxRow *row; - - box = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (box == NULL) - return FALSE; - - row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (box), idx); - - return gtk_list_box_row_is_selected (row); -} - -static void atk_selection_interface_init (AtkSelectionIface *iface) -{ - iface->add_selection = gtk_list_box_accessible_add_selection; - iface->remove_selection = gtk_list_box_accessible_remove_selection; - iface->clear_selection = gtk_list_box_accessible_clear_selection; - iface->ref_selection = gtk_list_box_accessible_ref_selection; - iface->get_selection_count = gtk_list_box_accessible_get_selection_count; - iface->is_child_selected = gtk_list_box_accessible_is_child_selected; - iface->select_all_selection = gtk_list_box_accessible_select_all; -} - -void -_gtk_list_box_accessible_selection_changed (GtkListBox *box) -{ - AtkObject *accessible; - accessible = gtk_widget_get_accessible (GTK_WIDGET (box)); - g_signal_emit_by_name (accessible, "selection-changed"); -} - -void -_gtk_list_box_accessible_update_cursor (GtkListBox *box, - GtkListBoxRow *row) -{ - AtkObject *accessible; - AtkObject *descendant; - accessible = gtk_widget_get_accessible (GTK_WIDGET (box)); - descendant = row ? gtk_widget_get_accessible (GTK_WIDGET (row)) : NULL; - g_signal_emit_by_name (accessible, "active-descendant-changed", descendant); -} diff --git a/gtk/a11y/gtklistboxaccessible.h b/gtk/a11y/gtklistboxaccessible.h deleted file mode 100644 index 2c168e9791..0000000000 --- a/gtk/a11y/gtklistboxaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2013 Red Hat, 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, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_LIST_BOX_ACCESSIBLE_H__ -#define __GTK_LIST_BOX_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_LIST_BOX_ACCESSIBLE (gtk_list_box_accessible_get_type ()) -#define GTK_LIST_BOX_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_LIST_BOX_ACCESSIBLE, GtkListBoxAccessible)) -#define GTK_LIST_BOX_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_LIST_BOX_ACCESSIBLE, GtkListBoxAccessibleClass)) -#define GTK_IS_LIST_BOX_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_LIST_BOX_ACCESSIBLE)) -#define GTK_IS_LIST_BOX_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_LIST_BOX_ACCESSIBLE)) -#define GTK_LIST_BOX_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_LIST_BOX_ACCESSIBLE, GtkListBoxAccessibleClass)) - -typedef struct _GtkListBoxAccessible GtkListBoxAccessible; -typedef struct _GtkListBoxAccessibleClass GtkListBoxAccessibleClass; -typedef struct _GtkListBoxAccessiblePrivate GtkListBoxAccessiblePrivate; - -struct _GtkListBoxAccessible -{ - GtkWidgetAccessible parent; - - GtkListBoxAccessiblePrivate *priv; -}; - -struct _GtkListBoxAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_list_box_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_LIST_BOX_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtklistboxaccessibleprivate.h b/gtk/a11y/gtklistboxaccessibleprivate.h deleted file mode 100644 index 2ea0de7982..0000000000 --- a/gtk/a11y/gtklistboxaccessibleprivate.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2013 Red Hat, 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, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_LIST_BOX_ACCESSIBLE_PRIVATE_H__ -#define __GTK_LIST_BOX_ACCESSIBLE_PRIVATE_H__ - -#include <gtk/a11y/gtklistboxaccessible.h> - -#include <gtk/gtklistbox.h> - -G_BEGIN_DECLS - -void _gtk_list_box_accessible_update_cursor (GtkListBox *box, - GtkListBoxRow *row); -void _gtk_list_box_accessible_selection_changed (GtkListBox *box); - -G_END_DECLS - -#endif /* __GTK_LIST_BOX_ACCESSIBLE_PRIVATE_H__ */ diff --git a/gtk/a11y/gtklistboxrowaccessible.c b/gtk/a11y/gtklistboxrowaccessible.c deleted file mode 100644 index 6a37efb1a5..0000000000 --- a/gtk/a11y/gtklistboxrowaccessible.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2013 Red Hat, 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtklistboxrowaccessible.h" - -#include "gtk/gtklistbox.h" - - -G_DEFINE_TYPE (GtkListBoxRowAccessible, gtk_list_box_row_accessible, GTK_TYPE_WIDGET_ACCESSIBLE) - -static void -gtk_list_box_row_accessible_init (GtkListBoxRowAccessible *accessible) -{ -} - -static void -gtk_list_box_row_accessible_initialize (AtkObject *obj, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_list_box_row_accessible_parent_class)->initialize (obj, data); - - obj->role = ATK_ROLE_LIST_ITEM; -} - -static AtkStateSet* -gtk_list_box_row_accessible_ref_state_set (AtkObject *obj) -{ - AtkStateSet *state_set; - GtkWidget *widget, *parent; - - state_set = ATK_OBJECT_CLASS (gtk_list_box_row_accessible_parent_class)->ref_state_set (obj); - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget != NULL) - { - parent = gtk_widget_get_parent (widget); - if (parent != NULL && - GTK_IS_LIST_BOX (parent) && - gtk_list_box_get_selection_mode (GTK_LIST_BOX (parent)) != GTK_SELECTION_NONE) - atk_state_set_add_state (state_set, ATK_STATE_SELECTABLE); - - if (gtk_list_box_row_is_selected (GTK_LIST_BOX_ROW (widget))) - atk_state_set_add_state (state_set, ATK_STATE_SELECTED); - } - - return state_set; -} - -static void -gtk_list_box_row_accessible_class_init (GtkListBoxRowAccessibleClass *klass) -{ - AtkObjectClass *object_class = ATK_OBJECT_CLASS (klass); - - object_class->initialize = gtk_list_box_row_accessible_initialize; - object_class->ref_state_set = gtk_list_box_row_accessible_ref_state_set; -} diff --git a/gtk/a11y/gtklistboxrowaccessible.h b/gtk/a11y/gtklistboxrowaccessible.h deleted file mode 100644 index 47a561c0c5..0000000000 --- a/gtk/a11y/gtklistboxrowaccessible.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2013 Red Hat, 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, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_LIST_BOX_ROW_ACCESSIBLE_H__ -#define __GTK_LIST_BOX_ROW_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE (gtk_list_box_row_accessible_get_type ()) -#define GTK_LIST_BOX_ROW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE, GtkListBoxRowAccessible)) -#define GTK_LIST_BOX_ROW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE, GtkListBoxRowAccessibleClass)) -#define GTK_IS_LIST_BOX_ROW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE)) -#define GTK_IS_LIST_BOX_ROW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE)) -#define GTK_LIST_BOX_ROW_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE, GtkListBoxRowAccessibleClass)) - -typedef struct _GtkListBoxRowAccessible GtkListBoxRowAccessible; -typedef struct _GtkListBoxRowAccessibleClass GtkListBoxRowAccessibleClass; - -struct _GtkListBoxRowAccessible -{ - GtkWidgetAccessible parent; -}; - -struct _GtkListBoxRowAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_list_box_row_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_LIST_BOX_ROW_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtklockbuttonaccessible.c b/gtk/a11y/gtklockbuttonaccessible.c deleted file mode 100644 index a7b878838c..0000000000 --- a/gtk/a11y/gtklockbuttonaccessible.c +++ /dev/null @@ -1,63 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtklockbuttonaccessibleprivate.h" - -#include "gtk/gtklockbuttonprivate.h" -#include "gtk/gtkwidgetprivate.h" - -G_DEFINE_TYPE (GtkLockButtonAccessible, gtk_lock_button_accessible, GTK_TYPE_BUTTON_ACCESSIBLE) - -static const char * -gtk_lock_button_accessible_get_name (AtkObject *obj) -{ - GtkLockButton *lockbutton; - - lockbutton = GTK_LOCK_BUTTON (gtk_accessible_get_widget (GTK_ACCESSIBLE (obj))); - if (lockbutton == NULL) - return NULL; - - return _gtk_lock_button_get_current_text (lockbutton); -} - -static void -gtk_lock_button_accessible_class_init (GtkLockButtonAccessibleClass *klass) -{ - AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass); - - atk_object_class->get_name = gtk_lock_button_accessible_get_name; -} - -static void -gtk_lock_button_accessible_init (GtkLockButtonAccessible *lockbutton) -{ -} - -void -_gtk_lock_button_accessible_name_changed (GtkLockButton *lockbutton) -{ - AtkObject *obj; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (lockbutton)); - if (obj == NULL) - return; - - g_object_notify (G_OBJECT (obj), "accessible-name"); -} - diff --git a/gtk/a11y/gtklockbuttonaccessible.h b/gtk/a11y/gtklockbuttonaccessible.h deleted file mode 100644 index d6b4510c7d..0000000000 --- a/gtk/a11y/gtklockbuttonaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_LOCK_BUTTON_ACCESSIBLE_H__ -#define __GTK_LOCK_BUTTON_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkbuttonaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_LOCK_BUTTON_ACCESSIBLE (gtk_lock_button_accessible_get_type ()) -#define GTK_LOCK_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_LOCK_BUTTON_ACCESSIBLE, GtkLockButtonAccessible)) -#define GTK_LOCK_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_LOCK_BUTTON_ACCESSIBLE, GtkLockButtonAccessibleClass)) -#define GTK_IS_LOCK_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_LOCK_BUTTON_ACCESSIBLE)) -#define GTK_IS_LOCK_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_LOCK_BUTTON_ACCESSIBLE)) -#define GTK_LOCK_BUTTON_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_LOCK_BUTTON_ACCESSIBLE, GtkLockButtonAccessibleClass)) - -typedef struct _GtkLockButtonAccessible GtkLockButtonAccessible; -typedef struct _GtkLockButtonAccessibleClass GtkLockButtonAccessibleClass; -typedef struct _GtkLockButtonAccessiblePrivate GtkLockButtonAccessiblePrivate; - -struct _GtkLockButtonAccessible -{ - GtkButtonAccessible parent; - - GtkLockButtonAccessiblePrivate *priv; -}; - -struct _GtkLockButtonAccessibleClass -{ - GtkButtonAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_lock_button_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_LOCK_BUTTON_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtklockbuttonaccessibleprivate.h b/gtk/a11y/gtklockbuttonaccessibleprivate.h deleted file mode 100644 index 6ba82e425a..0000000000 --- a/gtk/a11y/gtklockbuttonaccessibleprivate.h +++ /dev/null @@ -1,31 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_LOCK_BUTTON_ACCESSIBLE_PRIVATE_H__ -#define __GTK_LOCK_BUTTON_ACCESSIBLE_PRIVATE_H__ - -#include <gtk/a11y/gtklockbuttonaccessible.h> - -#include <gtk/gtklockbutton.h> - -G_BEGIN_DECLS - -void _gtk_lock_button_accessible_name_changed (GtkLockButton *lockbutton); - -G_END_DECLS - -#endif /* __GTK_LOCK_BUTTON_ACCESSIBLE_PRIVATE_H__ */ diff --git a/gtk/a11y/gtkmenubuttonaccessible.c b/gtk/a11y/gtkmenubuttonaccessible.c deleted file mode 100644 index cdd2792e06..0000000000 --- a/gtk/a11y/gtkmenubuttonaccessible.c +++ /dev/null @@ -1,117 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <gtk/gtk.h> -#include <glib/gi18n-lib.h> -#include "gtkmenubuttonaccessible.h" - - -G_DEFINE_TYPE (GtkMenuButtonAccessible, gtk_menu_button_accessible, GTK_TYPE_WIDGET_ACCESSIBLE) - -static void -gtk_menu_button_accessible_initialize (AtkObject *accessible, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_menu_button_accessible_parent_class)->initialize (accessible, data); - - accessible->role = ATK_ROLE_TOGGLE_BUTTON; -} - -static int -gtk_menu_button_accessible_get_n_children (AtkObject* obj) -{ - GtkWidget *widget; - int count = 0; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return count; - - return count; -} - -static AtkObject * -gtk_menu_button_accessible_ref_child (AtkObject *obj, - int i) -{ - AtkObject *accessible = NULL; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - return accessible; -} - -static const char * -gtk_menu_button_accessible_get_name (AtkObject *obj) -{ - const char *name = NULL; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - name = ATK_OBJECT_CLASS (gtk_menu_button_accessible_parent_class)->get_name (obj); - if (name != NULL) - return name; - - return _("Menu"); -} - -static AtkStateSet * -gtk_menu_button_accessible_ref_state_set (AtkObject *obj) -{ - AtkStateSet *state_set; - GtkWidget *widget; - GtkWidget *button; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - button = gtk_widget_get_first_child (widget); - - state_set = ATK_OBJECT_CLASS (gtk_menu_button_accessible_parent_class)->ref_state_set (obj); - - atk_state_set_add_state (state_set, ATK_STATE_FOCUSABLE); - if (gtk_widget_has_focus (button)) - atk_state_set_add_state (state_set, ATK_STATE_FOCUSED); - - return state_set; -} - -static void -gtk_menu_button_accessible_class_init (GtkMenuButtonAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->get_name = gtk_menu_button_accessible_get_name; - class->initialize = gtk_menu_button_accessible_initialize; - class->get_n_children = gtk_menu_button_accessible_get_n_children; - class->ref_child = gtk_menu_button_accessible_ref_child; - class->ref_state_set = gtk_menu_button_accessible_ref_state_set; -} - -static void -gtk_menu_button_accessible_init (GtkMenuButtonAccessible *menu_button) -{ -} diff --git a/gtk/a11y/gtkmenubuttonaccessible.h b/gtk/a11y/gtkmenubuttonaccessible.h deleted file mode 100644 index 17168a2eb7..0000000000 --- a/gtk/a11y/gtkmenubuttonaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_MENU_BUTTON_ACCESSIBLE_H__ -#define __GTK_MENU_BUTTON_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_MENU_BUTTON_ACCESSIBLE (gtk_menu_button_accessible_get_type ()) -#define GTK_MENU_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_MENU_BUTTON_ACCESSIBLE, GtkMenuButtonAccessible)) -#define GTK_MENU_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_MENU_BUTTON_ACCESSIBLE, GtkMenuButtonAccessibleClass)) -#define GTK_IS_MENU_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_MENU_BUTTON_ACCESSIBLE)) -#define GTK_IS_MENU_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_MENU_BUTTON_ACCESSIBLE)) -#define GTK_MENU_BUTTON_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_MENU_BUTTON_ACCESSIBLE, GtkMenuButtonAccessibleClass)) - -typedef struct _GtkMenuButtonAccessible GtkMenuButtonAccessible; -typedef struct _GtkMenuButtonAccessibleClass GtkMenuButtonAccessibleClass; -typedef struct _GtkMenuButtonAccessiblePrivate GtkMenuButtonAccessiblePrivate; - -struct _GtkMenuButtonAccessible -{ - GtkWidgetAccessible parent; - - GtkMenuButtonAccessiblePrivate *priv; -}; - -struct _GtkMenuButtonAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_menu_button_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_MENU_BUTTON_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtknotebookaccessible.c b/gtk/a11y/gtknotebookaccessible.c deleted file mode 100644 index 9fb930cd4e..0000000000 --- a/gtk/a11y/gtknotebookaccessible.c +++ /dev/null @@ -1,312 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtknotebookaccessibleprivate.h" - -#include "gtknotebookpageaccessible.h" -#include "gtknotebook.h" - -#include <string.h> - -struct _GtkNotebookAccessiblePrivate -{ - /* - * page_cache maintains a list of pre-ref'd Notebook Pages. - * This cache is queried by gtk_notebook_accessible_ref_child(). - * If the page is found in the list then a new page does not - * need to be created - */ - GHashTable * pages; - int selected_page; -}; - -static void atk_selection_interface_init (AtkSelectionIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkNotebookAccessible, gtk_notebook_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_ADD_PRIVATE (GtkNotebookAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_SELECTION, atk_selection_interface_init)) - -static void -create_notebook_page_accessible (GtkNotebookAccessible *accessible, - GtkNotebook *notebook, - GtkWidget *child, - int page_num) -{ - AtkObject *obj; - - obj = gtk_notebook_page_accessible_new (accessible, child); - g_hash_table_insert (accessible->priv->pages, child, obj); - atk_object_set_parent (obj, ATK_OBJECT (accessible)); - g_signal_emit_by_name (accessible, "children-changed::add", page_num, obj, NULL); -} - -static void -page_added_cb (GtkNotebook *notebook, - GtkWidget *child, - guint page_num, - gpointer data) -{ - AtkObject *atk_obj; - GtkNotebookAccessible *accessible; - - atk_obj = gtk_widget_get_accessible (GTK_WIDGET (notebook)); - accessible = GTK_NOTEBOOK_ACCESSIBLE (atk_obj); - create_notebook_page_accessible (accessible, notebook, child, page_num); -} - -static void -page_removed_cb (GtkNotebook *notebook, - GtkWidget *widget, - guint page_num, - gpointer data) -{ - GtkNotebookAccessible *accessible; - AtkObject *obj; - - accessible = GTK_NOTEBOOK_ACCESSIBLE (gtk_widget_get_accessible (GTK_WIDGET (notebook))); - - obj = g_hash_table_lookup (accessible->priv->pages, widget); - g_return_if_fail (obj); - g_signal_emit_by_name (accessible, "children-changed::remove", - page_num, obj, NULL); - gtk_notebook_page_accessible_invalidate (GTK_NOTEBOOK_PAGE_ACCESSIBLE (obj)); - g_hash_table_remove (accessible->priv->pages, widget); -} - - -static void -gtk_notebook_accessible_initialize (AtkObject *obj, - gpointer data) -{ - GtkNotebookAccessible *accessible; - GtkNotebook *notebook; - int i; - - ATK_OBJECT_CLASS (gtk_notebook_accessible_parent_class)->initialize (obj, data); - - accessible = GTK_NOTEBOOK_ACCESSIBLE (obj); - notebook = GTK_NOTEBOOK (data); - for (i = 0; i < gtk_notebook_get_n_pages (notebook); i++) - { - create_notebook_page_accessible (accessible, - notebook, - gtk_notebook_get_nth_page (notebook, i), - i); - } - accessible->priv->selected_page = gtk_notebook_get_current_page (notebook); - - g_signal_connect (notebook, "page-added", - G_CALLBACK (page_added_cb), NULL); - g_signal_connect (notebook, "page-removed", - G_CALLBACK (page_removed_cb), NULL); - - obj->role = ATK_ROLE_PAGE_TAB_LIST; -} - -static void -gtk_notebook_accessible_finalize (GObject *object) -{ - GtkNotebookAccessible *accessible = GTK_NOTEBOOK_ACCESSIBLE (object); - - g_hash_table_destroy (accessible->priv->pages); - - G_OBJECT_CLASS (gtk_notebook_accessible_parent_class)->finalize (object); -} - -static AtkObject * -gtk_notebook_accessible_ref_child (AtkObject *obj, - int i) -{ - AtkObject *child; - GtkNotebookAccessible *accessible; - GtkNotebook *notebook; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - accessible = GTK_NOTEBOOK_ACCESSIBLE (obj); - notebook = GTK_NOTEBOOK (widget); - - child = g_hash_table_lookup (accessible->priv->pages, - gtk_notebook_get_nth_page (notebook, i)); - /* can return NULL when i >= n_children */ - - if (child) - g_object_ref (child); - - return child; -} - -void -gtk_notebook_accessible_update_page (GtkNotebookAccessible *self, - int page_num) -{ - GtkNotebookAccessiblePrivate *priv = gtk_notebook_accessible_get_instance_private (self); - AtkObject *atk_obj = ATK_OBJECT (self); - int old_page_num = priv->selected_page; - - priv->selected_page = page_num; - - /* Notify SELECTED state change for old and new page */ - if (page_num != old_page_num) - { - AtkObject *child; - - if (old_page_num != -1) - { - child = gtk_notebook_accessible_ref_child (atk_obj, old_page_num); - if (child != NULL) - { - atk_object_notify_state_change (child, ATK_STATE_SELECTED, FALSE); - g_object_unref (child); - } - } - - child = gtk_notebook_accessible_ref_child (atk_obj, page_num); - if (child != NULL) - { - atk_object_notify_state_change (child, ATK_STATE_SELECTED, TRUE); - g_object_unref (child); - } - - g_signal_emit_by_name (atk_obj, "selection-changed"); - g_signal_emit_by_name (atk_obj, "visible-data-changed"); - } -} - -/* - * GtkNotebook only supports the selection of one page at a time. - * Selecting a page unselects any previous selection, so this - * changes the current selection instead of adding to it. - */ -static gboolean -gtk_notebook_accessible_add_selection (AtkSelection *selection, - int i) -{ - GtkNotebook *notebook; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return FALSE; - - notebook = GTK_NOTEBOOK (widget); - gtk_notebook_set_current_page (notebook, i); - return TRUE; -} - -static void -gtk_notebook_accessible_class_init (GtkNotebookAccessibleClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - gobject_class->finalize = gtk_notebook_accessible_finalize; - - class->ref_child = gtk_notebook_accessible_ref_child; - class->initialize = gtk_notebook_accessible_initialize; -} - -static void -gtk_notebook_accessible_init (GtkNotebookAccessible *notebook) -{ - notebook->priv = gtk_notebook_accessible_get_instance_private (notebook); - notebook->priv->pages = g_hash_table_new_full (g_direct_hash, - g_direct_equal, - NULL, - g_object_unref); - notebook->priv->selected_page = -1; -} - -static AtkObject * -gtk_notebook_accessible_ref_selection (AtkSelection *selection, - int i) -{ - AtkObject *accessible; - GtkWidget *widget; - GtkNotebook *notebook; - int pagenum; - - if (i != 0) - return NULL; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return NULL; - - notebook = GTK_NOTEBOOK (widget); - pagenum = gtk_notebook_get_current_page (notebook); - if (pagenum == -1) - return NULL; - accessible = gtk_notebook_accessible_ref_child (ATK_OBJECT (selection), pagenum); - - return accessible; -} - -/* Always return 1 because there can only be one page - * selected at any time - */ -static int -gtk_notebook_accessible_get_selection_count (AtkSelection *selection) -{ - GtkWidget *widget; - GtkNotebook *notebook; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return 0; - - notebook = GTK_NOTEBOOK (widget); - if (notebook == NULL || gtk_notebook_get_current_page (notebook) == -1) - return 0; - - return 1; -} - -static gboolean -gtk_notebook_accessible_is_child_selected (AtkSelection *selection, - int i) -{ - GtkWidget *widget; - GtkNotebook *notebook; - int pagenumber; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return FALSE; - - notebook = GTK_NOTEBOOK (widget); - pagenumber = gtk_notebook_get_current_page(notebook); - - if (pagenumber == i) - return TRUE; - - return FALSE; -} - -static void -atk_selection_interface_init (AtkSelectionIface *iface) -{ - iface->add_selection = gtk_notebook_accessible_add_selection; - iface->ref_selection = gtk_notebook_accessible_ref_selection; - iface->get_selection_count = gtk_notebook_accessible_get_selection_count; - iface->is_child_selected = gtk_notebook_accessible_is_child_selected; -} diff --git a/gtk/a11y/gtknotebookaccessible.h b/gtk/a11y/gtknotebookaccessible.h deleted file mode 100644 index bd34be6902..0000000000 --- a/gtk/a11y/gtknotebookaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_NOTEBOOK_ACCESSIBLE_H__ -#define __GTK_NOTEBOOK_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_NOTEBOOK_ACCESSIBLE (gtk_notebook_accessible_get_type ()) -#define GTK_NOTEBOOK_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_NOTEBOOK_ACCESSIBLE, GtkNotebookAccessible)) -#define GTK_NOTEBOOK_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_NOTEBOOK_ACCESSIBLE, GtkNotebookAccessibleClass)) -#define GTK_IS_NOTEBOOK_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_NOTEBOOK_ACCESSIBLE)) -#define GTK_IS_NOTEBOOK_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_NOTEBOOK_ACCESSIBLE)) -#define GTK_NOTEBOOK_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_NOTEBOOK_ACCESSIBLE, GtkNotebookAccessibleClass)) - -typedef struct _GtkNotebookAccessible GtkNotebookAccessible; -typedef struct _GtkNotebookAccessibleClass GtkNotebookAccessibleClass; -typedef struct _GtkNotebookAccessiblePrivate GtkNotebookAccessiblePrivate; - -struct _GtkNotebookAccessible -{ - GtkWidgetAccessible parent; - - GtkNotebookAccessiblePrivate *priv; -}; - -struct _GtkNotebookAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_notebook_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_NOTEBOOK_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtknotebookaccessibleprivate.h b/gtk/a11y/gtknotebookaccessibleprivate.h deleted file mode 100644 index 5e4ab3b9f5..0000000000 --- a/gtk/a11y/gtknotebookaccessibleprivate.h +++ /dev/null @@ -1,30 +0,0 @@ -/* gtknotebookaccessibleprivate.h: GtkNotebookAccessible private API - * - * Copyright 2020 GNOME Foundation - * - * SPDX-License-Identifier: LGPL-2.1-or-later - * - * 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.1 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, see <http://www.gnu.org/licenses/>. - */ - -#pragma once - -#include "gtknotebookaccessible.h" - -G_BEGIN_DECLS - -void gtk_notebook_accessible_update_page (GtkNotebookAccessible *self, - int page_num); - -G_END_DECLS diff --git a/gtk/a11y/gtknotebookpageaccessible.c b/gtk/a11y/gtknotebookpageaccessible.c deleted file mode 100644 index 0d8c37ce9e..0000000000 --- a/gtk/a11y/gtknotebookpageaccessible.c +++ /dev/null @@ -1,334 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <string.h> -#include <gtk/gtk.h> -#include "gtknotebookpageaccessible.h" - - -struct _GtkNotebookPageAccessiblePrivate -{ - GtkAccessible *notebook; - GtkWidget *child; -}; - -static void atk_component_interface_init (AtkComponentIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkNotebookPageAccessible, gtk_notebook_page_accessible, ATK_TYPE_OBJECT, - G_ADD_PRIVATE (GtkNotebookPageAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, atk_component_interface_init)) - - -static GtkWidget * -find_label_child (GtkWidget *widget) -{ - GtkWidget *child; - - for (child = gtk_widget_get_first_child (widget); - child != NULL; - child = gtk_widget_get_next_sibling (child)) - { - if (GTK_IS_LABEL (child)) - return child; - else - { - GtkWidget *w = find_label_child (child); - if (w) - return w; - } - } - - return NULL; -} - -static GtkWidget * -get_label_from_notebook_page (GtkNotebookPageAccessible *page) -{ - GtkWidget *child; - GtkNotebook *notebook; - - notebook = GTK_NOTEBOOK (gtk_accessible_get_widget (page->priv->notebook)); - if (!notebook) - return NULL; - - if (!gtk_notebook_get_show_tabs (notebook)) - return NULL; - - child = gtk_notebook_get_tab_label (notebook, page->priv->child); - - if (GTK_IS_LABEL (child)) - return child; - - return find_label_child (child); -} - -static const char * -gtk_notebook_page_accessible_get_name (AtkObject *accessible) -{ - GtkWidget *label; - - if (accessible->name != NULL) - return accessible->name; - - label = get_label_from_notebook_page (GTK_NOTEBOOK_PAGE_ACCESSIBLE (accessible)); - if (GTK_IS_LABEL (label)) - return gtk_label_get_text (GTK_LABEL (label)); - - return NULL; -} - -static AtkObject * -gtk_notebook_page_accessible_get_parent (AtkObject *accessible) -{ - GtkNotebookPageAccessible *page; - - page = GTK_NOTEBOOK_PAGE_ACCESSIBLE (accessible); - - return ATK_OBJECT (page->priv->notebook); -} - -static int -gtk_notebook_page_accessible_get_n_children (AtkObject *accessible) -{ - return 1; -} - -static AtkObject * -gtk_notebook_page_accessible_ref_child (AtkObject *accessible, - int i) -{ - AtkObject *child_obj; - GtkNotebookPageAccessible *page = NULL; - - if (i != 0) - return NULL; - - page = GTK_NOTEBOOK_PAGE_ACCESSIBLE (accessible); - if (!page->priv->child) - return NULL; - - child_obj = gtk_widget_get_accessible (page->priv->child); - g_object_ref (child_obj); - - return child_obj; -} - -static AtkStateSet * -gtk_notebook_page_accessible_ref_state_set (AtkObject *accessible) -{ - GtkNotebookPageAccessible *page = GTK_NOTEBOOK_PAGE_ACCESSIBLE (accessible); - AtkStateSet *state_set, *label_state_set, *merged_state_set; - AtkObject *atk_label; - GtkWidget *label; - AtkObject *selected; - - state_set = ATK_OBJECT_CLASS (gtk_notebook_page_accessible_parent_class)->ref_state_set (accessible); - - atk_state_set_add_state (state_set, ATK_STATE_SELECTABLE); - - selected = atk_selection_ref_selection (ATK_SELECTION (page->priv->notebook), 0); - if (selected) - { - if (selected == accessible) - atk_state_set_add_state (state_set, ATK_STATE_SELECTED); - - g_object_unref (selected); - } - - label = get_label_from_notebook_page (GTK_NOTEBOOK_PAGE_ACCESSIBLE (accessible)); - if (label) - { - atk_label = gtk_widget_get_accessible (label); - label_state_set = atk_object_ref_state_set (atk_label); - merged_state_set = atk_state_set_or_sets (state_set, label_state_set); - g_object_unref (label_state_set); - g_object_unref (state_set); - } - else - { - AtkObject *child; - - child = atk_object_ref_accessible_child (accessible, 0); - if (!child) - return state_set; - - merged_state_set = state_set; - state_set = atk_object_ref_state_set (child); - if (atk_state_set_contains_state (state_set, ATK_STATE_VISIBLE)) - { - atk_state_set_add_state (merged_state_set, ATK_STATE_VISIBLE); - if (atk_state_set_contains_state (state_set, ATK_STATE_ENABLED)) - atk_state_set_add_state (merged_state_set, ATK_STATE_ENABLED); - if (atk_state_set_contains_state (state_set, ATK_STATE_SHOWING)) - atk_state_set_add_state (merged_state_set, ATK_STATE_SHOWING); - - } - g_object_unref (state_set); - g_object_unref (child); - } - return merged_state_set; -} - -static int -gtk_notebook_page_accessible_get_index_in_parent (AtkObject *accessible) -{ - GtkNotebookPageAccessible *page; - - page = GTK_NOTEBOOK_PAGE_ACCESSIBLE (accessible); - if (!page->priv->child) - return -1; - - return gtk_notebook_page_num (GTK_NOTEBOOK (gtk_accessible_get_widget (page->priv->notebook)), - page->priv->child); -} - -static void -gtk_notebook_page_accessible_class_init (GtkNotebookPageAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->get_name = gtk_notebook_page_accessible_get_name; - class->get_parent = gtk_notebook_page_accessible_get_parent; - class->get_n_children = gtk_notebook_page_accessible_get_n_children; - class->ref_child = gtk_notebook_page_accessible_ref_child; - class->ref_state_set = gtk_notebook_page_accessible_ref_state_set; - class->get_index_in_parent = gtk_notebook_page_accessible_get_index_in_parent; -} - -static void -gtk_notebook_page_accessible_init (GtkNotebookPageAccessible *page) -{ - page->priv = gtk_notebook_page_accessible_get_instance_private (page); -} - -static void -notify_tab_label (GObject *object, - GParamSpec *pspec, - AtkObject *atk_obj) -{ - if (atk_obj->name == NULL) - g_object_notify (G_OBJECT (atk_obj), "accessible-name"); - g_signal_emit_by_name (atk_obj, "visible-data-changed"); -} - -AtkObject * -gtk_notebook_page_accessible_new (GtkNotebookAccessible *notebook, - GtkWidget *child) -{ - GObject *object; - AtkObject *atk_object; - GtkNotebookPageAccessible *page; - GtkNotebook *nb; - - g_return_val_if_fail (GTK_IS_NOTEBOOK_ACCESSIBLE (notebook), NULL); - g_return_val_if_fail (GTK_WIDGET (child), NULL); - - object = g_object_new (GTK_TYPE_NOTEBOOK_PAGE_ACCESSIBLE, NULL); - - page = GTK_NOTEBOOK_PAGE_ACCESSIBLE (object); - page->priv->notebook = GTK_ACCESSIBLE (notebook); - page->priv->child = child; - - atk_object = ATK_OBJECT (page); - atk_object->role = ATK_ROLE_PAGE_TAB; - atk_object->layer = ATK_LAYER_WIDGET; - - atk_object_set_parent (gtk_widget_get_accessible (child), atk_object); - nb = GTK_NOTEBOOK (gtk_accessible_get_widget (page->priv->notebook)); - - g_signal_connect (gtk_notebook_get_page (nb, child), - "notify::tab-label", - G_CALLBACK (notify_tab_label), page); - - return atk_object; -} - -void -gtk_notebook_page_accessible_invalidate (GtkNotebookPageAccessible *page) -{ - AtkObject *obj = ATK_OBJECT (page); - GtkWidget *notebook; - - notebook = gtk_accessible_get_widget (page->priv->notebook); - if (notebook) - g_signal_handlers_disconnect_by_func (notebook, notify_tab_label, page); - - atk_object_notify_state_change (obj, ATK_STATE_DEFUNCT, TRUE); - atk_object_set_parent (obj, NULL); - page->priv->notebook = NULL; - atk_object_set_parent (gtk_widget_get_accessible (page->priv->child), NULL); - page->priv->child = NULL; -} - -static AtkObject* -gtk_notebook_page_accessible_ref_accessible_at_point (AtkComponent *component, - int x, - int y, - AtkCoordType coord_type) -{ - /* There is only one child so we return it */ - AtkObject* child; - - child = atk_object_ref_accessible_child (ATK_OBJECT (component), 0); - - return child; -} - -static void -gtk_notebook_page_accessible_get_extents (AtkComponent *component, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coord_type) -{ - GtkWidget *label; - AtkObject *atk_label; - - label = get_label_from_notebook_page (GTK_NOTEBOOK_PAGE_ACCESSIBLE (component)); - if (!label) - { - AtkObject *child; - - *width = 0; - *height = 0; - - child = atk_object_ref_accessible_child (ATK_OBJECT (component), 0); - if (!child) - return; - - atk_component_get_extents (ATK_COMPONENT (child), x, y, NULL, NULL, - coord_type); - g_object_unref (child); - } - else - { - atk_label = gtk_widget_get_accessible (label); - atk_component_get_extents (ATK_COMPONENT (atk_label), - x, y, width, height, coord_type); - } -} - -static void -atk_component_interface_init (AtkComponentIface *iface) -{ - /* We use the default implementations for contains, get_position, get_size */ - iface->ref_accessible_at_point = gtk_notebook_page_accessible_ref_accessible_at_point; - iface->get_extents = gtk_notebook_page_accessible_get_extents; -} diff --git a/gtk/a11y/gtknotebookpageaccessible.h b/gtk/a11y/gtknotebookpageaccessible.h deleted file mode 100644 index dfa6d6df4a..0000000000 --- a/gtk/a11y/gtknotebookpageaccessible.h +++ /dev/null @@ -1,64 +0,0 @@ -/* GTK+ - accessibility implementations - * 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 Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_NOTEBOOK_PAGE_ACCESSIBLE_H__ -#define __GTK_NOTEBOOK_PAGE_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtknotebookaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_NOTEBOOK_PAGE_ACCESSIBLE (gtk_notebook_page_accessible_get_type ()) -#define GTK_NOTEBOOK_PAGE_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),GTK_TYPE_NOTEBOOK_PAGE_ACCESSIBLE, GtkNotebookPageAccessible)) -#define GTK_NOTEBOOK_PAGE_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_NOTEBOOK_PAGE_ACCESSIBLE, GtkNotebookPageAccessibleClass)) -#define GTK_IS_NOTEBOOK_PAGE_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_NOTEBOOK_PAGE_ACCESSIBLE)) -#define GTK_IS_NOTEBOOK_PAGE_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_NOTEBOOK_PAGE_ACCESSIBLE)) -#define GTK_NOTEBOOK_PAGE_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_NOTEBOOK_PAGE_ACCESSIBLE, GtkNotebookPageAccessibleClass)) - -typedef struct _GtkNotebookPageAccessible GtkNotebookPageAccessible; -typedef struct _GtkNotebookPageAccessibleClass GtkNotebookPageAccessibleClass; -typedef struct _GtkNotebookPageAccessiblePrivate GtkNotebookPageAccessiblePrivate; - -struct _GtkNotebookPageAccessible -{ - AtkObject parent; - - GtkNotebookPageAccessiblePrivate *priv; -}; - -struct _GtkNotebookPageAccessibleClass -{ - AtkObjectClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_notebook_page_accessible_get_type (void); - -GDK_AVAILABLE_IN_ALL -AtkObject *gtk_notebook_page_accessible_new (GtkNotebookAccessible *notebook, - GtkWidget *child); - -GDK_AVAILABLE_IN_ALL -void gtk_notebook_page_accessible_invalidate (GtkNotebookPageAccessible *page); - -G_END_DECLS - -#endif /* __GTK_NOTEBOOK_PAGE_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkpanedaccessible.c b/gtk/a11y/gtkpanedaccessible.c deleted file mode 100644 index 97793626ab..0000000000 --- a/gtk/a11y/gtkpanedaccessible.c +++ /dev/null @@ -1,200 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#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, GTK_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, atk_value_interface_init)) - -static void -gtk_paned_accessible_position_changed (GtkWidget *widget) -{ - 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, "notify::position", - G_CALLBACK (gtk_paned_accessible_position_changed), 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; - int 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; - int 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; - int 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; - int 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 -gtk_paned_accessible_get_value_and_text (AtkValue *obj, - double *value, - char **text) -{ - GtkWidget *widget; - GtkPaned *paned; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - paned = GTK_PANED (widget); - - *value = gtk_paned_get_position (paned); - *text = NULL; -} - -static AtkRange * -gtk_paned_accessible_get_range (AtkValue *obj) -{ - GtkWidget *widget; - int minimum_value; - int maximum_value; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - - g_object_get (widget, - "min-position", &minimum_value, - "max-position", &maximum_value, - NULL); - - return atk_range_new (minimum_value, maximum_value, NULL); -} - -static void -gtk_paned_accessible_set_value (AtkValue *obj, - const double value) -{ - GtkWidget *widget; - GtkPaned *paned; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - paned = GTK_PANED (widget); - - gtk_paned_set_position (paned, (int)(value + 0.5)); -} - -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; - - iface->get_value_and_text = gtk_paned_accessible_get_value_and_text; - iface->get_range = gtk_paned_accessible_get_range; - iface->set_value = gtk_paned_accessible_set_value; -} diff --git a/gtk/a11y/gtkpanedaccessible.h b/gtk/a11y/gtkpanedaccessible.h deleted file mode 100644 index a551b42e72..0000000000 --- a/gtk/a11y/gtkpanedaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_PANED_ACCESSIBLE_H__ -#define __GTK_PANED_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_PANED_ACCESSIBLE (gtk_paned_accessible_get_type ()) -#define GTK_PANED_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_PANED_ACCESSIBLE, GtkPanedAccessible)) -#define GTK_PANED_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_PANED_ACCESSIBLE, GtkPanedAccessibleClass)) -#define GTK_IS_PANED_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_PANED_ACCESSIBLE)) -#define GTK_IS_PANED_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PANED_ACCESSIBLE)) -#define GTK_PANED_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PANED_ACCESSIBLE, GtkPanedAccessibleClass)) - -typedef struct _GtkPanedAccessible GtkPanedAccessible; -typedef struct _GtkPanedAccessibleClass GtkPanedAccessibleClass; -typedef struct _GtkPanedAccessiblePrivate GtkPanedAccessiblePrivate; - -struct _GtkPanedAccessible -{ - GtkWidgetAccessible parent; - - GtkPanedAccessiblePrivate *priv; -}; - -struct _GtkPanedAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_paned_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_PANED_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkpasswordentryaccessible.c b/gtk/a11y/gtkpasswordentryaccessible.c deleted file mode 100644 index 350f681926..0000000000 --- a/gtk/a11y/gtkpasswordentryaccessible.c +++ /dev/null @@ -1,654 +0,0 @@ -/* gtkpasswordentryaccessible.c: A GtkWidgetAccessible for GtkPasswordEntry - * - * Copyright 2020 GNOME Foundation - * - * SPDX-License-Identifier: LGPL-2.1-or-later - * - * 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.1 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtkpasswordentryaccessibleprivate.h" - -#include "gtkeditable.h" -#include "gtkimage.h" -#include "gtkintl.h" -#include "gtklabel.h" -#include "gtkpango.h" -#include "gtkpasswordentryprivate.h" -#include "gtkstylecontextprivate.h" -#include "gtktextprivate.h" - -struct _GtkPasswordEntryAccessible -{ - GtkWidgetAccessible parent_instance; - - int cursor_position; - int selection_bound; -}; - -static void atk_editable_text_interface_init (AtkEditableTextIface *iface); -static void atk_text_interface_init (AtkTextIface *iface); -static void atk_action_interface_init (AtkActionIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkPasswordEntryAccessible, gtk_password_entry_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_EDITABLE_TEXT, atk_editable_text_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)) - -static inline GtkText * -get_text_widget (GtkAccessible *accessible) -{ - GtkWidget *widget = gtk_accessible_get_widget (accessible); - - if (widget == NULL) - return NULL; - - GtkPasswordEntry *entry = GTK_PASSWORD_ENTRY (widget); - - return gtk_password_entry_get_text_widget (entry); -} - -static gunichar -gtk_password_entry_accessible_get_character_at_offset (AtkText *atk_text, - int offset) -{ - GtkText *text; - char *contents, *index; - gunichar result; - - result = '\0'; - - text = get_text_widget (GTK_ACCESSIBLE (atk_text)); - if (text == NULL) - return 0; - - if (!gtk_text_get_visibility (text)) - return result; - - contents = gtk_text_get_display_text (text, 0, -1); - if (offset < g_utf8_strlen (contents, -1)) - { - index = g_utf8_offset_to_pointer (contents, offset); - result = g_utf8_get_char (index); - g_free (contents); - } - - return result; -} - -static int -gtk_password_entry_accessible_get_caret_offset (AtkText *atk_text) -{ - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - - if (widget == NULL) - return -1; - - int cursor_position = 0; - gboolean result = gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), NULL, &cursor_position); - if (!result) - return -1; - - return cursor_position; -} - -static gboolean -gtk_password_entry_accessible_set_caret_offset (AtkText *atk_text, - int offset) -{ - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - if (widget == NULL) - return FALSE; - - gtk_editable_set_position (GTK_EDITABLE (widget), offset); - - return TRUE; -} - -static int -gtk_password_entry_accessible_get_character_count (AtkText *atk_text) -{ - GtkText *text = get_text_widget (GTK_ACCESSIBLE (atk_text)); - if (text == NULL) - return 0; - - char *display_text = gtk_text_get_display_text (text, 0, -1); - - int char_count = 0; - if (display_text) - { - char_count = g_utf8_strlen (display_text, -1); - g_free (display_text); - } - - return char_count; -} - -static int -gtk_password_entry_accessible_get_offset_at_point (AtkText *atk_text, - int x, - int y, - AtkCoordType coords) -{ - GtkText *text = get_text_widget (GTK_ACCESSIBLE (atk_text)); - int index, x_layout, y_layout; - int x_local, y_local; - glong offset; - - if (text == NULL) - return 1; - - gtk_text_get_layout_offsets (text, &x_layout, &y_layout); - - x_local = x - x_layout; - y_local = y - y_layout; - - if (!pango_layout_xy_to_index (gtk_text_get_layout (text), - x_local * PANGO_SCALE, - y_local * PANGO_SCALE, - &index, NULL)) - { - if (x_local < 0 || y_local < 0) - index = 0; - else - index = -1; - } - - offset = -1; - if (index != -1) - { - char *entry_text = gtk_text_get_display_text (text, 0, -1); - offset = g_utf8_pointer_to_offset (entry_text, entry_text + index); - g_free (entry_text); - } - - return offset; -} - -static void -atk_text_interface_init (AtkTextIface *iface) -{ - iface->get_character_at_offset = gtk_password_entry_accessible_get_character_at_offset; - iface->get_caret_offset = gtk_password_entry_accessible_get_caret_offset; - iface->set_caret_offset = gtk_password_entry_accessible_set_caret_offset; - iface->get_character_count = gtk_password_entry_accessible_get_character_count; - iface->get_offset_at_point = gtk_password_entry_accessible_get_offset_at_point; -} - -static void -gtk_password_entry_accessible_set_text_contents (AtkEditableText *text, - const char *string) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - if (!gtk_editable_get_editable (GTK_EDITABLE (widget))) - return; - - gtk_editable_set_text (GTK_EDITABLE (widget), string); -} - -static void -gtk_password_entry_accessible_insert_text (AtkEditableText *text, - const char *string, - int length, - int *position) -{ - GtkWidget *widget; - GtkEditable *editable; - int pos = 0; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - if (position != NULL) - pos = *position; - - gtk_editable_insert_text (editable, string, length, &pos); - gtk_editable_set_position (editable, pos); - - if (position != NULL) - *position = pos; -} - -static void -gtk_password_entry_accessible_delete_text (AtkEditableText *text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkEditable *editable; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - gtk_editable_delete_text (editable, start_pos, end_pos); -} - -typedef struct -{ - GtkEditable *entry; - int position; -} PasteData; - -static void -paste_received_cb (GObject *clipboard, - GAsyncResult *result, - gpointer data) -{ - PasteData *paste = data; - char *text; - - text = gdk_clipboard_read_text_finish (GDK_CLIPBOARD (clipboard), result, NULL); - if (text != NULL) - gtk_editable_insert_text (paste->entry, - text, -1, - &(paste->position)); - - g_object_unref (paste->entry); - g_free (paste); - g_free (text); -} - -static void -gtk_password_entry_accessible_paste_text (AtkEditableText *text, - int position) -{ - GtkWidget *widget; - GtkEditable *editable; - PasteData *paste; - GdkClipboard *clipboard; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - paste = g_new0 (PasteData, 1); - paste->entry = GTK_EDITABLE (widget); - paste->position = position; - - g_object_ref (paste->entry); - clipboard = gtk_widget_get_clipboard (widget); - gdk_clipboard_read_text_async (clipboard, NULL, paste_received_cb, paste); -} - -static void -atk_editable_text_interface_init (AtkEditableTextIface *iface) -{ - iface->set_text_contents = gtk_password_entry_accessible_set_text_contents; - iface->insert_text = gtk_password_entry_accessible_insert_text; - iface->copy_text = NULL; - iface->cut_text = NULL; - iface->delete_text = gtk_password_entry_accessible_delete_text; - iface->paste_text = gtk_password_entry_accessible_paste_text; - iface->set_run_attributes = NULL; -} - -static gboolean -gtk_password_entry_accessible_do_action (AtkAction *action, - int i) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return FALSE; - - if (!gtk_widget_get_sensitive (widget) || !gtk_widget_get_visible (widget)) - return FALSE; - - if (i == 0) - { - gtk_widget_activate (widget); - return TRUE; - } - - if (i == 1) - { - GtkText *text = get_text_widget (GTK_ACCESSIBLE (action)); - - gboolean visibility = gtk_text_get_visibility (text); - gtk_text_set_visibility (text, !visibility); - - return TRUE; - } - - return FALSE; -} - -static int -gtk_password_entry_accessible_get_n_actions (AtkAction *action) -{ - GtkAccessible *accessible = GTK_ACCESSIBLE (action); - - GtkWidget *widget = gtk_accessible_get_widget (accessible); - if (widget == NULL) - return 0; - - int n_actions = 1; - if (gtk_password_entry_get_show_peek_icon (GTK_PASSWORD_ENTRY (widget))) - n_actions += 1; - - return n_actions; -} - -static const char * -gtk_password_entry_accessible_get_keybinding (AtkAction *action, - int i) -{ - GtkWidget *widget; - GtkWidget *label; - AtkRelationSet *set; - AtkRelation *relation; - GPtrArray *target; - gpointer target_object; - guint key_val; - - if (i != 0) - return NULL; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return NULL; - - set = atk_object_ref_relation_set (ATK_OBJECT (action)); - if (!set) - return NULL; - - label = NULL; - relation = atk_relation_set_get_relation_by_type (set, ATK_RELATION_LABELLED_BY); - if (relation) - { - target = atk_relation_get_target (relation); - - target_object = g_ptr_array_index (target, 0); - label = gtk_accessible_get_widget (GTK_ACCESSIBLE (target_object)); - } - - g_object_unref (set); - - if (GTK_IS_LABEL (label)) - { - key_val = gtk_label_get_mnemonic_keyval (GTK_LABEL (label)); - if (key_val != GDK_KEY_VoidSymbol) - return gtk_accelerator_name (key_val, GDK_ALT_MASK); - } - - return NULL; -} - -static const char * -gtk_password_entry_accessible_action_get_name (AtkAction *action, - int i) -{ - switch (i) - { - case 0: - return "activate"; - - case 1: - return "peek"; - - default: - break; - } - - return NULL; -} - -static const char * -gtk_password_entry_accessible_action_get_localized_name (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action name", "Activate"); - if (i == 1) - return C_("Action name", "Peek"); - - return NULL; -} - -static const char * -gtk_password_entry_accessible_action_get_description (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action description", "Activates the entry"); - - if (i == 1) - return C_("Action description", "Reveals the contents the entry"); - - return NULL; -} - -static void -atk_action_interface_init (AtkActionIface *iface) -{ - iface->do_action = gtk_password_entry_accessible_do_action; - iface->get_n_actions = gtk_password_entry_accessible_get_n_actions; - iface->get_keybinding = gtk_password_entry_accessible_get_keybinding; - iface->get_name = gtk_password_entry_accessible_action_get_name; - iface->get_localized_name = gtk_password_entry_accessible_action_get_localized_name; - iface->get_description = gtk_password_entry_accessible_action_get_description; -} - -static AtkAttributeSet * -gtk_password_entry_accessible_get_attributes (AtkObject *accessible) -{ - GtkWidget *widget; - AtkAttributeSet *attributes; - AtkAttribute *placeholder_text; - char *text = NULL; - - attributes = ATK_OBJECT_CLASS (gtk_password_entry_accessible_parent_class)->get_attributes (accessible); - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return attributes; - - g_object_get (widget, "placeholder-text", &text, NULL); - if (text == NULL) - return attributes; - - placeholder_text = g_malloc (sizeof (AtkAttribute)); - placeholder_text->name = g_strdup ("placeholder-text"); - placeholder_text->value = text; - - attributes = g_slist_append (attributes, placeholder_text); - - return attributes; -} - -static gboolean -check_for_selection_change (GtkPasswordEntryAccessible *self, - GtkEditable *editable) -{ - gboolean ret_val = FALSE; - int start, end; - - if (gtk_editable_get_selection_bounds (editable, &start, &end)) - { - if (end != self->cursor_position || - start != self->selection_bound) - /* - * This check is here as this function can be called - * for notification of selection_bound and current_pos. - * The values of current_pos and selection_bound may be the same - * for both notifications and we only want to generate one - * text_selection_changed signal. - */ - ret_val = TRUE; - } - else - { - /* We had a selection */ - ret_val = (self->cursor_position != self->selection_bound); - } - - self->cursor_position = end; - self->selection_bound = start; - - return ret_val; -} - -static void -on_cursor_position_changed (GObject *gobject, - GParamSpec *pspec, - gpointer data) -{ - GtkPasswordEntryAccessible *self = data; - GtkEditable *editable = GTK_EDITABLE (gobject); - - if (check_for_selection_change (self, editable)) - g_signal_emit_by_name (self, "text-selection-changed"); - - // The entry cursor position has moved so generate the signal - g_signal_emit_by_name (self, "text-caret-moved", - gtk_editable_get_position (editable)); -} - -static void -on_selection_bound_changed (GObject *gobject, - GParamSpec *pspec, - gpointer data) -{ - GtkPasswordEntryAccessible *self = data; - GtkEditable *editable = GTK_EDITABLE (gobject); - - if (check_for_selection_change (self, editable)) - g_signal_emit_by_name (self, "text-selection-changed"); -} - -static void -insert_text_cb (GtkEditable *editable, - char *new_text, - int new_text_length, - int *position, - GtkPasswordEntryAccessible *self) -{ - int length; - - if (new_text_length == 0) - return; - - length = g_utf8_strlen (new_text, new_text_length); - - g_signal_emit_by_name (self, - "text-changed::insert", - *position - length, - length); -} - -static void -delete_text_cb (GtkEditable *editable, - int start, - int end, - GtkPasswordEntryAccessible *self) -{ - GtkText *text; - - text = get_text_widget (GTK_ACCESSIBLE (self)); - if (text == NULL) - return; - - if (end < 0) - { - char *contents; - - contents = gtk_text_get_display_text (text, 0, -1); - end = g_utf8_strlen (contents, -1); - - g_free (contents); - } - - if (end == start) - return; - - g_signal_emit_by_name (self, - "text-changed::delete", - start, - end - start); -} - -static void -gtk_password_entry_accessible_initialize (AtkObject *atk_object, - gpointer data) -{ - GtkPasswordEntryAccessible *self = GTK_PASSWORD_ENTRY_ACCESSIBLE (atk_object); - GtkEditable *editable = data; - GtkWidget *widget = data; - int start_pos, end_pos; - - gtk_editable_get_selection_bounds (editable, &start_pos, &end_pos); - self->cursor_position = end_pos; - self->selection_bound = start_pos; - - /* Set up signal callbacks */ - g_signal_connect_after (widget, "insert-text", G_CALLBACK (insert_text_cb), self); - g_signal_connect (widget, "delete-text", G_CALLBACK (delete_text_cb), self); - g_signal_connect (widget, "notify::cursor-position", - G_CALLBACK (on_cursor_position_changed), self); - g_signal_connect (widget, "notify::selection-bound", - G_CALLBACK (on_selection_bound_changed), self); -} - -static void -gtk_password_entry_accessible_class_init (GtkPasswordEntryAccessibleClass *klass) -{ - AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass); - - atk_object_class->initialize = gtk_password_entry_accessible_initialize; - atk_object_class->get_attributes = gtk_password_entry_accessible_get_attributes; -} - -static void -gtk_password_entry_accessible_init (GtkPasswordEntryAccessible *self) -{ - AtkObject *atk_obj = ATK_OBJECT (self); - - atk_obj->role = ATK_ROLE_PASSWORD_TEXT; - atk_object_set_name (atk_obj, _("Password")); -} - -void -gtk_password_entry_accessible_update_visibility (GtkPasswordEntryAccessible *self) -{ - GtkText *text = get_text_widget (GTK_ACCESSIBLE (self)); - - if (text == NULL) - return; - - gboolean visibility = gtk_text_get_visibility (text); - AtkRole role = visibility ? ATK_ROLE_TEXT : ATK_ROLE_PASSWORD_TEXT; - atk_object_set_role (ATK_OBJECT (self), role); -} diff --git a/gtk/a11y/gtkpasswordentryaccessible.h b/gtk/a11y/gtkpasswordentryaccessible.h deleted file mode 100644 index d1008426a8..0000000000 --- a/gtk/a11y/gtkpasswordentryaccessible.h +++ /dev/null @@ -1,48 +0,0 @@ -/* gtkpasswordentryaccessible.h: A GtkWidgetAccessible for GtkPasswordEntry - * - * Copyright 2020 GNOME Foundation - * - * SPDX-License-Identifier: LGPL-2.1-or-later - * - * 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.1 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, see <http://www.gnu.org/licenses/>. - */ - -#pragma once - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkentryaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_PASSWORD_ENTRY_ACCESSIBLE (gtk_password_entry_accessible_get_type()) -#define GTK_PASSWORD_ENTRY_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_PASSWORD_ENTRY_ACCESSIBLE, GtkPasswordEntryAccessible)) -#define GTK_IS_PASSWORD_ENTRY_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_PASSWORD_ENTRY_ACCESSIBLE)) - -typedef struct _GtkPasswordEntryAccessible GtkPasswordEntryAccessible; -typedef struct _GtkPasswordEntryAccessibleClass GtkPasswordEntryAccessibleClass; - -struct _GtkPasswordEntryAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_password_entry_accessible_get_type (void) G_GNUC_CONST; - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (GtkPasswordEntryAccessible, g_object_unref) - -G_END_DECLS diff --git a/gtk/a11y/gtkpasswordentryaccessibleprivate.h b/gtk/a11y/gtkpasswordentryaccessibleprivate.h deleted file mode 100644 index 5ef1153814..0000000000 --- a/gtk/a11y/gtkpasswordentryaccessibleprivate.h +++ /dev/null @@ -1,29 +0,0 @@ -/* gtkpasswordentryaccessibleprivate.h: Private API for GtkPasswordEntryAccessible - * - * Copyright 2020 GNOME Foundation - * - * SPDX-License-Identifier: LGPL-2.1-or-later - * - * 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.1 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, see <http://www.gnu.org/licenses/>. - */ - -#pragma once - -#include "gtkpasswordentryaccessible.h" - -G_BEGIN_DECLS - -void gtk_password_entry_accessible_update_visibility (GtkPasswordEntryAccessible *self); - -G_END_DECLS diff --git a/gtk/a11y/gtkpictureaccessible.c b/gtk/a11y/gtkpictureaccessible.c deleted file mode 100644 index 7e4b10b3f0..0000000000 --- a/gtk/a11y/gtkpictureaccessible.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright © 2018 Benjamin Otte - * - * 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.1 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, see <http://www.gnu.org/licenses/>. - * - * Authors: Benjamin Otte <otte@gnome.org> - */ - -#include "config.h" - -#include "gtkpictureaccessibleprivate.h" - -#include "gtkpicture.h" - -struct _GtkPictureAccessible -{ - GtkWidgetAccessible parent_instance; -}; - -struct _GtkPictureAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -static const char * -gtk_picture_accessible_get_image_description (AtkImage *image) -{ - GtkWidget* widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (image)); - if (widget == NULL) - return NULL; - - return gtk_picture_get_alternative_text (GTK_PICTURE (widget)); -} - -static void -gtk_picture_accessible_get_image_position (AtkImage *image, - int *x, - int *y, - AtkCoordType coord_type) -{ - atk_component_get_extents (ATK_COMPONENT (image), x, y, NULL, NULL, - coord_type); -} - -static void -gtk_picture_accessible_get_image_size (AtkImage *image, - int *width, - int *height) -{ - GtkWidget* widget; - GdkPaintable *paintable; - - *width = -1; - *height = -1; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (image)); - if (widget == NULL) - return; - - paintable = gtk_picture_get_paintable (GTK_PICTURE (widget)); - if (paintable == NULL) - return; - - *width = gdk_paintable_get_intrinsic_width (paintable); - if (*width == 0) - *width = -1; - - *height = gdk_paintable_get_intrinsic_height (paintable); - if (*height == 0) - *height = -1; -} - -static void -gtk_picture_accessible_image_init (AtkImageIface *iface) -{ - iface->get_image_description = gtk_picture_accessible_get_image_description; - iface->get_image_position = gtk_picture_accessible_get_image_position; - iface->get_image_size = gtk_picture_accessible_get_image_size; -} - -G_DEFINE_TYPE_WITH_CODE (GtkPictureAccessible, gtk_picture_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE, gtk_picture_accessible_image_init)) - -static void -gtk_picture_accessible_initialize (AtkObject *accessible, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_picture_accessible_parent_class)->initialize (accessible, data); - - accessible->role = ATK_ROLE_IMAGE; -} - -static const char * -gtk_picture_accessible_get_name (AtkObject *accessible) -{ - GtkWidget* widget; - const char *name; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return NULL; - - name = ATK_OBJECT_CLASS (gtk_picture_accessible_parent_class)->get_name (accessible); - if (name) - return name; - - return gtk_picture_get_alternative_text (GTK_PICTURE (widget)); -} - -static void -gtk_picture_accessible_class_init (GtkPictureAccessibleClass *klass) -{ - AtkObjectClass *atkobject_class = ATK_OBJECT_CLASS (klass); - - atkobject_class->initialize = gtk_picture_accessible_initialize; - atkobject_class->get_name = gtk_picture_accessible_get_name; -} - -static void -gtk_picture_accessible_init (GtkPictureAccessible *image) -{ -} - diff --git a/gtk/a11y/gtkpictureaccessibleprivate.h b/gtk/a11y/gtkpictureaccessibleprivate.h deleted file mode 100644 index f079a350c7..0000000000 --- a/gtk/a11y/gtkpictureaccessibleprivate.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2018 Benjamin Otte - * - * 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.1 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, see <http://www.gnu.org/licenses/>. - * - * Authors: Benjamin Otte <otte@gnome.org> - */ - -#ifndef __GTK_PICTURE_ACCESSIBLE_PRIVATE_H__ -#define __GTK_PICTURE_ACCESSIBLE_PRIVATE_H__ - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_PICTURE_ACCESSIBLE (gtk_picture_accessible_get_type ()) - -GDK_AVAILABLE_IN_ALL -G_DECLARE_FINAL_TYPE (GtkPictureAccessible, gtk_picture_accessible, GTK, PICTURE_ACCESSIBLE, GtkWidgetAccessible) - -G_END_DECLS - -#endif /* __GTK_PICTURE_ACCESSIBLE_PRIVATE_H__ */ diff --git a/gtk/a11y/gtkpopoveraccessible.c b/gtk/a11y/gtkpopoveraccessible.c deleted file mode 100644 index 6d222a5f5a..0000000000 --- a/gtk/a11y/gtkpopoveraccessible.c +++ /dev/null @@ -1,93 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright © 2014 Red Hat 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, see <http://www.gnu.org/licenses/>. - * - * Author: Carlos Garnacho <carlosg@gnome.org> - */ - -#include "config.h" - -#include <glib/gi18n-lib.h> -#include <gtk/gtk.h> -#include "gtkpopoveraccessible.h" - -typedef struct _GtkPopoverAccessiblePrivate GtkPopoverAccessiblePrivate; - -G_DEFINE_TYPE (GtkPopoverAccessible, gtk_popover_accessible, GTK_TYPE_WIDGET_ACCESSIBLE) - -static void -popover_update_modality (AtkObject *object, - GtkPopover *popover) -{ - atk_object_notify_state_change (object, ATK_STATE_MODAL, - gtk_popover_get_autohide (popover)); -} - -static void -popover_notify_cb (GtkPopover *popover, - GParamSpec *pspec, - AtkObject *object) -{ - AtkObject *popover_accessible; - - popover_accessible = gtk_widget_get_accessible (GTK_WIDGET (popover)); - - if (strcmp (g_param_spec_get_name (pspec), "modal") == 0) - popover_update_modality (popover_accessible, popover); -} - -static void -gtk_popover_accessible_initialize (AtkObject *obj, - gpointer data) -{ - GtkPopover *popover = GTK_POPOVER (data); - - ATK_OBJECT_CLASS (gtk_popover_accessible_parent_class)->initialize (obj, data); - - g_signal_connect (popover, "notify", - G_CALLBACK (popover_notify_cb), obj); - popover_update_modality (obj, popover); - - obj->role = ATK_ROLE_PANEL; -} - -static AtkStateSet * -gtk_popover_accessible_ref_state_set (AtkObject *obj) -{ - AtkStateSet *state_set; - GtkWidget *widget; - - state_set = ATK_OBJECT_CLASS (gtk_popover_accessible_parent_class)->ref_state_set (obj); - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - - if (gtk_popover_get_autohide (GTK_POPOVER (widget))) - atk_state_set_add_state (state_set, ATK_STATE_MODAL); - - return state_set; -} - -static void -gtk_popover_accessible_class_init (GtkPopoverAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->initialize = gtk_popover_accessible_initialize; - class->ref_state_set = gtk_popover_accessible_ref_state_set; -} - -static void -gtk_popover_accessible_init (GtkPopoverAccessible *popover) -{ -} diff --git a/gtk/a11y/gtkpopoveraccessible.h b/gtk/a11y/gtkpopoveraccessible.h deleted file mode 100644 index fc6d83954b..0000000000 --- a/gtk/a11y/gtkpopoveraccessible.h +++ /dev/null @@ -1,56 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright © 2014 Red Hat 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, see <http://www.gnu.org/licenses/>. - * - * Author: Carlos Garnacho <carlosg@gnome.org> - */ - -#ifndef __GTK_POPOVER_ACCESSIBLE_H__ -#define __GTK_POPOVER_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_POPOVER_ACCESSIBLE (gtk_popover_accessible_get_type ()) -#define GTK_POPOVER_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_POPOVER_ACCESSIBLE, GtkPopoverAccessible)) -#define GTK_POPOVER_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_POPOVER_ACCESSIBLE, GtkPopoverAccessibleClass)) -#define GTK_IS_POPOVER_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_POPOVER_ACCESSIBLE)) -#define GTK_IS_POPOVER_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_POPOVER_ACCESSIBLE)) -#define GTK_POPOVER_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_POPOVER_ACCESSIBLE, GtkPopoverAccessibleClass)) - -typedef struct _GtkPopoverAccessible GtkPopoverAccessible; -typedef struct _GtkPopoverAccessibleClass GtkPopoverAccessibleClass; - -struct _GtkPopoverAccessible -{ - GtkWidgetAccessible parent; -}; - -struct _GtkPopoverAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_popover_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_POPOVER_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkprogressbaraccessible.c b/gtk/a11y/gtkprogressbaraccessible.c deleted file mode 100644 index cf91831305..0000000000 --- a/gtk/a11y/gtkprogressbaraccessible.c +++ /dev/null @@ -1,107 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <string.h> - -#include <gtk/gtk.h> - -#include "gtkprogressbaraccessibleprivate.h" - -static void atk_value_interface_init (AtkValueIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkProgressBarAccessible, gtk_progress_bar_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, atk_value_interface_init)) - -void -gtk_progress_bar_accessible_update_value (GtkProgressBarAccessible *self) -{ - g_object_notify (G_OBJECT (self), "accessible-value"); -} - -static void -gtk_progress_bar_accessible_class_init (GtkProgressBarAccessibleClass *klass) -{ -} - -static void -gtk_progress_bar_accessible_init (GtkProgressBarAccessible *self) -{ - ATK_OBJECT (self)->role = ATK_ROLE_PROGRESS_BAR; -} - -static void -gtk_progress_bar_accessible_get_current_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (widget))); -} - -static void -gtk_progress_bar_accessible_get_maximum_value (AtkValue *obj, - GValue *value) -{ - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, 1.0); -} - -static void -gtk_progress_bar_accessible_get_minimum_value (AtkValue *obj, - GValue *value) -{ - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, 0.0); -} - -static void -gtk_progress_bar_accessible_get_value_and_text (AtkValue *obj, - double *value, - char **text) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - - *value = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (widget)); - *text = NULL; -} - -static AtkRange * -gtk_progress_bar_accessible_get_range (AtkValue *obj) -{ - return atk_range_new (0.0, 1.0, NULL); -} - -static void -atk_value_interface_init (AtkValueIface *iface) -{ - iface->get_current_value = gtk_progress_bar_accessible_get_current_value; - iface->get_maximum_value = gtk_progress_bar_accessible_get_maximum_value; - iface->get_minimum_value = gtk_progress_bar_accessible_get_minimum_value; - - iface->get_value_and_text = gtk_progress_bar_accessible_get_value_and_text; - iface->get_range = gtk_progress_bar_accessible_get_range; -} diff --git a/gtk/a11y/gtkprogressbaraccessible.h b/gtk/a11y/gtkprogressbaraccessible.h deleted file mode 100644 index 2c0a218049..0000000000 --- a/gtk/a11y/gtkprogressbaraccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_PROGRESS_BAR_ACCESSIBLE_H__ -#define __GTK_PROGRESS_BAR_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_PROGRESS_BAR_ACCESSIBLE (gtk_progress_bar_accessible_get_type ()) -#define GTK_PROGRESS_BAR_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_PROGRESS_BAR_ACCESSIBLE, GtkProgressBarAccessible)) -#define GTK_PROGRESS_BAR_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_PROGRESS_BAR_ACCESSIBLE, GtkProgressBarAccessibleClass)) -#define GTK_IS_PROGRESS_BAR_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_PROGRESS_BAR_ACCESSIBLE)) -#define GTK_IS_PROGRESS_BAR_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PROGRESS_BAR_ACCESSIBLE)) -#define GTK_PROGRESS_BAR_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PROGRESS_BAR_ACCESSIBLE, GtkProgressBarAccessibleClass)) - -typedef struct _GtkProgressBarAccessible GtkProgressBarAccessible; -typedef struct _GtkProgressBarAccessibleClass GtkProgressBarAccessibleClass; -typedef struct _GtkProgressBarAccessiblePrivate GtkProgressBarAccessiblePrivate; - -struct _GtkProgressBarAccessible -{ - GtkWidgetAccessible parent; - - GtkProgressBarAccessiblePrivate *priv; -}; - -struct _GtkProgressBarAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_progress_bar_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_PROGRESS_BAR_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkprogressbaraccessibleprivate.h b/gtk/a11y/gtkprogressbaraccessibleprivate.h deleted file mode 100644 index 120d21c5b2..0000000000 --- a/gtk/a11y/gtkprogressbaraccessibleprivate.h +++ /dev/null @@ -1,29 +0,0 @@ -/* gtkprogressbaraccessibleprivate.h: Private GtkProgressBarAccessible API - * - * Copyright 2020 GNOME Foundation - * - * SPDX-License-Identifier: LGPL-2.1-or-later - * - * 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.1 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, see <http://www.gnu.org/licenses/>. - */ - -#pragma once - -#include "gtkprogressbaraccessible.h" - -G_BEGIN_DECLS - -void gtk_progress_bar_accessible_update_value (GtkProgressBarAccessible *self); - -G_END_DECLS diff --git a/gtk/a11y/gtkradiobuttonaccessible.c b/gtk/a11y/gtkradiobuttonaccessible.c deleted file mode 100644 index 4670d14f7a..0000000000 --- a/gtk/a11y/gtkradiobuttonaccessible.c +++ /dev/null @@ -1,118 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <gtk/gtk.h> -#include "gtkradiobuttonaccessible.h" - -struct _GtkRadioButtonAccessiblePrivate -{ - GSList *old_group; -}; - - -G_DEFINE_TYPE_WITH_PRIVATE (GtkRadioButtonAccessible, gtk_radio_button_accessible, GTK_TYPE_TOGGLE_BUTTON_ACCESSIBLE) - -static void -gtk_radio_button_accessible_initialize (AtkObject *accessible, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_radio_button_accessible_parent_class)->initialize (accessible, data); - - accessible->role = ATK_ROLE_RADIO_BUTTON; -} - -static AtkRelationSet * -gtk_radio_button_accessible_ref_relation_set (AtkObject *obj) -{ - GtkWidget *widget; - AtkRelationSet *relation_set; - GSList *list; - GtkRadioButtonAccessible *radio_button; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - radio_button = GTK_RADIO_BUTTON_ACCESSIBLE (obj); - - relation_set = ATK_OBJECT_CLASS (gtk_radio_button_accessible_parent_class)->ref_relation_set (obj); - - /* If the radio button'group has changed remove the relation */ - list = gtk_radio_button_get_group (GTK_RADIO_BUTTON (widget)); - - if (radio_button->priv->old_group != list) - { - AtkRelation *relation; - - relation = atk_relation_set_get_relation_by_type (relation_set, ATK_RELATION_MEMBER_OF); - atk_relation_set_remove (relation_set, relation); - } - - if (!atk_relation_set_contains (relation_set, ATK_RELATION_MEMBER_OF)) - { - /* - * Get the members of the button group - */ - radio_button->priv->old_group = list; - if (list) - { - AtkObject **accessible_array; - guint list_length; - AtkRelation* relation; - int i = 0; - - list_length = g_slist_length (list); - accessible_array = g_new (AtkObject *, list_length); - while (list != NULL) - { - GtkWidget* list_item = list->data; - - accessible_array[i++] = gtk_widget_get_accessible (list_item); - - list = list->next; - } - relation = atk_relation_new (accessible_array, list_length, - ATK_RELATION_MEMBER_OF); - g_free (accessible_array); - - atk_relation_set_add (relation_set, relation); - /* - * Unref the relation so that it is not leaked. - */ - g_object_unref (relation); - } - } - - return relation_set; -} - -static void -gtk_radio_button_accessible_class_init (GtkRadioButtonAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->initialize = gtk_radio_button_accessible_initialize; - class->ref_relation_set = gtk_radio_button_accessible_ref_relation_set; -} - -static void -gtk_radio_button_accessible_init (GtkRadioButtonAccessible *radio_button) -{ - radio_button->priv = gtk_radio_button_accessible_get_instance_private (radio_button); -} diff --git a/gtk/a11y/gtkradiobuttonaccessible.h b/gtk/a11y/gtkradiobuttonaccessible.h deleted file mode 100644 index 7bb35c19e6..0000000000 --- a/gtk/a11y/gtkradiobuttonaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_RADIO_BUTTON_ACCESSIBLE_H__ -#define __GTK_RADIO_BUTTON_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtktogglebuttonaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_RADIO_BUTTON_ACCESSIBLE (gtk_radio_button_accessible_get_type ()) -#define GTK_RADIO_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_RADIO_BUTTON_ACCESSIBLE, GtkRadioButtonAccessible)) -#define GTK_RADIO_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_RADIO_BUTTON_ACCESSIBLE, GtkRadioButtonAccessibleClass)) -#define GTK_IS_RADIO_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_RADIO_BUTTON_ACCESSIBLE)) -#define GTK_IS_RADIO_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_RADIO_BUTTON_ACCESSIBLE)) -#define GTK_RADIO_BUTTON_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_RADIO_BUTTON_ACCESSIBLE, GtkRadioButtonAccessibleClass)) - -typedef struct _GtkRadioButtonAccessible GtkRadioButtonAccessible; -typedef struct _GtkRadioButtonAccessibleClass GtkRadioButtonAccessibleClass; -typedef struct _GtkRadioButtonAccessiblePrivate GtkRadioButtonAccessiblePrivate; - -struct _GtkRadioButtonAccessible -{ - GtkToggleButtonAccessible parent; - - GtkRadioButtonAccessiblePrivate *priv; -}; - -struct _GtkRadioButtonAccessibleClass -{ - GtkToggleButtonAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_radio_button_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_RADIO_BUTTON_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkrangeaccessible.c b/gtk/a11y/gtkrangeaccessible.c deleted file mode 100644 index a004979143..0000000000 --- a/gtk/a11y/gtkrangeaccessible.c +++ /dev/null @@ -1,305 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <string.h> -#include <gtk/gtk.h> -#include "gtkrangeaccessible.h" - -typedef struct -{ - GtkAdjustment *adjustment; - - gulong value_changed_id; -} GtkRangeAccessiblePrivate; - -static void atk_value_interface_init (AtkValueIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkRangeAccessible, gtk_range_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_ADD_PRIVATE (GtkRangeAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, atk_value_interface_init)) - -static void -gtk_range_accessible_value_changed (GtkAdjustment *adjustment, - gpointer data) -{ - g_object_notify (G_OBJECT (data), "accessible-value"); -} - -static void -gtk_range_accessible_widget_set (GtkAccessible *accessible) -{ - GtkRangeAccessible *self = GTK_RANGE_ACCESSIBLE (accessible); - GtkRangeAccessiblePrivate *priv = gtk_range_accessible_get_instance_private (self); - GtkWidget *range; - GtkAdjustment *adj; - - range = gtk_accessible_get_widget (accessible); - adj = gtk_range_get_adjustment (GTK_RANGE (range)); - if (adj != NULL) - { - priv->adjustment = g_object_ref (adj); - priv->value_changed_id = - g_signal_connect (priv->adjustment, "value-changed", - G_CALLBACK (gtk_range_accessible_value_changed), - self); - } -} - -static void -gtk_range_accessible_widget_unset (GtkAccessible *accessible) -{ - GtkRangeAccessible *self = GTK_RANGE_ACCESSIBLE (accessible); - GtkRangeAccessiblePrivate *priv = gtk_range_accessible_get_instance_private (self); - - if (priv->adjustment != NULL && - priv->value_changed_id != 0) - { - g_signal_handler_disconnect (priv->adjustment, priv->value_changed_id); - priv->value_changed_id = 0; - } - - g_clear_object (&priv->adjustment); -} - -void -gtk_range_accessible_update_adjustment (GtkRangeAccessible *self) -{ - gtk_range_accessible_widget_unset (GTK_ACCESSIBLE (self)); - gtk_range_accessible_widget_set (GTK_ACCESSIBLE (self)); -} - -static void -gtk_range_accessible_initialize (AtkObject *obj, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_range_accessible_parent_class)->initialize (obj, data); - obj->role = ATK_ROLE_SLIDER; -} - -static void -gtk_range_accessible_dispose (GObject *gobject) -{ - GtkRangeAccessible *self = GTK_RANGE_ACCESSIBLE (gobject); - GtkRangeAccessiblePrivate *priv = gtk_range_accessible_get_instance_private (self); - - if (priv->adjustment != NULL && priv->value_changed_id != 0) - { - g_signal_handler_disconnect (priv->adjustment, priv->value_changed_id); - priv->value_changed_id = 0; - } - - g_clear_object (&priv->adjustment); - - G_OBJECT_CLASS (gtk_range_accessible_parent_class)->dispose (gobject); -} - -static void -gtk_range_accessible_class_init (GtkRangeAccessibleClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - AtkObjectClass *atkobject_class = ATK_OBJECT_CLASS (klass); - GtkAccessibleClass *accessible_class = (GtkAccessibleClass*)klass; - - gobject_class->dispose = gtk_range_accessible_dispose; - - atkobject_class->initialize = gtk_range_accessible_initialize; - - accessible_class->widget_set = gtk_range_accessible_widget_set; - accessible_class->widget_unset = gtk_range_accessible_widget_unset; -} - -static void -gtk_range_accessible_init (GtkRangeAccessible *range) -{ -} - -static void -gtk_range_accessible_get_current_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_range_get_adjustment (GTK_RANGE (widget)); - if (adjustment == NULL) - return; - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_adjustment_get_value (adjustment)); -} - -static void -gtk_range_accessible_get_maximum_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - double max; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_range_get_adjustment (GTK_RANGE (widget)); - if (adjustment == NULL) - return; - - max = gtk_adjustment_get_upper (adjustment) - - gtk_adjustment_get_page_size (adjustment); - - if (gtk_range_get_restrict_to_fill_level (GTK_RANGE (widget))) - max = MIN (max, gtk_range_get_fill_level (GTK_RANGE (widget))); - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, max); -} - -static void -gtk_range_accessible_get_minimum_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_range_get_adjustment (GTK_RANGE (widget)); - if (adjustment == NULL) - return; - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_adjustment_get_lower (adjustment)); -} - -static void -gtk_range_accessible_get_minimum_increment (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_range_get_adjustment (GTK_RANGE (widget)); - if (adjustment == NULL) - return; - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_adjustment_get_minimum_increment (adjustment)); -} - -static gboolean -gtk_range_accessible_set_current_value (AtkValue *obj, - const GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_range_get_adjustment (GTK_RANGE (widget)); - if (adjustment == NULL) - return FALSE; - - gtk_adjustment_set_value (adjustment, g_value_get_double (value)); - - return TRUE; -} - -static void -gtk_range_accessible_get_value_and_text (AtkValue *obj, - double *value, - char **text) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_range_get_adjustment (GTK_RANGE (widget)); - if (adjustment == NULL) - return; - - *value = gtk_adjustment_get_value (adjustment); - *text = NULL; -} - -static AtkRange * -gtk_range_accessible_get_range (AtkValue *obj) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - double min, max; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_range_get_adjustment (GTK_RANGE (widget)); - if (adjustment == NULL) - return NULL; - - min = gtk_adjustment_get_lower (adjustment); - max = gtk_adjustment_get_upper (adjustment) - - gtk_adjustment_get_page_size (adjustment); - - if (gtk_range_get_restrict_to_fill_level (GTK_RANGE (widget))) - max = MIN (max, gtk_range_get_fill_level (GTK_RANGE (widget))); - - return atk_range_new (min, max, NULL); -} - -static void -gtk_range_accessible_set_value (AtkValue *obj, - const double value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_range_get_adjustment (GTK_RANGE (widget)); - if (adjustment == NULL) - return; - - gtk_adjustment_set_value (adjustment, value); -} - -static double -gtk_range_accessible_get_increment (AtkValue *obj) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_range_get_adjustment (GTK_RANGE (widget)); - if (adjustment == NULL) - return 0; - - return gtk_adjustment_get_minimum_increment (adjustment); -} - -static void -atk_value_interface_init (AtkValueIface *iface) -{ - iface->get_current_value = gtk_range_accessible_get_current_value; - iface->get_maximum_value = gtk_range_accessible_get_maximum_value; - iface->get_minimum_value = gtk_range_accessible_get_minimum_value; - iface->get_minimum_increment = gtk_range_accessible_get_minimum_increment; - iface->set_current_value = gtk_range_accessible_set_current_value; - - iface->get_value_and_text = gtk_range_accessible_get_value_and_text; - iface->get_range = gtk_range_accessible_get_range; - iface->set_value = gtk_range_accessible_set_value; - iface->get_increment = gtk_range_accessible_get_increment; -} diff --git a/gtk/a11y/gtkrangeaccessible.h b/gtk/a11y/gtkrangeaccessible.h deleted file mode 100644 index 8779fb8eae..0000000000 --- a/gtk/a11y/gtkrangeaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_RANGE_ACCESSIBLE_H__ -#define __GTK_RANGE_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_RANGE_ACCESSIBLE (gtk_range_accessible_get_type ()) -#define GTK_RANGE_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_RANGE_ACCESSIBLE, GtkRangeAccessible)) -#define GTK_RANGE_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_RANGE_ACCESSIBLE, GtkRangeAccessibleClass)) -#define GTK_IS_RANGE_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_RANGE_ACCESSIBLE)) -#define GTK_IS_RANGE_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_RANGE_ACCESSIBLE)) -#define GTK_RANGE_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_RANGE_ACCESSIBLE, GtkRangeAccessibleClass)) - -typedef struct _GtkRangeAccessible GtkRangeAccessible; -typedef struct _GtkRangeAccessibleClass GtkRangeAccessibleClass; - -struct _GtkRangeAccessible -{ - GtkWidgetAccessible parent; -}; - -struct _GtkRangeAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_range_accessible_get_type (void); - -/*< private >*/ -void gtk_range_accessible_update_adjustment (GtkRangeAccessible *self); - -G_END_DECLS - -#endif /* __GTK_RANGE_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkrenderercellaccessible.c b/gtk/a11y/gtkrenderercellaccessible.c deleted file mode 100644 index 3306c6d8ff..0000000000 --- a/gtk/a11y/gtkrenderercellaccessible.c +++ /dev/null @@ -1,123 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <gtk/gtk.h> -#include "gtkrenderercellaccessible.h" -#include "gtkintl.h" - -struct _GtkRendererCellAccessiblePrivate -{ - GtkCellRenderer *renderer; -}; - -enum { - PROP_0, - PROP_RENDERER -}; - -G_DEFINE_TYPE_WITH_PRIVATE (GtkRendererCellAccessible, gtk_renderer_cell_accessible, GTK_TYPE_CELL_ACCESSIBLE) - -static void -gtk_renderer_cell_accessible_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GtkRendererCellAccessible *accessible = GTK_RENDERER_CELL_ACCESSIBLE (object); - - switch (prop_id) - { - case PROP_RENDERER: - accessible->priv->renderer = g_value_dup_object (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gtk_renderer_cell_accessible_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GtkRendererCellAccessible *accessible = GTK_RENDERER_CELL_ACCESSIBLE (object); - - switch (prop_id) - { - case PROP_RENDERER: - g_value_set_object (value, accessible->priv->renderer); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gtk_renderer_cell_accessible_finalize (GObject *object) -{ - GtkRendererCellAccessible *renderer_cell = GTK_RENDERER_CELL_ACCESSIBLE (object); - - if (renderer_cell->priv->renderer) - g_object_unref (renderer_cell->priv->renderer); - - G_OBJECT_CLASS (gtk_renderer_cell_accessible_parent_class)->finalize (object); -} - -static void -gtk_renderer_cell_accessible_class_init (GtkRendererCellAccessibleClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - gobject_class->get_property = gtk_renderer_cell_accessible_get_property; - gobject_class->set_property = gtk_renderer_cell_accessible_set_property; - gobject_class->finalize = gtk_renderer_cell_accessible_finalize; - - g_object_class_install_property (gobject_class, - PROP_RENDERER, - g_param_spec_object ("renderer", - P_("Cell renderer"), - P_("The cell renderer represented by this accessible"), - GTK_TYPE_CELL_RENDERER, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); -} - -static void -gtk_renderer_cell_accessible_init (GtkRendererCellAccessible *renderer_cell) -{ - renderer_cell->priv = gtk_renderer_cell_accessible_get_instance_private (renderer_cell); -} - -AtkObject * -gtk_renderer_cell_accessible_new (GtkCellRenderer *renderer) -{ - AtkObject *object; - - g_return_val_if_fail (GTK_IS_CELL_RENDERER (renderer), NULL); - - object = g_object_new (_gtk_cell_renderer_get_accessible_type (renderer), - "renderer", renderer, - NULL); - - atk_object_set_role (object, ATK_ROLE_TABLE_CELL); - - return object; -} diff --git a/gtk/a11y/gtkrenderercellaccessible.h b/gtk/a11y/gtkrenderercellaccessible.h deleted file mode 100644 index ac39d89639..0000000000 --- a/gtk/a11y/gtkrenderercellaccessible.h +++ /dev/null @@ -1,61 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_RENDERER_CELL_ACCESSIBLE_H__ -#define __GTK_RENDERER_CELL_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <atk/atk.h> -#include <gtk/a11y/gtkcellaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_RENDERER_CELL_ACCESSIBLE (gtk_renderer_cell_accessible_get_type ()) -#define GTK_RENDERER_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_RENDERER_CELL_ACCESSIBLE, GtkRendererCellAccessible)) -#define GTK_RENDERER_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_RENDERER_CELL_ACCESSIBLE, GtkRendererCellAccessibleClass)) -#define GTK_IS_RENDERER_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_RENDERER_CELL_ACCESSIBLE)) -#define GTK_IS_RENDERER_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_RENDERER_CELL_ACCESSIBLE)) -#define GTK_RENDERER_CELL_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_RENDERER_CELL_ACCESSIBLE, GtkRendererCellAccessibleClass)) - -typedef struct _GtkRendererCellAccessible GtkRendererCellAccessible; -typedef struct _GtkRendererCellAccessibleClass GtkRendererCellAccessibleClass; -typedef struct _GtkRendererCellAccessiblePrivate GtkRendererCellAccessiblePrivate; - -struct _GtkRendererCellAccessible -{ - GtkCellAccessible parent; - - GtkRendererCellAccessiblePrivate *priv; -}; - -struct _GtkRendererCellAccessibleClass -{ - GtkCellAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_renderer_cell_accessible_get_type (void); - -GDK_AVAILABLE_IN_ALL -AtkObject *gtk_renderer_cell_accessible_new (GtkCellRenderer * renderer); - -G_END_DECLS - -#endif /* __GTK_RENDERER_CELL_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkscaleaccessible.c b/gtk/a11y/gtkscaleaccessible.c deleted file mode 100644 index b369b449a7..0000000000 --- a/gtk/a11y/gtkscaleaccessible.c +++ /dev/null @@ -1,53 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2004 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <gtk/gtk.h> -#include "gtkscaleaccessible.h" - -G_DEFINE_TYPE (GtkScaleAccessible, gtk_scale_accessible, GTK_TYPE_RANGE_ACCESSIBLE) - -static const char * -gtk_scale_accessible_get_description (AtkObject *object) -{ - GtkWidget *widget; - PangoLayout *layout; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (object)); - if (widget == NULL) - return NULL; - - layout = gtk_scale_get_layout (GTK_SCALE (widget)); - if (layout) - return pango_layout_get_text (layout); - - return ATK_OBJECT_CLASS (gtk_scale_accessible_parent_class)->get_description (object); -} - -static void -gtk_scale_accessible_class_init (GtkScaleAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->get_description = gtk_scale_accessible_get_description; -} - -static void -gtk_scale_accessible_init (GtkScaleAccessible *scale) -{ -} diff --git a/gtk/a11y/gtkscaleaccessible.h b/gtk/a11y/gtkscaleaccessible.h deleted file mode 100644 index a141293f3a..0000000000 --- a/gtk/a11y/gtkscaleaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2004 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_SCALE_ACCESSIBLE_H__ -#define __GTK_SCALE_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkrangeaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_SCALE_ACCESSIBLE (gtk_scale_accessible_get_type ()) -#define GTK_SCALE_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SCALE_ACCESSIBLE, GtkScaleAccessible)) -#define GTK_SCALE_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SCALE_ACCESSIBLE, GtkScaleAccessibleClass)) -#define GTK_IS_SCALE_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SCALE_ACCESSIBLE)) -#define GTK_IS_SCALE_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SCALE_ACCESSIBLE)) -#define GTK_SCALE_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SCALE_ACCESSIBLE, GtkScaleAccessibleClass)) - -typedef struct _GtkScaleAccessible GtkScaleAccessible; -typedef struct _GtkScaleAccessibleClass GtkScaleAccessibleClass; -typedef struct _GtkScaleAccessiblePrivate GtkScaleAccessiblePrivate; - -struct _GtkScaleAccessible -{ - GtkRangeAccessible parent; - - GtkScaleAccessiblePrivate *priv; -}; - -struct _GtkScaleAccessibleClass -{ - GtkRangeAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_scale_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_SCALE_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkscalebuttonaccessible.c b/gtk/a11y/gtkscalebuttonaccessible.c deleted file mode 100644 index e569fc4dcd..0000000000 --- a/gtk/a11y/gtkscalebuttonaccessible.c +++ /dev/null @@ -1,376 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2008 Jan Arne Petersen - * - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include <config.h> - -#include <glib/gi18n-lib.h> -#include <gtk/gtk.h> -#include "gtkscalebuttonaccessible.h" - -#include <string.h> - -typedef struct { - GtkAdjustment *adjustment; - gulong value_changed_id; -} GtkScaleButtonAccessiblePrivate; - -static void atk_action_interface_init (AtkActionIface *iface); -static void atk_value_interface_init (AtkValueIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkScaleButtonAccessible, gtk_scale_button_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_ADD_PRIVATE (GtkScaleButtonAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, atk_value_interface_init)); - -static void -on_value_changed (GtkAdjustment *adjustment, - gpointer data) -{ - GtkScaleButtonAccessible *self = data; - - g_object_notify (G_OBJECT (self), "accessible-value"); -} - -static void -on_adjustment_changed (GObject *gobject, - GParamSpec *pspec, - gpointer data) -{ - GtkScaleButton *scale_button = GTK_SCALE_BUTTON (gobject); - GtkScaleButtonAccessible *self = data; - GtkScaleButtonAccessiblePrivate *priv = - gtk_scale_button_accessible_get_instance_private (self); - GtkAdjustment *adjustment = - gtk_scale_button_get_adjustment (scale_button); - - if (priv->adjustment == adjustment) - return; - - if (priv->adjustment != NULL && priv->value_changed_id != 0) - { - g_signal_handler_disconnect (priv->adjustment, priv->value_changed_id); - priv->value_changed_id = 0; - } - - g_clear_object (&priv->adjustment); - - if (adjustment != NULL) - { - priv->adjustment = g_object_ref (adjustment); - priv->value_changed_id = - g_signal_connect (priv->adjustment, "notify::value-changed", - G_CALLBACK (on_value_changed), - self); - } -} - -static void -gtk_scale_button_accessible_initialize (AtkObject *obj, - gpointer data) -{ - GtkScaleButton *scale_button = data; - - ATK_OBJECT_CLASS (gtk_scale_button_accessible_parent_class)->initialize (obj, data); - - g_signal_connect (scale_button, "notify::adjustment", - G_CALLBACK (on_adjustment_changed), - obj); -} - -static void -gtk_scale_button_accessible_dispose (GObject *gobject) -{ - GtkScaleButtonAccessible *self = GTK_SCALE_BUTTON_ACCESSIBLE (gobject); - GtkScaleButtonAccessiblePrivate *priv = - gtk_scale_button_accessible_get_instance_private (self); - - if (priv->adjustment != NULL && priv->value_changed_id != 0) - { - g_signal_handler_disconnect (priv->adjustment, priv->value_changed_id); - priv->value_changed_id = 0; - } - - g_clear_object (&priv->adjustment); - - G_OBJECT_CLASS (gtk_scale_button_accessible_parent_class)->dispose (gobject); -} - -static void -gtk_scale_button_accessible_class_init (GtkScaleButtonAccessibleClass *klass) -{ - AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass); - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - gobject_class->dispose = gtk_scale_button_accessible_dispose; - - atk_object_class->initialize = gtk_scale_button_accessible_initialize; -} - -static void -gtk_scale_button_accessible_init (GtkScaleButtonAccessible *self) -{ - ATK_OBJECT (self)->role = ATK_ROLE_SLIDER; -} - -static gboolean -gtk_scale_button_accessible_do_action (AtkAction *action, - int i) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return FALSE; - - if (!gtk_widget_is_sensitive (widget) || !gtk_widget_get_visible (widget)) - return FALSE; - - switch (i) - { - case 0: - g_signal_emit_by_name (widget, "popup"); - return TRUE; - case 1: - g_signal_emit_by_name (widget, "popdown"); - return TRUE; - default: - return FALSE; - } -} - -static int -gtk_scale_button_accessible_get_n_actions (AtkAction *action) -{ - return 2; -} - -static const char * -gtk_scale_button_accessible_get_description (AtkAction *action, - int i) -{ - switch (i) - { - case 0: - return C_("Action description", "Pops up the slider"); - case 1: - return C_("Action description", "Dismisses the slider"); - default: - return NULL; - } -} - -static const char * -gtk_scale_button_accessible_action_get_name (AtkAction *action, - int i) -{ - switch (i) - { - case 0: - return "popup"; - case 1: - return "popdown"; - default: - return NULL; - } -} - -static const char * -gtk_scale_button_accessible_action_get_localized_name (AtkAction *action, - int i) -{ - switch (i) - { - case 0: - return C_("Action name", "Popup"); - case 1: - return C_("Action name", "Dismiss"); - default: - return NULL; - } -} - -static void -atk_action_interface_init (AtkActionIface *iface) -{ - iface->do_action = gtk_scale_button_accessible_do_action; - iface->get_n_actions = gtk_scale_button_accessible_get_n_actions; - iface->get_description = gtk_scale_button_accessible_get_description; - iface->get_name = gtk_scale_button_accessible_action_get_name; - iface->get_localized_name = gtk_scale_button_accessible_action_get_localized_name; -} - -static void -gtk_scale_button_accessible_get_current_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (widget)); - if (adjustment == NULL) - return; - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_adjustment_get_value (adjustment)); -} - -static void -gtk_scale_button_accessible_get_maximum_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (widget)); - if (adjustment == NULL) - return; - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_adjustment_get_upper (adjustment)); -} - -static void -gtk_scale_button_accessible_get_minimum_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (widget)); - if (adjustment == NULL) - return; - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_adjustment_get_lower (adjustment)); -} - -static void -gtk_scale_button_accessible_get_minimum_increment (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (widget)); - if (adjustment == NULL) - return; - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_adjustment_get_minimum_increment (adjustment)); -} - -static gboolean -gtk_scale_button_accessible_set_current_value (AtkValue *obj, - const GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (widget)); - if (adjustment == NULL) - return FALSE; - - gtk_adjustment_set_value (adjustment, g_value_get_double (value)); - - return TRUE; -} - -static void -gtk_scale_button_accessible_get_value_and_text (AtkValue *obj, - double *value, - char **text) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (widget)); - if (adjustment == NULL) - return; - - *value = gtk_adjustment_get_value (adjustment); - *text = NULL; -} - -static AtkRange * -gtk_scale_button_accessible_get_range (AtkValue *obj) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (widget)); - if (adjustment == NULL) - return NULL; - - return atk_range_new (gtk_adjustment_get_lower (adjustment), - gtk_adjustment_get_upper (adjustment), - NULL); -} - -static void -gtk_scale_button_accessible_set_value (AtkValue *obj, - const double value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (widget)); - if (adjustment == NULL) - return; - - gtk_adjustment_set_value (adjustment, value); -} - -static double -gtk_scale_button_accessible_get_increment (AtkValue *obj) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (widget)); - if (adjustment == NULL) - return 0; - - return gtk_adjustment_get_minimum_increment (adjustment); -} - -static void -atk_value_interface_init (AtkValueIface *iface) -{ - iface->get_current_value = gtk_scale_button_accessible_get_current_value; - iface->get_maximum_value = gtk_scale_button_accessible_get_maximum_value; - iface->get_minimum_value = gtk_scale_button_accessible_get_minimum_value; - iface->get_minimum_increment = gtk_scale_button_accessible_get_minimum_increment; - iface->set_current_value = gtk_scale_button_accessible_set_current_value; - - iface->get_value_and_text = gtk_scale_button_accessible_get_value_and_text; - iface->get_range = gtk_scale_button_accessible_get_range; - iface->set_value = gtk_scale_button_accessible_set_value; - iface->get_increment = gtk_scale_button_accessible_get_increment; -} diff --git a/gtk/a11y/gtkscalebuttonaccessible.h b/gtk/a11y/gtkscalebuttonaccessible.h deleted file mode 100644 index 7b0538bdb4..0000000000 --- a/gtk/a11y/gtkscalebuttonaccessible.h +++ /dev/null @@ -1,54 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2008 Jan Arne Petersen <jap@gnome.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_SCALE_BUTTON_ACCESSIBLE_H__ -#define __GTK_SCALE_BUTTON_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkbuttonaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_SCALE_BUTTON_ACCESSIBLE (gtk_scale_button_accessible_get_type ()) -#define GTK_SCALE_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SCALE_BUTTON_ACCESSIBLE, GtkScaleButtonAccessible)) -#define GTK_SCALE_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SCALE_BUTTON_ACCESSIBLE, GtkScaleButtonAccessibleClass)) -#define GTK_IS_SCALE_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SCALE_BUTTON_ACCESSIBLE)) -#define GTK_IS_SCALE_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SCALE_BUTTON_ACCESSIBLE)) -#define GTK_SCALE_BUTTON_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SCALE_BUTTON_ACCESSIBLE, GtkScaleButtonAccessibleClass)) - -typedef struct _GtkScaleButtonAccessible GtkScaleButtonAccessible; -typedef struct _GtkScaleButtonAccessibleClass GtkScaleButtonAccessibleClass; - -struct _GtkScaleButtonAccessible -{ - GtkWidgetAccessible parent; -}; - -struct _GtkScaleButtonAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_scale_button_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_SCALE_BUTTON_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkscrollbaraccessible.c b/gtk/a11y/gtkscrollbaraccessible.c deleted file mode 100644 index 6a65ecf9de..0000000000 --- a/gtk/a11y/gtkscrollbaraccessible.c +++ /dev/null @@ -1,293 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <string.h> -#include <gtk/gtk.h> -#include "gtkscrollbaraccessible.h" - -typedef struct -{ - GtkAdjustment *adjustment; - gulong value_changed_id; -} GtkScrollbarAccessiblePrivate; - -static void atk_value_interface_init (AtkValueIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkScrollbarAccessible, gtk_scrollbar_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_ADD_PRIVATE (GtkScrollbarAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, atk_value_interface_init)) - -static void -on_value_changed (GtkAdjustment *adjustment, - gpointer data) -{ - GtkScrollbarAccessible *self = data; - - g_object_notify (G_OBJECT (self), "accessible-value"); -} - -static void -on_adjustment_changed (GObject *gobject, - GParamSpec *pspec, - gpointer data) -{ - GtkScrollbar *scrollbar = GTK_SCROLLBAR (gobject); - GtkScrollbarAccessible *self = data; - GtkScrollbarAccessiblePrivate *priv = - gtk_scrollbar_accessible_get_instance_private (self); - GtkAdjustment *adjustment = - gtk_scrollbar_get_adjustment (scrollbar); - - if (priv->adjustment == adjustment) - return; - - if (priv->adjustment != NULL && priv->value_changed_id != 0) - { - g_signal_handler_disconnect (priv->adjustment, priv->value_changed_id); - priv->value_changed_id = 0; - } - - g_clear_object (&priv->adjustment); - - if (adjustment != NULL) - { - priv->adjustment = g_object_ref (adjustment); - priv->value_changed_id = - g_signal_connect (priv->adjustment, "value-changed", - G_CALLBACK (on_value_changed), - self); - } -} - -static void -gtk_scrollbar_accessible_dispose (GObject *gobject) -{ - GtkScrollbarAccessible *self = GTK_SCROLLBAR_ACCESSIBLE (gobject); - GtkScrollbarAccessiblePrivate *priv = - gtk_scrollbar_accessible_get_instance_private (self); - - if (priv->adjustment != NULL && priv->value_changed_id != 0) - { - g_signal_handler_disconnect (priv->adjustment, priv->value_changed_id); - priv->value_changed_id = 0; - } - - g_clear_object (&priv->adjustment); - - G_OBJECT_CLASS (gtk_scrollbar_accessible_parent_class)->dispose (gobject); -} - -static void -gtk_scrollbar_accessible_initialize (AtkObject *obj, - gpointer data) -{ - GtkScrollbar *scrollbar = data; - - ATK_OBJECT_CLASS (gtk_scrollbar_accessible_parent_class)->initialize (obj, data); - - g_signal_connect (scrollbar, "notify::adjustment", - G_CALLBACK (on_adjustment_changed), - obj); -} - -static void -gtk_scrollbar_accessible_class_init (GtkScrollbarAccessibleClass *klass) -{ - AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass); - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - atk_object_class->initialize = gtk_scrollbar_accessible_initialize; - - gobject_class->dispose = gtk_scrollbar_accessible_dispose; -} - -static void -gtk_scrollbar_accessible_init (GtkScrollbarAccessible *self) -{ - ATK_OBJECT (self)->role = ATK_ROLE_SCROLL_BAR; -} - -static void -gtk_scrollbar_accessible_get_current_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (widget)); - if (adjustment == NULL) - return; - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_adjustment_get_value (adjustment)); -} - -static void -gtk_scrollbar_accessible_get_maximum_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - double max; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (widget)); - if (adjustment == NULL) - return; - - max = gtk_adjustment_get_upper (adjustment) - - gtk_adjustment_get_page_size (adjustment); - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, max); -} - -static void -gtk_scrollbar_accessible_get_minimum_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (widget)); - if (adjustment == NULL) - return; - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_adjustment_get_lower (adjustment)); -} - -static void -gtk_scrollbar_accessible_get_minimum_increment (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (widget)); - if (adjustment == NULL) - return; - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_adjustment_get_minimum_increment (adjustment)); -} - -static gboolean -gtk_scrollbar_accessible_set_current_value (AtkValue *obj, - const GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (widget)); - if (adjustment == NULL) - return FALSE; - - gtk_adjustment_set_value (adjustment, g_value_get_double (value)); - - return TRUE; -} - -static void -gtk_scrollbar_accessible_get_value_and_text (AtkValue *obj, - double *value, - char **text) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (widget)); - if (adjustment == NULL) - return; - - *value = gtk_adjustment_get_value (adjustment); - *text = NULL; -} - -static AtkRange * -gtk_scrollbar_accessible_get_range (AtkValue *obj) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - double min, max; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (widget)); - if (adjustment == NULL) - return NULL; - - min = gtk_adjustment_get_lower (adjustment); - max = gtk_adjustment_get_upper (adjustment) - - gtk_adjustment_get_page_size (adjustment); - - return atk_range_new (min, max, NULL); -} - -static void -gtk_scrollbar_accessible_set_value (AtkValue *obj, - const double value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (widget)); - if (adjustment == NULL) - return; - - gtk_adjustment_set_value (adjustment, value); -} - -static double -gtk_scrollbar_accessible_get_increment (AtkValue *obj) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (widget)); - if (adjustment == NULL) - return 0; - - return gtk_adjustment_get_minimum_increment (adjustment); -} - -static void -atk_value_interface_init (AtkValueIface *iface) -{ - iface->get_current_value = gtk_scrollbar_accessible_get_current_value; - iface->get_maximum_value = gtk_scrollbar_accessible_get_maximum_value; - iface->get_minimum_value = gtk_scrollbar_accessible_get_minimum_value; - iface->get_minimum_increment = gtk_scrollbar_accessible_get_minimum_increment; - iface->set_current_value = gtk_scrollbar_accessible_set_current_value; - - iface->get_value_and_text = gtk_scrollbar_accessible_get_value_and_text; - iface->get_range = gtk_scrollbar_accessible_get_range; - iface->set_value = gtk_scrollbar_accessible_set_value; - iface->get_increment = gtk_scrollbar_accessible_get_increment; -} diff --git a/gtk/a11y/gtkscrollbaraccessible.h b/gtk/a11y/gtkscrollbaraccessible.h deleted file mode 100644 index bac0e3fd48..0000000000 --- a/gtk/a11y/gtkscrollbaraccessible.h +++ /dev/null @@ -1,54 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_SCROLLBAR_ACCESSIBLE_H__ -#define __GTK_SCROLLBAR_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_SCROLLBAR_ACCESSIBLE (gtk_scrollbar_accessible_get_type ()) -#define GTK_SCROLLBAR_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SCROLLBAR_ACCESSIBLE, GtkScrollbarAccessible)) -#define GTK_SCROLLBAR_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SCROLLBAR_ACCESSIBLE, GtkScrollbarAccessibleClass)) -#define GTK_IS_SCROLLBAR_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SCROLLBAR_ACCESSIBLE)) -#define GTK_IS_SCROLLBAR_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SCROLLBAR_ACCESSIBLE)) -#define GTK_SCROLLBAR_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SCROLLBAR_ACCESSIBLE, GtkScrollbarAccessibleClass)) - -typedef struct _GtkScrollbarAccessible GtkScrollbarAccessible; -typedef struct _GtkScrollbarAccessibleClass GtkScrollbarAccessibleClass; - -struct _GtkScrollbarAccessible -{ - GtkWidgetAccessible parent; -}; - -struct _GtkScrollbarAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_scrollbar_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_SCROLLBAR_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkscrolledwindowaccessible.c b/gtk/a11y/gtkscrolledwindowaccessible.c deleted file mode 100644 index 9856f858b2..0000000000 --- a/gtk/a11y/gtkscrolledwindowaccessible.c +++ /dev/null @@ -1,173 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <gtk/gtk.h> -#include "gtkscrolledwindowaccessible.h" - - -G_DEFINE_TYPE (GtkScrolledWindowAccessible, gtk_scrolled_window_accessible, GTK_TYPE_WIDGET_ACCESSIBLE) - -static void -visibility_changed (GObject *object, - GParamSpec *pspec, - gpointer user_data) -{ - if (!g_strcmp0 (pspec->name, "visible")) - { - int index; - int n_children; - gboolean child_added = FALSE; - AtkObject *child; - GtkWidget *widget; - GtkScrolledWindow *scrolled_window; - GtkWidget *hscrollbar, *vscrollbar; - GtkAccessible *accessible = GTK_ACCESSIBLE (user_data); - - widget = gtk_accessible_get_widget (user_data); - if (widget == NULL) - return; - - scrolled_window = GTK_SCROLLED_WINDOW (widget); - index = n_children = 1; - - hscrollbar = gtk_scrolled_window_get_hscrollbar (scrolled_window); - vscrollbar = gtk_scrolled_window_get_vscrollbar (scrolled_window); - - if ((gpointer) object == (gpointer) (hscrollbar)) - { - if (gtk_scrolled_window_get_hscrollbar (scrolled_window)) - child_added = TRUE; - - child = gtk_widget_get_accessible (hscrollbar); - } - else if ((gpointer) object == (gpointer) (vscrollbar)) - { - if (gtk_scrolled_window_get_vscrollbar (scrolled_window)) - child_added = TRUE; - - child = gtk_widget_get_accessible (vscrollbar); - if (gtk_scrolled_window_get_hscrollbar (scrolled_window)) - index = n_children + 1; - } - else - { - g_assert_not_reached (); - return; - } - - if (child_added) - g_signal_emit_by_name (accessible, "children-changed::add", index, child, NULL); - else - g_signal_emit_by_name (accessible, "children-changed::remove", index, child, NULL); - - } -} - -static void -gtk_scrolled_window_accessible_initialize (AtkObject *obj, - gpointer data) -{ - GtkScrolledWindow *window; - - ATK_OBJECT_CLASS (gtk_scrolled_window_accessible_parent_class)->initialize (obj, data); - - window = GTK_SCROLLED_WINDOW (data); - - g_signal_connect_object (gtk_scrolled_window_get_hscrollbar (window), "notify::visible", - G_CALLBACK (visibility_changed), - obj, 0); - g_signal_connect_object (gtk_scrolled_window_get_vscrollbar (window), "notify::visible", - G_CALLBACK (visibility_changed), - obj, 0); - - obj->role = ATK_ROLE_SCROLL_PANE; -} - -static int -gtk_scrolled_window_accessible_get_n_children (AtkObject *object) -{ - GtkWidget *widget; - GtkScrolledWindow *scrolled_window; - int n_children; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (object)); - if (widget == NULL) - return 0; - - scrolled_window = GTK_SCROLLED_WINDOW (widget); - - n_children = 0; - if (gtk_scrolled_window_get_child (scrolled_window)) - n_children++; - if (gtk_scrolled_window_get_hscrollbar (scrolled_window)) - n_children++; - if (gtk_scrolled_window_get_vscrollbar (scrolled_window)) - n_children++; - - return n_children; -} - -static AtkObject * -gtk_scrolled_window_accessible_ref_child (AtkObject *obj, - int child) -{ - GtkWidget *widget; - GtkScrolledWindow *scrolled_window; - GtkWidget *hscrollbar, *vscrollbar; - GtkWidget *c; - GtkWidget *chosen = NULL; - - g_return_val_if_fail (child >= 0, NULL); - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - scrolled_window = GTK_SCROLLED_WINDOW (widget); - c = gtk_scrolled_window_get_child (scrolled_window); - hscrollbar = gtk_scrolled_window_get_hscrollbar (scrolled_window); - vscrollbar = gtk_scrolled_window_get_vscrollbar (scrolled_window); - - if (child == 2) - chosen = vscrollbar; - else if (child == 1) - chosen = c ? hscrollbar : vscrollbar; - else if (child == 0) - chosen = c ? c : (hscrollbar ? hscrollbar : vscrollbar); - - if (chosen) - return g_object_ref (gtk_widget_get_accessible (chosen)); - - return NULL; -} - -static void -gtk_scrolled_window_accessible_class_init (GtkScrolledWindowAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->get_n_children = gtk_scrolled_window_accessible_get_n_children; - class->ref_child = gtk_scrolled_window_accessible_ref_child; - class->initialize = gtk_scrolled_window_accessible_initialize; -} - -static void -gtk_scrolled_window_accessible_init (GtkScrolledWindowAccessible *window) -{ -} diff --git a/gtk/a11y/gtkscrolledwindowaccessible.h b/gtk/a11y/gtkscrolledwindowaccessible.h deleted file mode 100644 index 56d9ff8ec6..0000000000 --- a/gtk/a11y/gtkscrolledwindowaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_SCROLLED_WINDOW_ACCESSIBLE_H__ -#define __GTK_SCROLLED_WINDOW_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_SCROLLED_WINDOW_ACCESSIBLE (gtk_scrolled_window_accessible_get_type ()) -#define GTK_SCROLLED_WINDOW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SCROLLED_WINDOW_ACCESSIBLE, GtkScrolledWindowAccessible)) -#define GTK_SCROLLED_WINDOW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SCROLLED_WINDOW_ACCESSIBLE, GtkScrolledWindowAccessibleClass)) -#define GTK_IS_SCROLLED_WINDOW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SCROLLED_WINDOW_ACCESSIBLE)) -#define GTK_IS_SCROLLED_WINDOW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SCROLLED_WINDOW_ACCESSIBLE)) -#define GTK_SCROLLED_WINDOW_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SCROLLED_WINDOW_ACCESSIBLE, GtkScrolledWindowAccessibleClass)) - -typedef struct _GtkScrolledWindowAccessible GtkScrolledWindowAccessible; -typedef struct _GtkScrolledWindowAccessibleClass GtkScrolledWindowAccessibleClass; -typedef struct _GtkScrolledWindowAccessiblePrivate GtkScrolledWindowAccessiblePrivate; - -struct _GtkScrolledWindowAccessible -{ - GtkWidgetAccessible parent; - - GtkScrolledWindowAccessiblePrivate *priv; -}; - -struct _GtkScrolledWindowAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_scrolled_window_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_SCROLLED_WINDOW_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtksearchentryaccessible.c b/gtk/a11y/gtksearchentryaccessible.c deleted file mode 100644 index 27b009971e..0000000000 --- a/gtk/a11y/gtksearchentryaccessible.c +++ /dev/null @@ -1,1010 +0,0 @@ -/* gtksearchentryaccessible.c: GtkWidgetAccessible for GtkSearchEntry - * - * Copyright 2020 GNOME Foundation - * - * SPDX-License-Identifier: LGPL-2.1-or-later - * - * 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.1 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtksearchentryaccessible.h" - -#include "gtkeditable.h" -#include "gtkimage.h" -#include "gtkintl.h" -#include "gtklabel.h" -#include "gtkpango.h" -#include "gtksearchentryprivate.h" -#include "gtkstylecontextprivate.h" -#include "gtktextprivate.h" - -struct _GtkSearchEntryAccessible -{ - GtkWidgetAccessible parent_instance; - - int cursor_position; - int selection_bound; -}; - -static void atk_editable_text_interface_init (AtkEditableTextIface *iface); -static void atk_text_interface_init (AtkTextIface *iface); -static void atk_action_interface_init (AtkActionIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkSearchEntryAccessible, gtk_search_entry_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_EDITABLE_TEXT, atk_editable_text_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)) - -static inline GtkText * -get_text_widget (GtkAccessible *accessible) -{ - GtkSearchEntry *search_entry = - GTK_SEARCH_ENTRY (gtk_accessible_get_widget (accessible)); - - if (search_entry == NULL) - return NULL; - - return gtk_search_entry_get_text_widget (search_entry); -} - -static gboolean -check_for_selection_change (GtkSearchEntryAccessible *self, - GtkEditable *editable) -{ - gboolean ret_val = FALSE; - int start, end; - - if (gtk_editable_get_selection_bounds (editable, &start, &end)) - { - if (end != self->cursor_position || - start != self->selection_bound) - /* - * This check is here as this function can be called - * for notification of selection_bound and current_pos. - * The values of current_pos and selection_bound may be the same - * for both notifications and we only want to generate one - * text_selection_changed signal. - */ - ret_val = TRUE; - } - else - { - /* We had a selection */ - ret_val = (self->cursor_position != self->selection_bound); - } - - self->cursor_position = end; - self->selection_bound = start; - - return ret_val; -} - -static void -insert_text_cb (GtkEditable *editable, - char *new_text, - int new_text_length, - int *position, - GtkSearchEntryAccessible *self) -{ - int length; - - if (new_text_length == 0) - return; - - length = g_utf8_strlen (new_text, new_text_length); - - g_signal_emit_by_name (self, - "text-changed::insert", - *position - length, - length); -} - -static void -delete_text_cb (GtkEditable *editable, - int start, - int end, - GtkSearchEntryAccessible *self) -{ - GtkText *text; - - text = get_text_widget (GTK_ACCESSIBLE (self)); - if (text == NULL) - return; - - if (end < 0) - { - char *contents; - - contents = gtk_text_get_display_text (text, 0, -1); - end = g_utf8_strlen (contents, -1); - - g_free (contents); - } - - if (end == start) - return; - - g_signal_emit_by_name (self, - "text-changed::delete", - start, - end - start); -} - -static int -gtk_search_entry_accessible_get_n_children (AtkObject *object) -{ - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (object)); - if (widget == NULL) - return 0; - - int count = 0; - for (GtkWidget *child = gtk_widget_get_first_child (widget); - child != NULL; - child = gtk_widget_get_next_sibling (child)) - { - if (GTK_IS_IMAGE (child) && gtk_widget_get_child_visible (child)) - count += 1; - } - - return count; -} - -static AtkObject * -gtk_search_entry_accessible_ref_child (AtkObject *obj, - int i) -{ - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - for (GtkWidget *child = gtk_widget_get_first_child (widget); - child != NULL; - child = gtk_widget_get_next_sibling (child)) - { - if (GTK_IS_IMAGE (child) && gtk_widget_get_child_visible (child)) - return g_object_ref (gtk_widget_get_accessible (child)); - } - - return NULL; -} - -static AtkAttributeSet * -gtk_search_entry_accessible_get_attributes (AtkObject *accessible) -{ - GtkWidget *widget; - AtkAttributeSet *attributes; - AtkAttribute *placeholder_text; - char *text = NULL; - - attributes = ATK_OBJECT_CLASS (gtk_search_entry_accessible_parent_class)->get_attributes (accessible); - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return attributes; - - g_object_get (widget, "placeholder-text", &text, NULL); - if (text == NULL) - return attributes; - - placeholder_text = g_malloc (sizeof (AtkAttribute)); - placeholder_text->name = g_strdup ("placeholder-text"); - placeholder_text->value = text; - - attributes = g_slist_append (attributes, placeholder_text); - - return attributes; -} - -static void -on_cursor_position_changed (GObject *gobject, - GParamSpec *pspec, - gpointer data) -{ - GtkSearchEntryAccessible *self = data; - GtkEditable *editable = GTK_EDITABLE (gobject); - - if (check_for_selection_change (self, editable)) - g_signal_emit_by_name (self, "text-selection-changed"); - - // The entry cursor position has moved so generate the signal - g_signal_emit_by_name (self, "text-caret-moved", - gtk_editable_get_position (editable)); -} - -static void -on_selection_bound_changed (GObject *gobject, - GParamSpec *pspec, - gpointer data) -{ - GtkSearchEntryAccessible *self = data; - GtkEditable *editable = GTK_EDITABLE (gobject); - - if (check_for_selection_change (self, editable)) - g_signal_emit_by_name (self, "text-selection-changed"); -} - -static void -gtk_search_entry_accessible_initialize (AtkObject *object, - gpointer data) -{ - GtkSearchEntryAccessible *self = GTK_SEARCH_ENTRY_ACCESSIBLE (object); - GtkEditable *editable = data; - GtkWidget *widget = data; - int start_pos, end_pos; - - gtk_editable_get_selection_bounds (editable, &start_pos, &end_pos); - self->cursor_position = end_pos; - self->selection_bound = start_pos; - - /* Set up signal callbacks */ - g_signal_connect_after (widget, "insert-text", G_CALLBACK (insert_text_cb), self); - g_signal_connect (widget, "delete-text", G_CALLBACK (delete_text_cb), self); - g_signal_connect (widget, "notify::cursor-position", - G_CALLBACK (on_cursor_position_changed), self); - g_signal_connect (widget, "notify::selection-bound", - G_CALLBACK (on_selection_bound_changed), self); -} - -static void -gtk_search_entry_accessible_class_init (GtkSearchEntryAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->initialize = gtk_search_entry_accessible_initialize; - class->get_attributes = gtk_search_entry_accessible_get_attributes; - class->get_n_children = gtk_search_entry_accessible_get_n_children; - class->ref_child = gtk_search_entry_accessible_ref_child; -} - -static void -gtk_search_entry_accessible_init (GtkSearchEntryAccessible *self) -{ - AtkObject *atk_obj = ATK_OBJECT (self); - - atk_obj->role = ATK_ROLE_TEXT; - atk_object_set_name (atk_obj, _("Search")); -} - -static char * -gtk_search_entry_accessible_get_text (AtkText *atk_text, - int start_pos, - int end_pos) -{ - GtkText *text = get_text_widget (GTK_ACCESSIBLE (atk_text)); - - if (text == NULL) - return NULL; - - return gtk_text_get_display_text (text, start_pos, end_pos); -} - -static char * -gtk_search_entry_accessible_get_text_before_offset (AtkText *atk_text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkText *text = get_text_widget (GTK_ACCESSIBLE (atk_text)); - - if (text == NULL) - return NULL; - - return _gtk_pango_get_text_before (gtk_text_get_layout (text), - boundary_type, offset, - start_offset, end_offset); -} - -static char * -gtk_search_entry_accessible_get_text_at_offset (AtkText *atk_text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkText *text = get_text_widget (GTK_ACCESSIBLE (atk_text)); - - if (text == NULL) - return NULL; - - return _gtk_pango_get_text_at (gtk_text_get_layout (text), - boundary_type, offset, - start_offset, end_offset); -} - -static char * -gtk_search_entry_accessible_get_text_after_offset (AtkText *atk_text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkText *text = get_text_widget (GTK_ACCESSIBLE (atk_text)); - - if (text == NULL) - return NULL; - - return _gtk_pango_get_text_after (gtk_text_get_layout (text), - boundary_type, offset, - start_offset, end_offset); -} - -static int -gtk_search_entry_accessible_get_character_count (AtkText *atk_text) -{ - GtkText *text = get_text_widget (GTK_ACCESSIBLE (atk_text)); - if (text == NULL) - return 0; - - char *display_text = gtk_text_get_display_text (text, 0, -1); - - int char_count = 0; - if (display_text) - { - char_count = g_utf8_strlen (display_text, -1); - g_free (display_text); - } - - return char_count; -} - -static int -gtk_search_entry_accessible_get_caret_offset (AtkText *atk_text) -{ - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - - if (widget == NULL) - return -1; - - int cursor_position = 0; - gboolean result = gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), NULL, &cursor_position); - if (!result) - return -1; - - return cursor_position; -} - -static gboolean -gtk_search_entry_accessible_set_caret_offset (AtkText *atk_text, - int offset) -{ - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - if (widget == NULL) - return FALSE; - - gtk_editable_set_position (GTK_EDITABLE (widget), offset); - - return TRUE; -} - -static AtkAttributeSet * -add_text_attribute (AtkAttributeSet *attributes, - AtkTextAttribute attr, - int i) -{ - AtkAttribute *at; - - at = g_new (AtkAttribute, 1); - at->name = g_strdup (atk_text_attribute_get_name (attr)); - at->value = g_strdup (atk_text_attribute_get_value (attr, i)); - - return g_slist_prepend (attributes, at); -} - -static AtkAttributeSet * -gtk_search_entry_accessible_get_run_attributes (AtkText *atk_text, - int offset, - int *start_offset, - int *end_offset) -{ - GtkText *text = get_text_widget (GTK_ACCESSIBLE (atk_text)); - - if (text == NULL) - return NULL; - - AtkAttributeSet *attributes = NULL; - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_DIRECTION, - gtk_widget_get_direction (GTK_WIDGET (text))); - attributes = _gtk_pango_get_run_attributes (attributes, - gtk_text_get_layout (text), - offset, - start_offset, - end_offset); - - return attributes; -} - -static AtkAttributeSet * -gtk_search_entry_accessible_get_default_attributes (AtkText *atk_text) -{ - GtkText *text = get_text_widget (GTK_ACCESSIBLE (atk_text)); - - if (text == NULL) - return NULL; - - AtkAttributeSet *attributes = NULL; - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_DIRECTION, - gtk_widget_get_direction (GTK_WIDGET (text))); - attributes = _gtk_pango_get_default_attributes (attributes, - gtk_text_get_layout (text)); - attributes = _gtk_style_context_get_attributes (attributes, - gtk_widget_get_style_context (GTK_WIDGET (text))); - - return attributes; -} - -static void -gtk_search_entry_accessible_get_character_extents (AtkText *atk_text, - int offset, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coords) -{ - GtkText *text = get_text_widget (GTK_ACCESSIBLE (atk_text)); - PangoRectangle char_rect; - char *entry_text; - int index, x_layout, y_layout; - GtkAllocation allocation; - - if (text == NULL) - return; - - gtk_text_get_layout_offsets (text, &x_layout, &y_layout); - entry_text = gtk_text_get_display_text (text, 0, -1); - index = g_utf8_offset_to_pointer (entry_text, offset) - entry_text; - g_free (entry_text); - - pango_layout_index_to_pos (gtk_text_get_layout (text), index, &char_rect); - pango_extents_to_pixels (&char_rect, NULL); - - gtk_widget_get_allocation (GTK_WIDGET (text), &allocation); - - *x = allocation.x + x_layout + char_rect.x; - *y = allocation.y + y_layout + char_rect.y; - *width = char_rect.width; - *height = char_rect.height; -} - -static int -gtk_search_entry_accessible_get_offset_at_point (AtkText *atk_text, - int x, - int y, - AtkCoordType coords) -{ - GtkText *text = get_text_widget (GTK_ACCESSIBLE (atk_text)); - int index, x_layout, y_layout; - int x_local, y_local; - glong offset; - - if (text == NULL) - return 1; - - gtk_text_get_layout_offsets (text, &x_layout, &y_layout); - - x_local = x - x_layout; - y_local = y - y_layout; - - if (!pango_layout_xy_to_index (gtk_text_get_layout (text), - x_local * PANGO_SCALE, - y_local * PANGO_SCALE, - &index, NULL)) - { - if (x_local < 0 || y_local < 0) - index = 0; - else - index = -1; - } - - offset = -1; - if (index != -1) - { - char *entry_text = gtk_text_get_display_text (text, 0, -1); - offset = g_utf8_pointer_to_offset (entry_text, entry_text + index); - g_free (entry_text); - } - - return offset; -} - -static int -gtk_search_entry_accessible_get_n_selections (AtkText *text) -{ - GtkWidget *widget; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return 0; - - if (gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), &start, &end)) - return 1; - - return 0; -} - -static char * -gtk_search_entry_accessible_get_selection (AtkText *text, - int selection_num, - int *start_pos, - int *end_pos) -{ - GtkEditable *editable; - GtkWidget *widget; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - if (selection_num != 0) - return NULL; - - editable = GTK_EDITABLE (widget); - if (gtk_editable_get_selection_bounds (editable, &start, &end)) - { - if (start_pos != NULL) - *start_pos = start; - if (end_pos != NULL) - *end_pos = end; - - return gtk_editable_get_chars (editable, start, end); - } - - return NULL; -} - -static gboolean -gtk_search_entry_accessible_add_selection (AtkText *text, - int start_pos, - int end_pos) -{ - GtkEntry *entry; - GtkWidget *widget; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - entry = GTK_ENTRY (widget); - - if (!gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start, &end)) - { - gtk_editable_select_region (GTK_EDITABLE (entry), start_pos, end_pos); - return TRUE; - } - else - return FALSE; -} - -static gboolean -gtk_search_entry_accessible_remove_selection (AtkText *text, - int selection_num) -{ - GtkWidget *widget; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - if (selection_num != 0) - return FALSE; - - if (gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), &start, &end)) - { - gtk_editable_select_region (GTK_EDITABLE (widget), end, end); - return TRUE; - } - else - return FALSE; -} - -static gboolean -gtk_search_entry_accessible_set_selection (AtkText *text, - int selection_num, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - if (selection_num != 0) - return FALSE; - - if (gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), &start, &end)) - { - gtk_editable_select_region (GTK_EDITABLE (widget), start_pos, end_pos); - return TRUE; - } - else - return FALSE; -} - -static gunichar -gtk_search_entry_accessible_get_character_at_offset (AtkText *atk_text, - int offset) -{ - GtkText *text; - char *contents; - char *index; - gunichar result; - - result = '\0'; - - text = get_text_widget (GTK_ACCESSIBLE (atk_text)); - if (text == NULL) - return 0; - - if (!gtk_text_get_visibility (text)) - return result; - - contents = gtk_text_get_display_text (text, 0, -1); - if (offset < g_utf8_strlen (contents, -1)) - { - index = g_utf8_offset_to_pointer (contents, offset); - result = g_utf8_get_char (index); - g_free (contents); - } - - return result; -} - -static void -atk_text_interface_init (AtkTextIface *iface) -{ - iface->get_text = gtk_search_entry_accessible_get_text; - iface->get_character_at_offset = gtk_search_entry_accessible_get_character_at_offset; - iface->get_text_before_offset = gtk_search_entry_accessible_get_text_before_offset; - iface->get_text_at_offset = gtk_search_entry_accessible_get_text_at_offset; - iface->get_text_after_offset = gtk_search_entry_accessible_get_text_after_offset; - iface->get_caret_offset = gtk_search_entry_accessible_get_caret_offset; - iface->set_caret_offset = gtk_search_entry_accessible_set_caret_offset; - iface->get_character_count = gtk_search_entry_accessible_get_character_count; - iface->get_n_selections = gtk_search_entry_accessible_get_n_selections; - iface->get_selection = gtk_search_entry_accessible_get_selection; - iface->add_selection = gtk_search_entry_accessible_add_selection; - iface->remove_selection = gtk_search_entry_accessible_remove_selection; - iface->set_selection = gtk_search_entry_accessible_set_selection; - iface->get_run_attributes = gtk_search_entry_accessible_get_run_attributes; - iface->get_default_attributes = gtk_search_entry_accessible_get_default_attributes; - iface->get_character_extents = gtk_search_entry_accessible_get_character_extents; - iface->get_offset_at_point = gtk_search_entry_accessible_get_offset_at_point; -} - -static void -gtk_search_entry_accessible_set_text_contents (AtkEditableText *text, - const char *string) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - if (!gtk_editable_get_editable (GTK_EDITABLE (widget))) - return; - - gtk_editable_set_text (GTK_EDITABLE (widget), string); -} - -static void -gtk_search_entry_accessible_insert_text (AtkEditableText *text, - const char *string, - int length, - int *position) -{ - GtkWidget *widget; - GtkEditable *editable; - int pos = 0; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - if (position != NULL) - pos = *position; - - gtk_editable_insert_text (editable, string, length, &pos); - gtk_editable_set_position (editable, pos); - - if (position != NULL) - *position = pos; -} - -static void -gtk_search_entry_accessible_copy_text (AtkEditableText *text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkEditable *editable; - GdkClipboard *clipboard; - char *str; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - str = gtk_editable_get_chars (editable, start_pos, end_pos); - clipboard = gtk_widget_get_clipboard (widget); - gdk_clipboard_set_text (clipboard, str); - g_free (str); -} - -static void -gtk_search_entry_accessible_cut_text (AtkEditableText *text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkEditable *editable; - GdkClipboard *clipboard; - char *str; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - str = gtk_editable_get_chars (editable, start_pos, end_pos); - clipboard = gtk_widget_get_clipboard (widget); - gdk_clipboard_set_text (clipboard, str); - gtk_editable_delete_text (editable, start_pos, end_pos); -} - -static void -gtk_search_entry_accessible_delete_text (AtkEditableText *text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkEditable *editable; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - gtk_editable_delete_text (editable, start_pos, end_pos); -} - -typedef struct -{ - GtkEditable *entry; - int position; -} PasteData; - -static void -paste_received_cb (GObject *clipboard, - GAsyncResult *result, - gpointer data) -{ - PasteData *paste = data; - char *text; - - text = gdk_clipboard_read_text_finish (GDK_CLIPBOARD (clipboard), result, NULL); - if (text != NULL) - gtk_editable_insert_text (paste->entry, - text, -1, - &(paste->position)); - - g_object_unref (paste->entry); - g_free (paste); - g_free (text); -} - -static void -gtk_search_entry_accessible_paste_text (AtkEditableText *text, - int position) -{ - GtkWidget *widget; - GtkEditable *editable; - PasteData *paste; - GdkClipboard *clipboard; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - paste = g_new0 (PasteData, 1); - paste->entry = GTK_EDITABLE (widget); - paste->position = position; - - g_object_ref (paste->entry); - clipboard = gtk_widget_get_clipboard (widget); - gdk_clipboard_read_text_async (clipboard, NULL, paste_received_cb, paste); -} - -static void -atk_editable_text_interface_init (AtkEditableTextIface *iface) -{ - iface->set_text_contents = gtk_search_entry_accessible_set_text_contents; - iface->insert_text = gtk_search_entry_accessible_insert_text; - iface->copy_text = gtk_search_entry_accessible_copy_text; - iface->cut_text = gtk_search_entry_accessible_cut_text; - iface->delete_text = gtk_search_entry_accessible_delete_text; - iface->paste_text = gtk_search_entry_accessible_paste_text; - iface->set_run_attributes = NULL; -} - -static gboolean -gtk_search_entry_accessible_do_action (AtkAction *action, - int i) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return FALSE; - - if (!gtk_widget_get_sensitive (widget) || !gtk_widget_get_visible (widget)) - return FALSE; - - if (i == 0) - { - gtk_widget_activate (widget); - return TRUE; - } - - if (i == 1) - { - gtk_editable_set_text (GTK_EDITABLE (widget), ""); - return TRUE; - } - - return FALSE; -} - -static int -gtk_search_entry_accessible_get_n_actions (AtkAction *action) -{ - GtkAccessible *accessible = GTK_ACCESSIBLE (action); - - GtkWidget *widget = gtk_accessible_get_widget (accessible); - if (widget == NULL) - return 0; - - // If the SearchEntry widget contains text, we have a second action - // to clear its contents - int n_actions = 1; - const char *str = gtk_editable_get_text (GTK_EDITABLE (widget)); - if (str != NULL && *str != '\0') - n_actions += 1; - - return n_actions; -} - -static const char * -gtk_search_entry_accessible_get_keybinding (AtkAction *action, - int i) -{ - GtkWidget *widget; - GtkWidget *label; - AtkRelationSet *set; - AtkRelation *relation; - GPtrArray *target; - gpointer target_object; - guint key_val; - - if (i != 0) - return NULL; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return NULL; - - set = atk_object_ref_relation_set (ATK_OBJECT (action)); - if (!set) - return NULL; - - label = NULL; - relation = atk_relation_set_get_relation_by_type (set, ATK_RELATION_LABELLED_BY); - if (relation) - { - target = atk_relation_get_target (relation); - - target_object = g_ptr_array_index (target, 0); - label = gtk_accessible_get_widget (GTK_ACCESSIBLE (target_object)); - } - - g_object_unref (set); - - if (GTK_IS_LABEL (label)) - { - key_val = gtk_label_get_mnemonic_keyval (GTK_LABEL (label)); - if (key_val != GDK_KEY_VoidSymbol) - return gtk_accelerator_name (key_val, GDK_ALT_MASK); - } - - return NULL; -} - -static const char * -gtk_search_entry_accessible_action_get_name (AtkAction *action, - int i) -{ - switch (i) - { - case 0: - return "activate"; - - case 1: - return "clear"; - - default: - break; - } - - return NULL; -} - -static const char * -gtk_search_entry_accessible_action_get_localized_name (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action name", "Activate"); - if (i == 1) - return C_("Action name", "Clear"); - - return NULL; -} - -static const char * -gtk_search_entry_accessible_action_get_description (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action description", "Activates the entry"); - - if (i == 1) - return C_("Action description", "Clears the entry"); - - return NULL; -} - -static void -atk_action_interface_init (AtkActionIface *iface) -{ - iface->do_action = gtk_search_entry_accessible_do_action; - iface->get_n_actions = gtk_search_entry_accessible_get_n_actions; - iface->get_keybinding = gtk_search_entry_accessible_get_keybinding; - iface->get_name = gtk_search_entry_accessible_action_get_name; - iface->get_localized_name = gtk_search_entry_accessible_action_get_localized_name; - iface->get_description = gtk_search_entry_accessible_action_get_description; -} diff --git a/gtk/a11y/gtksearchentryaccessible.h b/gtk/a11y/gtksearchentryaccessible.h deleted file mode 100644 index 9fd2d559df..0000000000 --- a/gtk/a11y/gtksearchentryaccessible.h +++ /dev/null @@ -1,48 +0,0 @@ -/* gtksearchentryaccessible.h: A GtkWidgetAccessible for GtkSearchEntry - * - * Copyright 2020 GNOME Foundation - * - * SPDX-License-Identifier: LGPL-2.1-or-later - * - * 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.1 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, see <http://www.gnu.org/licenses/>. - */ - -#pragma once - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkentryaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_SEARCH_ENTRY_ACCESSIBLE (gtk_search_entry_accessible_get_type()) -#define GTK_SEARCH_ENTRY_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SEARCH_ENTRY_ACCESSIBLE, GtkSearchEntryAccessible)) -#define GTK_IS_SEARCH_ENTRY_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SEARCH_ENTRY_ACCESSIBLE)) - -typedef struct _GtkSearchEntryAccessible GtkSearchEntryAccessible; -typedef struct _GtkSearchEntryAccessibleClass GtkSearchEntryAccessibleClass; - -struct _GtkSearchEntryAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_search_entry_accessible_get_type (void) G_GNUC_CONST; - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (GtkSearchEntryAccessible, g_object_unref) - -G_END_DECLS diff --git a/gtk/a11y/gtkspinbuttonaccessible.c b/gtk/a11y/gtkspinbuttonaccessible.c deleted file mode 100644 index 0791b4e9e4..0000000000 --- a/gtk/a11y/gtkspinbuttonaccessible.c +++ /dev/null @@ -1,277 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <string.h> -#include <gtk/gtk.h> -#include "gtkspinbuttonaccessible.h" - -struct _GtkSpinButtonAccessiblePrivate -{ - GtkAdjustment *adjustment; - gulong value_changed_id; -}; - -static void atk_value_interface_init (AtkValueIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkSpinButtonAccessible, gtk_spin_button_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_ADD_PRIVATE (GtkSpinButtonAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, atk_value_interface_init)) - -static void -on_value_changed (GtkAdjustment *adjustment, - GtkSpinButtonAccessible *self) -{ - g_object_notify (G_OBJECT (self), "accessible-value"); -} - -static void -on_adjustment_changed (GObject *gobject, - GParamSpec *pspec, - gpointer data) -{ - GtkSpinButton *spin = GTK_SPIN_BUTTON (gobject); - GtkSpinButtonAccessible *self = data; - GtkSpinButtonAccessiblePrivate *priv = gtk_spin_button_accessible_get_instance_private (self); - GtkAdjustment *adjustment = gtk_spin_button_get_adjustment (spin); - - if (priv->adjustment == adjustment) - return; - - if (priv->adjustment != NULL && priv->value_changed_id != 0) - { - g_signal_handler_disconnect (priv->adjustment, priv->value_changed_id); - priv->value_changed_id = 0; - } - - g_clear_object (&priv->adjustment); - - if (adjustment != NULL) - { - priv->adjustment = g_object_ref (adjustment); - priv->value_changed_id = g_signal_connect (priv->adjustment, "value-changed", - G_CALLBACK (on_value_changed), - self); - } -} - -static void -gtk_spin_button_accessible_initialize (AtkObject *obj, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_spin_button_accessible_parent_class)->initialize (obj, data); - - g_signal_connect (data, "notify::adjustment", G_CALLBACK (on_adjustment_changed), obj); -} - -static void -gtk_spin_button_accessible_dispose (GObject *gobject) -{ - GtkSpinButtonAccessible *self = GTK_SPIN_BUTTON_ACCESSIBLE (gobject); - GtkSpinButtonAccessiblePrivate *priv = - gtk_spin_button_accessible_get_instance_private (self); - - if (priv->adjustment != NULL && priv->value_changed_id != 0) - { - g_signal_handler_disconnect (priv->adjustment, priv->value_changed_id); - priv->value_changed_id = 0; - } - - g_clear_object (&priv->adjustment); - - G_OBJECT_CLASS (gtk_spin_button_accessible_parent_class)->dispose (gobject); -} - -static void -gtk_spin_button_accessible_class_init (GtkSpinButtonAccessibleClass *klass) -{ - AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass); - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - atk_object_class->initialize = gtk_spin_button_accessible_initialize; - - gobject_class->dispose = gtk_spin_button_accessible_dispose; -} - -static void -gtk_spin_button_accessible_init (GtkSpinButtonAccessible *self) -{ - ATK_OBJECT (self)->role = ATK_ROLE_SPIN_BUTTON; -} - -static void -gtk_spin_button_accessible_get_current_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget)); - if (adjustment == NULL) - return; - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_adjustment_get_value (adjustment)); -} - -static void -gtk_spin_button_accessible_get_maximum_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget)); - if (adjustment == NULL) - return; - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_adjustment_get_upper (adjustment)); -} - -static void -gtk_spin_button_accessible_get_minimum_value (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget)); - if (adjustment == NULL) - return; - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_adjustment_get_lower (adjustment)); -} - -static void -gtk_spin_button_accessible_get_minimum_increment (AtkValue *obj, - GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget)); - if (adjustment == NULL) - return; - - memset (value, 0, sizeof (GValue)); - g_value_init (value, G_TYPE_DOUBLE); - g_value_set_double (value, gtk_adjustment_get_minimum_increment (adjustment)); -} - -static gboolean -gtk_spin_button_accessible_set_current_value (AtkValue *obj, - const GValue *value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget)); - if (adjustment == NULL) - return FALSE; - - gtk_adjustment_set_value (adjustment, g_value_get_double (value)); - - return TRUE; -} - -static void -gtk_spin_button_accessible_get_value_and_text (AtkValue *obj, - double *value, - char **text) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget)); - if (adjustment == NULL) - return; - - *value = gtk_adjustment_get_value (adjustment); - *text = NULL; -} - -static AtkRange * -gtk_spin_button_accessible_get_range (AtkValue *obj) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget)); - if (adjustment == NULL) - return NULL; - - return atk_range_new (gtk_adjustment_get_lower (adjustment), - gtk_adjustment_get_upper (adjustment), - NULL); -} - -static void -gtk_spin_button_accessible_set_value (AtkValue *obj, - const double value) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget)); - if (adjustment == NULL) - return; - - gtk_adjustment_set_value (adjustment, value); -} - -static double -gtk_spin_button_accessible_get_increment (AtkValue *obj) -{ - GtkWidget *widget; - GtkAdjustment *adjustment; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget)); - if (adjustment == NULL) - return 0; - - return gtk_adjustment_get_minimum_increment (adjustment); -} - -static void -atk_value_interface_init (AtkValueIface *iface) -{ - iface->get_current_value = gtk_spin_button_accessible_get_current_value; - iface->get_maximum_value = gtk_spin_button_accessible_get_maximum_value; - iface->get_minimum_value = gtk_spin_button_accessible_get_minimum_value; - iface->get_minimum_increment = gtk_spin_button_accessible_get_minimum_increment; - iface->set_current_value = gtk_spin_button_accessible_set_current_value; - - iface->get_value_and_text = gtk_spin_button_accessible_get_value_and_text; - iface->get_range = gtk_spin_button_accessible_get_range; - iface->set_value = gtk_spin_button_accessible_set_value; - iface->get_increment = gtk_spin_button_accessible_get_increment; -} diff --git a/gtk/a11y/gtkspinbuttonaccessible.h b/gtk/a11y/gtkspinbuttonaccessible.h deleted file mode 100644 index 8a2e597669..0000000000 --- a/gtk/a11y/gtkspinbuttonaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_SPIN_BUTTON_ACCESSIBLE_H__ -#define __GTK_SPIN_BUTTON_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkentryaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_SPIN_BUTTON_ACCESSIBLE (gtk_spin_button_accessible_get_type ()) -#define GTK_SPIN_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SPIN_BUTTON_ACCESSIBLE, GtkSpinButtonAccessible)) -#define GTK_SPIN_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SPIN_BUTTON_ACCESSIBLE, GtkSpinButtonAccessibleClass)) -#define GTK_IS_SPIN_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SPIN_BUTTON_ACCESSIBLE)) -#define GTK_IS_SPIN_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SPIN_BUTTON_ACCESSIBLE)) -#define GTK_SPIN_BUTTON_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SPIN_BUTTON_ACCESSIBLE, GtkSpinButtonAccessibleClass)) - -typedef struct _GtkSpinButtonAccessible GtkSpinButtonAccessible; -typedef struct _GtkSpinButtonAccessibleClass GtkSpinButtonAccessibleClass; -typedef struct _GtkSpinButtonAccessiblePrivate GtkSpinButtonAccessiblePrivate; - -struct _GtkSpinButtonAccessible -{ - GtkEntryAccessible parent; - - GtkSpinButtonAccessiblePrivate *priv; -}; - -struct _GtkSpinButtonAccessibleClass -{ - GtkEntryAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_spin_button_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_SPIN_BUTTON_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkspinneraccessible.c b/gtk/a11y/gtkspinneraccessible.c deleted file mode 100644 index cb055db7ad..0000000000 --- a/gtk/a11y/gtkspinneraccessible.c +++ /dev/null @@ -1,80 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright (C) 2007 John Stowers, Neil Jagdish Patel. - * Copyright (C) 2009 Bastien Nocera, David Zeuthen - * - * 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, see <http://www.gnu.org/licenses/>. - * - * Code adapted from egg-spinner - * by Christian Hergert <christian.hergert@gmail.com> - */ - -#include "config.h" - -#include <gtk/gtk.h> -#include "gtkintl.h" -#include "gtkspinneraccessible.h" - -static void atk_image_interface_init (AtkImageIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkSpinnerAccessible, gtk_spinner_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE, atk_image_interface_init)); - -static void -gtk_spinner_accessible_initialize (AtkObject *accessible, - gpointer widget) -{ - ATK_OBJECT_CLASS (gtk_spinner_accessible_parent_class)->initialize (accessible, widget); - - atk_object_set_name (accessible, C_("throbbing progress animation widget", "Spinner")); - atk_object_set_description (accessible, _("Provides visual indication of progress")); - atk_object_set_role (accessible, ATK_ROLE_ANIMATION); -} - -static void -gtk_spinner_accessible_class_init (GtkSpinnerAccessibleClass *klass) -{ - AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass); - - atk_class->initialize = gtk_spinner_accessible_initialize; -} - -static void -gtk_spinner_accessible_init (GtkSpinnerAccessible *self) -{ -} - -static void -gtk_spinner_accessible_image_get_size (AtkImage *image, - int *width, - int *height) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (image)); - if (widget == NULL) - { - *width = 0; - *height = 0; - return; - } - - *width = gtk_widget_get_width (widget); - *height = gtk_widget_get_height (widget); -} - -static void -atk_image_interface_init (AtkImageIface *iface) -{ - iface->get_image_size = gtk_spinner_accessible_image_get_size; -} diff --git a/gtk/a11y/gtkspinneraccessible.h b/gtk/a11y/gtkspinneraccessible.h deleted file mode 100644 index 5258db6f5b..0000000000 --- a/gtk/a11y/gtkspinneraccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2011 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_SPINNER_ACCESSIBLE_H__ -#define __GTK_SPINNER_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_SPINNER_ACCESSIBLE (gtk_spinner_accessible_get_type ()) -#define GTK_SPINNER_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SPINNER_ACCESSIBLE, GtkSpinnerAccessible)) -#define GTK_SPINNER_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SPINNER_ACCESSIBLE, GtkSpinnerAccessibleClass)) -#define GTK_IS_SPINNER_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SPINNER_ACCESSIBLE)) -#define GTK_IS_SPINNER_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SPINNER_ACCESSIBLE)) -#define GTK_SPINNER_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SPINNER_ACCESSIBLE, GtkSpinnerAccessibleClass)) - -typedef struct _GtkSpinnerAccessible GtkSpinnerAccessible; -typedef struct _GtkSpinnerAccessibleClass GtkSpinnerAccessibleClass; -typedef struct _GtkSpinnerAccessiblePrivate GtkSpinnerAccessiblePrivate; - -struct _GtkSpinnerAccessible -{ - GtkWidgetAccessible parent; - - GtkSpinnerAccessiblePrivate *priv; -}; - -struct _GtkSpinnerAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_spinner_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_SPINNER_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkstackaccessible.c b/gtk/a11y/gtkstackaccessible.c deleted file mode 100644 index 23b4e13762..0000000000 --- a/gtk/a11y/gtkstackaccessible.c +++ /dev/null @@ -1,102 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright (C) 2016 Timm Bäder <mail@baedert.org> - * - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <string.h> -#include <gtk/gtk.h> -#include "gtkstackaccessibleprivate.h" -#include "gtkwidgetprivate.h" - - -G_DEFINE_TYPE (GtkStackAccessible, gtk_stack_accessible, GTK_TYPE_WIDGET_ACCESSIBLE) - -static AtkObject* -gtk_stack_accessible_ref_child (AtkObject *obj, - int i) -{ - GtkWidget *stack = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - GtkWidget *visible_child; - - if (stack == NULL) - return NULL; - - if (i != 0) - return NULL; - - visible_child = gtk_stack_get_visible_child (GTK_STACK (stack)); - - if (visible_child == NULL) - return NULL; - - return g_object_ref (gtk_widget_get_accessible (visible_child)); -} - -static int -gtk_stack_accessible_get_n_children (AtkObject *obj) -{ - GtkWidget *stack = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - - if (stack == NULL) - return 0; - - if (gtk_stack_get_visible_child (GTK_STACK (stack))) - return 1; - - return 0; -} - -static void -gtk_stack_accessible_class_init (GtkStackAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->get_n_children = gtk_stack_accessible_get_n_children; - class->ref_child = gtk_stack_accessible_ref_child; -} - -static void -gtk_stack_accessible_init (GtkStackAccessible *bar) {} - - -void -gtk_stack_accessible_update_visible_child (GtkStack *stack, - GtkWidget *old_visible_child, - GtkWidget *new_visible_child) -{ - AtkObject *stack_accessible = _gtk_widget_peek_accessible (GTK_WIDGET (stack)); - - if (stack_accessible == NULL) - return; - - if (old_visible_child) - { - AtkObject *accessible = gtk_widget_get_accessible (old_visible_child); - g_object_notify (G_OBJECT (accessible), "accessible-parent"); - g_signal_emit_by_name (stack_accessible, "children-changed::remove", 0, accessible, NULL); - } - - if (new_visible_child) - { - AtkObject *accessible = gtk_widget_get_accessible (new_visible_child); - g_object_notify (G_OBJECT (accessible), "accessible-parent"); - g_signal_emit_by_name (stack_accessible, "children-changed::add", 0, accessible, NULL); - } -} - - - diff --git a/gtk/a11y/gtkstackaccessible.h b/gtk/a11y/gtkstackaccessible.h deleted file mode 100644 index 6254c33802..0000000000 --- a/gtk/a11y/gtkstackaccessible.h +++ /dev/null @@ -1,54 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright (C) 2016 Timm Bäder <mail@baedert.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_STACK_ACCESSIBLE_H__ -#define __GTK_STACK_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_STACK_ACCESSIBLE (gtk_stack_accessible_get_type ()) -#define GTK_STACK_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_STACK_ACCESSIBLE, GtkStackAccessible)) -#define GTK_STACK_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_STACK_ACCESSIBLE, GtkStackAccessibleClass)) -#define GTK_IS_STACK_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_STACK_ACCESSIBLE)) -#define GTK_IS_STACK_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_STACK_ACCESSIBLE)) -#define GTK_STACK_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_STACK_ACCESSIBLE, GtkStackAccessibleClass)) - -typedef struct _GtkStackAccessible GtkStackAccessible; -typedef struct _GtkStackAccessibleClass GtkStackAccessibleClass; - -struct _GtkStackAccessible -{ - GtkWidgetAccessible parent; -}; - -struct _GtkStackAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_stack_accessible_get_type (void); - -G_END_DECLS - -#endif diff --git a/gtk/a11y/gtkstackaccessibleprivate.h b/gtk/a11y/gtkstackaccessibleprivate.h deleted file mode 100644 index c69a48d780..0000000000 --- a/gtk/a11y/gtkstackaccessibleprivate.h +++ /dev/null @@ -1,32 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright (C) 2016 Timm Bäder <mail@baedert.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_STACK_ACCESSIBLE_PRIVATE_H__ -#define __GTK_STACK_ACCESSIBLE_PRIVATE_H__ - -#include "gtkstackaccessible.h" - -G_BEGIN_DECLS - -void gtk_stack_accessible_update_visible_child (GtkStack *stack, - GtkWidget *old_visible_child, - GtkWidget *new_visible_child); - - -G_END_DECLS - -#endif /* __GTK_STACK_ACCESSIBLE_PRIVATE_H__ */ diff --git a/gtk/a11y/gtkstatusbaraccessible.c b/gtk/a11y/gtkstatusbaraccessible.c deleted file mode 100644 index b2be32a9b0..0000000000 --- a/gtk/a11y/gtkstatusbaraccessible.c +++ /dev/null @@ -1,99 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <string.h> -#include <gtk/gtk.h> -#include "gtkstatusbarprivate.h" -#include "gtkstatusbaraccessible.h" - - -G_DEFINE_TYPE (GtkStatusbarAccessible, gtk_statusbar_accessible, GTK_TYPE_WIDGET_ACCESSIBLE) - -static void -text_changed (GtkStatusbar *statusbar, - guint context_id, - const char *text, - AtkObject *obj) -{ - if (!obj->name) - g_object_notify (G_OBJECT (obj), "accessible-name"); - g_signal_emit_by_name (obj, "visible-data-changed"); -} - -static void -gtk_statusbar_accessible_initialize (AtkObject *obj, - gpointer data) -{ - GtkWidget *statusbar = data; - - ATK_OBJECT_CLASS (gtk_statusbar_accessible_parent_class)->initialize (obj, data); - - g_signal_connect_after (statusbar, "text-pushed", - G_CALLBACK (text_changed), obj); - g_signal_connect_after (statusbar, "text-popped", - G_CALLBACK (text_changed), obj); - - obj->role = ATK_ROLE_STATUSBAR; -} - -static const char * -gtk_statusbar_accessible_get_name (AtkObject *obj) -{ - const char *name; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - name = ATK_OBJECT_CLASS (gtk_statusbar_accessible_parent_class)->get_name (obj); - if (name != NULL) - return name; - - return gtk_statusbar_get_message (GTK_STATUSBAR (widget)); -} - -static int -gtk_statusbar_accessible_get_n_children (AtkObject *obj) -{ - return 0; -} - -static AtkObject* -gtk_statusbar_accessible_ref_child (AtkObject *obj, - int i) -{ - return NULL; -} - -static void -gtk_statusbar_accessible_class_init (GtkStatusbarAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->get_name = gtk_statusbar_accessible_get_name; - class->get_n_children = gtk_statusbar_accessible_get_n_children; - class->ref_child = gtk_statusbar_accessible_ref_child; - class->initialize = gtk_statusbar_accessible_initialize; -} - -static void -gtk_statusbar_accessible_init (GtkStatusbarAccessible *bar) -{ -} diff --git a/gtk/a11y/gtkstatusbaraccessible.h b/gtk/a11y/gtkstatusbaraccessible.h deleted file mode 100644 index 8a25f8dbd0..0000000000 --- a/gtk/a11y/gtkstatusbaraccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * 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 Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_STATUSBAR_ACCESSIBLE_H__ -#define __GTK_STATUSBAR_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_STATUSBAR_ACCESSIBLE (gtk_statusbar_accessible_get_type ()) -#define GTK_STATUSBAR_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_STATUSBAR_ACCESSIBLE, GtkStatusbarAccessible)) -#define GTK_STATUSBAR_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_STATUSBAR_ACCESSIBLE, GtkStatusbarAccessibleClass)) -#define GTK_IS_STATUSBAR_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_STATUSBAR_ACCESSIBLE)) -#define GTK_IS_STATUSBAR_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_STATUSBAR_ACCESSIBLE)) -#define GTK_STATUSBAR_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_STATUSBAR_ACCESSIBLE, GtkStatusbarAccessibleClass)) - -typedef struct _GtkStatusbarAccessible GtkStatusbarAccessible; -typedef struct _GtkStatusbarAccessibleClass GtkStatusbarAccessibleClass; -typedef struct _GtkStatusbarAccessiblePrivate GtkStatusbarAccessiblePrivate; - -struct _GtkStatusbarAccessible -{ - GtkWidgetAccessible parent; - - GtkStatusbarAccessiblePrivate *priv; -}; - -struct _GtkStatusbarAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_statusbar_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_STATUSBAR_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkswitchaccessible.c b/gtk/a11y/gtkswitchaccessible.c deleted file mode 100644 index 1b63ee4806..0000000000 --- a/gtk/a11y/gtkswitchaccessible.c +++ /dev/null @@ -1,133 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright (C) 2010 Intel Corporation - * Copyright (C) 2010 RedHat, 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, see <http://www.gnu.org/licenses/>. - * - * Author: - * Emmanuele Bassi <ebassi@linux.intel.com> - * Matthias Clasen <mclasen@redhat.com> - * - * Based on similar code from Mx. - */ - -#include "config.h" - -#include <glib/gi18n-lib.h> -#include <gtk/gtk.h> -#include "gtkintl.h" -#include "gtkswitchaccessible.h" - - -static void atk_action_interface_init (AtkActionIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkSwitchAccessible, gtk_switch_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)) - -static AtkStateSet * -gtk_switch_accessible_ref_state_set (AtkObject *accessible) -{ - AtkStateSet *state_set; - GtkWidget *widget; - - state_set = ATK_OBJECT_CLASS (gtk_switch_accessible_parent_class)->ref_state_set (accessible); - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return state_set; - - if (gtk_switch_get_active (GTK_SWITCH (widget))) - atk_state_set_add_state (state_set, ATK_STATE_CHECKED); - - return state_set; -} - -static void -gtk_switch_accessible_class_init (GtkSwitchAccessibleClass *klass) -{ - AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass); - - atk_class->ref_state_set = gtk_switch_accessible_ref_state_set; -} - -static void -gtk_switch_accessible_init (GtkSwitchAccessible *self) -{ -} - -static int -gtk_switch_action_get_n_actions (AtkAction *action) -{ - return 1; -} - -static const char * -gtk_switch_action_get_name (AtkAction *action, - int i) -{ - if (i == 0) - return "toggle"; - return NULL; -} - -static const char * -gtk_switch_action_get_localized_name (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action name", "Toggle"); - return NULL; -} - -static const char * -gtk_switch_action_get_description (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action description", "Toggles the switch"); - return NULL; -} - -static gboolean -gtk_switch_action_do_action (AtkAction *action, - int i) -{ - GtkSwitch *sw; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return FALSE; - - if (i != 0) - return FALSE; - - if (!gtk_widget_is_sensitive (widget) || !gtk_widget_get_visible (widget)) - return FALSE; - - sw = GTK_SWITCH (widget); - gtk_switch_set_active (sw, !gtk_switch_get_active (sw)); - - return TRUE; -} - -static void -atk_action_interface_init (AtkActionIface *iface) -{ - iface->do_action = gtk_switch_action_do_action; - iface->get_n_actions = gtk_switch_action_get_n_actions; - iface->get_name = gtk_switch_action_get_name; - iface->get_localized_name = gtk_switch_action_get_localized_name; - iface->get_description = gtk_switch_action_get_description; -} diff --git a/gtk/a11y/gtkswitchaccessible.h b/gtk/a11y/gtkswitchaccessible.h deleted file mode 100644 index 1e2039e58d..0000000000 --- a/gtk/a11y/gtkswitchaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2011 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_SWITCH_ACCESSIBLE_H__ -#define __GTK_SWITCH_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_SWITCH_ACCESSIBLE (gtk_switch_accessible_get_type ()) -#define GTK_SWITCH_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SWITCH_ACCESSIBLE, GtkSwitchAccessible)) -#define GTK_SWITCH_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SWITCH_ACCESSIBLE, GtkSwitchAccessibleClass)) -#define GTK_IS_SWITCH_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SWITCH_ACCESSIBLE)) -#define GTK_IS_SWITCH_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SWITCH_ACCESSIBLE)) -#define GTK_SWITCH_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SWITCH_ACCESSIBLE, GtkSwitchAccessibleClass)) - -typedef struct _GtkSwitchAccessible GtkSwitchAccessible; -typedef struct _GtkSwitchAccessibleClass GtkSwitchAccessibleClass; -typedef struct _GtkSwitchAccessiblePrivate GtkSwitchAccessiblePrivate; - -struct _GtkSwitchAccessible -{ - GtkWidgetAccessible parent; - - GtkSwitchAccessiblePrivate *priv; -}; - -struct _GtkSwitchAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_switch_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_SWITCH_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtktextaccessible.c b/gtk/a11y/gtktextaccessible.c deleted file mode 100644 index 66f110aa46..0000000000 --- a/gtk/a11y/gtktextaccessible.c +++ /dev/null @@ -1,1016 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gdk/gdkeventsprivate.h" - -#include <glib/gi18n-lib.h> -#include <string.h> -#include <gtk/gtk.h> -#include "gtkpango.h" -#include "gtktextaccessible.h" -#include "gtktextprivate.h" -#include "gtkcomboboxaccessible.h" -#include "gtkstylecontextprivate.h" -#include "gtkwidgetprivate.h" - -struct _GtkTextAccessiblePrivate -{ - int cursor_position; - int selection_bound; -}; - -/* Callbacks */ - -static void insert_text_cb (GtkEditable *editable, - char *new_text, - int new_text_length, - int *position); -static void delete_text_cb (GtkEditable *editable, - int start, - int end); - -static gboolean check_for_selection_change (GtkTextAccessible *entry, - GtkText *gtk_text); - - -static void atk_editable_text_interface_init (AtkEditableTextIface *iface); -static void atk_text_interface_init (AtkTextIface *iface); -static void atk_action_interface_init (AtkActionIface *iface); - - -G_DEFINE_TYPE_WITH_CODE (GtkTextAccessible, gtk_text_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_ADD_PRIVATE (GtkTextAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_EDITABLE_TEXT, atk_editable_text_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)) - - -static AtkStateSet * -gtk_text_accessible_ref_state_set (AtkObject *accessible) -{ - AtkStateSet *state_set; - gboolean value; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return NULL; - - state_set = ATK_OBJECT_CLASS (gtk_text_accessible_parent_class)->ref_state_set (accessible); - - g_object_get (G_OBJECT (widget), "editable", &value, NULL); - if (value) - atk_state_set_add_state (state_set, ATK_STATE_EDITABLE); - atk_state_set_add_state (state_set, ATK_STATE_SINGLE_LINE); - - return state_set; -} - -static AtkAttributeSet * -gtk_text_accessible_get_attributes (AtkObject *accessible) -{ - GtkWidget *widget; - AtkAttributeSet *attributes; - AtkAttribute *placeholder_text; - const char *text; - - attributes = ATK_OBJECT_CLASS (gtk_text_accessible_parent_class)->get_attributes (accessible); - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return attributes; - - text = gtk_text_get_placeholder_text (GTK_TEXT (widget)); - if (text == NULL) - return attributes; - - placeholder_text = g_malloc (sizeof (AtkAttribute)); - placeholder_text->name = g_strdup ("placeholder-text"); - placeholder_text->value = g_strdup (text); - - attributes = g_slist_append (attributes, placeholder_text); - - return attributes; -} - -static void -on_cursor_position_changed (GObject *gobject, - GParamSpec *pspec, - AtkObject *accessible) -{ - GtkTextAccessible *self = GTK_TEXT_ACCESSIBLE (accessible); - GtkTextAccessiblePrivate *priv = gtk_text_accessible_get_instance_private (self); - GtkText *text = GTK_TEXT (gobject); - - if (check_for_selection_change (self, text)) - g_signal_emit_by_name (accessible, "text-selection-changed"); - - /* The entry cursor position has moved so generate the signal */ - g_signal_emit_by_name (accessible, - "text-caret-moved", - priv->cursor_position); -} - -static void -on_selection_bound_changed (GObject *gobject, - GParamSpec *pspec, - AtkObject *accessible) -{ - GtkTextAccessible *self = GTK_TEXT_ACCESSIBLE (accessible); - GtkText *text = GTK_TEXT (gobject); - - if (check_for_selection_change (self, text)) - g_signal_emit_by_name (accessible, "text-selection-changed"); -} - -static void -on_editable_changed (GObject *gobject, - GParamSpec *pspec, - AtkObject *accessible) -{ - GtkEditable *editable = GTK_EDITABLE (gobject); - gboolean value = gtk_editable_get_editable (editable); - - atk_object_notify_state_change (accessible, ATK_STATE_EDITABLE, value); -} - -static void -on_visibility_changed (GObject *gobject, - GParamSpec *pspec, - AtkObject *accessible) -{ - GtkText *text = GTK_TEXT (gobject); - AtkRole new_role; - - new_role = gtk_text_get_visibility (text) - ? ATK_ROLE_TEXT - : ATK_ROLE_PASSWORD_TEXT; - - atk_object_set_role (accessible, new_role); -} - -static void -gtk_text_accessible_initialize (AtkObject *obj, - gpointer data) -{ - GtkText *entry; - GtkTextAccessible *gtk_text_accessible; - int start_pos, end_pos; - - ATK_OBJECT_CLASS (gtk_text_accessible_parent_class)->initialize (obj, data); - - gtk_text_accessible = GTK_TEXT_ACCESSIBLE (obj); - - entry = GTK_TEXT (data); - gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start_pos, &end_pos); - gtk_text_accessible->priv->cursor_position = end_pos; - gtk_text_accessible->priv->selection_bound = start_pos; - - /* Set up signal callbacks */ - g_signal_connect_after (entry, "insert-text", G_CALLBACK (insert_text_cb), NULL); - g_signal_connect (entry, "delete-text", G_CALLBACK (delete_text_cb), NULL); - - g_signal_connect (entry, "notify::cursor-position", G_CALLBACK (on_cursor_position_changed), obj); - g_signal_connect (entry, "notify::selection-bound", G_CALLBACK (on_selection_bound_changed), obj); - g_signal_connect (entry, "notify::editable", G_CALLBACK (on_editable_changed), obj); - g_signal_connect (entry, "notify::visibility", G_CALLBACK (on_visibility_changed), obj); - - if (gtk_text_get_visibility (entry)) - obj->role = ATK_ROLE_TEXT; - else - obj->role = ATK_ROLE_PASSWORD_TEXT; -} - -static int -gtk_text_accessible_get_index_in_parent (AtkObject *accessible) -{ - /* If the parent widget is a combo box then the index is 1 - * otherwise do the normal thing. - */ - if (accessible->accessible_parent) - if (GTK_IS_COMBO_BOX_ACCESSIBLE (accessible->accessible_parent)) - return 1; - - return ATK_OBJECT_CLASS (gtk_text_accessible_parent_class)->get_index_in_parent (accessible); -} - -static void -gtk_text_accessible_class_init (GtkTextAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->ref_state_set = gtk_text_accessible_ref_state_set; - class->get_index_in_parent = gtk_text_accessible_get_index_in_parent; - class->initialize = gtk_text_accessible_initialize; - class->get_attributes = gtk_text_accessible_get_attributes; -} - -static void -gtk_text_accessible_init (GtkTextAccessible *entry) -{ - entry->priv = gtk_text_accessible_get_instance_private (entry); - entry->priv->cursor_position = 0; - entry->priv->selection_bound = 0; -} - -static char * -gtk_text_accessible_get_text (AtkText *atk_text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - if (widget == NULL) - return NULL; - - return gtk_text_get_display_text (GTK_TEXT (widget), start_pos, end_pos); -} - -static char * -gtk_text_accessible_get_text_before_offset (AtkText *text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - return _gtk_pango_get_text_before (gtk_text_get_layout (GTK_TEXT (widget)), - boundary_type, offset, - start_offset, end_offset); -} - -static char * -gtk_text_accessible_get_text_at_offset (AtkText *text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - return _gtk_pango_get_text_at (gtk_text_get_layout (GTK_TEXT (widget)), - boundary_type, offset, - start_offset, end_offset); -} - -static char * -gtk_text_accessible_get_text_after_offset (AtkText *text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - return _gtk_pango_get_text_after (gtk_text_get_layout (GTK_TEXT (widget)), - boundary_type, offset, - start_offset, end_offset); -} - -static int -gtk_text_accessible_get_character_count (AtkText *atk_text) -{ - GtkWidget *widget; - char *text; - glong char_count; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - if (widget == NULL) - return 0; - - text = gtk_text_get_display_text (GTK_TEXT (widget), 0, -1); - - char_count = 0; - if (text) - { - char_count = g_utf8_strlen (text, -1); - g_free (text); - } - - return char_count; -} - -static int -gtk_text_accessible_get_caret_offset (AtkText *text) -{ - GtkWidget *widget; - gboolean result; - int cursor_position; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return -1; - - result = gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), NULL, &cursor_position); - if (!result) - return -1; - - return cursor_position; -} - -static gboolean -gtk_text_accessible_set_caret_offset (AtkText *text, - int offset) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - gtk_editable_set_position (GTK_EDITABLE (widget), offset); - - return TRUE; -} - -static AtkAttributeSet * -add_text_attribute (AtkAttributeSet *attributes, - AtkTextAttribute attr, - int i) -{ - AtkAttribute *at; - - at = g_new (AtkAttribute, 1); - at->name = g_strdup (atk_text_attribute_get_name (attr)); - at->value = g_strdup (atk_text_attribute_get_value (attr, i)); - - return g_slist_prepend (attributes, at); -} - -static AtkAttributeSet * -gtk_text_accessible_get_run_attributes (AtkText *text, - int offset, - int *start_offset, - int *end_offset) -{ - GtkWidget *widget; - AtkAttributeSet *attributes; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - attributes = NULL; - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_DIRECTION, - gtk_widget_get_direction (widget)); - attributes = _gtk_pango_get_run_attributes (attributes, - gtk_text_get_layout (GTK_TEXT (widget)), - offset, - start_offset, - end_offset); - - return attributes; -} - -static AtkAttributeSet * -gtk_text_accessible_get_default_attributes (AtkText *text) -{ - GtkWidget *widget; - AtkAttributeSet *attributes; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - attributes = NULL; - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_DIRECTION, - gtk_widget_get_direction (widget)); - attributes = _gtk_pango_get_default_attributes (attributes, - gtk_text_get_layout (GTK_TEXT (widget))); - attributes = _gtk_style_context_get_attributes (attributes, - gtk_widget_get_style_context (widget)); - - return attributes; -} - -static void -gtk_text_accessible_get_character_extents (AtkText *text, - int offset, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coords) -{ - GtkWidget *widget; - GtkText *entry; - PangoRectangle char_rect; - char *entry_text; - int index, x_layout, y_layout; - GtkAllocation allocation; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - entry = GTK_TEXT (widget); - - gtk_text_get_layout_offsets (entry, &x_layout, &y_layout); - entry_text = gtk_text_get_display_text (entry, 0, -1); - index = g_utf8_offset_to_pointer (entry_text, offset) - entry_text; - g_free (entry_text); - - pango_layout_index_to_pos (gtk_text_get_layout (entry), index, &char_rect); - pango_extents_to_pixels (&char_rect, NULL); - - gtk_widget_get_allocation (widget, &allocation); - - *x = allocation.x + x_layout + char_rect.x; - *y = allocation.y + y_layout + char_rect.y; - *width = char_rect.width; - *height = char_rect.height; -} - -static int -gtk_text_accessible_get_offset_at_point (AtkText *atk_text, - int x, - int y, - AtkCoordType coords) -{ - GtkWidget *widget; - GtkText *entry; - char *text; - int index, x_layout, y_layout; - int x_local, y_local; - glong offset; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - if (widget == NULL) - return -1; - - entry = GTK_TEXT (widget); - - gtk_text_get_layout_offsets (entry, &x_layout, &y_layout); - - x_local = x - x_layout; - y_local = y - y_layout; - - if (!pango_layout_xy_to_index (gtk_text_get_layout (entry), - x_local * PANGO_SCALE, - y_local * PANGO_SCALE, - &index, NULL)) - { - if (x_local < 0 || y_local < 0) - index = 0; - else - index = -1; - } - - offset = -1; - if (index != -1) - { - text = gtk_text_get_display_text (entry, 0, -1); - offset = g_utf8_pointer_to_offset (text, text + index); - g_free (text); - } - - return offset; -} - -static int -gtk_text_accessible_get_n_selections (AtkText *text) -{ - GtkWidget *widget; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return 0; - - if (gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), &start, &end)) - return 1; - - return 0; -} - -static char * -gtk_text_accessible_get_selection (AtkText *text, - int selection_num, - int *start_pos, - int *end_pos) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - if (selection_num != 0) - return NULL; - - if (gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), start_pos, end_pos)) - return gtk_editable_get_chars (GTK_EDITABLE (widget), *start_pos, *end_pos); - - return NULL; -} - -static gboolean -gtk_text_accessible_add_selection (AtkText *text, - int start_pos, - int end_pos) -{ - GtkText *entry; - GtkWidget *widget; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - entry = GTK_TEXT (widget); - - if (!gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start, &end)) - { - gtk_editable_select_region (GTK_EDITABLE (entry), start_pos, end_pos); - return TRUE; - } - else - return FALSE; -} - -static gboolean -gtk_text_accessible_remove_selection (AtkText *text, - int selection_num) -{ - GtkWidget *widget; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - if (selection_num != 0) - return FALSE; - - if (gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), &start, &end)) - { - gtk_editable_select_region (GTK_EDITABLE (widget), end, end); - return TRUE; - } - else - return FALSE; -} - -static gboolean -gtk_text_accessible_set_selection (AtkText *text, - int selection_num, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - int start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - if (selection_num != 0) - return FALSE; - - if (gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), &start, &end)) - { - gtk_editable_select_region (GTK_EDITABLE (widget), start_pos, end_pos); - return TRUE; - } - else - return FALSE; -} - -static gunichar -gtk_text_accessible_get_character_at_offset (AtkText *atk_text, - int offset) -{ - GtkWidget *widget; - char *text; - char *index; - gunichar result; - - result = '\0'; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - if (widget == NULL) - return result; - - if (!gtk_text_get_visibility (GTK_TEXT (widget))) - return result; - - text = gtk_text_get_display_text (GTK_TEXT (widget), 0, -1); - if (offset < g_utf8_strlen (text, -1)) - { - index = g_utf8_offset_to_pointer (text, offset); - result = g_utf8_get_char (index); - g_free (text); - } - - return result; -} - -static void -atk_text_interface_init (AtkTextIface *iface) -{ - iface->get_text = gtk_text_accessible_get_text; - iface->get_character_at_offset = gtk_text_accessible_get_character_at_offset; - iface->get_text_before_offset = gtk_text_accessible_get_text_before_offset; - iface->get_text_at_offset = gtk_text_accessible_get_text_at_offset; - iface->get_text_after_offset = gtk_text_accessible_get_text_after_offset; - iface->get_caret_offset = gtk_text_accessible_get_caret_offset; - iface->set_caret_offset = gtk_text_accessible_set_caret_offset; - iface->get_character_count = gtk_text_accessible_get_character_count; - iface->get_n_selections = gtk_text_accessible_get_n_selections; - iface->get_selection = gtk_text_accessible_get_selection; - iface->add_selection = gtk_text_accessible_add_selection; - iface->remove_selection = gtk_text_accessible_remove_selection; - iface->set_selection = gtk_text_accessible_set_selection; - iface->get_run_attributes = gtk_text_accessible_get_run_attributes; - iface->get_default_attributes = gtk_text_accessible_get_default_attributes; - iface->get_character_extents = gtk_text_accessible_get_character_extents; - iface->get_offset_at_point = gtk_text_accessible_get_offset_at_point; -} - -static void -gtk_text_accessible_set_text_contents (AtkEditableText *text, - const char *string) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - if (!gtk_editable_get_editable (GTK_EDITABLE (widget))) - return; - - gtk_editable_set_text (GTK_EDITABLE (widget), string); -} - -static void -gtk_text_accessible_insert_text (AtkEditableText *text, - const char *string, - int length, - int *position) -{ - GtkWidget *widget; - GtkEditable *editable; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - gtk_editable_insert_text (editable, string, length, position); - gtk_editable_set_position (editable, *position); -} - -static void -gtk_text_accessible_copy_text (AtkEditableText *text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkEditable *editable; - char *str; - GdkClipboard *clipboard; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - str = gtk_editable_get_chars (editable, start_pos, end_pos); - clipboard = gtk_widget_get_clipboard (widget); - gdk_clipboard_set_text (clipboard, str); - g_free (str); -} - -static void -gtk_text_accessible_cut_text (AtkEditableText *text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkEditable *editable; - char *str; - GdkClipboard *clipboard; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - str = gtk_editable_get_chars (editable, start_pos, end_pos); - clipboard = gtk_widget_get_clipboard (widget); - gdk_clipboard_set_text (clipboard, str); - gtk_editable_delete_text (editable, start_pos, end_pos); -} - -static void -gtk_text_accessible_delete_text (AtkEditableText *text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkEditable *editable; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - gtk_editable_delete_text (editable, start_pos, end_pos); -} - -typedef struct -{ - GtkText* entry; - int position; -} PasteData; - -static void -paste_received_cb (GObject *clipboard, - GAsyncResult *result, - gpointer data) -{ - PasteData *paste = data; - char *text; - - text = gdk_clipboard_read_text_finish (GDK_CLIPBOARD (clipboard), result, NULL); - if (text) - gtk_editable_insert_text (GTK_EDITABLE (paste->entry), text, -1, - &paste->position); - - g_object_unref (paste->entry); - g_free (paste); - g_free (text); -} - -static void -gtk_text_accessible_paste_text (AtkEditableText *text, - int position) -{ - GtkWidget *widget; - GtkEditable *editable; - PasteData *paste; - GdkClipboard *clipboard; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - editable = GTK_EDITABLE (widget); - if (!gtk_editable_get_editable (editable)) - return; - - paste = g_new0 (PasteData, 1); - paste->entry = GTK_TEXT (widget); - paste->position = position; - - g_object_ref (paste->entry); - clipboard = gtk_widget_get_clipboard (widget); - gdk_clipboard_read_text_async (clipboard, NULL, paste_received_cb, paste); -} - -static void -atk_editable_text_interface_init (AtkEditableTextIface *iface) -{ - iface->set_text_contents = gtk_text_accessible_set_text_contents; - iface->insert_text = gtk_text_accessible_insert_text; - iface->copy_text = gtk_text_accessible_copy_text; - iface->cut_text = gtk_text_accessible_cut_text; - iface->delete_text = gtk_text_accessible_delete_text; - iface->paste_text = gtk_text_accessible_paste_text; - iface->set_run_attributes = NULL; -} - -static void -insert_text_cb (GtkEditable *editable, - char *new_text, - int new_text_length, - int *position) -{ - GtkTextAccessible *accessible; - int length; - - if (new_text_length == 0) - return; - - accessible = GTK_TEXT_ACCESSIBLE (gtk_widget_get_accessible (GTK_WIDGET (editable))); - length = g_utf8_strlen (new_text, new_text_length); - - g_signal_emit_by_name (accessible, - "text-changed::insert", - *position - length, - length); -} - -/* We connect to GtkEditable::delete-text, since it carries - * the information we need. But we delay emitting our own - * text_changed::delete signal until the entry has update - * all its internal state and emits GtkText::changed. - */ -static void -delete_text_cb (GtkEditable *editable, - int start, - int end) -{ - GtkTextAccessible *accessible; - - accessible = GTK_TEXT_ACCESSIBLE (gtk_widget_get_accessible (GTK_WIDGET (editable))); - - if (end < 0) - { - char *text; - - text = gtk_text_get_display_text (GTK_TEXT (editable), 0, -1); - end = g_utf8_strlen (text, -1); - g_free (text); - } - - if (end == start) - return; - - g_signal_emit_by_name (accessible, - "text-changed::delete", - start, - end - start); -} - -static gboolean -check_for_selection_change (GtkTextAccessible *accessible, - GtkText *entry) -{ - gboolean ret_val = FALSE; - int start, end; - - if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start, &end)) - { - if (end != accessible->priv->cursor_position || - start != accessible->priv->selection_bound) - /* - * This check is here as this function can be called - * for notification of selection_bound and current_pos. - * The values of current_pos and selection_bound may be the same - * for both notifications and we only want to generate one - * text_selection_changed signal. - */ - ret_val = TRUE; - } - else - { - /* We had a selection */ - ret_val = (accessible->priv->cursor_position != accessible->priv->selection_bound); - } - - accessible->priv->cursor_position = end; - accessible->priv->selection_bound = start; - - return ret_val; -} - -static gboolean -gtk_text_accessible_do_action (AtkAction *action, - int i) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return FALSE; - - if (!gtk_widget_get_sensitive (widget) || !gtk_widget_get_visible (widget)) - return FALSE; - - if (i != 0) - return FALSE; - - gtk_widget_activate (widget); - - return TRUE; -} - -static int -gtk_text_accessible_get_n_actions (AtkAction *action) -{ - return 1; -} - -static const char * -gtk_text_accessible_get_keybinding (AtkAction *action, - int i) -{ - GtkWidget *widget; - GtkWidget *label; - AtkRelationSet *set; - AtkRelation *relation; - GPtrArray *target; - gpointer target_object; - guint key_val; - - if (i != 0) - return NULL; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action)); - if (widget == NULL) - return NULL; - - set = atk_object_ref_relation_set (ATK_OBJECT (action)); - if (!set) - return NULL; - - label = NULL; - relation = atk_relation_set_get_relation_by_type (set, ATK_RELATION_LABELLED_BY); - if (relation) - { - target = atk_relation_get_target (relation); - - target_object = g_ptr_array_index (target, 0); - label = gtk_accessible_get_widget (GTK_ACCESSIBLE (target_object)); - } - - g_object_unref (set); - - if (GTK_IS_LABEL (label)) - { - key_val = gtk_label_get_mnemonic_keyval (GTK_LABEL (label)); - if (key_val != GDK_KEY_VoidSymbol) - return gtk_accelerator_name (key_val, GDK_ALT_MASK); - } - - return NULL; -} - -static const char * -gtk_text_accessible_action_get_name (AtkAction *action, - int i) -{ - if (i == 0) - return "activate"; - return NULL; -} - -static const char * -gtk_text_accessible_action_get_localized_name (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action name", "Activate"); - return NULL; -} - -static const char * -gtk_text_accessible_action_get_description (AtkAction *action, - int i) -{ - if (i == 0) - return C_("Action description", "Activates the entry"); - return NULL; -} - -static void -atk_action_interface_init (AtkActionIface *iface) -{ - iface->do_action = gtk_text_accessible_do_action; - iface->get_n_actions = gtk_text_accessible_get_n_actions; - iface->get_keybinding = gtk_text_accessible_get_keybinding; - iface->get_name = gtk_text_accessible_action_get_name; - iface->get_localized_name = gtk_text_accessible_action_get_localized_name; - iface->get_description = gtk_text_accessible_action_get_description; -} diff --git a/gtk/a11y/gtktextaccessible.h b/gtk/a11y/gtktextaccessible.h deleted file mode 100644 index e47be4236d..0000000000 --- a/gtk/a11y/gtktextaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_TEXT_ACCESSIBLE_H__ -#define __GTK_TEXT_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_TEXT_ACCESSIBLE (gtk_text_accessible_get_type ()) -#define GTK_TEXT_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TEXT_ACCESSIBLE, GtkTextAccessible)) -#define GTK_TEXT_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TEXT_ACCESSIBLE, GtkTextAccessibleClass)) -#define GTK_IS_TEXT_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TEXT_ACCESSIBLE)) -#define GTK_IS_TEXT_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TEXT_ACCESSIBLE)) -#define GTK_TEXT_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TEXT_ACCESSIBLE, GtkTextAccessibleClass)) - -typedef struct _GtkTextAccessible GtkTextAccessible; -typedef struct _GtkTextAccessibleClass GtkTextAccessibleClass; -typedef struct _GtkTextAccessiblePrivate GtkTextAccessiblePrivate; - -struct _GtkTextAccessible -{ - GtkWidgetAccessible parent; - - GtkTextAccessiblePrivate *priv; -}; - -struct _GtkTextAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_text_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_TEXT_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtktextcellaccessible.c b/gtk/a11y/gtktextcellaccessible.c deleted file mode 100644 index 7af56d9696..0000000000 --- a/gtk/a11y/gtktextcellaccessible.c +++ /dev/null @@ -1,701 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <gtk/gtk.h> -#include "../gtkpango.h" -#include "gtktextcellaccessible.h" -#include "gtkcontainercellaccessible.h" -#include "gtkcellaccessibleparent.h" -#include "gtkstylecontextprivate.h" - -struct _GtkTextCellAccessiblePrivate -{ - char *cell_text; - int caret_pos; - int cell_length; - PangoLayout *layout; -}; - -static const char * gtk_text_cell_accessible_get_name (AtkObject *atk_obj); - - -/* atktext.h */ - -static char * gtk_text_cell_accessible_get_text (AtkText *text, - int start_pos, - int end_pos); -static gunichar gtk_text_cell_accessible_get_character_at_offset (AtkText *text, - int offset); -static char * gtk_text_cell_accessible_get_text_before_offset (AtkText *text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset); -static char * gtk_text_cell_accessible_get_text_at_offset (AtkText *text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset); -static char * gtk_text_cell_accessible_get_text_after_offset (AtkText *text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset); -static int gtk_text_cell_accessible_get_character_count (AtkText *text); -static int gtk_text_cell_accessible_get_caret_offset (AtkText *text); -static gboolean gtk_text_cell_accessible_set_caret_offset (AtkText *text, - int offset); -static void gtk_text_cell_accessible_get_character_extents (AtkText *text, - int offset, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coords); -static int gtk_text_cell_accessible_get_offset_at_point (AtkText *text, - int x, - int y, - AtkCoordType coords); -static AtkAttributeSet* gtk_text_cell_accessible_get_run_attributes - (AtkText *text, - int offset, - int *start_offset, - int *end_offset); -static AtkAttributeSet* gtk_text_cell_accessible_get_default_attributes - (AtkText *text); - -static GtkWidget* get_widget (GtkTextCellAccessible *cell); -static PangoLayout* create_pango_layout (GtkTextCellAccessible *cell); -static void add_attr (PangoAttrList *attr_list, - PangoAttribute *attr); - -/* Misc */ - -static void gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell, - gboolean emit_signal); - -static void atk_text_interface_init (AtkTextIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkTextCellAccessible, gtk_text_cell_accessible, GTK_TYPE_RENDERER_CELL_ACCESSIBLE, - G_ADD_PRIVATE (GtkTextCellAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_interface_init)) - -static AtkStateSet * -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); - - atk_state_set_add_state (state_set, ATK_STATE_SINGLE_LINE); - - return state_set; -} - -static void -gtk_text_cell_accessible_finalize (GObject *object) -{ - GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (object); - - g_free (text_cell->priv->cell_text); - - if (text_cell->priv->layout) - g_object_unref (text_cell->priv->layout); - - G_OBJECT_CLASS (gtk_text_cell_accessible_parent_class)->finalize (object); -} - -static const char * -gtk_text_cell_accessible_get_name (AtkObject *atk_obj) -{ - GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (atk_obj); - - if (atk_obj->name) - return atk_obj->name; - - return text_cell->priv->cell_text; -} - -static void -gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell, - gboolean emit_signal) -{ - GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (cell); - AtkObject *obj = ATK_OBJECT (cell); - int text_length; - char *text; - GtkCellRenderer *renderer; - - if (text_cell->priv->layout) - g_object_unref (text_cell->priv->layout); - text_cell->priv->layout = create_pango_layout (text_cell); - - g_object_get (cell, "renderer", &renderer, NULL); - g_object_get (renderer, "text", &text, NULL); - g_object_unref (renderer); - - if (text == NULL) - text = g_strdup (""); - text_length = g_utf8_strlen (text, -1); - - if (g_strcmp0 (text_cell->priv->cell_text, text) != 0) - { - if (text_cell->priv->cell_length && emit_signal) - { - g_signal_emit_by_name (cell, "text-changed::delete", - 0, text_cell->priv->cell_length); - } - - g_free (text_cell->priv->cell_text); - text_cell->priv->cell_text = g_strdup (text); - text_cell->priv->cell_length = text_length; - - if (text_length && emit_signal) - { - g_signal_emit_by_name (cell, "text-changed::insert", - 0, text_cell->priv->cell_length); - } - - if (obj->name == NULL && emit_signal) - g_object_notify (G_OBJECT (obj), "accessible-name"); - } - - g_free (text); -} - -static void -gtk_text_cell_accessible_class_init (GtkTextCellAccessibleClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass); - GtkCellAccessibleClass *cell_class = GTK_CELL_ACCESSIBLE_CLASS (klass); - - cell_class->update_cache = gtk_text_cell_accessible_update_cache; - - atk_object_class->get_name = gtk_text_cell_accessible_get_name; - atk_object_class->ref_state_set = gtk_text_cell_accessible_ref_state_set; - - gobject_class->finalize = gtk_text_cell_accessible_finalize; -} - -static void -gtk_text_cell_accessible_init (GtkTextCellAccessible *text_cell) -{ - text_cell->priv = gtk_text_cell_accessible_get_instance_private (text_cell); - text_cell->priv->caret_pos = -1; -} - -static char * -gtk_text_cell_accessible_get_text (AtkText *atk_text, - int start_pos, - int end_pos) -{ - char *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 - return g_strdup (""); -} - -static char * -gtk_text_cell_accessible_get_text_before_offset (AtkText *atk_text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (atk_text); - char *text; - - text = _gtk_pango_get_text_before (text_cell->priv->layout, boundary_type, offset, start_offset, end_offset); - - return text; -} - -static char * -gtk_text_cell_accessible_get_text_at_offset (AtkText *atk_text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (atk_text); - char *text; - - text = _gtk_pango_get_text_at (text_cell->priv->layout, boundary_type, offset, start_offset, end_offset); - - return text; -} - -static char * -gtk_text_cell_accessible_get_text_after_offset (AtkText *atk_text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (atk_text); - char *text; - - text = _gtk_pango_get_text_after (text_cell->priv->layout, boundary_type, offset, start_offset, end_offset); - - return text; -} - -static int -gtk_text_cell_accessible_get_character_count (AtkText *text) -{ - if (GTK_TEXT_CELL_ACCESSIBLE (text)->priv->cell_text != NULL) - return GTK_TEXT_CELL_ACCESSIBLE (text)->priv->cell_length; - else - return 0; -} - -static int -gtk_text_cell_accessible_get_caret_offset (AtkText *text) -{ - return GTK_TEXT_CELL_ACCESSIBLE (text)->priv->caret_pos; -} - -static gboolean -gtk_text_cell_accessible_set_caret_offset (AtkText *text, - int offset) -{ - GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (text); - - 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->priv->cell_length && - offset != text_cell->priv->caret_pos) - { - text_cell->priv->caret_pos = offset; - - /* emit the signal */ - g_signal_emit_by_name (text, "text-caret-moved", offset); - return TRUE; - } - else - return FALSE; - } -} - -static AtkAttributeSet * -gtk_text_cell_accessible_get_run_attributes (AtkText *text, - int offset, - int *start_offset, - int *end_offset) -{ - AtkAttributeSet *attrib_set = NULL; - GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (text); - - attrib_set = _gtk_pango_get_run_attributes (NULL, text_cell->priv->layout, offset, start_offset, end_offset); - - return attrib_set; -} - -static AtkAttributeSet * -add_attribute (AtkAttributeSet *attributes, - AtkTextAttribute attr, - const char *value) -{ - AtkAttribute *at; - - at = g_new (AtkAttribute, 1); - at->name = g_strdup (atk_text_attribute_get_name (attr)); - at->value = g_strdup (value); - - return g_slist_prepend (attributes, at); -} - -static AtkAttributeSet * -gtk_text_cell_accessible_get_default_attributes (AtkText *text) -{ - AtkAttributeSet *attrib_set = NULL; - GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (text); - GtkWidget *widget; - - widget = get_widget (GTK_TEXT_CELL_ACCESSIBLE (text)); - - attrib_set = add_attribute (attrib_set, ATK_TEXT_ATTR_DIRECTION, - atk_text_attribute_get_value (ATK_TEXT_ATTR_DIRECTION, - gtk_widget_get_direction (widget))); - attrib_set = _gtk_pango_get_default_attributes (NULL, text_cell->priv->layout); - - attrib_set = _gtk_style_context_get_attributes (attrib_set, - gtk_widget_get_style_context (widget)); - - return attrib_set; -} - -GtkWidget * -get_widget (GtkTextCellAccessible *text) -{ - AtkObject *parent; - - parent = atk_object_get_parent (ATK_OBJECT (text)); - if (GTK_IS_CONTAINER_CELL_ACCESSIBLE (parent)) - parent = atk_object_get_parent (parent); - - return gtk_accessible_get_widget (GTK_ACCESSIBLE (parent)); -} - -/* This function is used by gtk_text_cell_accessible_get_offset_at_point() - * and gtk_text_cell_accessible_get_character_extents(). There is no - * cached PangoLayout so we must create a temporary one using this function. - */ -static PangoLayout * -create_pango_layout (GtkTextCellAccessible *text) -{ - GdkRGBA *foreground_rgba; - PangoAttrList *attr_list, *attributes; - PangoLayout *layout; - PangoUnderline uline, underline; - PangoFontMask mask; - PangoFontDescription *font_desc; - gboolean foreground_set, strikethrough_set, strikethrough; - gboolean scale_set, underline_set, rise_set; - char *renderer_text; - double scale; - int rise; - GtkRendererCellAccessible *gail_renderer; - GtkCellRendererText *gtk_renderer; - - gail_renderer = GTK_RENDERER_CELL_ACCESSIBLE (text); - g_object_get (gail_renderer, "renderer", >k_renderer, NULL); - - g_object_get (gtk_renderer, - "text", &renderer_text, - "attributes", &attributes, - "foreground-set", &foreground_set, - "foreground-rgba", &foreground_rgba, - "strikethrough-set", &strikethrough_set, - "strikethrough", &strikethrough, - "font-desc", &font_desc, - "scale-set", &scale_set, - "scale", &scale, - "underline-set", &underline_set, - "underline", &underline, - "rise-set", &rise_set, - "rise", &rise, - NULL); - g_object_unref (gtk_renderer); - - layout = gtk_widget_create_pango_layout (get_widget (text), renderer_text); - - if (attributes) - attr_list = pango_attr_list_copy (attributes); - else - attr_list = pango_attr_list_new (); - - if (foreground_set) - { - add_attr (attr_list, pango_attr_foreground_new (foreground_rgba->red * 65535, - foreground_rgba->green * 65535, - foreground_rgba->blue * 65535)); - } - - if (strikethrough_set) - add_attr (attr_list, - pango_attr_strikethrough_new (strikethrough)); - - mask = pango_font_description_get_set_fields (font_desc); - - if (mask & PANGO_FONT_MASK_FAMILY) - add_attr (attr_list, - pango_attr_family_new (pango_font_description_get_family (font_desc))); - - if (mask & PANGO_FONT_MASK_STYLE) - add_attr (attr_list, pango_attr_style_new (pango_font_description_get_style (font_desc))); - - if (mask & PANGO_FONT_MASK_VARIANT) - add_attr (attr_list, pango_attr_variant_new (pango_font_description_get_variant (font_desc))); - - if (mask & PANGO_FONT_MASK_WEIGHT) - add_attr (attr_list, pango_attr_weight_new (pango_font_description_get_weight (font_desc))); - - if (mask & PANGO_FONT_MASK_STRETCH) - add_attr (attr_list, pango_attr_stretch_new (pango_font_description_get_stretch (font_desc))); - - if (mask & PANGO_FONT_MASK_SIZE) - add_attr (attr_list, pango_attr_size_new (pango_font_description_get_size (font_desc))); - - if (scale_set && scale != 1.0) - add_attr (attr_list, pango_attr_scale_new (scale)); - - if (underline_set) - uline = underline; - else - uline = PANGO_UNDERLINE_NONE; - - if (uline != PANGO_UNDERLINE_NONE) - add_attr (attr_list, - pango_attr_underline_new (underline)); - - if (rise_set) - add_attr (attr_list, pango_attr_rise_new (rise)); - - pango_layout_set_attributes (layout, attr_list); - pango_layout_set_width (layout, -1); - pango_attr_list_unref (attr_list); - - pango_font_description_free (font_desc); - pango_attr_list_unref (attributes); - g_free (renderer_text); - gdk_rgba_free (foreground_rgba); - - return layout; -} - -static void -add_attr (PangoAttrList *attr_list, - PangoAttribute *attr) -{ - attr->start_index = 0; - attr->end_index = G_MAXINT; - pango_attr_list_insert (attr_list, attr); -} - -static void -gtk_text_cell_accessible_get_character_extents (AtkText *text, - int offset, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coords) -{ - GtkRendererCellAccessible *gail_renderer; - GtkRequisition min_size; - GtkCellRendererText *gtk_renderer; - GdkRectangle rendered_rect; - GtkWidget *widget; - AtkObject *parent; - PangoRectangle char_rect; - GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (text); - char *renderer_text; - float xalign, yalign; - int x_offset, y_offset, index; - int xpad, ypad; - - if (!GTK_TEXT_CELL_ACCESSIBLE (text)->priv->cell_text) - { - *x = *y = *height = *width = 0; - return; - } - 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); - g_object_get (gail_renderer, "renderer", >k_renderer, NULL); - g_object_get (gtk_renderer, "text", &renderer_text, NULL); - if (renderer_text == NULL) - { - g_object_unref (gtk_renderer); - return; - } - - parent = atk_object_get_parent (ATK_OBJECT (text)); - if (GTK_IS_CONTAINER_CELL_ACCESSIBLE (parent)) - 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_renderer_get_preferred_size (GTK_CELL_RENDERER (gtk_renderer), - widget, - &min_size, NULL); - - gtk_cell_renderer_get_alignment (GTK_CELL_RENDERER (gtk_renderer), &xalign, &yalign); - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - xalign = 1.0 - xalign; - x_offset = MAX (0, xalign * (rendered_rect.width - min_size.width)); - y_offset = MAX (0, yalign * (rendered_rect.height - min_size.height)); - - index = g_utf8_offset_to_pointer (renderer_text, offset) - renderer_text; - pango_layout_index_to_pos (text_cell->priv->layout, index, &char_rect); - - gtk_cell_renderer_get_padding (GTK_CELL_RENDERER (gtk_renderer), &xpad, &ypad); - - *x = (char_rect.x / PANGO_SCALE) + x_offset + rendered_rect.x + xpad; - *y = (char_rect.y / PANGO_SCALE) + y_offset + rendered_rect.y + ypad; - *height = char_rect.height / PANGO_SCALE; - *width = char_rect.width / PANGO_SCALE; - - if (coords == ATK_XY_SCREEN) - { - *x = 0; - *y = 0; - *height = 0; - *width = 0; - } - - g_free (renderer_text); - g_object_unref (gtk_renderer); -} - -static int -gtk_text_cell_accessible_get_offset_at_point (AtkText *text, - int x, - int y, - AtkCoordType coords) -{ - AtkObject *parent; - GtkRendererCellAccessible *gail_renderer; - GtkCellRendererText *gtk_renderer; - GtkRequisition min_size; - GtkWidget *widget; - GdkRectangle rendered_rect; - GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (text); - char *renderer_text; - float xalign, yalign; - int x_offset, y_offset, index; - int xpad, ypad; - int x_temp, y_temp; - gboolean ret; - - if (!GTK_TEXT_CELL_ACCESSIBLE (text)->priv->cell_text) - return -1; - - gail_renderer = GTK_RENDERER_CELL_ACCESSIBLE (text); - 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; - } - - if (GTK_IS_CONTAINER_CELL_ACCESSIBLE (parent)) - parent = atk_object_get_parent (parent); - - 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_renderer_get_preferred_size (GTK_CELL_RENDERER (gtk_renderer), - widget, - &min_size, NULL); - gtk_cell_renderer_get_alignment (GTK_CELL_RENDERER (gtk_renderer), &xalign, &yalign); - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - xalign = 1.0 - xalign; - x_offset = MAX (0, xalign * (rendered_rect.width - min_size.width)); - y_offset = MAX (0, yalign * (rendered_rect.height - min_size.height)); - - gtk_cell_renderer_get_padding (GTK_CELL_RENDERER (gtk_renderer), &xpad, &ypad); - - x_temp = x - (x_offset + rendered_rect.x + xpad); - y_temp = y - (y_offset + rendered_rect.y + ypad); - - if (coords == ATK_XY_SCREEN) - index = -1; - - ret = pango_layout_xy_to_index (text_cell->priv->layout, - x_temp * PANGO_SCALE, - y_temp * PANGO_SCALE, - &index, NULL); - if (!ret) - { - if (x_temp < 0 || y_temp < 0) - index = 0; - else - index = -1; - } - - g_object_unref (gtk_renderer); - - if (index == -1) - { - if (coords == ATK_XY_WINDOW || coords == ATK_XY_SCREEN) - { - glong length; - - length = g_utf8_strlen (renderer_text, -1); - g_free (renderer_text); - - return length; - } - - g_free (renderer_text); - - return index; - } - else - { - glong offset; - - offset = g_utf8_pointer_to_offset (renderer_text, - renderer_text + index); - g_free (renderer_text); - - return offset; - } -} - -static gunichar -gtk_text_cell_accessible_get_character_at_offset (AtkText *text, - int offset) -{ - char *index; - char *string; - - string = GTK_TEXT_CELL_ACCESSIBLE(text)->priv->cell_text; - - if (!string) - return '\0'; - - if (offset >= g_utf8_strlen (string, -1)) - return '\0'; - - index = g_utf8_offset_to_pointer (string, offset); - - return g_utf8_get_char (index); -} - -static void -atk_text_interface_init (AtkTextIface *iface) -{ - iface->get_text = gtk_text_cell_accessible_get_text; - iface->get_character_at_offset = gtk_text_cell_accessible_get_character_at_offset; - iface->get_text_before_offset = gtk_text_cell_accessible_get_text_before_offset; - iface->get_text_at_offset = gtk_text_cell_accessible_get_text_at_offset; - iface->get_text_after_offset = gtk_text_cell_accessible_get_text_after_offset; - iface->get_character_count = gtk_text_cell_accessible_get_character_count; - iface->get_caret_offset = gtk_text_cell_accessible_get_caret_offset; - iface->set_caret_offset = gtk_text_cell_accessible_set_caret_offset; - iface->get_run_attributes = gtk_text_cell_accessible_get_run_attributes; - iface->get_default_attributes = gtk_text_cell_accessible_get_default_attributes; - iface->get_character_extents = gtk_text_cell_accessible_get_character_extents; - iface->get_offset_at_point = gtk_text_cell_accessible_get_offset_at_point; -} diff --git a/gtk/a11y/gtktextcellaccessible.h b/gtk/a11y/gtktextcellaccessible.h deleted file mode 100644 index 16a63b7518..0000000000 --- a/gtk/a11y/gtktextcellaccessible.h +++ /dev/null @@ -1,58 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_TEXT_CELL_ACCESSIBLE_H__ -#define __GTK_TEXT_CELL_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <atk/atk.h> -#include <gtk/a11y/gtkrenderercellaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_TEXT_CELL_ACCESSIBLE (gtk_text_cell_accessible_get_type ()) -#define GTK_TEXT_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TEXT_CELL_ACCESSIBLE, GtkTextCellAccessible)) -#define GTK_TEXT_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TEXT_CELL_ACCESSIBLE, GtkTextCellAccessibleClass)) -#define GTK_IS_TEXT_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TEXT_CELL_ACCESSIBLE)) -#define GTK_IS_TEXT_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TEXT_CELL_ACCESSIBLE)) -#define GTK_TEXT_CELL_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TEXT_CELL_ACCESSIBLE, GtkTextCellAccessibleClass)) - -typedef struct _GtkTextCellAccessible GtkTextCellAccessible; -typedef struct _GtkTextCellAccessibleClass GtkTextCellAccessibleClass; -typedef struct _GtkTextCellAccessiblePrivate GtkTextCellAccessiblePrivate; - -struct _GtkTextCellAccessible -{ - GtkRendererCellAccessible parent; - - GtkTextCellAccessiblePrivate *priv; -}; - -struct _GtkTextCellAccessibleClass -{ - GtkRendererCellAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_text_cell_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_TEXT_CELL_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtktextviewaccessible.c b/gtk/a11y/gtktextviewaccessible.c deleted file mode 100644 index 3de00eec92..0000000000 --- a/gtk/a11y/gtktextviewaccessible.c +++ /dev/null @@ -1,1819 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <sys/types.h> - -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif - -#include <string.h> -#include <stdlib.h> -#include <glib-object.h> -#include <glib/gstdio.h> -#include <gtk/gtk.h> -#include "gtktextviewaccessibleprivate.h" -#include "gtktextbufferprivate.h" -#include "gtktextviewprivate.h" -#include "gtk/gtkwidgetprivate.h" - -struct _GtkTextViewAccessiblePrivate -{ - int insert_offset; - int selection_bound; -}; - -static void insert_text_cb (GtkTextBuffer *buffer, - GtkTextIter *arg1, - char *arg2, - int arg3, - gpointer user_data); -static void delete_range_cb (GtkTextBuffer *buffer, - GtkTextIter *arg1, - GtkTextIter *arg2, - gpointer user_data); -static void delete_range_after_cb (GtkTextBuffer *buffer, - GtkTextIter *arg1, - GtkTextIter *arg2, - gpointer user_data); -static void mark_set_cb (GtkTextBuffer *buffer, - GtkTextIter *arg1, - GtkTextMark *arg2, - gpointer user_data); - - -static void atk_editable_text_interface_init (AtkEditableTextIface *iface); -static void atk_text_interface_init (AtkTextIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkTextViewAccessible, gtk_text_view_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_ADD_PRIVATE (GtkTextViewAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_EDITABLE_TEXT, atk_editable_text_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_interface_init)) - - -static void -on_editable_changed (GObject *gobject, - GParamSpec *pspec, - AtkObject *accessible) -{ - GtkTextView *text_view = GTK_TEXT_VIEW (gobject); - - atk_object_notify_state_change (accessible, - ATK_STATE_EDITABLE, - gtk_text_view_get_editable (text_view)); -} - -static void -gtk_text_view_accessible_initialize (AtkObject *obj, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_text_view_accessible_parent_class)->initialize (obj, data); - - obj->role = ATK_ROLE_TEXT; - - g_signal_connect (data, "notify::editable", - G_CALLBACK (on_editable_changed), - obj); -} - -static AtkStateSet* -gtk_text_view_accessible_ref_state_set (AtkObject *accessible) -{ - AtkStateSet *state_set; - GtkWidget *widget; - - state_set = ATK_OBJECT_CLASS (gtk_text_view_accessible_parent_class)->ref_state_set (accessible); - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - { - atk_state_set_add_state (state_set, ATK_STATE_DEFUNCT); - return state_set; - } - - if (gtk_text_view_get_editable (GTK_TEXT_VIEW (widget))) - atk_state_set_add_state (state_set, ATK_STATE_EDITABLE); - atk_state_set_add_state (state_set, ATK_STATE_MULTI_LINE); - - return state_set; -} - -static void -gtk_text_view_accessible_change_buffer (GtkTextViewAccessible *accessible, - GtkTextBuffer *old_buffer, - GtkTextBuffer *new_buffer) -{ - if (old_buffer) - { - g_signal_handlers_disconnect_matched (old_buffer, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, accessible); - - g_signal_emit_by_name (accessible, - "text-changed::delete", - 0, - gtk_text_buffer_get_char_count (old_buffer)); - } - - if (new_buffer) - { - g_signal_connect_after (new_buffer, "insert-text", G_CALLBACK (insert_text_cb), accessible); - g_signal_connect (new_buffer, "delete-range", G_CALLBACK (delete_range_cb), accessible); - g_signal_connect_after (new_buffer, "delete-range", G_CALLBACK (delete_range_after_cb), accessible); - g_signal_connect_after (new_buffer, "mark-set", G_CALLBACK (mark_set_cb), accessible); - - g_signal_emit_by_name (accessible, - "text-changed::insert", - 0, - gtk_text_buffer_get_char_count (new_buffer)); - } -} - -static void -gtk_text_view_accessible_widget_set (GtkAccessible *accessible) -{ - gtk_text_view_accessible_change_buffer (GTK_TEXT_VIEW_ACCESSIBLE (accessible), - NULL, - gtk_text_view_get_buffer (GTK_TEXT_VIEW (gtk_accessible_get_widget (accessible)))); -} - -static void -gtk_text_view_accessible_widget_unset (GtkAccessible *accessible) -{ - gtk_text_view_accessible_change_buffer (GTK_TEXT_VIEW_ACCESSIBLE (accessible), - gtk_text_view_get_buffer (GTK_TEXT_VIEW (gtk_accessible_get_widget (accessible))), - NULL); -} - -static void -gtk_text_view_accessible_class_init (GtkTextViewAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - GtkAccessibleClass *accessible_class = GTK_ACCESSIBLE_CLASS (klass); - - accessible_class->widget_set = gtk_text_view_accessible_widget_set; - accessible_class->widget_unset = gtk_text_view_accessible_widget_unset; - - class->ref_state_set = gtk_text_view_accessible_ref_state_set; - class->initialize = gtk_text_view_accessible_initialize; -} - -static void -gtk_text_view_accessible_init (GtkTextViewAccessible *accessible) -{ - accessible->priv = gtk_text_view_accessible_get_instance_private (accessible); -} - -static char * -gtk_text_view_accessible_get_text (AtkText *text, - int start_offset, - int end_offset) -{ - GtkTextView *view; - GtkTextBuffer *buffer; - GtkTextIter start, end; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - view = GTK_TEXT_VIEW (widget); - buffer = gtk_text_view_get_buffer (view); - gtk_text_buffer_get_iter_at_offset (buffer, &start, start_offset); - gtk_text_buffer_get_iter_at_offset (buffer, &end, end_offset); - - return gtk_text_buffer_get_text (buffer, &start, &end, FALSE); -} - -static char * -gtk_text_view_accessible_get_text_after_offset (AtkText *text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkWidget *widget; - GtkTextView *view; - GtkTextBuffer *buffer; - GtkTextIter pos; - GtkTextIter start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - view = GTK_TEXT_VIEW (widget); - buffer = gtk_text_view_get_buffer (view); - gtk_text_buffer_get_iter_at_offset (buffer, &pos, offset); - start = end = pos; - if (boundary_type == ATK_TEXT_BOUNDARY_LINE_START) - { - gtk_text_view_forward_display_line (view, &end); - start = end; - gtk_text_view_forward_display_line (view, &end); - } - else if (boundary_type == ATK_TEXT_BOUNDARY_LINE_END) - { - gtk_text_view_forward_display_line_end (view, &end); - start = end; - gtk_text_view_forward_display_line (view, &end); - gtk_text_view_forward_display_line_end (view, &end); - } - else - _gtk_text_buffer_get_text_after (buffer, boundary_type, &pos, &start, &end); - - *start_offset = gtk_text_iter_get_offset (&start); - *end_offset = gtk_text_iter_get_offset (&end); - - return gtk_text_buffer_get_slice (buffer, &start, &end, FALSE); -} - -static char * -gtk_text_view_accessible_get_text_at_offset (AtkText *text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkWidget *widget; - GtkTextView *view; - GtkTextBuffer *buffer; - GtkTextIter pos; - GtkTextIter start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - view = GTK_TEXT_VIEW (widget); - buffer = gtk_text_view_get_buffer (view); - gtk_text_buffer_get_iter_at_offset (buffer, &pos, offset); - start = end = pos; - if (boundary_type == ATK_TEXT_BOUNDARY_LINE_START) - { - gtk_text_view_backward_display_line_start (view, &start); - gtk_text_view_forward_display_line (view, &end); - } - else if (boundary_type == ATK_TEXT_BOUNDARY_LINE_END) - { - gtk_text_view_backward_display_line_start (view, &start); - if (!gtk_text_iter_is_start (&start)) - { - gtk_text_view_backward_display_line (view, &start); - gtk_text_view_forward_display_line_end (view, &start); - } - gtk_text_view_forward_display_line_end (view, &end); - } - else - _gtk_text_buffer_get_text_at (buffer, boundary_type, &pos, &start, &end); - - *start_offset = gtk_text_iter_get_offset (&start); - *end_offset = gtk_text_iter_get_offset (&end); - - return gtk_text_buffer_get_slice (buffer, &start, &end, FALSE); -} - -static char * -gtk_text_view_accessible_get_text_before_offset (AtkText *text, - int offset, - AtkTextBoundary boundary_type, - int *start_offset, - int *end_offset) -{ - GtkWidget *widget; - GtkTextView *view; - GtkTextBuffer *buffer; - GtkTextIter pos; - GtkTextIter start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - view = GTK_TEXT_VIEW (widget); - buffer = gtk_text_view_get_buffer (view); - gtk_text_buffer_get_iter_at_offset (buffer, &pos, offset); - start = end = pos; - - if (boundary_type == ATK_TEXT_BOUNDARY_LINE_START) - { - gtk_text_view_backward_display_line_start (view, &start); - end = start; - gtk_text_view_backward_display_line (view, &start); - gtk_text_view_backward_display_line_start (view, &start); - } - else if (boundary_type == ATK_TEXT_BOUNDARY_LINE_END) - { - gtk_text_view_backward_display_line_start (view, &start); - if (!gtk_text_iter_is_start (&start)) - { - gtk_text_view_backward_display_line (view, &start); - end = start; - gtk_text_view_forward_display_line_end (view, &end); - if (!gtk_text_iter_is_start (&start)) - { - if (gtk_text_view_backward_display_line (view, &start)) - gtk_text_view_forward_display_line_end (view, &start); - else - gtk_text_iter_set_offset (&start, 0); - } - } - else - end = start; - } - else - _gtk_text_buffer_get_text_before (buffer, boundary_type, &pos, &start, &end); - - *start_offset = gtk_text_iter_get_offset (&start); - *end_offset = gtk_text_iter_get_offset (&end); - - return gtk_text_buffer_get_slice (buffer, &start, &end, FALSE); -} - -static gunichar -gtk_text_view_accessible_get_character_at_offset (AtkText *text, - int offset) -{ - GtkWidget *widget; - GtkTextIter start, end; - GtkTextBuffer *buffer; - char *string; - gunichar unichar; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return '\0'; - - buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)); - if (offset >= gtk_text_buffer_get_char_count (buffer)) - return '\0'; - - gtk_text_buffer_get_iter_at_offset (buffer, &start, offset); - end = start; - gtk_text_iter_forward_char (&end); - string = gtk_text_buffer_get_slice (buffer, &start, &end, FALSE); - unichar = g_utf8_get_char (string); - g_free (string); - - return unichar; -} - -static int -gtk_text_view_accessible_get_character_count (AtkText *text) -{ - GtkWidget *widget; - GtkTextBuffer *buffer; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return 0; - - buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)); - return gtk_text_buffer_get_char_count (buffer); -} - -static int -get_insert_offset (GtkTextBuffer *buffer) -{ - GtkTextMark *insert; - GtkTextIter iter; - - insert = gtk_text_buffer_get_insert (buffer); - gtk_text_buffer_get_iter_at_mark (buffer, &iter, insert); - return gtk_text_iter_get_offset (&iter); -} - -static int -gtk_text_view_accessible_get_caret_offset (AtkText *text) -{ - GtkWidget *widget; - GtkTextBuffer *buffer; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return -1; - - buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)); - return get_insert_offset (buffer); -} - -static gboolean -gtk_text_view_accessible_set_caret_offset (AtkText *text, - int offset) -{ - GtkTextView *view; - GtkWidget *widget; - GtkTextBuffer *buffer; - GtkTextIter iter; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - view = GTK_TEXT_VIEW (widget); - buffer = gtk_text_view_get_buffer (view); - - gtk_text_buffer_get_iter_at_offset (buffer, &iter, offset); - gtk_text_buffer_place_cursor (buffer, &iter); - gtk_text_view_scroll_to_iter (view, &iter, 0, FALSE, 0, 0); - - return TRUE; -} - -static int -gtk_text_view_accessible_get_offset_at_point (AtkText *text, - int x, - int y, - AtkCoordType coords) -{ - GtkTextView *view; - GtkTextIter iter; - int buff_x, buff_y; - GtkWidget *widget; - GdkRectangle rect; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return -1; - - if (coords != ATK_XY_WINDOW) - return -1; - - view = GTK_TEXT_VIEW (widget); - - gtk_text_view_window_to_buffer_coords (view, GTK_TEXT_WINDOW_WIDGET, - x, y, &buff_x, &buff_y); - gtk_text_view_get_visible_rect (view, &rect); - - /* Clamp point to visible rectangle */ - buff_x = CLAMP (buff_x, rect.x, rect.x + rect.width - 1); - buff_y = CLAMP (buff_y, rect.y, rect.y + rect.height - 1); - - gtk_text_view_get_iter_at_location (view, &iter, buff_x, buff_y); - - /* The iter at a location sometimes points to the next character. - * See bug 111031. We work around that - */ - gtk_text_view_get_iter_location (view, &iter, &rect); - if (buff_x < rect.x) - gtk_text_iter_backward_char (&iter); - return gtk_text_iter_get_offset (&iter); -} - -static void -gtk_text_view_accessible_get_character_extents (AtkText *text, - int offset, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coords) -{ - GtkTextView *view; - GtkTextBuffer *buffer; - GtkTextIter iter; - GtkWidget *widget; - GdkRectangle rectangle; - - *x = 0; - *y = 0; - *width = 0; - *height = 0; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - view = GTK_TEXT_VIEW (widget); - buffer = gtk_text_view_get_buffer (view); - gtk_text_buffer_get_iter_at_offset (buffer, &iter, offset); - gtk_text_view_get_iter_location (view, &iter, &rectangle); - - *height = rectangle.height; - *width = rectangle.width; - - gtk_text_view_buffer_to_window_coords (view, GTK_TEXT_WINDOW_WIDGET, - rectangle.x, rectangle.y, x, y); - if (coords != ATK_XY_WINDOW) - { - *x = 0; - *y = 0; - *height = 0; - *width = 0; - } -} - -static AtkAttributeSet * -add_text_attribute (AtkAttributeSet *attributes, - AtkTextAttribute attr, - char *value) -{ - AtkAttribute *at; - - at = g_new (AtkAttribute, 1); - at->name = g_strdup (atk_text_attribute_get_name (attr)); - at->value = value; - - return g_slist_prepend (attributes, at); -} - -static AtkAttributeSet * -add_text_int_attribute (AtkAttributeSet *attributes, - AtkTextAttribute attr, - int i) - -{ - char *value; - - value = g_strdup (atk_text_attribute_get_value (attr, i)); - - return add_text_attribute (attributes, attr, value); -} - -static AtkAttributeSet * -gtk_text_view_accessible_get_run_attributes (AtkText *text, - int offset, - int *start_offset, - int *end_offset) -{ - GtkTextView *view; - GtkTextBuffer *buffer; - GtkWidget *widget; - GtkTextIter iter; - AtkAttributeSet *attrib_set = NULL; - GSList *tags, *temp_tags; - double scale = 1; - gboolean val_set = FALSE; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - view = GTK_TEXT_VIEW (widget); - buffer = gtk_text_view_get_buffer (view); - - gtk_text_buffer_get_iter_at_offset (buffer, &iter, offset); - - gtk_text_iter_forward_to_tag_toggle (&iter, NULL); - *end_offset = gtk_text_iter_get_offset (&iter); - - gtk_text_iter_backward_to_tag_toggle (&iter, NULL); - *start_offset = gtk_text_iter_get_offset (&iter); - - gtk_text_buffer_get_iter_at_offset (buffer, &iter, offset); - - tags = gtk_text_iter_get_tags (&iter); - tags = g_slist_reverse (tags); - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "style-set", &val_set, NULL); - if (val_set) - { - PangoStyle style; - g_object_get (tag, "style", &style, NULL); - attrib_set = add_text_int_attribute (attrib_set, ATK_TEXT_ATTR_STYLE, style); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "variant-set", &val_set, NULL); - if (val_set) - { - PangoVariant variant; - g_object_get (tag, "variant", &variant, NULL); - attrib_set = add_text_int_attribute (attrib_set, ATK_TEXT_ATTR_VARIANT, variant); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "stretch-set", &val_set, NULL); - if (val_set) - { - PangoStretch stretch; - g_object_get (tag, "stretch", &stretch, NULL); - attrib_set = add_text_int_attribute (attrib_set, ATK_TEXT_ATTR_STRETCH, stretch); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "justification-set", &val_set, NULL); - if (val_set) - { - GtkJustification justification; - g_object_get (tag, "justification", &justification, NULL); - attrib_set = add_text_int_attribute (attrib_set, ATK_TEXT_ATTR_JUSTIFICATION, justification); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - GtkTextDirection direction; - - g_object_get (tag, "direction", &direction, NULL); - - if (direction != GTK_TEXT_DIR_NONE) - { - val_set = TRUE; - attrib_set = add_text_int_attribute (attrib_set, ATK_TEXT_ATTR_DIRECTION, direction); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "wrap-mode-set", &val_set, NULL); - if (val_set) - { - GtkWrapMode wrap_mode; - g_object_get (tag, "wrap-mode", &wrap_mode, NULL); - attrib_set = add_text_int_attribute (attrib_set, ATK_TEXT_ATTR_WRAP_MODE, wrap_mode); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "foreground-set", &val_set, NULL); - if (val_set) - { - GdkRGBA *rgba; - char *value; - - g_object_get (tag, "foreground-rgba", &rgba, NULL); - value = g_strdup_printf ("%u,%u,%u", - (guint) rgba->red * 65535, - (guint) rgba->green * 65535, - (guint) rgba->blue * 65535); - gdk_rgba_free (rgba); - attrib_set = add_text_attribute (attrib_set, ATK_TEXT_ATTR_FG_COLOR, value); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "background-set", &val_set, NULL); - if (val_set) - { - GdkRGBA *rgba; - char *value; - - g_object_get (tag, "background-rgba", &rgba, NULL); - value = g_strdup_printf ("%u,%u,%u", - (guint) rgba->red * 65535, - (guint) rgba->green * 65535, - (guint) rgba->blue * 65535); - gdk_rgba_free (rgba); - attrib_set = add_text_attribute (attrib_set, ATK_TEXT_ATTR_BG_COLOR, value); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "family-set", &val_set, NULL); - - if (val_set) - { - char *value; - g_object_get (tag, "family", &value, NULL); - attrib_set = add_text_attribute (attrib_set, ATK_TEXT_ATTR_FAMILY_NAME, value); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "language-set", &val_set, NULL); - - if (val_set) - { - char *value; - g_object_get (tag, "language", &value, NULL); - attrib_set = add_text_attribute (attrib_set, ATK_TEXT_ATTR_LANGUAGE, value); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "weight-set", &val_set, NULL); - - if (val_set) - { - int weight; - char *value; - g_object_get (tag, "weight", &weight, NULL); - value = g_strdup_printf ("%d", weight); - attrib_set = add_text_attribute (attrib_set, ATK_TEXT_ATTR_WEIGHT, value); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - /* scale is special as the effective value is the product - * of all specified values - */ - temp_tags = tags; - while (temp_tags) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - gboolean scale_set; - - g_object_get (tag, "scale-set", &scale_set, NULL); - if (scale_set) - { - double font_scale; - g_object_get (tag, "scale", &font_scale, NULL); - val_set = TRUE; - scale *= font_scale; - } - temp_tags = temp_tags->next; - } - if (val_set) - { - char *value; - value = g_strdup_printf ("%g", scale); - attrib_set = add_text_attribute (attrib_set, ATK_TEXT_ATTR_SCALE, value); - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "size-set", &val_set, NULL); - if (val_set) - { - int size; - char *value; - g_object_get (tag, "size", &size, NULL); - value = g_strdup_printf ("%i", size); - attrib_set = add_text_attribute (attrib_set, ATK_TEXT_ATTR_SIZE, value); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "strikethrough-set", &val_set, NULL); - if (val_set) - { - gboolean strikethrough; - g_object_get (tag, "strikethrough", &strikethrough, NULL); - attrib_set = add_text_int_attribute (attrib_set, ATK_TEXT_ATTR_STRIKETHROUGH, strikethrough); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "underline-set", &val_set, NULL); - if (val_set) - { - PangoUnderline underline; - g_object_get (tag, "underline", &underline, NULL); - attrib_set = add_text_int_attribute (attrib_set, ATK_TEXT_ATTR_UNDERLINE, underline); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "rise-set", &val_set, NULL); - if (val_set) - { - int rise; - char *value; - g_object_get (tag, "rise", &rise, NULL); - value = g_strdup_printf ("%i", rise); - attrib_set = add_text_attribute (attrib_set, ATK_TEXT_ATTR_RISE, value); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "background-full-height-set", &val_set, NULL); - if (val_set) - { - gboolean bg_full_height; - g_object_get (tag, "background-full-height", &bg_full_height, NULL); - attrib_set = add_text_int_attribute (attrib_set, ATK_TEXT_ATTR_BG_FULL_HEIGHT, bg_full_height); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "pixels-inside-wrap-set", &val_set, NULL); - if (val_set) - { - int pixels; - char *value; - g_object_get (tag, "pixels-inside-wrap", &pixels, NULL); - value = g_strdup_printf ("%i", pixels); - attrib_set = add_text_attribute (attrib_set, ATK_TEXT_ATTR_PIXELS_INSIDE_WRAP, value); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "pixels-below-lines-set", &val_set, NULL); - if (val_set) - { - int pixels; - char *value; - g_object_get (tag, "pixels-below-lines", &pixels, NULL); - value = g_strdup_printf ("%i", pixels); - attrib_set = add_text_attribute (attrib_set, ATK_TEXT_ATTR_PIXELS_BELOW_LINES, value); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "pixels-above-lines-set", &val_set, NULL); - if (val_set) - { - int pixels; - char *value; - g_object_get (tag, "pixels-above-lines", &pixels, NULL); - value = g_strdup_printf ("%i", pixels); - attrib_set = add_text_attribute (attrib_set, ATK_TEXT_ATTR_PIXELS_ABOVE_LINES, value); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "editable-set", &val_set, NULL); - if (val_set) - { - gboolean editable; - g_object_get (tag, "editable", &editable, NULL); - attrib_set = add_text_int_attribute (attrib_set, ATK_TEXT_ATTR_EDITABLE, editable); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "invisible-set", &val_set, NULL); - if (val_set) - { - gboolean invisible; - g_object_get (tag, "invisible", &invisible, NULL); - attrib_set = add_text_int_attribute (attrib_set, ATK_TEXT_ATTR_INVISIBLE, invisible); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "indent-set", &val_set, NULL); - if (val_set) - { - int indent; - char *value; - g_object_get (tag, "indent", &indent, NULL); - value = g_strdup_printf ("%i", indent); - attrib_set = add_text_attribute (attrib_set, ATK_TEXT_ATTR_INDENT, value); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "right-margin-set", &val_set, NULL); - if (val_set) - { - int margin; - char *value; - g_object_get (tag, "right-margin", &margin, NULL); - value = g_strdup_printf ("%i", margin); - attrib_set = add_text_attribute (attrib_set, ATK_TEXT_ATTR_RIGHT_MARGIN, value); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - temp_tags = tags; - while (temp_tags && !val_set) - { - GtkTextTag *tag = GTK_TEXT_TAG (temp_tags->data); - - g_object_get (tag, "left-margin-set", &val_set, NULL); - if (val_set) - { - int margin; - char *value; - g_object_get (tag, "left-margin", &margin, NULL); - value = g_strdup_printf ("%i", margin); - attrib_set = add_text_attribute (attrib_set, ATK_TEXT_ATTR_LEFT_MARGIN, value); - } - temp_tags = temp_tags->next; - } - val_set = FALSE; - - g_slist_free (tags); - return attrib_set; -} - -static AtkAttributeSet * -gtk_text_view_accessible_get_default_attributes (AtkText *text) -{ - GtkTextView *view; - GtkWidget *widget; - GtkTextAttributes *text_attrs; - AtkAttributeSet *attributes; - PangoFontDescription *font; - char *value; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return NULL; - - view = GTK_TEXT_VIEW (widget); - text_attrs = gtk_text_view_get_default_attributes (view); - - attributes = NULL; - - font = text_attrs->font; - - if (font) - { - attributes = add_text_int_attribute (attributes, ATK_TEXT_ATTR_STYLE, - pango_font_description_get_style (font)); - - attributes = add_text_int_attribute (attributes, ATK_TEXT_ATTR_VARIANT, - pango_font_description_get_variant (font)); - - attributes = add_text_int_attribute (attributes, ATK_TEXT_ATTR_STRETCH, - pango_font_description_get_stretch (font)); - - value = g_strdup (pango_font_description_get_family (font)); - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_FAMILY_NAME, value); - - value = g_strdup_printf ("%d", pango_font_description_get_weight (font)); - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_WEIGHT, value); - - value = g_strdup_printf ("%i", pango_font_description_get_size (font) / PANGO_SCALE); - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_SIZE, value); - } - - attributes = add_text_int_attribute (attributes, ATK_TEXT_ATTR_JUSTIFICATION, text_attrs->justification); - attributes = add_text_int_attribute (attributes, ATK_TEXT_ATTR_DIRECTION, text_attrs->direction); - attributes = add_text_int_attribute (attributes, ATK_TEXT_ATTR_WRAP_MODE, text_attrs->wrap_mode); - attributes = add_text_int_attribute (attributes, ATK_TEXT_ATTR_EDITABLE, text_attrs->editable); - attributes = add_text_int_attribute (attributes, ATK_TEXT_ATTR_INVISIBLE, text_attrs->invisible); - attributes = add_text_int_attribute (attributes, ATK_TEXT_ATTR_BG_FULL_HEIGHT, text_attrs->bg_full_height); - - attributes = add_text_int_attribute (attributes, ATK_TEXT_ATTR_STRIKETHROUGH, - text_attrs->appearance.strikethrough); - attributes = add_text_int_attribute (attributes, ATK_TEXT_ATTR_UNDERLINE, - text_attrs->appearance.underline); - - value = g_strdup_printf ("%u,%u,%u", - (guint)(text_attrs->appearance.bg_rgba->red * 65535), - (guint)(text_attrs->appearance.bg_rgba->green * 65535), - (guint)(text_attrs->appearance.bg_rgba->blue * 65535)); - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_BG_COLOR, value); - - value = g_strdup_printf ("%u,%u,%u", - (guint)(text_attrs->appearance.fg_rgba->red), - (guint)(text_attrs->appearance.fg_rgba->green), - (guint)(text_attrs->appearance.fg_rgba->blue)); - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_FG_COLOR, value); - - value = g_strdup_printf ("%g", text_attrs->font_scale); - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_SCALE, value); - - value = g_strdup ((char *)(text_attrs->language)); - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_LANGUAGE, value); - - value = g_strdup_printf ("%i", text_attrs->appearance.rise); - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_RISE, value); - - value = g_strdup_printf ("%i", text_attrs->pixels_inside_wrap); - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_PIXELS_INSIDE_WRAP, value); - - value = g_strdup_printf ("%i", text_attrs->pixels_below_lines); - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_PIXELS_BELOW_LINES, value); - - value = g_strdup_printf ("%i", text_attrs->pixels_above_lines); - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_PIXELS_ABOVE_LINES, value); - - value = g_strdup_printf ("%i", text_attrs->indent); - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_INDENT, value); - - value = g_strdup_printf ("%i", text_attrs->left_margin); - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_LEFT_MARGIN, value); - - value = g_strdup_printf ("%i", text_attrs->right_margin); - attributes = add_text_attribute (attributes, ATK_TEXT_ATTR_RIGHT_MARGIN, value); - - gtk_text_attributes_unref (text_attrs); - return attributes; -} - -static int -gtk_text_view_accessible_get_n_selections (AtkText *text) -{ - GtkWidget *widget; - GtkTextBuffer *buffer; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return 0; - - buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)); - if (gtk_text_buffer_get_selection_bounds (buffer, NULL, NULL)) - return 1; - - return 0; -} - -static char * -gtk_text_view_accessible_get_selection (AtkText *atk_text, - int selection_num, - int *start_pos, - int *end_pos) -{ - GtkTextView *view; - GtkWidget *widget; - GtkTextBuffer *buffer; - GtkTextIter start, end; - char *text; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (atk_text)); - if (widget == NULL) - return NULL; - - if (selection_num != 0) - return NULL; - - view = GTK_TEXT_VIEW (widget); - buffer = gtk_text_view_get_buffer (view); - - if (gtk_text_buffer_get_selection_bounds (buffer, &start, &end)) - text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); - else - text = NULL; - - *start_pos = gtk_text_iter_get_offset (&start); - *end_pos = gtk_text_iter_get_offset (&end); - - return text; -} - -static gboolean -gtk_text_view_accessible_add_selection (AtkText *text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkTextBuffer *buffer; - GtkTextIter start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)); - - if (!gtk_text_buffer_get_selection_bounds (buffer, NULL, NULL)) - { - gtk_text_buffer_get_iter_at_offset (buffer, &start, start_pos); - gtk_text_buffer_get_iter_at_offset (buffer, &end, end_pos); - gtk_text_buffer_select_range (buffer, &end, &start); - - return TRUE; - } - else - return FALSE; -} - -static gboolean -gtk_text_view_accessible_remove_selection (AtkText *text, - int selection_num) -{ - GtkWidget *widget; - GtkTextBuffer *buffer; - GtkTextMark *insert; - GtkTextIter iter; - GtkTextIter start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - if (selection_num != 0) - return FALSE; - - buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)); - - if (gtk_text_buffer_get_selection_bounds (buffer, &start, &end)) - { - insert = gtk_text_buffer_get_insert (buffer); - gtk_text_buffer_get_iter_at_mark (buffer, &iter, insert); - gtk_text_buffer_place_cursor (buffer, &iter); - return TRUE; - } - else - return FALSE; -} - -static gboolean -gtk_text_view_accessible_set_selection (AtkText *text, - int selection_num, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkTextBuffer *buffer; - GtkTextIter start, end; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - if (selection_num != 0) - return FALSE; - - buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)); - - if (gtk_text_buffer_get_selection_bounds (buffer, &start, &end)) - { - gtk_text_buffer_get_iter_at_offset (buffer, &start, start_pos); - gtk_text_buffer_get_iter_at_offset (buffer, &end, end_pos); - gtk_text_buffer_select_range (buffer, &end, &start); - - return TRUE; - } - else - return FALSE; -} - -static void -atk_text_interface_init (AtkTextIface *iface) -{ - iface->get_text = gtk_text_view_accessible_get_text; - iface->get_text_after_offset = gtk_text_view_accessible_get_text_after_offset; - iface->get_text_at_offset = gtk_text_view_accessible_get_text_at_offset; - iface->get_text_before_offset = gtk_text_view_accessible_get_text_before_offset; - iface->get_character_at_offset = gtk_text_view_accessible_get_character_at_offset; - iface->get_character_count = gtk_text_view_accessible_get_character_count; - iface->get_caret_offset = gtk_text_view_accessible_get_caret_offset; - iface->set_caret_offset = gtk_text_view_accessible_set_caret_offset; - iface->get_offset_at_point = gtk_text_view_accessible_get_offset_at_point; - iface->get_character_extents = gtk_text_view_accessible_get_character_extents; - iface->get_n_selections = gtk_text_view_accessible_get_n_selections; - iface->get_selection = gtk_text_view_accessible_get_selection; - iface->add_selection = gtk_text_view_accessible_add_selection; - iface->remove_selection = gtk_text_view_accessible_remove_selection; - iface->set_selection = gtk_text_view_accessible_set_selection; - iface->get_run_attributes = gtk_text_view_accessible_get_run_attributes; - iface->get_default_attributes = gtk_text_view_accessible_get_default_attributes; -} - -/* atkeditabletext.h */ - -static gboolean -gtk_text_view_accessible_set_run_attributes (AtkEditableText *text, - AtkAttributeSet *attributes, - int start_offset, - int end_offset) -{ - GtkTextView *view; - GtkTextBuffer *buffer; - GtkWidget *widget; - GtkTextTag *tag; - GtkTextIter start; - GtkTextIter end; - int j; - GdkRGBA *color; - char ** RGB_vals; - GSList *l; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return FALSE; - - view = GTK_TEXT_VIEW (widget); - if (!gtk_text_view_get_editable (view)) - return FALSE; - - buffer = gtk_text_view_get_buffer (view); - - if (attributes == NULL) - return FALSE; - - gtk_text_buffer_get_iter_at_offset (buffer, &start, start_offset); - gtk_text_buffer_get_iter_at_offset (buffer, &end, end_offset); - - tag = gtk_text_buffer_create_tag (buffer, NULL, NULL); - - for (l = attributes; l; l = l->next) - { - char *name; - char *value; - AtkAttribute *at; - - at = l->data; - - name = at->name; - value = at->value; - - if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_LEFT_MARGIN))) - g_object_set (G_OBJECT (tag), "left-margin", atoi (value), NULL); - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_RIGHT_MARGIN))) - g_object_set (G_OBJECT (tag), "right-margin", atoi (value), NULL); - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_INDENT))) - g_object_set (G_OBJECT (tag), "indent", atoi (value), NULL); - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_PIXELS_ABOVE_LINES))) - g_object_set (G_OBJECT (tag), "pixels-above-lines", atoi (value), NULL); - - else if (!strcmp(name, atk_text_attribute_get_name (ATK_TEXT_ATTR_PIXELS_BELOW_LINES))) - g_object_set (G_OBJECT (tag), "pixels-below-lines", atoi (value), NULL); - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_PIXELS_INSIDE_WRAP))) - g_object_set (G_OBJECT (tag), "pixels-inside-wrap", atoi (value), NULL); - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_SIZE))) - g_object_set (G_OBJECT (tag), "size", atoi (value), NULL); - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_RISE))) - g_object_set (G_OBJECT (tag), "rise", atoi (value), NULL); - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_WEIGHT))) - g_object_set (G_OBJECT (tag), "weight", atoi (value), NULL); - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_BG_FULL_HEIGHT))) - { - g_object_set (G_OBJECT (tag), "bg-full-height", - (strcmp (value, atk_text_attribute_get_value (ATK_TEXT_ATTR_BG_FULL_HEIGHT, 0))), - NULL); - } - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_LANGUAGE))) - g_object_set (G_OBJECT (tag), "language", value, NULL); - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_FAMILY_NAME))) - g_object_set (G_OBJECT (tag), "family", value, NULL); - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_EDITABLE))) - { - g_object_set (G_OBJECT (tag), "editable", - (strcmp (value, atk_text_attribute_get_value (ATK_TEXT_ATTR_EDITABLE, 0))), - NULL); - } - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_INVISIBLE))) - { - g_object_set (G_OBJECT (tag), "invisible", - (strcmp (value, atk_text_attribute_get_value (ATK_TEXT_ATTR_EDITABLE, 0))), - NULL); - } - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_UNDERLINE))) - { - for (j = 0; j < 3; j++) - { - if (!strcmp (value, atk_text_attribute_get_value (ATK_TEXT_ATTR_UNDERLINE, j))) - { - g_object_set (G_OBJECT (tag), "underline", j, NULL); - break; - } - } - } - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_STRIKETHROUGH))) - { - g_object_set (G_OBJECT (tag), "strikethrough", - (strcmp (value, atk_text_attribute_get_value (ATK_TEXT_ATTR_STRIKETHROUGH, 0))), - NULL); - } - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_BG_COLOR))) - { - RGB_vals = g_strsplit (value, ",", 3); - color = g_malloc (sizeof (GdkRGBA)); - color->red = atoi (RGB_vals[0]) / 65535.0; - color->green = atoi (RGB_vals[1]) / 65535.0; - color->blue = atoi (RGB_vals[2]) / 65535.0; - g_object_set (G_OBJECT (tag), "background-rgba", color, NULL); - } - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_FG_COLOR))) - { - RGB_vals = g_strsplit (value, ",", 3); - color = g_malloc (sizeof (GdkRGBA)); - color->red = atoi (RGB_vals[0]) / 65535.0; - color->green = atoi (RGB_vals[1]) / 65535.0; - color->blue = atoi (RGB_vals[2]) / 65535.0; - g_object_set (G_OBJECT (tag), "foreground-rgba", color, NULL); - } - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_STRETCH))) - { - for (j = 0; j < 9; j++) - { - if (!strcmp (value, atk_text_attribute_get_value (ATK_TEXT_ATTR_STRETCH, j))) - { - g_object_set (G_OBJECT (tag), "stretch", j, NULL); - break; - } - } - } - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_JUSTIFICATION))) - { - for (j = 0; j < 4; j++) - { - if (!strcmp (value, atk_text_attribute_get_value (ATK_TEXT_ATTR_JUSTIFICATION, j))) - { - g_object_set (G_OBJECT (tag), "justification", j, NULL); - break; - } - } - } - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_DIRECTION))) - { - for (j = 0; j < 3; j++) - { - if (!strcmp (value, atk_text_attribute_get_value (ATK_TEXT_ATTR_DIRECTION, j))) - { - g_object_set (G_OBJECT (tag), "direction", j, NULL); - break; - } - } - } - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_VARIANT))) - { - for (j = 0; j < 2; j++) - { - if (!strcmp (value, atk_text_attribute_get_value (ATK_TEXT_ATTR_VARIANT, j))) - { - g_object_set (G_OBJECT (tag), "variant", j, NULL); - break; - } - } - } - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_WRAP_MODE))) - { - for (j = 0; j < 3; j++) - { - if (!strcmp (value, atk_text_attribute_get_value (ATK_TEXT_ATTR_WRAP_MODE, j))) - { - g_object_set (G_OBJECT (tag), "wrap-mode", j, NULL); - break; - } - } - } - - else if (!strcmp (name, atk_text_attribute_get_name (ATK_TEXT_ATTR_STYLE))) - { - for (j = 0; j < 3; j++) - { - if (!strcmp (value, atk_text_attribute_get_value (ATK_TEXT_ATTR_STYLE, j))) - { - g_object_set (G_OBJECT (tag), "style", j, NULL); - break; - } - } - } - - else - return FALSE; - } - - gtk_text_buffer_apply_tag (buffer, tag, &start, &end); - - return TRUE; -} - -static void -gtk_text_view_accessible_set_text_contents (AtkEditableText *text, - const char *string) -{ - GtkTextView *view; - GtkWidget *widget; - GtkTextBuffer *buffer; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - view = GTK_TEXT_VIEW (widget); - if (!gtk_text_view_get_editable (view)) - return; - - buffer = gtk_text_view_get_buffer (view); - gtk_text_buffer_set_text (buffer, string, -1); -} - -static void -gtk_text_view_accessible_insert_text (AtkEditableText *text, - const char *string, - int length, - int *position) -{ - GtkTextView *view; - GtkWidget *widget; - GtkTextBuffer *buffer; - GtkTextIter iter; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - view = GTK_TEXT_VIEW (widget); - if (!gtk_text_view_get_editable (view)) - return; - - buffer = gtk_text_view_get_buffer (view); - gtk_text_buffer_get_iter_at_offset (buffer, &iter, *position); - gtk_text_buffer_insert (buffer, &iter, string, length); -} - -static void -gtk_text_view_accessible_copy_text (AtkEditableText *text, - int start_pos, - int end_pos) -{ - GtkWidget *widget; - GtkTextBuffer *buffer; - GtkTextIter start, end; - char *str; - GdkClipboard *clipboard; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)); - - gtk_text_buffer_get_iter_at_offset (buffer, &start, start_pos); - gtk_text_buffer_get_iter_at_offset (buffer, &end, end_pos); - str = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); - - clipboard = gtk_widget_get_clipboard (widget); - gdk_clipboard_set_text (clipboard, str); -} - -static void -gtk_text_view_accessible_cut_text (AtkEditableText *text, - int start_pos, - int end_pos) -{ - GtkTextView *view; - GtkWidget *widget; - GtkTextBuffer *buffer; - GtkTextIter start, end; - char *str; - GdkClipboard *clipboard; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - view = GTK_TEXT_VIEW (widget); - if (!gtk_text_view_get_editable (view)) - return; - buffer = gtk_text_view_get_buffer (view); - - gtk_text_buffer_get_iter_at_offset (buffer, &start, start_pos); - gtk_text_buffer_get_iter_at_offset (buffer, &end, end_pos); - str = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); - clipboard = gtk_widget_get_clipboard (widget); - gdk_clipboard_set_text (clipboard, str); - gtk_text_buffer_delete (buffer, &start, &end); -} - -static void -gtk_text_view_accessible_delete_text (AtkEditableText *text, - int start_pos, - int end_pos) -{ - GtkTextView *view; - GtkWidget *widget; - GtkTextBuffer *buffer; - GtkTextIter start_itr; - GtkTextIter end_itr; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - view = GTK_TEXT_VIEW (widget); - if (!gtk_text_view_get_editable (view)) - return; - buffer = gtk_text_view_get_buffer (view); - - gtk_text_buffer_get_iter_at_offset (buffer, &start_itr, start_pos); - gtk_text_buffer_get_iter_at_offset (buffer, &end_itr, end_pos); - gtk_text_buffer_delete (buffer, &start_itr, &end_itr); -} - -typedef struct -{ - GtkTextBuffer* buffer; - int position; -} PasteData; - -static void -paste_received (GObject *clipboard, - GAsyncResult *result, - gpointer data) -{ - PasteData* paste = data; - GtkTextIter pos_itr; - char *text; - - text = gdk_clipboard_read_text_finish (GDK_CLIPBOARD (clipboard), result, NULL); - if (text) - { - gtk_text_buffer_get_iter_at_offset (paste->buffer, &pos_itr, paste->position); - gtk_text_buffer_insert (paste->buffer, &pos_itr, text, -1); - g_free (text); - } - - g_object_unref (paste->buffer); -} - -static void -gtk_text_view_accessible_paste_text (AtkEditableText *text, - int position) -{ - GtkTextView *view; - GtkWidget *widget; - GtkTextBuffer *buffer; - PasteData paste; - GdkClipboard *clipboard; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); - if (widget == NULL) - return; - - view = GTK_TEXT_VIEW (widget); - if (!gtk_text_view_get_editable (view)) - return; - buffer = gtk_text_view_get_buffer (view); - - paste.buffer = buffer; - paste.position = position; - - g_object_ref (paste.buffer); - clipboard = gtk_widget_get_clipboard (widget); - gdk_clipboard_read_text_async (clipboard, NULL, paste_received, &paste); -} - -static void -atk_editable_text_interface_init (AtkEditableTextIface *iface) -{ - iface->set_text_contents = gtk_text_view_accessible_set_text_contents; - iface->insert_text = gtk_text_view_accessible_insert_text; - iface->copy_text = gtk_text_view_accessible_copy_text; - iface->cut_text = gtk_text_view_accessible_cut_text; - iface->delete_text = gtk_text_view_accessible_delete_text; - iface->paste_text = gtk_text_view_accessible_paste_text; - iface->set_run_attributes = gtk_text_view_accessible_set_run_attributes; -} - -/* Callbacks */ - -static void -gtk_text_view_accessible_update_cursor (GtkTextViewAccessible *accessible, - GtkTextBuffer * buffer) -{ - int prev_insert_offset, prev_selection_bound; - int insert_offset, selection_bound; - GtkTextIter iter; - - prev_insert_offset = accessible->priv->insert_offset; - prev_selection_bound = accessible->priv->selection_bound; - - gtk_text_buffer_get_iter_at_mark (buffer, &iter, gtk_text_buffer_get_insert (buffer)); - insert_offset = gtk_text_iter_get_offset (&iter); - gtk_text_buffer_get_iter_at_mark (buffer, &iter, gtk_text_buffer_get_selection_bound (buffer)); - selection_bound = gtk_text_iter_get_offset (&iter); - - if (prev_insert_offset == insert_offset && prev_selection_bound == selection_bound) - return; - - accessible->priv->insert_offset = insert_offset; - accessible->priv->selection_bound = selection_bound; - - if (prev_insert_offset != insert_offset) - g_signal_emit_by_name (accessible, "text-caret-moved", insert_offset); - - if (prev_insert_offset != prev_selection_bound || insert_offset != selection_bound) - g_signal_emit_by_name (accessible, "text-selection-changed"); -} - -static void -insert_text_cb (GtkTextBuffer *buffer, - GtkTextIter *iter, - char *text, - int len, - gpointer data) -{ - GtkTextViewAccessible *accessible = data; - int position; - int length; - - position = gtk_text_iter_get_offset (iter); - length = g_utf8_strlen (text, len); - - g_signal_emit_by_name (accessible, "text-changed::insert", position - length, length); - - gtk_text_view_accessible_update_cursor (accessible, buffer); -} - -static void -delete_range_cb (GtkTextBuffer *buffer, - GtkTextIter *start, - GtkTextIter *end, - gpointer data) -{ - GtkTextViewAccessible *accessible = data; - int offset, length; - - offset = gtk_text_iter_get_offset (start); - length = gtk_text_iter_get_offset (end) - offset; - - g_signal_emit_by_name (accessible, - "text-changed::delete", - offset, - length); -} - -static void -delete_range_after_cb (GtkTextBuffer *buffer, - GtkTextIter *start, - GtkTextIter *end, - gpointer data) -{ - GtkTextViewAccessible *accessible = data; - - gtk_text_view_accessible_update_cursor (accessible, buffer); -} - -static void -mark_set_cb (GtkTextBuffer *buffer, - GtkTextIter *location, - GtkTextMark *mark, - gpointer data) -{ - GtkTextViewAccessible *accessible = data; - - /* - * Only generate the signal for the "insert" mark, which - * represents the cursor. - */ - if (mark == gtk_text_buffer_get_insert (buffer)) - { - gtk_text_view_accessible_update_cursor (accessible, buffer); - } - else if (mark == gtk_text_buffer_get_selection_bound (buffer)) - { - gtk_text_view_accessible_update_cursor (accessible, buffer); - } -} - -void -_gtk_text_view_accessible_set_buffer (GtkTextView *textview, - GtkTextBuffer *old_buffer) -{ - GtkTextViewAccessible *accessible; - - g_return_if_fail (GTK_IS_TEXT_VIEW (textview)); - g_return_if_fail (old_buffer == NULL || GTK_IS_TEXT_BUFFER (old_buffer)); - - accessible = GTK_TEXT_VIEW_ACCESSIBLE (_gtk_widget_peek_accessible (GTK_WIDGET (textview))); - if (accessible == NULL) - return; - - gtk_text_view_accessible_change_buffer (accessible, - old_buffer, - gtk_text_view_get_buffer (textview)); -} - diff --git a/gtk/a11y/gtktextviewaccessible.h b/gtk/a11y/gtktextviewaccessible.h deleted file mode 100644 index f8436e150e..0000000000 --- a/gtk/a11y/gtktextviewaccessible.h +++ /dev/null @@ -1,58 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_TEXT_VIEW_ACCESSIBLE_H__ -#define __GTK_TEXT_VIEW_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_TEXT_VIEW_ACCESSIBLE (gtk_text_view_accessible_get_type ()) -#define GTK_TEXT_VIEW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TEXT_VIEW_ACCESSIBLE, GtkTextViewAccessible)) -#define GTK_TEXT_VIEW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TEXT_VIEW_ACCESSIBLE, GtkTextViewAccessibleClass)) -#define GTK_IS_TEXT_VIEW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TEXT_VIEW_ACCESSIBLE)) -#define GTK_IS_TEXT_VIEW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TEXT_VIEW_ACCESSIBLE)) -#define GTK_TEXT_VIEW_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TEXT_VIEW_ACCESSIBLE, GtkTextViewAccessibleClass)) - -typedef struct _GtkTextViewAccessible GtkTextViewAccessible; -typedef struct _GtkTextViewAccessibleClass GtkTextViewAccessibleClass; -typedef struct _GtkTextViewAccessiblePrivate GtkTextViewAccessiblePrivate; - -struct _GtkTextViewAccessible -{ - GtkWidgetAccessible parent; - - GtkTextViewAccessiblePrivate *priv; -}; - -struct _GtkTextViewAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_text_view_accessible_get_type (void); - - -G_END_DECLS - -#endif /* __GTK_TEXT_VIEW_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtktextviewaccessibleprivate.h b/gtk/a11y/gtktextviewaccessibleprivate.h deleted file mode 100644 index 9fe9b1b585..0000000000 --- a/gtk/a11y/gtktextviewaccessibleprivate.h +++ /dev/null @@ -1,30 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_TEXT_VIEW_ACCESSIBLE_PRIVATE_H__ -#define __GTK_TEXT_VIEW_ACCESSIBLE_PRIVATE_H__ - -#include <gtk/a11y/gtktextviewaccessible.h> - -G_BEGIN_DECLS - -void _gtk_text_view_accessible_set_buffer (GtkTextView *textview, - GtkTextBuffer *old_buffer); - -G_END_DECLS - -#endif /* __GTK_TEXT_VIEW_ACCESSIBLE_PRIVATE_H__ */ diff --git a/gtk/a11y/gtktogglebuttonaccessible.c b/gtk/a11y/gtktogglebuttonaccessible.c deleted file mode 100644 index 53c8174f86..0000000000 --- a/gtk/a11y/gtktogglebuttonaccessible.c +++ /dev/null @@ -1,84 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <string.h> -#include <gtk/gtk.h> -#include "gtktogglebuttonaccessible.h" - - -G_DEFINE_TYPE (GtkToggleButtonAccessible, gtk_toggle_button_accessible, GTK_TYPE_BUTTON_ACCESSIBLE) - -static void -gtk_toggle_button_accessible_toggled (GtkWidget *widget) -{ - AtkObject *accessible; - GtkToggleButton *toggle_button; - - toggle_button = GTK_TOGGLE_BUTTON (widget); - - accessible = gtk_widget_get_accessible (widget); - atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, - gtk_toggle_button_get_active (toggle_button)); -} - -static void -gtk_toggle_button_accessible_initialize (AtkObject *obj, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_toggle_button_accessible_parent_class)->initialize (obj, data); - - g_signal_connect (data, "toggled", - G_CALLBACK (gtk_toggle_button_accessible_toggled), NULL); - - obj->role = ATK_ROLE_TOGGLE_BUTTON; -} - -static AtkStateSet* -gtk_toggle_button_accessible_ref_state_set (AtkObject *accessible) -{ - AtkStateSet *state_set; - GtkToggleButton *toggle_button; - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return NULL; - - state_set = ATK_OBJECT_CLASS (gtk_toggle_button_accessible_parent_class)->ref_state_set (accessible); - toggle_button = GTK_TOGGLE_BUTTON (widget); - - if (gtk_toggle_button_get_active (toggle_button)) - atk_state_set_add_state (state_set, ATK_STATE_CHECKED); - - return state_set; -} - -static void -gtk_toggle_button_accessible_class_init (GtkToggleButtonAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->ref_state_set = gtk_toggle_button_accessible_ref_state_set; - class->initialize = gtk_toggle_button_accessible_initialize; -} - -static void -gtk_toggle_button_accessible_init (GtkToggleButtonAccessible *button) -{ -} diff --git a/gtk/a11y/gtktogglebuttonaccessible.h b/gtk/a11y/gtktogglebuttonaccessible.h deleted file mode 100644 index b45b518343..0000000000 --- a/gtk/a11y/gtktogglebuttonaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_TOGGLE_BUTTON_ACCESSIBLE_H__ -#define __GTK_TOGGLE_BUTTON_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkbuttonaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_TOGGLE_BUTTON_ACCESSIBLE (gtk_toggle_button_accessible_get_type ()) -#define GTK_TOGGLE_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TOGGLE_BUTTON_ACCESSIBLE, GtkToggleButtonAccessible)) -#define GTK_TOGGLE_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TOGGLE_BUTTON_ACCESSIBLE, GtkToggleButtonAccessibleClass)) -#define GTK_IS_TOGGLE_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TOGGLE_BUTTON_ACCESSIBLE)) -#define GTK_IS_TOGGLE_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TOGGLE_BUTTON_ACCESSIBLE)) -#define GTK_TOGGLE_BUTTON_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TOGGLE_BUTTON_ACCESSIBLE, GtkToggleButtonAccessibleClass)) - -typedef struct _GtkToggleButtonAccessible GtkToggleButtonAccessible; -typedef struct _GtkToggleButtonAccessibleClass GtkToggleButtonAccessibleClass; -typedef struct _GtkToggleButtonAccessiblePrivate GtkToggleButtonAccessiblePrivate; - -struct _GtkToggleButtonAccessible -{ - GtkButtonAccessible parent; - - GtkToggleButtonAccessiblePrivate *priv; -}; - -struct _GtkToggleButtonAccessibleClass -{ - GtkButtonAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_toggle_button_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_TOGGLE_BUTTON_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtktoplevelaccessible.c b/gtk/a11y/gtktoplevelaccessible.c deleted file mode 100644 index f010bea86e..0000000000 --- a/gtk/a11y/gtktoplevelaccessible.c +++ /dev/null @@ -1,253 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <stdlib.h> -#include <string.h> - -#include <gtk/gtkscrolledwindow.h> -#include <gtk/gtkframe.h> -#include <gtk/gtkbutton.h> -#include <gtk/gtkwindow.h> - -#include "gtktoplevelaccessible.h" - -struct _GtkToplevelAccessiblePrivate -{ - GList *window_list; -}; - -G_DEFINE_TYPE_WITH_PRIVATE (GtkToplevelAccessible, gtk_toplevel_accessible, ATK_TYPE_OBJECT) - -static void -gtk_toplevel_accessible_initialize (AtkObject *accessible, - gpointer data) -{ - ATK_OBJECT_CLASS (gtk_toplevel_accessible_parent_class)->initialize (accessible, data); - - accessible->role = ATK_ROLE_APPLICATION; - accessible->accessible_parent = NULL; -} - -static void -gtk_toplevel_accessible_object_finalize (GObject *obj) -{ - GtkToplevelAccessible *toplevel = GTK_TOPLEVEL_ACCESSIBLE (obj); - - if (toplevel->priv->window_list) - g_list_free (toplevel->priv->window_list); - - G_OBJECT_CLASS (gtk_toplevel_accessible_parent_class)->finalize (obj); -} - -static int -gtk_toplevel_accessible_get_n_children (AtkObject *obj) -{ - GtkToplevelAccessible *toplevel = GTK_TOPLEVEL_ACCESSIBLE (obj); - - return g_list_length (toplevel->priv->window_list); -} - -static AtkObject * -gtk_toplevel_accessible_ref_child (AtkObject *obj, - int i) -{ - GtkToplevelAccessible *toplevel; - GtkWidget *widget; - AtkObject *atk_obj; - - toplevel = GTK_TOPLEVEL_ACCESSIBLE (obj); - widget = g_list_nth_data (toplevel->priv->window_list, i); - if (!widget) - return NULL; - - atk_obj = gtk_widget_get_accessible (widget); - - g_object_ref (atk_obj); - - return atk_obj; -} - -static const char * -gtk_toplevel_accessible_get_name (AtkObject *obj) -{ - return g_get_prgname (); -} - -static void -gtk_toplevel_accessible_class_init (GtkToplevelAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS(klass); - GObjectClass *g_object_class = G_OBJECT_CLASS(klass); - - class->initialize = gtk_toplevel_accessible_initialize; - class->get_n_children = gtk_toplevel_accessible_get_n_children; - class->ref_child = gtk_toplevel_accessible_ref_child; - class->get_parent = NULL; - class->get_name = gtk_toplevel_accessible_get_name; - - g_object_class->finalize = gtk_toplevel_accessible_object_finalize; -} - -static void -remove_child (GtkToplevelAccessible *toplevel, - GtkWindow *window) -{ - AtkObject *atk_obj = ATK_OBJECT (toplevel); - GList *l; - guint window_count = 0; - AtkObject *child; - - if (toplevel->priv->window_list) - { - GtkWindow *tmp_window; - - for (l = toplevel->priv->window_list; l; l = l->next) - { - tmp_window = GTK_WINDOW (l->data); - - if (window == tmp_window) - { - /* Remove the window from the window_list & emit the signal */ - toplevel->priv->window_list = g_list_delete_link (toplevel->priv->window_list, l); - child = gtk_widget_get_accessible (GTK_WIDGET (window)); - g_signal_emit_by_name (atk_obj, "children-changed::remove", - window_count, child, NULL); - atk_object_set_parent (child, NULL); - break; - } - - window_count++; - } - } -} - -static gboolean -show_event_watcher (GSignalInvocationHint *ihint, - guint n_param_values, - const GValue *param_values, - gpointer data) -{ - GtkToplevelAccessible *toplevel = GTK_TOPLEVEL_ACCESSIBLE (data); - AtkObject *atk_obj = ATK_OBJECT (toplevel); - GObject *object; - GtkWidget *widget; - int n_children; - AtkObject *child; - - object = g_value_get_object (param_values + 0); - - if (!GTK_IS_WINDOW (object)) - return TRUE; - - widget = GTK_WIDGET (object); - if (gtk_widget_get_parent (widget)) - return TRUE; - - child = gtk_widget_get_accessible (widget); - if (atk_object_get_role (child) == ATK_ROLE_REDUNDANT_OBJECT || - atk_object_get_role (child) == ATK_ROLE_TOOL_TIP) - return TRUE; - - /* Add the window to the list & emit the signal */ - toplevel->priv->window_list = g_list_append (toplevel->priv->window_list, widget); - n_children = g_list_length (toplevel->priv->window_list); - - atk_object_set_parent (child, atk_obj); - g_signal_emit_by_name (atk_obj, "children-changed::add", - n_children - 1, child, NULL); - - g_signal_connect_swapped (G_OBJECT(object), "destroy", - G_CALLBACK (remove_child), toplevel); - - return TRUE; -} - -static gboolean -hide_event_watcher (GSignalInvocationHint *ihint, - guint n_param_values, - const GValue *param_values, - gpointer data) -{ - GtkToplevelAccessible *toplevel = GTK_TOPLEVEL_ACCESSIBLE (data); - GObject *object; - - object = g_value_get_object (param_values + 0); - - if (!GTK_IS_WINDOW (object)) - return TRUE; - - remove_child (toplevel, GTK_WINDOW (object)); - return TRUE; -} - -static void -gtk_toplevel_accessible_init (GtkToplevelAccessible *toplevel) -{ - GtkWindow *window; - GtkWidget *widget; - GList *l; - guint signal_id; - - toplevel->priv = gtk_toplevel_accessible_get_instance_private (toplevel); - - l = toplevel->priv->window_list = gtk_window_list_toplevels (); - - while (l) - { - window = GTK_WINDOW (l->data); - widget = GTK_WIDGET (window); - if (!window || - !gtk_widget_get_visible (widget) || - gtk_widget_get_parent (GTK_WIDGET (window))) - { - GList *temp_l = l->next; - - toplevel->priv->window_list = g_list_delete_link (toplevel->priv->window_list, l); - l = temp_l; - } - else - { - g_signal_connect_swapped (G_OBJECT (window), "destroy", - G_CALLBACK (remove_child), toplevel); - l = l->next; - } - } - - g_type_class_ref (GTK_TYPE_WINDOW); - - signal_id = g_signal_lookup ("show", GTK_TYPE_WINDOW); - g_signal_add_emission_hook (signal_id, 0, - show_event_watcher, toplevel, (GDestroyNotify) NULL); - - signal_id = g_signal_lookup ("hide", GTK_TYPE_WINDOW); - g_signal_add_emission_hook (signal_id, 0, - hide_event_watcher, toplevel, (GDestroyNotify) NULL); -} - -/** - * gtk_toplevel_accessible_get_children: - * - * Returns: (transfer none) (element-type Gtk.Window): List of - * children. - */ -GList * -gtk_toplevel_accessible_get_children (GtkToplevelAccessible *accessible) -{ - return accessible->priv->window_list; -} diff --git a/gtk/a11y/gtktoplevelaccessible.h b/gtk/a11y/gtktoplevelaccessible.h deleted file mode 100644 index 9c782b8a75..0000000000 --- a/gtk/a11y/gtktoplevelaccessible.h +++ /dev/null @@ -1,59 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_TOPLEVEL_ACCESSIBLE_H__ -#define __GTK_TOPLEVEL_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <atk/atk.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_TOPLEVEL_ACCESSIBLE (gtk_toplevel_accessible_get_type ()) -#define GTK_TOPLEVEL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TOPLEVEL_ACCESSIBLE, GtkToplevelAccessible)) -#define GTK_TOPLEVEL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TOPLEVEL_ACCESSIBLE, GtkToplevelAccessibleClass)) -#define GTK_IS_TOPLEVEL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TOPLEVEL_ACCESSIBLE)) -#define GTK_IS_TOPLEVEL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TOPLEVEL_ACCESSIBLE)) -#define GTK_TOPLEVEL_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TOPLEVEL_ACCESSIBLE, GtkToplevelAccessibleClass)) - -typedef struct _GtkToplevelAccessible GtkToplevelAccessible; -typedef struct _GtkToplevelAccessibleClass GtkToplevelAccessibleClass; -typedef struct _GtkToplevelAccessiblePrivate GtkToplevelAccessiblePrivate; - -struct _GtkToplevelAccessible -{ - AtkObject parent; - - GtkToplevelAccessiblePrivate *priv; -}; - -struct _GtkToplevelAccessibleClass -{ - AtkObjectClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_toplevel_accessible_get_type (void); -GDK_AVAILABLE_IN_ALL -GList *gtk_toplevel_accessible_get_children (GtkToplevelAccessible *accessible); - -G_END_DECLS - -#endif /* __GTK_TOPLEVEL_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtktreeviewaccessible.c b/gtk/a11y/gtktreeviewaccessible.c deleted file mode 100644 index 5566939f8e..0000000000 --- a/gtk/a11y/gtktreeviewaccessible.c +++ /dev/null @@ -1,2084 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <gtk/gtk.h> - -#include "gtktreeprivate.h" -#include "gtkwidgetprivate.h" - -#include "gtktreeviewaccessibleprivate.h" - -#include "gtkrenderercellaccessible.h" -#include "gtkbooleancellaccessible.h" -#include "gtkimagecellaccessible.h" -#include "gtkcontainercellaccessible.h" -#include "gtktextcellaccessible.h" -#include "gtkcellaccessibleparent.h" -#include "gtkcellaccessibleprivate.h" - -typedef struct -{ - GHashTable *cell_infos; -} GtkTreeViewAccessiblePrivate; - -typedef struct _GtkTreeViewAccessibleCellInfo GtkTreeViewAccessibleCellInfo; -struct _GtkTreeViewAccessibleCellInfo -{ - GtkCellAccessible *cell; - GtkTreeRBTree *tree; - GtkTreeRBNode *node; - GtkTreeViewColumn *cell_col_ref; - GtkTreeViewAccessible *view; -}; - -/* Misc */ - -static int cell_info_get_index (GtkTreeView *tree_view, - GtkTreeViewAccessibleCellInfo *info); -static gboolean is_cell_showing (GtkTreeView *tree_view, - GdkRectangle *cell_rect); - -static void cell_info_new (GtkTreeViewAccessible *accessible, - GtkTreeRBTree *tree, - GtkTreeRBNode *node, - GtkTreeViewColumn *tv_col, - GtkCellAccessible *cell); -static int get_column_number (GtkTreeView *tree_view, - GtkTreeViewColumn *column); - -static gboolean get_rbtree_column_from_index (GtkTreeView *tree_view, - int index, - GtkTreeRBTree **tree, - GtkTreeRBNode **node, - GtkTreeViewColumn **column); - -static GtkTreeViewAccessibleCellInfo* find_cell_info (GtkTreeViewAccessible *view, - GtkCellAccessible *cell); -static AtkObject * get_header_from_column (GtkTreeViewColumn *tv_col); - - -static void atk_table_interface_init (AtkTableIface *iface); -static void atk_selection_interface_init (AtkSelectionIface *iface); -static void atk_component_interface_init (AtkComponentIface *iface); -static void gtk_cell_accessible_parent_interface_init (GtkCellAccessibleParentIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkTreeViewAccessible, gtk_tree_view_accessible, GTK_TYPE_WIDGET_ACCESSIBLE, - G_ADD_PRIVATE (GtkTreeViewAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_TABLE, atk_table_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_SELECTION, atk_selection_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, atk_component_interface_init) - G_IMPLEMENT_INTERFACE (GTK_TYPE_CELL_ACCESSIBLE_PARENT, gtk_cell_accessible_parent_interface_init)) - - -static GQuark -gtk_tree_view_accessible_get_data_quark (void) -{ - static GQuark quark = 0; - - if (G_UNLIKELY (quark == 0)) - quark = g_quark_from_static_string ("gtk-tree-view-accessible-data"); - - return quark; -} - -static void -cell_info_free (GtkTreeViewAccessibleCellInfo *cell_info) -{ - gtk_accessible_set_widget (GTK_ACCESSIBLE (cell_info->cell), NULL); - g_object_unref (cell_info->cell); - - g_free (cell_info); -} - -static GtkTreePath * -cell_info_get_path (GtkTreeViewAccessibleCellInfo *cell_info) -{ - return _gtk_tree_path_new_from_rbtree (cell_info->tree, cell_info->node); -} - -static guint -cell_info_hash (gconstpointer info) -{ - const GtkTreeViewAccessibleCellInfo *cell_info = info; - guint node, col; - - node = GPOINTER_TO_UINT (cell_info->node); - col = GPOINTER_TO_UINT (cell_info->cell_col_ref); - - return ((node << sizeof (guint) / 2) | (node >> sizeof (guint) / 2)) ^ col; -} - -static gboolean -cell_info_equal (gconstpointer a, gconstpointer b) -{ - const GtkTreeViewAccessibleCellInfo *cell_info_a = a; - const GtkTreeViewAccessibleCellInfo *cell_info_b = b; - - return cell_info_a->node == cell_info_b->node && - cell_info_a->cell_col_ref == cell_info_b->cell_col_ref; -} - -static void -gtk_tree_view_accessible_initialize (AtkObject *obj, - gpointer data) -{ - GtkTreeViewAccessible *self = GTK_TREE_VIEW_ACCESSIBLE (obj); - GtkTreeViewAccessiblePrivate *priv = gtk_tree_view_accessible_get_instance_private (self); - GtkTreeView *tree_view = data; - GtkTreeModel *tree_model; - - ATK_OBJECT_CLASS (gtk_tree_view_accessible_parent_class)->initialize (obj, data); - - priv->cell_infos = g_hash_table_new_full (cell_info_hash, cell_info_equal, - NULL, - (GDestroyNotify) cell_info_free); - - tree_model = gtk_tree_view_get_model (tree_view); - - if (tree_model != NULL) - { - AtkRole role; - - if ((gtk_tree_model_get_flags (tree_model) & GTK_TREE_MODEL_LIST_ONLY) != 0) - role = ATK_ROLE_TABLE; - else - role = ATK_ROLE_TREE_TABLE; - - atk_object_set_role (obj, role); - } -} - -static void -gtk_tree_view_accessible_finalize (GObject *object) -{ - GtkTreeViewAccessible *self = GTK_TREE_VIEW_ACCESSIBLE (object); - GtkTreeViewAccessiblePrivate *priv = gtk_tree_view_accessible_get_instance_private (self); - - g_clear_pointer (&priv->cell_infos, g_hash_table_unref); - - G_OBJECT_CLASS (gtk_tree_view_accessible_parent_class)->finalize (object); -} - -void -gtk_tree_view_accessible_update_model (GtkTreeViewAccessible *self, - GtkTreeModel *model) -{ - GtkTreeViewAccessiblePrivate *priv = gtk_tree_view_accessible_get_instance_private (self); - - g_return_if_fail (GTK_IS_TREE_VIEW_ACCESSIBLE (self)); - g_return_if_fail (model == NULL || GTK_IS_TREE_MODEL (model)); - - g_hash_table_remove_all (priv->cell_infos); - - if (model != NULL) - { - AtkObject *object = ATK_OBJECT (self); - AtkRole role; - - if ((gtk_tree_model_get_flags (model) & GTK_TREE_MODEL_LIST_ONLY) != 0) - role = ATK_ROLE_TABLE; - else - role = ATK_ROLE_TREE_TABLE; - - atk_object_set_role (object, role); - - g_object_freeze_notify (G_OBJECT (self)); - g_signal_emit_by_name (self, "model-changed"); - g_signal_emit_by_name (self, "visible-data-changed"); - g_object_thaw_notify (G_OBJECT (self)); - } -} - -static void -gtk_tree_view_accessible_widget_unset (GtkAccessible *gtkaccessible) -{ - GtkTreeViewAccessible *self = GTK_TREE_VIEW_ACCESSIBLE (gtkaccessible); - GtkTreeViewAccessiblePrivate *priv = gtk_tree_view_accessible_get_instance_private (self); - - g_hash_table_remove_all (priv->cell_infos); - - GTK_ACCESSIBLE_CLASS (gtk_tree_view_accessible_parent_class)->widget_unset (gtkaccessible); -} - -static int -get_n_rows (GtkTreeView *tree_view) -{ - GtkTreeRBTree *tree; - - tree = _gtk_tree_view_get_rbtree (tree_view); - - if (tree == NULL) - return 0; - - return tree->root->total_count; -} - -static int -get_n_columns (GtkTreeView *tree_view) -{ - guint i, visible_columns; - - visible_columns = 0; - - for (i = 0; i < gtk_tree_view_get_n_columns (tree_view); i++) - { - GtkTreeViewColumn *column = gtk_tree_view_get_column (tree_view, i); - - if (gtk_tree_view_column_get_visible (column)) - visible_columns++; - } - - return visible_columns; -} - -static int -gtk_tree_view_accessible_get_n_children (AtkObject *obj) -{ - GtkWidget *widget; - GtkTreeView *tree_view; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return 0; - - tree_view = GTK_TREE_VIEW (widget); - return (get_n_rows (tree_view) + 1) * get_n_columns (tree_view); -} - -static GtkTreeViewColumn * -get_visible_column (GtkTreeView *tree_view, - guint id) -{ - guint i; - - for (i = 0; i < gtk_tree_view_get_n_columns (tree_view); i++) - { - GtkTreeViewColumn *column = gtk_tree_view_get_column (tree_view, i); - - if (!gtk_tree_view_column_get_visible (column)) - continue; - - if (id == 0) - return column; - - id--; - } - - g_return_val_if_reached (NULL); -} - -static void -set_cell_data (GtkTreeView *treeview, - GtkTreeViewAccessible *accessible, - GtkCellAccessible *cell) -{ - GtkTreeViewAccessibleCellInfo *cell_info; - gboolean is_expander, is_expanded; - GtkTreeModel *model; - GtkTreeIter iter; - GtkTreePath *path; - - cell_info = find_cell_info (accessible, cell); - if (!cell_info) - return; - - model = gtk_tree_view_get_model (treeview); - - if (GTK_TREE_RBNODE_FLAG_SET (cell_info->node, GTK_TREE_RBNODE_IS_PARENT) && - cell_info->cell_col_ref == gtk_tree_view_get_expander_column (treeview)) - { - is_expander = TRUE; - is_expanded = cell_info->node->children != NULL; - } - else - { - is_expander = FALSE; - is_expanded = FALSE; - } - - path = cell_info_get_path (cell_info); - if (path == NULL || - !gtk_tree_model_get_iter (model, &iter, path)) - { - /* We only track valid cells, this should never happen */ - g_return_if_reached (); - } - gtk_tree_path_free (path); - - gtk_tree_view_column_cell_set_cell_data (cell_info->cell_col_ref, - model, - &iter, - is_expander, - is_expanded); -} - -static GtkCellAccessible * -peek_cell (GtkTreeViewAccessible *self, - GtkTreeRBTree *tree, - GtkTreeRBNode *node, - GtkTreeViewColumn *column) -{ - GtkTreeViewAccessiblePrivate *priv = gtk_tree_view_accessible_get_instance_private (self); - GtkTreeViewAccessibleCellInfo lookup, *cell_info; - - lookup.tree = tree; - lookup.node = node; - lookup.cell_col_ref = column; - - cell_info = g_hash_table_lookup (priv->cell_infos, &lookup); - if (cell_info == NULL) - return NULL; - - return cell_info->cell; -} - -static GtkCellAccessible * -create_cell_accessible_for_renderer (GtkCellRenderer *renderer, - GtkWidget *widget, - AtkObject *parent) -{ - GtkCellAccessible *cell; - - cell = GTK_CELL_ACCESSIBLE (gtk_renderer_cell_accessible_new (renderer)); - - _gtk_cell_accessible_initialize (cell, widget, parent); - - return cell; -} - -static GtkCellAccessible * -create_cell_accessible (GtkTreeView *treeview, - GtkTreeViewAccessible *accessible, - GtkTreeViewColumn *column) -{ - GList *renderer_list; - GList *l; - GtkCellAccessible *cell; - - renderer_list = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column)); - - /* If there is exactly one renderer in the list (which is a - * common case), shortcut and don't make a container - */ - if (g_list_length (renderer_list) == 1) - { - cell = create_cell_accessible_for_renderer (renderer_list->data, GTK_WIDGET (treeview), ATK_OBJECT (accessible)); - } - else - { - GtkContainerCellAccessible *container; - - container = gtk_container_cell_accessible_new (); - _gtk_cell_accessible_initialize (GTK_CELL_ACCESSIBLE (container), GTK_WIDGET (treeview), ATK_OBJECT (accessible)); - - for (l = renderer_list; l; l = l->next) - { - cell = create_cell_accessible_for_renderer (l->data, GTK_WIDGET (treeview), ATK_OBJECT (container)); - gtk_container_cell_accessible_add_child (container, cell); - } - - cell = GTK_CELL_ACCESSIBLE (container); - } - - g_list_free (renderer_list); - - return cell; -} - -static GtkCellAccessible * -create_cell (GtkTreeView *treeview, - GtkTreeViewAccessible *accessible, - GtkTreeRBTree *tree, - GtkTreeRBNode *node, - GtkTreeViewColumn *column) -{ - GtkCellAccessible *cell; - - cell = create_cell_accessible (treeview, accessible, column); - cell_info_new (accessible, tree, node, column, cell); - - set_cell_data (treeview, accessible, cell); - _gtk_cell_accessible_update_cache (cell, FALSE); - - return cell; -} - -static AtkObject * -gtk_tree_view_accessible_ref_child (AtkObject *obj, - int i) -{ - GtkWidget *widget; - GtkTreeViewAccessible *accessible; - GtkCellAccessible *cell; - GtkTreeView *tree_view; - GtkTreeViewColumn *tv_col; - GtkTreeRBTree *tree; - GtkTreeRBNode *node; - AtkObject *child; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - if (i >= gtk_tree_view_accessible_get_n_children (obj)) - return NULL; - - accessible = GTK_TREE_VIEW_ACCESSIBLE (obj); - tree_view = GTK_TREE_VIEW (widget); - if (i < get_n_columns (tree_view)) - { - tv_col = get_visible_column (tree_view, i); - child = get_header_from_column (tv_col); - if (child) - g_object_ref (child); - return child; - } - - /* Find the RBTree and GtkTreeViewColumn for the index */ - if (!get_rbtree_column_from_index (tree_view, i, &tree, &node, &tv_col)) - return NULL; - - cell = peek_cell (accessible, tree, node, tv_col); - if (cell == NULL) - cell = create_cell (tree_view, accessible, tree, node, tv_col); - - return (AtkObject *) g_object_ref (cell); -} - -static AtkStateSet* -gtk_tree_view_accessible_ref_state_set (AtkObject *obj) -{ - AtkStateSet *state_set; - GtkWidget *widget; - - state_set = ATK_OBJECT_CLASS (gtk_tree_view_accessible_parent_class)->ref_state_set (obj); - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - - if (widget != NULL) - atk_state_set_add_state (state_set, ATK_STATE_MANAGES_DESCENDANTS); - - return state_set; -} - -static void -gtk_tree_view_accessible_class_init (GtkTreeViewAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GtkAccessibleClass *accessible_class = (GtkAccessibleClass*)klass; - - class->get_n_children = gtk_tree_view_accessible_get_n_children; - class->ref_child = gtk_tree_view_accessible_ref_child; - class->ref_state_set = gtk_tree_view_accessible_ref_state_set; - class->initialize = gtk_tree_view_accessible_initialize; - - accessible_class->widget_unset = gtk_tree_view_accessible_widget_unset; - - gobject_class->finalize = gtk_tree_view_accessible_finalize; -} - -static void -gtk_tree_view_accessible_init (GtkTreeViewAccessible *view) -{ -} - -/* atkcomponent.h */ - -static AtkObject * -gtk_tree_view_accessible_ref_accessible_at_point (AtkComponent *component, - int x, - int y, - AtkCoordType coord_type) -{ - GtkWidget *widget; - GtkTreeView *tree_view; - GtkTreePath *path; - GtkTreeViewColumn *column; - int x_pos, y_pos; - int bx, by; - GtkCellAccessible *cell; - GtkTreeRBTree *tree; - GtkTreeRBNode *node; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component)); - if (widget == NULL) - return NULL; - - tree_view = GTK_TREE_VIEW (widget); - - atk_component_get_extents (component, &x_pos, &y_pos, NULL, NULL, coord_type); - gtk_tree_view_convert_widget_to_bin_window_coords (tree_view, x, y, &bx, &by); - if (!gtk_tree_view_get_path_at_pos (tree_view, - bx - x_pos, by - y_pos, - &path, &column, NULL, NULL)) - return NULL; - - if (_gtk_tree_view_find_node (tree_view, path, &tree, &node)) - { - gtk_tree_path_free (path); - return NULL; - } - - cell = peek_cell (GTK_TREE_VIEW_ACCESSIBLE (component), tree, node, column); - if (cell == NULL) - cell = create_cell (tree_view, GTK_TREE_VIEW_ACCESSIBLE (component), tree, node, column); - - return (AtkObject *) g_object_ref (cell); -} - -static void -atk_component_interface_init (AtkComponentIface *iface) -{ - iface->ref_accessible_at_point = gtk_tree_view_accessible_ref_accessible_at_point; -} - -/* atktable.h */ - -static int -gtk_tree_view_accessible_get_index_at (AtkTable *table, - int row, - int column) -{ - GtkWidget *widget; - int n_cols, n_rows; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (table)); - if (widget == NULL) - return -1; - - n_cols = atk_table_get_n_columns (table); - n_rows = atk_table_get_n_rows (table); - - if (row >= n_rows || column >= n_cols) - return -1; - - return (row + 1) * n_cols + column; -} - -static int -gtk_tree_view_accessible_get_column_at_index (AtkTable *table, - int index) -{ - GtkWidget *widget; - int n_columns; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (table)); - if (widget == NULL) - return -1; - - if (index >= gtk_tree_view_accessible_get_n_children (ATK_OBJECT (table))) - return -1; - - n_columns = get_n_columns (GTK_TREE_VIEW (widget)); - - /* checked by the n_children() check above */ - g_assert (n_columns > 0); - - return index % n_columns; -} - -static int -gtk_tree_view_accessible_get_row_at_index (AtkTable *table, - int index) -{ - GtkWidget *widget; - GtkTreeView *tree_view; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (table)); - if (widget == NULL) - return -1; - - tree_view = GTK_TREE_VIEW (widget); - - index /= get_n_columns (tree_view); - index--; - if (index >= get_n_rows (tree_view)) - return -1; - - return index; -} - -static AtkObject * -gtk_tree_view_accessible_table_ref_at (AtkTable *table, - int row, - int column) -{ - int index; - - index = gtk_tree_view_accessible_get_index_at (table, row, column); - if (index == -1) - return NULL; - - return gtk_tree_view_accessible_ref_child (ATK_OBJECT (table), index); -} - -static int -gtk_tree_view_accessible_get_n_rows (AtkTable *table) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (table)); - if (widget == NULL) - return 0; - - return get_n_rows (GTK_TREE_VIEW (widget)); -} - -static int -gtk_tree_view_accessible_get_n_columns (AtkTable *table) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (table)); - if (widget == NULL) - return 0; - - return get_n_columns (GTK_TREE_VIEW (widget)); -} - -static gboolean -gtk_tree_view_accessible_is_row_selected (AtkTable *table, - int row) -{ - GtkWidget *widget; - GtkTreeRBTree *tree; - GtkTreeRBNode *node; - - if (row < 0) - return FALSE; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (table)); - if (widget == NULL) - return FALSE; - - if (!gtk_tree_rbtree_find_index (_gtk_tree_view_get_rbtree (GTK_TREE_VIEW (widget)), - row, - &tree, - &node)) - return FALSE; - - return GTK_TREE_RBNODE_FLAG_SET (node, GTK_TREE_RBNODE_IS_SELECTED); -} - -static gboolean -gtk_tree_view_accessible_is_selected (AtkTable *table, - int row, - int column) -{ - return gtk_tree_view_accessible_is_row_selected (table, row); -} - -typedef struct { - GArray *array; - GtkTreeView *treeview; -} SelectedRowsData; - -static void -get_selected_rows (GtkTreeModel *model, - GtkTreePath *path, - GtkTreeIter *iter, - gpointer datap) -{ - SelectedRowsData *data = datap; - GtkTreeRBTree *tree; - GtkTreeRBNode *node; - int id; - - if (_gtk_tree_view_find_node (data->treeview, - path, - &tree, &node)) - { - g_assert_not_reached (); - } - - id = gtk_tree_rbtree_node_get_index (tree, node); - - g_array_append_val (data->array, id); -} - -static int -gtk_tree_view_accessible_get_selected_rows (AtkTable *table, - int **rows_selected) -{ - SelectedRowsData data; - GtkWidget *widget; - int n_rows; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (table)); - if (widget == NULL) - { - if (rows_selected != NULL) - *rows_selected = NULL; - return 0; - } - - data.treeview = GTK_TREE_VIEW (widget); - data.array = g_array_new (FALSE, FALSE, sizeof (int)); - - gtk_tree_selection_selected_foreach (gtk_tree_view_get_selection (data.treeview), - get_selected_rows, - &data); - - n_rows = data.array->len; - if (rows_selected) - *rows_selected = (int *) g_array_free (data.array, FALSE); - else - g_array_free (data.array, TRUE); - - return n_rows; -} - -static gboolean -gtk_tree_view_accessible_add_row_selection (AtkTable *table, - int row) -{ - GtkTreeView *treeview; - GtkTreePath *path; - GtkTreeRBTree *tree; - GtkTreeRBNode *node; - - if (row < 0) - return FALSE; - - treeview = GTK_TREE_VIEW (gtk_accessible_get_widget (GTK_ACCESSIBLE (table))); - if (treeview == NULL) - return FALSE; - - if (!gtk_tree_rbtree_find_index (_gtk_tree_view_get_rbtree (treeview), - row, - &tree, - &node)) - return FALSE; - - if (GTK_TREE_RBNODE_FLAG_SET (node, GTK_TREE_RBNODE_IS_SELECTED)) - return FALSE; - - path = _gtk_tree_path_new_from_rbtree (tree, node); - gtk_tree_selection_select_path (gtk_tree_view_get_selection (treeview), path); - gtk_tree_path_free (path); - - return TRUE; -} - -static gboolean -gtk_tree_view_accessible_remove_row_selection (AtkTable *table, - int row) -{ - GtkTreeView *treeview; - GtkTreePath *path; - GtkTreeRBTree *tree; - GtkTreeRBNode *node; - - if (row < 0) - return FALSE; - - treeview = GTK_TREE_VIEW (gtk_accessible_get_widget (GTK_ACCESSIBLE (table))); - if (treeview == NULL) - return FALSE; - - if (!gtk_tree_rbtree_find_index (_gtk_tree_view_get_rbtree (treeview), - row, - &tree, - &node)) - return FALSE; - - if (!GTK_TREE_RBNODE_FLAG_SET (node, GTK_TREE_RBNODE_IS_SELECTED)) - return FALSE; - - path = _gtk_tree_path_new_from_rbtree (tree, node); - gtk_tree_selection_unselect_path (gtk_tree_view_get_selection (treeview), path); - gtk_tree_path_free (path); - - return TRUE; -} - -static AtkObject * -gtk_tree_view_accessible_get_column_header (AtkTable *table, - int in_col) -{ - GtkWidget *widget; - GtkTreeView *tree_view; - GtkTreeViewColumn *tv_col; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (table)); - if (widget == NULL) - return NULL; - - tree_view = GTK_TREE_VIEW (widget); - if (in_col < 0 || in_col >= get_n_columns (tree_view)) - return NULL; - - tv_col = get_visible_column (tree_view, in_col); - return get_header_from_column (tv_col); -} - -static const char * -gtk_tree_view_accessible_get_column_description (AtkTable *table, - int in_col) -{ - GtkWidget *widget; - GtkTreeView *tree_view; - GtkTreeViewColumn *tv_col; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (table)); - if (widget == NULL) - return NULL; - - tree_view = GTK_TREE_VIEW (widget); - if (in_col < 0 || in_col >= get_n_columns (tree_view)) - return NULL; - - tv_col = get_visible_column (tree_view, in_col); - return gtk_tree_view_column_get_title (tv_col); -} - -static void -atk_table_interface_init (AtkTableIface *iface) -{ - iface->ref_at = gtk_tree_view_accessible_table_ref_at; - iface->get_n_rows = gtk_tree_view_accessible_get_n_rows; - iface->get_n_columns = gtk_tree_view_accessible_get_n_columns; - iface->get_index_at = gtk_tree_view_accessible_get_index_at; - iface->get_column_at_index = gtk_tree_view_accessible_get_column_at_index; - iface->get_row_at_index = gtk_tree_view_accessible_get_row_at_index; - iface->is_row_selected = gtk_tree_view_accessible_is_row_selected; - iface->is_selected = gtk_tree_view_accessible_is_selected; - iface->get_selected_rows = gtk_tree_view_accessible_get_selected_rows; - iface->add_row_selection = gtk_tree_view_accessible_add_row_selection; - iface->remove_row_selection = gtk_tree_view_accessible_remove_row_selection; - iface->get_column_extent_at = NULL; - iface->get_row_extent_at = NULL; - iface->get_column_header = gtk_tree_view_accessible_get_column_header; - iface->get_column_description = gtk_tree_view_accessible_get_column_description; -} - -/* atkselection.h */ - -static gboolean -gtk_tree_view_accessible_add_selection (AtkSelection *selection, - int i) -{ - AtkTable *table; - int n_columns; - int row; - - table = ATK_TABLE (selection); - n_columns = gtk_tree_view_accessible_get_n_columns (table); - if (n_columns != 1) - return FALSE; - - row = gtk_tree_view_accessible_get_row_at_index (table, i); - return gtk_tree_view_accessible_add_row_selection (table, row); -} - -static gboolean -gtk_tree_view_accessible_clear_selection (AtkSelection *selection) -{ - GtkWidget *widget; - GtkTreeView *tree_view; - GtkTreeSelection *tree_selection; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return FALSE; - - tree_view = GTK_TREE_VIEW (widget); - tree_selection = gtk_tree_view_get_selection (tree_view); - - gtk_tree_selection_unselect_all (tree_selection); - return TRUE; -} - -static AtkObject * -gtk_tree_view_accessible_ref_selection (AtkSelection *selection, - int i) -{ - AtkTable *table; - int row; - int n_selected; - int n_columns; - int *selected; - - table = ATK_TABLE (selection); - n_columns = gtk_tree_view_accessible_get_n_columns (table); - n_selected = gtk_tree_view_accessible_get_selected_rows (table, &selected); - if (n_columns == 0 || i >= n_columns * n_selected) - return NULL; - - row = selected[i / n_columns]; - g_free (selected); - - return gtk_tree_view_accessible_table_ref_at (table, row, i % n_columns); -} - -static int -gtk_tree_view_accessible_get_selection_count (AtkSelection *selection) -{ - AtkTable *table; - int n_selected; - - table = ATK_TABLE (selection); - n_selected = gtk_tree_view_accessible_get_selected_rows (table, NULL); - if (n_selected > 0) - n_selected *= gtk_tree_view_accessible_get_n_columns (table); - return n_selected; -} - -static gboolean -gtk_tree_view_accessible_is_child_selected (AtkSelection *selection, - int i) -{ - GtkWidget *widget; - int row; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (selection)); - if (widget == NULL) - return FALSE; - - row = gtk_tree_view_accessible_get_row_at_index (ATK_TABLE (selection), i); - - return gtk_tree_view_accessible_is_row_selected (ATK_TABLE (selection), row); -} - -static void atk_selection_interface_init (AtkSelectionIface *iface) -{ - iface->add_selection = gtk_tree_view_accessible_add_selection; - iface->clear_selection = gtk_tree_view_accessible_clear_selection; - iface->ref_selection = gtk_tree_view_accessible_ref_selection; - iface->get_selection_count = gtk_tree_view_accessible_get_selection_count; - iface->is_child_selected = gtk_tree_view_accessible_is_child_selected; -} - -#define EXTRA_EXPANDER_PADDING 4 - -static void -gtk_tree_view_accessible_get_cell_area (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - GdkRectangle *cell_rect) -{ - GtkWidget *widget; - GtkTreeView *tree_view; - GtkTreeViewColumn *tv_col; - GtkTreePath *path; - AtkObject *parent_cell; - GtkTreeViewAccessibleCellInfo *cell_info; - GtkCellAccessible *top_cell; - - /* Default value. */ - cell_rect->x = 0; - cell_rect->y = 0; - cell_rect->width = 0; - cell_rect->height = 0; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (parent)); - if (widget == NULL) - return; - - tree_view = GTK_TREE_VIEW (widget); - parent_cell = atk_object_get_parent (ATK_OBJECT (cell)); - if (parent_cell != ATK_OBJECT (parent)) - top_cell = GTK_CELL_ACCESSIBLE (parent_cell); - else - top_cell = cell; - cell_info = find_cell_info (GTK_TREE_VIEW_ACCESSIBLE (parent), top_cell); - if (!cell_info) - return; - path = cell_info_get_path (cell_info); - tv_col = cell_info->cell_col_ref; - if (path) - { - GtkTreeViewColumn *expander_column; - - gtk_tree_view_get_cell_area (tree_view, path, tv_col, cell_rect); - expander_column = gtk_tree_view_get_expander_column (tree_view); - if (expander_column == tv_col) - { - /* Values from gtktreeview.c ... */ -#define _TREE_VIEW_EXPANDER_SIZE 16 -#define _TREE_VIEW_HORIZONTAL_SEPARATOR 4 - int expander_size = _TREE_VIEW_EXPANDER_SIZE + (_TREE_VIEW_HORIZONTAL_SEPARATOR / 2); - cell_rect->x += expander_size + EXTRA_EXPANDER_PADDING; - cell_rect->width -= expander_size + EXTRA_EXPANDER_PADDING; - } - - gtk_tree_path_free (path); - - /* A column has more than one renderer so we find the position - * and width of each - */ - if (top_cell != cell) - { - int cell_index; - gboolean found; - int cell_start; - int cell_width; - GList *renderers; - GtkCellRenderer *renderer; - - cell_index = atk_object_get_index_in_parent (ATK_OBJECT (cell)); - renderers = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (tv_col)); - renderer = g_list_nth_data (renderers, cell_index); - - found = gtk_tree_view_column_cell_get_position (tv_col, renderer, &cell_start, &cell_width); - if (found) - { - cell_rect->x += cell_start; - cell_rect->width = cell_width; - } - g_list_free (renderers); - } - - } -} - -static void -gtk_tree_view_accessible_get_cell_extents (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coord_type) -{ - GtkWidget *widget; - GtkTreeView *tree_view; - GdkRectangle cell_rect; - int w_x, w_y; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (parent)); - if (widget == NULL) - return; - - tree_view = GTK_TREE_VIEW (widget); - gtk_tree_view_accessible_get_cell_area (parent, cell, &cell_rect); - gtk_tree_view_convert_widget_to_bin_window_coords (tree_view, - 0, 0, - &w_x, &w_y); - - *width = cell_rect.width; - *height = cell_rect.height; - if (is_cell_showing (tree_view, &cell_rect)) - { - *x = cell_rect.x + w_x; - *y = cell_rect.y + w_y; - } - else - { - *x = G_MININT; - *y = G_MININT; - } -} - -static gboolean -gtk_tree_view_accessible_grab_cell_focus (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkWidget *widget; - GtkTreeView *tree_view; - GtkTreeViewColumn *tv_col; - GtkTreePath *path; - AtkObject *parent_cell; - AtkObject *cell_object; - GtkTreeViewAccessibleCellInfo *cell_info; - GtkCellRenderer *renderer = NULL; - GtkWidget *toplevel; - int index; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (parent)); - if (widget == NULL) - return FALSE; - - tree_view = GTK_TREE_VIEW (widget); - - cell_info = find_cell_info (GTK_TREE_VIEW_ACCESSIBLE (parent), cell); - if (!cell_info) - return FALSE; - cell_object = ATK_OBJECT (cell); - parent_cell = atk_object_get_parent (cell_object); - tv_col = cell_info->cell_col_ref; - if (parent_cell != ATK_OBJECT (parent)) - { - /* GtkCellAccessible is in a GtkContainerCellAccessible. - * The GtkTreeViewColumn has multiple renderers; - * find the corresponding one. - */ - GList *renderers; - - renderers = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (tv_col)); - index = atk_object_get_index_in_parent (cell_object); - renderer = g_list_nth_data (renderers, index); - g_list_free (renderers); - } - path = cell_info_get_path (cell_info); - if (path) - { - if (renderer) - gtk_tree_view_set_cursor_on_cell (tree_view, path, tv_col, renderer, FALSE); - else - gtk_tree_view_set_cursor (tree_view, path, tv_col, FALSE); - - gtk_tree_path_free (path); - gtk_widget_grab_focus (widget); - toplevel = GTK_WIDGET (gtk_widget_get_root (widget)); - if (GTK_IS_WINDOW (toplevel)) - { - G_GNUC_BEGIN_IGNORE_DEPRECATIONS - gtk_window_present (GTK_WINDOW (toplevel)); - G_GNUC_END_IGNORE_DEPRECATIONS - } - - return TRUE; - } - else - return FALSE; -} - -static int -gtk_tree_view_accessible_get_child_index (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkTreeViewAccessibleCellInfo *cell_info; - GtkTreeView *tree_view; - - cell_info = find_cell_info (GTK_TREE_VIEW_ACCESSIBLE (parent), cell); - if (!cell_info) - return -1; - - tree_view = GTK_TREE_VIEW (gtk_accessible_get_widget (GTK_ACCESSIBLE (parent))); - - return cell_info_get_index (tree_view, cell_info); -} - -static GtkCellRendererState -gtk_tree_view_accessible_get_renderer_state (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkTreeViewAccessibleCellInfo *cell_info; - GtkTreeView *treeview; - GtkCellRendererState flags; - - cell_info = find_cell_info (GTK_TREE_VIEW_ACCESSIBLE (parent), cell); - if (!cell_info) - return 0; - - flags = 0; - - if (GTK_TREE_RBNODE_FLAG_SET (cell_info->node, GTK_TREE_RBNODE_IS_SELECTED)) - flags |= GTK_CELL_RENDERER_SELECTED; - - if (GTK_TREE_RBNODE_FLAG_SET (cell_info->node, GTK_TREE_RBNODE_IS_PRELIT)) - flags |= GTK_CELL_RENDERER_PRELIT; - - if (gtk_tree_view_column_get_sort_indicator (cell_info->cell_col_ref)) - flags |= GTK_CELL_RENDERER_SORTED; - - treeview = GTK_TREE_VIEW (gtk_accessible_get_widget (GTK_ACCESSIBLE (parent))); - - if (cell_info->cell_col_ref == gtk_tree_view_get_expander_column (treeview)) - { - if (GTK_TREE_RBNODE_FLAG_SET (cell_info->node, GTK_TREE_RBNODE_IS_PARENT)) - flags |= GTK_CELL_RENDERER_EXPANDABLE; - - if (cell_info->node->children) - flags |= GTK_CELL_RENDERER_EXPANDED; - } - - if (gtk_widget_has_focus (GTK_WIDGET (treeview))) - { - GtkTreeViewColumn *column; - GtkTreePath *path; - GtkTreeRBTree *tree; - GtkTreeRBNode *node = NULL; - - gtk_tree_view_get_cursor (treeview, &path, &column); - if (path) - { - _gtk_tree_view_find_node (treeview, path, &tree, &node); - gtk_tree_path_free (path); - } - else - tree = NULL; - - if (cell_info->cell_col_ref == column - && cell_info->tree == tree - && cell_info->node == node) - flags |= GTK_CELL_RENDERER_FOCUSED; - } - - return flags; -} - -static void -gtk_tree_view_accessible_expand_collapse (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkTreeViewAccessibleCellInfo *cell_info; - GtkTreeView *treeview; - GtkTreePath *path; - - treeview = GTK_TREE_VIEW (gtk_accessible_get_widget (GTK_ACCESSIBLE (parent))); - - cell_info = find_cell_info (GTK_TREE_VIEW_ACCESSIBLE (parent), cell); - if (!cell_info || - cell_info->cell_col_ref != gtk_tree_view_get_expander_column (treeview)) - return; - - path = cell_info_get_path (cell_info); - - if (cell_info->node->children) - gtk_tree_view_collapse_row (treeview, path); - else - gtk_tree_view_expand_row (treeview, path, FALSE); - - gtk_tree_path_free (path); -} - -static void -gtk_tree_view_accessible_activate (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkTreeViewAccessibleCellInfo *cell_info; - GtkTreeView *treeview; - GtkTreePath *path; - - treeview = GTK_TREE_VIEW (gtk_accessible_get_widget (GTK_ACCESSIBLE (parent))); - - cell_info = find_cell_info (GTK_TREE_VIEW_ACCESSIBLE (parent), cell); - if (!cell_info) - return; - - path = cell_info_get_path (cell_info); - - gtk_tree_view_row_activated (treeview, path, cell_info->cell_col_ref); - - gtk_tree_path_free (path); -} - -static void -gtk_tree_view_accessible_edit (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkTreeView *treeview; - - if (!gtk_tree_view_accessible_grab_cell_focus (parent, cell)) - return; - - treeview = GTK_TREE_VIEW (gtk_accessible_get_widget (GTK_ACCESSIBLE (parent))); - - g_signal_emit_by_name (treeview, - "real-select-cursor-row", - TRUE); -} - -static void -gtk_tree_view_accessible_update_relationset (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - AtkRelationSet *relationset) -{ - GtkTreeViewAccessibleCellInfo *cell_info; - GtkTreeViewAccessible *accessible; - GtkTreeViewColumn *column; - GtkTreeView *treeview; - AtkRelation *relation; - GtkTreeRBTree *tree; - GtkTreeRBNode *node; - AtkObject *object; - - /* Don't set relations on cells that aren't direct descendants of the treeview. - * So only set it on the container, not on the renderer accessibles */ - if (atk_object_get_parent (ATK_OBJECT (cell)) != ATK_OBJECT (parent)) - return; - - accessible = GTK_TREE_VIEW_ACCESSIBLE (parent); - cell_info = find_cell_info (accessible, cell); - if (!cell_info) - return; - - /* only set parent/child rows on the expander column */ - treeview = GTK_TREE_VIEW (gtk_accessible_get_widget (GTK_ACCESSIBLE (parent))); - column = gtk_tree_view_get_expander_column (treeview); - if (column != cell_info->cell_col_ref) - return; - - /* Update CHILD_OF relation to parent cell */ - relation = atk_relation_set_get_relation_by_type (relationset, ATK_RELATION_NODE_CHILD_OF); - if (relation) - atk_relation_set_remove (relationset, relation); - - if (cell_info->tree->parent_tree) - { - object = ATK_OBJECT (peek_cell (accessible, cell_info->tree->parent_tree, cell_info->tree->parent_node, column)); - if (object == NULL) - object = ATK_OBJECT (create_cell (treeview, accessible, cell_info->tree->parent_tree, cell_info->tree->parent_node, column)); - } - else - object = ATK_OBJECT (accessible); - - atk_relation_set_add_relation_by_type (relationset, ATK_RELATION_NODE_CHILD_OF, object); - - /* Update PARENT_OF relation for all child cells */ - relation = atk_relation_set_get_relation_by_type (relationset, ATK_RELATION_NODE_PARENT_OF); - if (relation) - atk_relation_set_remove (relationset, relation); - - tree = cell_info->node->children; - if (tree) - { - for (node = gtk_tree_rbtree_first (tree); - node != NULL; - node = gtk_tree_rbtree_next (tree, node)) - { - object = ATK_OBJECT (peek_cell (accessible, tree, node, column)); - if (object == NULL) - object = ATK_OBJECT (create_cell (treeview, accessible, tree, node, column)); - - atk_relation_set_add_relation_by_type (relationset, ATK_RELATION_NODE_PARENT_OF, ATK_OBJECT (object)); - } - } -} - -static void -gtk_tree_view_accessible_get_cell_position (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell, - int *row, - int *column) -{ - GtkWidget *widget; - GtkTreeView *tree_view; - GtkTreeViewAccessibleCellInfo *cell_info; - GtkTreeViewAccessible *accessible; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (parent)); - if (widget == NULL) - return; - - tree_view = GTK_TREE_VIEW (widget); - accessible = GTK_TREE_VIEW_ACCESSIBLE (parent); - cell_info = find_cell_info (accessible, cell); - if (!cell_info) - return; - - if (row) - (*row) = gtk_tree_rbtree_node_get_index (cell_info->tree, cell_info->node); - if (column) - (*column) = get_column_number (tree_view, cell_info->cell_col_ref); -} - -static GPtrArray * -gtk_tree_view_accessible_get_column_header_cells (GtkCellAccessibleParent *parent, - GtkCellAccessible *cell) -{ - GtkWidget *widget; - GtkTreeViewAccessibleCellInfo *cell_info; - GtkTreeViewAccessible *accessible; - GPtrArray *array; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (parent)); - if (widget == NULL) - return NULL; - - accessible = GTK_TREE_VIEW_ACCESSIBLE (parent); - cell_info = find_cell_info (accessible, cell); - if (!cell_info) - return NULL; - - array = g_ptr_array_new_full (1, g_object_unref); - g_ptr_array_add (array, g_object_ref (get_header_from_column ( (cell_info->cell_col_ref)))); - return array; -} - -static void -gtk_cell_accessible_parent_interface_init (GtkCellAccessibleParentIface *iface) -{ - iface->get_cell_extents = gtk_tree_view_accessible_get_cell_extents; - iface->get_cell_area = gtk_tree_view_accessible_get_cell_area; - iface->grab_focus = gtk_tree_view_accessible_grab_cell_focus; - iface->get_child_index = gtk_tree_view_accessible_get_child_index; - iface->get_renderer_state = gtk_tree_view_accessible_get_renderer_state; - iface->expand_collapse = gtk_tree_view_accessible_expand_collapse; - iface->activate = gtk_tree_view_accessible_activate; - iface->edit = gtk_tree_view_accessible_edit; - iface->update_relationset = gtk_tree_view_accessible_update_relationset; - iface->get_cell_position = gtk_tree_view_accessible_get_cell_position; - iface->get_column_header_cells = gtk_tree_view_accessible_get_column_header_cells; -} - -void -_gtk_tree_view_accessible_reorder (GtkTreeView *treeview) -{ - GtkTreeViewAccessible *accessible; - - accessible = GTK_TREE_VIEW_ACCESSIBLE (_gtk_widget_peek_accessible (GTK_WIDGET (treeview))); - if (accessible == NULL) - return; - - g_signal_emit_by_name (accessible, "row-reordered"); -} - -static gboolean -is_cell_showing (GtkTreeView *tree_view, - GdkRectangle *cell_rect) -{ - GdkRectangle rect, *visible_rect; - GdkRectangle rect1, *tree_cell_rect; - int bx, by; - gboolean is_showing; - - /* A cell is considered "SHOWING" if any part of the cell is - * in the visible area. Other ways we could do this is by a - * cell's midpoint or if the cell is fully in the visible range. - * Since we have the cell_rect x, y, width, height of the cell, - * any of these is easy to compute. - * - * It is assumed that cell's rectangle is in widget coordinates - * so we must transform to tree cordinates. - */ - visible_rect = ▭ - tree_cell_rect = &rect1; - tree_cell_rect->x = cell_rect->x; - tree_cell_rect->y = cell_rect->y; - tree_cell_rect->width = cell_rect->width; - tree_cell_rect->height = cell_rect->height; - - gtk_tree_view_get_visible_rect (tree_view, visible_rect); - gtk_tree_view_convert_tree_to_bin_window_coords (tree_view, visible_rect->x, - visible_rect->y, &bx, &by); - - if (((tree_cell_rect->x + tree_cell_rect->width) < bx) || - ((tree_cell_rect->y + tree_cell_rect->height) < by) || - (tree_cell_rect->x > (bx + visible_rect->width)) || - (tree_cell_rect->y > (by + visible_rect->height))) - is_showing = FALSE; - else - is_showing = TRUE; - - return is_showing; -} - -/* Misc Private */ - -static int -cell_info_get_index (GtkTreeView *tree_view, - GtkTreeViewAccessibleCellInfo *info) -{ - int index; - - index = gtk_tree_rbtree_node_get_index (info->tree, info->node) + 1; - index *= get_n_columns (tree_view); - index += get_column_number (tree_view, info->cell_col_ref); - - return index; -} - -static void -cell_info_new (GtkTreeViewAccessible *self, - GtkTreeRBTree *tree, - GtkTreeRBNode *node, - GtkTreeViewColumn *tv_col, - GtkCellAccessible *cell) -{ - GtkTreeViewAccessiblePrivate *priv = gtk_tree_view_accessible_get_instance_private (self); - GtkTreeViewAccessibleCellInfo *cell_info; - - cell_info = g_new (GtkTreeViewAccessibleCellInfo, 1); - - cell_info->view = self; - cell_info->tree = tree; - cell_info->node = node; - cell_info->cell_col_ref = tv_col; - cell_info->cell = cell; - - g_object_set_qdata (G_OBJECT (cell), - gtk_tree_view_accessible_get_data_quark (), - cell_info); - - g_hash_table_replace (priv->cell_infos, cell_info, cell_info); -} - -/* Returns the column number of the specified GtkTreeViewColumn - * The column must be visible. - */ -static int -get_column_number (GtkTreeView *treeview, - GtkTreeViewColumn *column) -{ - GtkTreeViewColumn *cur; - guint i, number; - - number = 0; - - for (i = 0; i < gtk_tree_view_get_n_columns (treeview); i++) - { - cur = gtk_tree_view_get_column (treeview, i); - - if (!gtk_tree_view_column_get_visible (cur)) - continue; - - if (cur == column) - break; - - number++; - } - - g_return_val_if_fail (i < gtk_tree_view_get_n_columns (treeview), 0); - - return number; -} - -static gboolean -get_rbtree_column_from_index (GtkTreeView *tree_view, - int index, - GtkTreeRBTree **tree, - GtkTreeRBNode **node, - GtkTreeViewColumn **column) -{ - guint n_columns = get_n_columns (tree_view); - - if (n_columns == 0) - return FALSE; - /* First row is the column headers */ - index -= n_columns; - if (index < 0) - return FALSE; - - if (tree) - { - g_return_val_if_fail (node != NULL, FALSE); - - if (!gtk_tree_rbtree_find_index (_gtk_tree_view_get_rbtree (tree_view), - index / n_columns, - tree, - node)) - return FALSE; - } - - if (column) - { - *column = get_visible_column (tree_view, index % n_columns); - if (*column == NULL) - return FALSE; - } - return TRUE; -} - -static GtkTreeViewAccessibleCellInfo * -find_cell_info (GtkTreeViewAccessible *accessible, - GtkCellAccessible *cell) -{ - AtkObject *parent; - - parent = atk_object_get_parent (ATK_OBJECT (cell)); - while (parent != ATK_OBJECT (accessible)) - { - cell = GTK_CELL_ACCESSIBLE (parent); - parent = atk_object_get_parent (ATK_OBJECT (cell)); - } - - return g_object_get_qdata (G_OBJECT (cell), - gtk_tree_view_accessible_get_data_quark ()); -} - -static AtkObject * -get_header_from_column (GtkTreeViewColumn *tv_col) -{ - AtkObject *rc; - GtkWidget *header_widget; - - if (tv_col == NULL) - return NULL; - - header_widget = gtk_tree_view_column_get_button (tv_col); - - if (header_widget) - rc = gtk_widget_get_accessible (header_widget); - else - rc = NULL; - - return rc; -} - -void -_gtk_tree_view_accessible_add (GtkTreeView *treeview, - GtkTreeRBTree *tree, - GtkTreeRBNode *node) -{ - GtkTreeViewAccessible *accessible; - guint row, n_rows, n_cols, i; - - accessible = GTK_TREE_VIEW_ACCESSIBLE (_gtk_widget_peek_accessible (GTK_WIDGET (treeview))); - if (accessible == NULL) - return; - - if (node == NULL) - { - row = tree->parent_tree ? gtk_tree_rbtree_node_get_index (tree->parent_tree, tree->parent_node) : 0; - n_rows = tree->root->total_count; - } - else - { - row = gtk_tree_rbtree_node_get_index (tree, node); - n_rows = 1 + (node->children ? node->children->root->total_count : 0); - } - - g_signal_emit_by_name (accessible, "row-inserted", row, n_rows); - - n_cols = get_n_columns (treeview); - if (n_cols) - { - for (i = (row + 1) * n_cols; i < (row + n_rows + 1) * n_cols; i++) - { - /* Pass NULL as the child object, i.e. 4th argument */ - g_signal_emit_by_name (accessible, "children-changed::add", i, NULL, NULL); - } - } -} - -void -_gtk_tree_view_accessible_remove (GtkTreeView *treeview, - GtkTreeRBTree *tree, - GtkTreeRBNode *node) -{ - GtkTreeViewAccessibleCellInfo *cell_info; - GHashTableIter iter; - GtkTreeViewAccessible *accessible; - GtkTreeViewAccessiblePrivate *priv; - guint row, n_rows, n_cols, i; - - accessible = GTK_TREE_VIEW_ACCESSIBLE (_gtk_widget_peek_accessible (GTK_WIDGET (treeview))); - if (accessible == NULL) - return; - - priv = gtk_tree_view_accessible_get_instance_private (accessible); - - /* if this shows up in profiles, special-case node->children == NULL */ - - if (node == NULL) - { - row = tree->parent_tree ? gtk_tree_rbtree_node_get_index (tree->parent_tree, tree->parent_node) : 0; - n_rows = tree->root->total_count + 1; - } - else - { - row = gtk_tree_rbtree_node_get_index (tree, node); - n_rows = 1 + (node->children ? node->children->root->total_count : 0); - - tree = node->children; - } - - g_signal_emit_by_name (accessible, "row-deleted", row, n_rows); - - n_cols = get_n_columns (treeview); - if (n_cols) - { - for (i = (n_rows + row + 1) * n_cols - 1; i >= (row + 1) * n_cols; i--) - { - /* Pass NULL as the child object, i.e. 4th argument */ - g_signal_emit_by_name (accessible, "children-changed::remove", i, NULL, NULL); - } - - g_hash_table_iter_init (&iter, priv->cell_infos); - while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&cell_info)) - { - if (node == cell_info->node || - tree == cell_info->tree || - (tree && gtk_tree_rbtree_contains (tree, cell_info->tree))) - g_hash_table_iter_remove (&iter); - } - } -} - -void -_gtk_tree_view_accessible_changed (GtkTreeView *treeview, - GtkTreeRBTree *tree, - GtkTreeRBNode *node) -{ - GtkTreeViewAccessible *accessible; - guint i; - - accessible = GTK_TREE_VIEW_ACCESSIBLE (_gtk_widget_peek_accessible (GTK_WIDGET (treeview))); - if (accessible == NULL) - return; - - for (i = 0; i < gtk_tree_view_get_n_columns (treeview); i++) - { - GtkCellAccessible *cell = peek_cell (accessible, - tree, node, - gtk_tree_view_get_column (treeview, i)); - - if (cell == NULL) - continue; - - set_cell_data (treeview, accessible, cell); - _gtk_cell_accessible_update_cache (cell, TRUE); - } - - g_signal_emit_by_name (accessible, "visible-data-changed"); -} - -/* NB: id is not checked, only columns < id are. - * This is important so the function works for notification of removal of a column */ -static guint -to_visible_column_id (GtkTreeView *treeview, - guint id) -{ - guint i; - guint invisible; - - invisible = 0; - - for (i = 0; i < id; i++) - { - GtkTreeViewColumn *column = gtk_tree_view_get_column (treeview, i); - - if (!gtk_tree_view_column_get_visible (column)) - invisible++; - } - - return id - invisible; -} - -static void -gtk_tree_view_accessible_do_add_column (GtkTreeViewAccessible *accessible, - GtkTreeView *treeview, - GtkTreeViewColumn *column, - guint id) -{ - guint row, n_rows, n_cols; - - /* Generate column-inserted signal */ - g_signal_emit_by_name (accessible, "column-inserted", id, 1); - - n_rows = get_n_rows (treeview); - n_cols = get_n_columns (treeview); - - /* Generate children-changed signals */ - for (row = 0; row <= n_rows; row++) - { - /* Pass NULL as the child object, i.e. 4th argument */ - g_signal_emit_by_name (accessible, "children-changed::add", - (row * n_cols) + id, NULL, NULL); - } -} - -void -_gtk_tree_view_accessible_add_column (GtkTreeView *treeview, - GtkTreeViewColumn *column, - guint id) -{ - AtkObject *obj; - - if (!gtk_tree_view_column_get_visible (column)) - return; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (treeview)); - if (obj == NULL) - return; - - gtk_tree_view_accessible_do_add_column (GTK_TREE_VIEW_ACCESSIBLE (obj), - treeview, - column, - to_visible_column_id (treeview, id)); -} - -static void -gtk_tree_view_accessible_do_remove_column (GtkTreeViewAccessible *self, - GtkTreeView *treeview, - GtkTreeViewColumn *column, - guint id) -{ - GtkTreeViewAccessiblePrivate *priv = gtk_tree_view_accessible_get_instance_private (self); - GtkTreeViewAccessibleCellInfo *cell_info; - GHashTableIter iter; - gpointer value; - guint row, n_rows, n_cols; - - /* Clean column from cache */ - g_hash_table_iter_init (&iter, priv->cell_infos); - while (g_hash_table_iter_next (&iter, NULL, &value)) - { - cell_info = value; - if (cell_info->cell_col_ref == column) - g_hash_table_iter_remove (&iter); - } - - /* Generate column-deleted signal */ - g_signal_emit_by_name (self, "column-deleted", id, 1); - - n_rows = get_n_rows (treeview); - n_cols = get_n_columns (treeview); - - /* Generate children-changed signals */ - for (row = 0; row <= n_rows; row++) - { - /* Pass NULL as the child object, 4th argument */ - g_signal_emit_by_name (self, "children-changed::remove", - (row * n_cols) + id, NULL, NULL); - } -} - -void -_gtk_tree_view_accessible_remove_column (GtkTreeView *treeview, - GtkTreeViewColumn *column, - guint id) -{ - AtkObject *obj; - - if (!gtk_tree_view_column_get_visible (column)) - return; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (treeview)); - if (obj == NULL) - return; - - gtk_tree_view_accessible_do_remove_column (GTK_TREE_VIEW_ACCESSIBLE (obj), - treeview, - column, - to_visible_column_id (treeview, id)); -} - -void -_gtk_tree_view_accessible_reorder_column (GtkTreeView *treeview, - GtkTreeViewColumn *column) -{ - AtkObject *obj; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (treeview)); - if (obj == NULL) - return; - - g_signal_emit_by_name (obj, "column-reordered"); -} - -void -_gtk_tree_view_accessible_toggle_visibility (GtkTreeView *treeview, - GtkTreeViewColumn *column) -{ - AtkObject *obj; - guint i, id; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (treeview)); - if (obj == NULL) - return; - - if (gtk_tree_view_column_get_visible (column)) - { - id = get_column_number (treeview, column); - - gtk_tree_view_accessible_do_add_column (GTK_TREE_VIEW_ACCESSIBLE (obj), - treeview, - column, - id); - } - else - { - id = 0; - - for (i = 0; i < gtk_tree_view_get_n_columns (treeview); i++) - { - GtkTreeViewColumn *cur = gtk_tree_view_get_column (treeview, i); - - if (gtk_tree_view_column_get_visible (cur)) - id++; - - if (cur == column) - break; - } - - gtk_tree_view_accessible_do_remove_column (GTK_TREE_VIEW_ACCESSIBLE (obj), - treeview, - column, - id); - } -} - -static GtkTreeViewColumn * -get_effective_focus_column (GtkTreeView *treeview, - GtkTreeViewColumn *column) -{ - if (column == NULL && get_n_columns (treeview) > 0) - column = get_visible_column (treeview, 0); - - return column; -} - -void -_gtk_tree_view_accessible_update_focus_column (GtkTreeView *treeview, - GtkTreeViewColumn *old_focus, - GtkTreeViewColumn *new_focus) -{ - GtkTreeViewAccessible *accessible; - AtkObject *obj; - GtkTreeRBTree *cursor_tree; - GtkTreeRBNode *cursor_node; - GtkCellAccessible *cell; - - old_focus = get_effective_focus_column (treeview, old_focus); - new_focus = get_effective_focus_column (treeview, new_focus); - if (old_focus == new_focus) - return; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (treeview)); - if (obj == NULL) - return; - - accessible = GTK_TREE_VIEW_ACCESSIBLE (obj); - - if (!_gtk_tree_view_get_cursor_node (treeview, &cursor_tree, &cursor_node)) - return; - - if (old_focus) - { - cell = peek_cell (accessible, cursor_tree, cursor_node, old_focus); - if (cell != NULL) - _gtk_cell_accessible_state_changed (cell, GTK_CELL_RENDERER_FOCUSED, 0); - } - - if (new_focus) - { - cell = peek_cell (accessible, cursor_tree, cursor_node, new_focus); - if (cell != NULL) - _gtk_cell_accessible_state_changed (cell, 0, GTK_CELL_RENDERER_FOCUSED); - else - cell = create_cell (treeview, accessible, cursor_tree, cursor_node, new_focus); - - g_signal_emit_by_name (accessible, "active-descendant-changed", cell); - } -} - -void -_gtk_tree_view_accessible_add_state (GtkTreeView *treeview, - GtkTreeRBTree *tree, - GtkTreeRBNode *node, - GtkCellRendererState state) -{ - GtkTreeViewAccessible *accessible; - GtkTreeViewColumn *single_column; - AtkObject *obj; - guint i; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (treeview)); - if (obj == NULL) - return; - - accessible = GTK_TREE_VIEW_ACCESSIBLE (obj); - - if (state == GTK_CELL_RENDERER_FOCUSED) - { - single_column = get_effective_focus_column (treeview, _gtk_tree_view_get_focus_column (treeview)); - } - else if (state == GTK_CELL_RENDERER_EXPANDED || - state == GTK_CELL_RENDERER_EXPANDABLE) - { - single_column = gtk_tree_view_get_expander_column (treeview); - } - else - single_column = NULL; - - if (single_column) - { - GtkCellAccessible *cell = peek_cell (accessible, - tree, node, - single_column); - - if (cell != NULL) - _gtk_cell_accessible_state_changed (cell, state, 0); - - if (state == GTK_CELL_RENDERER_FOCUSED) - { - if (cell == NULL) - cell = create_cell (treeview, accessible, tree, node, single_column); - - g_signal_emit_by_name (accessible, "active-descendant-changed", cell); - } - } - else - { - for (i = 0; i < gtk_tree_view_get_n_columns (treeview); i++) - { - GtkCellAccessible *cell = peek_cell (accessible, - tree, node, - gtk_tree_view_get_column (treeview, i)); - - if (cell == NULL) - continue; - - _gtk_cell_accessible_state_changed (cell, state, 0); - } - } - - if (state == GTK_CELL_RENDERER_SELECTED) - g_signal_emit_by_name (accessible, "selection-changed"); -} - -void -_gtk_tree_view_accessible_remove_state (GtkTreeView *treeview, - GtkTreeRBTree *tree, - GtkTreeRBNode *node, - GtkCellRendererState state) -{ - GtkTreeViewAccessible *accessible; - GtkTreeViewColumn *single_column; - AtkObject *obj; - guint i; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (treeview)); - if (obj == NULL) - return; - - accessible = GTK_TREE_VIEW_ACCESSIBLE (obj); - - if (state == GTK_CELL_RENDERER_FOCUSED) - { - single_column = get_effective_focus_column (treeview, _gtk_tree_view_get_focus_column (treeview)); - } - else if (state == GTK_CELL_RENDERER_EXPANDED || - state == GTK_CELL_RENDERER_EXPANDABLE) - { - single_column = gtk_tree_view_get_expander_column (treeview); - } - else - single_column = NULL; - - if (single_column) - { - GtkCellAccessible *cell = peek_cell (accessible, - tree, node, - single_column); - - if (cell != NULL) - _gtk_cell_accessible_state_changed (cell, 0, state); - } - else - { - for (i = 0; i < gtk_tree_view_get_n_columns (treeview); i++) - { - GtkCellAccessible *cell = peek_cell (accessible, - tree, node, - gtk_tree_view_get_column (treeview, i)); - - if (cell == NULL) - continue; - - _gtk_cell_accessible_state_changed (cell, 0, state); - } - } - - if (state == GTK_CELL_RENDERER_SELECTED) - g_signal_emit_by_name (accessible, "selection-changed"); -} diff --git a/gtk/a11y/gtktreeviewaccessible.h b/gtk/a11y/gtktreeviewaccessible.h deleted file mode 100644 index 46b331592e..0000000000 --- a/gtk/a11y/gtktreeviewaccessible.h +++ /dev/null @@ -1,54 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_TREE_VIEW_ACCESSIBLE_H__ -#define __GTK_TREE_VIEW_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_TREE_VIEW_ACCESSIBLE (gtk_tree_view_accessible_get_type ()) -#define GTK_TREE_VIEW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TREE_VIEW_ACCESSIBLE, GtkTreeViewAccessible)) -#define GTK_TREE_VIEW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TREE_VIEW_ACCESSIBLE, GtkTreeViewAccessibleClass)) -#define GTK_IS_TREE_VIEW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TREE_VIEW_ACCESSIBLE)) -#define GTK_IS_TREE_VIEW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TREE_VIEW_ACCESSIBLE)) -#define GTK_TREE_VIEW_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TREE_VIEW_ACCESSIBLE, GtkTreeViewAccessibleClass)) - -typedef struct _GtkTreeViewAccessible GtkTreeViewAccessible; -typedef struct _GtkTreeViewAccessibleClass GtkTreeViewAccessibleClass; - -struct _GtkTreeViewAccessible -{ - GtkWidgetAccessible parent; -}; - -struct _GtkTreeViewAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_tree_view_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_TREE_VIEW_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtktreeviewaccessibleprivate.h b/gtk/a11y/gtktreeviewaccessibleprivate.h deleted file mode 100644 index 2b132d9dc8..0000000000 --- a/gtk/a11y/gtktreeviewaccessibleprivate.h +++ /dev/null @@ -1,68 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_TREE_VIEW_ACCESSIBLE_PRIVATE_H__ -#define __GTK_TREE_VIEW_ACCESSIBLE_PRIVATE_H__ - -#include <gtk/a11y/gtktreeviewaccessible.h> - -G_BEGIN_DECLS - -/* called by treeview code */ -void _gtk_tree_view_accessible_reorder (GtkTreeView *treeview); -void _gtk_tree_view_accessible_add (GtkTreeView *treeview, - GtkTreeRBTree *tree, - GtkTreeRBNode *node); -void _gtk_tree_view_accessible_remove (GtkTreeView *treeview, - GtkTreeRBTree *tree, - GtkTreeRBNode *node); -void _gtk_tree_view_accessible_changed (GtkTreeView *treeview, - GtkTreeRBTree *tree, - GtkTreeRBNode *node); - -void _gtk_tree_view_accessible_add_column (GtkTreeView *treeview, - GtkTreeViewColumn *column, - guint id); -void _gtk_tree_view_accessible_remove_column (GtkTreeView *treeview, - GtkTreeViewColumn *column, - guint id); -void _gtk_tree_view_accessible_reorder_column - (GtkTreeView *treeview, - GtkTreeViewColumn *column); -void _gtk_tree_view_accessible_toggle_visibility - (GtkTreeView *treeview, - GtkTreeViewColumn *column); -void _gtk_tree_view_accessible_update_focus_column - (GtkTreeView *treeview, - GtkTreeViewColumn *old_focus, - GtkTreeViewColumn *new_focus); - -void _gtk_tree_view_accessible_add_state (GtkTreeView *treeview, - GtkTreeRBTree *tree, - GtkTreeRBNode *node, - GtkCellRendererState state); -void _gtk_tree_view_accessible_remove_state (GtkTreeView *treeview, - GtkTreeRBTree *tree, - GtkTreeRBNode *node, - GtkCellRendererState state); - -void gtk_tree_view_accessible_update_model (GtkTreeViewAccessible *self, - GtkTreeModel *model); - -G_END_DECLS - -#endif /* __GTK_TREE_VIEW_ACCESSIBLE_PRIVATE_H__ */ diff --git a/gtk/a11y/gtkwidgetaccessible.c b/gtk/a11y/gtkwidgetaccessible.c deleted file mode 100644 index 1941952e79..0000000000 --- a/gtk/a11y/gtkwidgetaccessible.c +++ /dev/null @@ -1,789 +0,0 @@ -/* GTK+ - accessibility implementations - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtkwidgetaccessibleprivate.h" - -#include "gtkaccellabel.h" -#include "gtkadjustment.h" -#include "gtkbox.h" -#include "gtkbutton.h" -#include "gtkcombobox.h" -#include "gtkdragicon.h" -#include "gtkdrawingarea.h" -#include "gtkglarea.h" -#include "gtkimage.h" -#include "gtklevelbar.h" -#include "gtkmediacontrols.h" -#include "gtknotebookpageaccessible.h" -#include "gtknotebook.h" -#include "gtkorientable.h" -#include "gtkpicture.h" -#include "gtkprogressbar.h" -#include "gtkscrollable.h" -#include "gtkscrollbar.h" -#include "gtkseparator.h" -#include "gtkshortcutlabel.h" -#include "gtkshortcutsshortcut.h" -#include "gtkspinner.h" -#include "gtkstacksidebar.h" -#include "gtkstatusbar.h" -#include "gtkvideo.h" -#include "gtkviewport.h" -#include "gtkwidgetprivate.h" - -typedef struct -{ - AtkLayer layer; -} GtkWidgetAccessiblePrivate; - -extern GtkWidget *_focus_widget; - -static gboolean gtk_widget_accessible_on_screen (GtkWidget *widget); -static gboolean gtk_widget_accessible_all_parents_visible (GtkWidget *widget); - -static void atk_component_interface_init (AtkComponentIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkWidgetAccessible, gtk_widget_accessible, GTK_TYPE_ACCESSIBLE, - G_ADD_PRIVATE (GtkWidgetAccessible) - G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, atk_component_interface_init)) - -/*< private > - * gtk_widget_accessible_update_bounds: - * @self: a #GtkWidgetAccessible - * - * Updates the bounds of the widget's accessible implementation using - * the widget's allocation. - */ -void -gtk_widget_accessible_update_bounds (GtkWidgetAccessible *self) -{ - GtkAllocation alloc; - AtkRectangle rect; - - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (self)); - gtk_widget_get_allocation (widget, &alloc); - - rect.x = alloc.x; - rect.y = alloc.y; - rect.width = alloc.width; - rect.height = alloc.height; - - g_signal_emit_by_name (self, "bounds-changed", &rect); -} - -/*< private > - * gtk_widget_accessible_notify_showing: - * @self: a #GtkWidgetAccessible - * - * Translates the #GtkWidget mapped state into the #AtkObject - * showing state. - */ -void -gtk_widget_accessible_notify_showing (GtkWidgetAccessible *self) -{ - g_return_if_fail (GTK_IS_WIDGET_ACCESSIBLE (self)); - - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (self)); - - atk_object_notify_state_change (ATK_OBJECT (self), - ATK_STATE_SHOWING, - gtk_widget_get_mapped (widget)); -} - -void -gtk_widget_accessible_notify_tooltip (GtkWidgetAccessible *self) -{ - g_return_if_fail (GTK_IS_WIDGET_ACCESSIBLE (self)); - - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (self)); - - atk_object_notify_state_change (ATK_OBJECT (self), - ATK_STATE_HAS_TOOLTIP, - gtk_widget_get_has_tooltip (widget)); -} - -void -gtk_widget_accessible_notify_visible (GtkWidgetAccessible *self) -{ - g_return_if_fail (GTK_IS_WIDGET_ACCESSIBLE (self)); - - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (self)); - - atk_object_notify_state_change (ATK_OBJECT (self), - ATK_STATE_VISIBLE, - gtk_widget_get_visible (widget)); -} - -void -gtk_widget_accessible_notify_sensitive (GtkWidgetAccessible *self) -{ - g_return_if_fail (GTK_IS_WIDGET_ACCESSIBLE (self)); - - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (self)); - gboolean is_sensitive = gtk_widget_get_sensitive (widget); - - atk_object_notify_state_change (ATK_OBJECT (self), - ATK_STATE_SENSITIVE, - is_sensitive); - atk_object_notify_state_change (ATK_OBJECT (self), - ATK_STATE_ENABLED, - is_sensitive); -} - -void -gtk_widget_accessible_notify_focus (GtkWidgetAccessible *self) -{ - g_return_if_fail (GTK_IS_WIDGET_ACCESSIBLE (self)); - - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (self)); - - atk_object_notify_state_change (ATK_OBJECT (self), - ATK_STATE_FOCUSED, - gtk_widget_has_focus (widget)); -} - -void -gtk_widget_accessible_notify_orientation (GtkWidgetAccessible *self) -{ - g_return_if_fail (GTK_IS_WIDGET_ACCESSIBLE (self)); - - GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (self)); - - if (GTK_IS_ORIENTABLE (widget)) - { - GtkOrientable *orientable = GTK_ORIENTABLE (widget); - GtkOrientation orientation = gtk_orientable_get_orientation (orientable); - - atk_object_notify_state_change (ATK_OBJECT (self), - ATK_STATE_HORIZONTAL, - orientation == GTK_ORIENTATION_HORIZONTAL); - atk_object_notify_state_change (ATK_OBJECT (self), - ATK_STATE_VERTICAL, - orientation == GTK_ORIENTATION_VERTICAL); - } -} - -static void -gtk_widget_accessible_initialize (AtkObject *object, - gpointer data) -{ - GtkWidgetAccessible *self = GTK_WIDGET_ACCESSIBLE (object); - GtkWidgetAccessiblePrivate *priv = gtk_widget_accessible_get_instance_private (self); - - priv->layer = ATK_LAYER_WIDGET; - - atk_object_set_role (object, ATK_ROLE_UNKNOWN); -} - -static const char * -gtk_widget_accessible_get_description (AtkObject *accessible) -{ - GtkWidget *widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return NULL; - - if (accessible->description != NULL) - return accessible->description; - - return gtk_widget_get_tooltip_text (widget); -} - -static AtkObject * -gtk_widget_accessible_get_parent (AtkObject *accessible) -{ - AtkObject *parent; - GtkWidget *widget, *parent_widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return NULL; - - parent = accessible->accessible_parent; - if (parent != NULL) - return parent; - - parent_widget = gtk_widget_get_parent (widget); - if (parent_widget == NULL) - return NULL; - - /* For a widget whose parent is a GtkNoteBook, we return the - * accessible object corresponding the GtkNotebookPage containing - * the widget as the accessible parent. - */ - if (GTK_IS_NOTEBOOK (parent_widget)) - { - int page_num; - GtkWidget *child; - GtkNotebook *notebook; - - page_num = 0; - notebook = GTK_NOTEBOOK (parent_widget); - while (TRUE) - { - child = gtk_notebook_get_nth_page (notebook, page_num); - if (!child) - break; - if (child == widget) - { - parent = gtk_widget_get_accessible (parent_widget); - parent = atk_object_ref_accessible_child (parent, page_num); - g_object_unref (parent); - return parent; - } - page_num++; - } - } - parent = gtk_widget_get_accessible (parent_widget); - return parent; -} - -static GtkWidget * -find_label (GtkWidget *widget) -{ - GList *labels; - GtkWidget *label; - GtkWidget *temp_widget; - GList *ptr; - - labels = gtk_widget_list_mnemonic_labels (widget); - label = NULL; - ptr = labels; - while (ptr) - { - if (ptr->data) - { - label = ptr->data; - break; - } - ptr = ptr->next; - } - g_list_free (labels); - - /* Ignore a label within a button; bug #136602 */ - if (label && GTK_IS_BUTTON (widget)) - { - temp_widget = label; - while (temp_widget) - { - if (temp_widget == widget) - { - label = NULL; - break; - } - temp_widget = gtk_widget_get_parent (temp_widget); - } - } - return label; -} - -static AtkRelationSet * -gtk_widget_accessible_ref_relation_set (AtkObject *obj) -{ - GtkWidget *widget; - AtkRelationSet *relation_set; - GtkWidget *label; - AtkObject *array[1]; - AtkRelation* relation; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - relation_set = ATK_OBJECT_CLASS (gtk_widget_accessible_parent_class)->ref_relation_set (obj); - - if (GTK_IS_BOX (widget)) - return relation_set; - - if (!atk_relation_set_contains (relation_set, ATK_RELATION_LABELLED_BY)) - { - label = find_label (widget); - if (label == NULL) - { - if (GTK_IS_BUTTON (widget) && gtk_widget_get_mapped (widget)) - /* - * Handle the case where GnomeIconEntry is the mnemonic widget. - * The GtkButton which is a grandchild of the GnomeIconEntry - * should really be the mnemonic widget. See bug #133967. - */ - { - GtkWidget *temp_widget; - - temp_widget = gtk_widget_get_parent (widget); - if (GTK_IS_BOX (temp_widget)) - { - label = find_label (temp_widget); - if (!label) - label = find_label (gtk_widget_get_parent (temp_widget)); - } - } - else if (GTK_IS_COMBO_BOX (widget)) - /* - * Handle the case when GtkFileChooserButton is the mnemonic - * widget. The GtkComboBox which is a child of the - * GtkFileChooserButton should be the mnemonic widget. - * See bug #359843. - */ - { - GtkWidget *temp_widget; - - temp_widget = gtk_widget_get_parent (widget); - if (GTK_IS_BOX (temp_widget)) - { - label = find_label (temp_widget); - } - } - } - - if (label) - { - array[0] = gtk_widget_get_accessible (label); - - relation = atk_relation_new (array, 1, ATK_RELATION_LABELLED_BY); - atk_relation_set_add (relation_set, relation); - g_object_unref (relation); - } - } - - return relation_set; -} - -static gboolean -takes_focus (GtkWidget *widget) -{ - if (GTK_IS_NOTEBOOK (widget) || - GTK_IS_BUTTON (widget)) - return TRUE; - - if (GTK_IS_ACCEL_LABEL (widget) || - GTK_IS_DRAG_ICON (widget) || - GTK_IS_DRAWING_AREA (widget) || - GTK_IS_GL_AREA (widget) || - GTK_IS_IMAGE (widget) || - GTK_IS_LEVEL_BAR (widget) || - GTK_IS_MEDIA_CONTROLS (widget) || - GTK_IS_PICTURE (widget) || - GTK_IS_PROGRESS_BAR (widget) || - GTK_IS_SCROLLBAR (widget) || - GTK_IS_SEPARATOR (widget) || - GTK_IS_SHORTCUT_LABEL (widget) || - GTK_IS_SHORTCUTS_SHORTCUT (widget) || - GTK_IS_SPINNER (widget) || - GTK_IS_STACK_SIDEBAR (widget) || - GTK_IS_STATUSBAR (widget) || - GTK_IS_VIDEO (widget)) - return FALSE; - - return gtk_widget_get_can_focus (widget); -} - -static AtkStateSet * -gtk_widget_accessible_ref_state_set (AtkObject *accessible) -{ - GtkWidget *widget; - AtkStateSet *state_set; - - state_set = ATK_OBJECT_CLASS (gtk_widget_accessible_parent_class)->ref_state_set (accessible); - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - atk_state_set_add_state (state_set, ATK_STATE_DEFUNCT); - else - { - if (gtk_widget_is_sensitive (widget)) - { - atk_state_set_add_state (state_set, ATK_STATE_SENSITIVE); - atk_state_set_add_state (state_set, ATK_STATE_ENABLED); - } - - if (takes_focus (widget)) - { - atk_state_set_add_state (state_set, ATK_STATE_FOCUSABLE); - } - /* - * We do not currently generate notifications when an ATK object - * corresponding to a GtkWidget changes visibility by being scrolled - * on or off the screen. The testcase for this is the main window - * of the testgtk application in which a set of buttons in a GtkVBox - * is in a scrolled window with a viewport. - * - * To generate the notifications we would need to do the following: - * 1) Find the GtkViewport among the ancestors of the objects - * 2) Create an accessible for the viewport - * 3) Connect to the value-changed signal on the viewport - * 4) When the signal is received we need to traverse the children - * of the viewport and check whether the children are visible or not - * visible; we may want to restrict this to the widgets for which - * accessible objects have been created. - * 5) We probably need to store a variable on_screen in the - * GtkWidgetAccessible data structure so we can determine whether - * the value has changed. - */ - if (gtk_widget_get_visible (widget)) - { - atk_state_set_add_state (state_set, ATK_STATE_VISIBLE); - if (gtk_widget_accessible_on_screen (widget) && - gtk_widget_get_mapped (widget) && - gtk_widget_accessible_all_parents_visible (widget)) - atk_state_set_add_state (state_set, ATK_STATE_SHOWING); - } - - if (gtk_widget_has_focus (widget)) - atk_state_set_add_state (state_set, ATK_STATE_FOCUSED); - - if (gtk_widget_has_default (widget)) - atk_state_set_add_state (state_set, ATK_STATE_DEFAULT); - - if (GTK_IS_ORIENTABLE (widget)) - { - if (gtk_orientable_get_orientation (GTK_ORIENTABLE (widget)) == GTK_ORIENTATION_HORIZONTAL) - atk_state_set_add_state (state_set, ATK_STATE_HORIZONTAL); - else - atk_state_set_add_state (state_set, ATK_STATE_VERTICAL); - } - - if (gtk_widget_get_has_tooltip (widget)) - atk_state_set_add_state (state_set, ATK_STATE_HAS_TOOLTIP); - } - return state_set; -} - -static int -gtk_widget_accessible_get_index_in_parent (AtkObject *accessible) -{ - GtkWidget *widget; - GtkWidget *parent_widget; - int index; - GtkWidget *ch; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - - if (widget == NULL) - return -1; - - if (accessible->accessible_parent) - { - AtkObject *parent; - - parent = accessible->accessible_parent; - - if (GTK_IS_NOTEBOOK_PAGE_ACCESSIBLE (parent)) - return 0; - else - { - int n_children, i; - gboolean found = FALSE; - - n_children = atk_object_get_n_accessible_children (parent); - for (i = 0; i < n_children; i++) - { - AtkObject *child; - - child = atk_object_ref_accessible_child (parent, i); - if (child == accessible) - found = TRUE; - - g_object_unref (child); - if (found) - return i; - } - } - } - - parent_widget = gtk_widget_get_parent (widget); - for (ch = gtk_widget_get_first_child (parent_widget), index = 0; - ch != NULL; - ch = gtk_widget_get_next_sibling (ch), index++) - { - if (ch == widget) - break; - } - - return index; -} - -static AtkAttributeSet * -gtk_widget_accessible_get_attributes (AtkObject *obj) -{ - AtkAttributeSet *attributes; - AtkAttribute *toolkit; - - toolkit = g_new (AtkAttribute, 1); - toolkit->name = g_strdup ("toolkit"); - toolkit->value = g_strdup ("gtk"); - - attributes = g_slist_append (NULL, toolkit); - - return attributes; -} - -static int -gtk_widget_accessible_get_n_children (AtkObject *object) -{ - GtkWidget *window; - GtkWidget *child; - int count = 0; - - window = gtk_accessible_get_widget (GTK_ACCESSIBLE (object)); - for (child = gtk_widget_get_first_child (GTK_WIDGET (window)); - child != NULL; - child = gtk_widget_get_next_sibling (child)) - count++; - - return count; -} - -static AtkObject * -gtk_widget_accessible_ref_child (AtkObject *object, - int i) -{ - GtkWidget *window, *child; - int pos; - - window = gtk_accessible_get_widget (GTK_ACCESSIBLE (object)); - for (child = gtk_widget_get_first_child (GTK_WIDGET (window)), pos = 0; - child != NULL; - child = gtk_widget_get_next_sibling (child), pos++) - { - if (pos == i) - return g_object_ref (gtk_widget_get_accessible (child)); - } - - return NULL; -} - -static void -gtk_widget_accessible_class_init (GtkWidgetAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->get_description = gtk_widget_accessible_get_description; - class->get_parent = gtk_widget_accessible_get_parent; - class->ref_relation_set = gtk_widget_accessible_ref_relation_set; - class->ref_state_set = gtk_widget_accessible_ref_state_set; - class->get_index_in_parent = gtk_widget_accessible_get_index_in_parent; - class->initialize = gtk_widget_accessible_initialize; - class->get_attributes = gtk_widget_accessible_get_attributes; - class->get_n_children = gtk_widget_accessible_get_n_children; - class->ref_child = gtk_widget_accessible_ref_child; -} - -static void -gtk_widget_accessible_init (GtkWidgetAccessible *accessible) -{ -} - -static void -gtk_widget_accessible_get_extents (AtkComponent *component, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coord_type) -{ - GtkWidget *widget; - GtkAllocation allocation; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component)); - if (widget == NULL) - return; - - gtk_widget_get_allocation (widget, &allocation); - *width = allocation.width; - *height = allocation.height; - if (!gtk_widget_accessible_on_screen (widget) || (!gtk_widget_is_drawable (widget))) - { - *x = G_MININT; - *y = G_MININT; - return; - } - - if (gtk_widget_get_parent (widget)) - { - *x = allocation.x; - *y = allocation.y; - } - else - { - *x = 0; - *y = 0; - } -} - -static AtkLayer -gtk_widget_accessible_get_layer (AtkComponent *component) -{ - GtkWidgetAccessible *self = GTK_WIDGET_ACCESSIBLE (component); - GtkWidgetAccessiblePrivate *priv = gtk_widget_accessible_get_instance_private (self); - - return priv->layer; -} - -static gboolean -gtk_widget_accessible_grab_focus (AtkComponent *component) -{ - GtkWidget *widget; - GtkWidget *toplevel; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component)); - if (!widget) - return FALSE; - - if (!gtk_widget_get_can_focus (widget)) - return FALSE; - - gtk_widget_grab_focus (widget); - toplevel = GTK_WIDGET (gtk_widget_get_root (widget)); - if (GTK_IS_WINDOW (toplevel)) - { - G_GNUC_BEGIN_IGNORE_DEPRECATIONS - gtk_window_present (GTK_WINDOW (toplevel)); - G_GNUC_END_IGNORE_DEPRECATIONS - } - - return TRUE; -} - -static gboolean -gtk_widget_accessible_set_extents (AtkComponent *component, - int x, - int y, - int width, - int height, - AtkCoordType coord_type) -{ - return FALSE; -} - -static gboolean -gtk_widget_accessible_set_position (AtkComponent *component, - int x, - int y, - AtkCoordType coord_type) -{ - return FALSE; -} - -static gboolean -gtk_widget_accessible_set_size (AtkComponent *component, - int width, - int height) -{ - return FALSE; -} - -static void -atk_component_interface_init (AtkComponentIface *iface) -{ - iface->get_extents = gtk_widget_accessible_get_extents; - iface->get_layer = gtk_widget_accessible_get_layer; - iface->grab_focus = gtk_widget_accessible_grab_focus; - iface->set_extents = gtk_widget_accessible_set_extents; - iface->set_position = gtk_widget_accessible_set_position; - iface->set_size = gtk_widget_accessible_set_size; -} - -/* This function checks whether the widget has an ancestor which is - * a GtkViewport and, if so, whether any part of the widget intersects - * the visible rectangle of the GtkViewport. - */ -static gboolean -gtk_widget_accessible_on_screen (GtkWidget *widget) -{ - GtkAllocation allocation; - GtkWidget *viewport; - gboolean return_value; - - gtk_widget_get_allocation (widget, &allocation); - - if (!gtk_widget_get_mapped (widget)) - return FALSE; - - viewport = gtk_widget_get_ancestor (widget, GTK_TYPE_VIEWPORT); - if (viewport) - { - GtkAllocation viewport_allocation; - GtkAdjustment *adjustment; - GdkRectangle visible_rect; - - gtk_widget_get_allocation (viewport, &viewport_allocation); - - adjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (viewport)); - visible_rect.y = gtk_adjustment_get_value (adjustment); - adjustment = gtk_scrollable_get_hadjustment (GTK_SCROLLABLE (viewport)); - visible_rect.x = gtk_adjustment_get_value (adjustment); - visible_rect.width = viewport_allocation.width; - visible_rect.height = viewport_allocation.height; - - if (((allocation.x + allocation.width) < visible_rect.x) || - ((allocation.y + allocation.height) < visible_rect.y) || - (allocation.x > (visible_rect.x + visible_rect.width)) || - (allocation.y > (visible_rect.y + visible_rect.height))) - return_value = FALSE; - else - return_value = TRUE; - } - else - { - /* Check whether the widget has been placed of the screen. - * The widget may be MAPPED as when toolbar items do not - * fit on the toolbar. - */ - if (allocation.x + allocation.width <= 0 && - allocation.y + allocation.height <= 0) - return_value = FALSE; - else - return_value = TRUE; - } - - return return_value; -} - -/* Checks if all the predecessors (the parent widget, his parent, etc) - * are visible Used to check properly the SHOWING state. - */ -static gboolean -gtk_widget_accessible_all_parents_visible (GtkWidget *widget) -{ - GtkWidget *iter_parent = NULL; - gboolean result = TRUE; - - for (iter_parent = _gtk_widget_get_parent (widget); - iter_parent != NULL; - iter_parent = _gtk_widget_get_parent (iter_parent)) - { - if (!_gtk_widget_get_visible (iter_parent)) - { - result = FALSE; - break; - } - } - - return result; -} - -void -_gtk_widget_accessible_set_layer (GtkWidgetAccessible *self, - AtkLayer layer) -{ - GtkWidgetAccessiblePrivate *priv = gtk_widget_accessible_get_instance_private (self); - - priv->layer = layer; -} diff --git a/gtk/a11y/gtkwidgetaccessible.h b/gtk/a11y/gtkwidgetaccessible.h deleted file mode 100644 index fd4e02654e..0000000000 --- a/gtk/a11y/gtkwidgetaccessible.h +++ /dev/null @@ -1,41 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_WIDGET_ACCESSIBLE_H__ -#define __GTK_WIDGET_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/gtkaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_WIDGET_ACCESSIBLE (gtk_widget_accessible_get_type()) - -GDK_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE (GtkWidgetAccessible, gtk_widget_accessible, GTK, WIDGET_ACCESSIBLE, GtkAccessible) - -struct _GtkWidgetAccessibleClass -{ - GtkAccessibleClass parent_class; -}; - -G_END_DECLS - -#endif /* __GTK_WIDGET_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkwidgetaccessibleprivate.h b/gtk/a11y/gtkwidgetaccessibleprivate.h deleted file mode 100644 index e60abcb337..0000000000 --- a/gtk/a11y/gtkwidgetaccessibleprivate.h +++ /dev/null @@ -1,44 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_WIDGET_ACCESSIBLE_PRIVATE_H__ -#define __GTK_WIDGET_ACCESSIBLE_PRIVATE_H__ - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -void _gtk_widget_accessible_set_layer (GtkWidgetAccessible *accessible, - AtkLayer layer); - -void gtk_widget_accessible_update_bounds (GtkWidgetAccessible *self); - -void gtk_widget_accessible_notify_showing (GtkWidgetAccessible *self); - -void gtk_widget_accessible_notify_tooltip (GtkWidgetAccessible *self); - -void gtk_widget_accessible_notify_visible (GtkWidgetAccessible *self); - -void gtk_widget_accessible_notify_sensitive (GtkWidgetAccessible *self); - -void gtk_widget_accessible_notify_focus (GtkWidgetAccessible *self); - -void gtk_widget_accessible_notify_orientation (GtkWidgetAccessible *self); - -G_END_DECLS - -#endif /* __GTK_WIDGET_ACCESSIBLE_PRIVATE_H__ */ diff --git a/gtk/a11y/gtkwindowaccessible.c b/gtk/a11y/gtkwindowaccessible.c deleted file mode 100644 index 65f746e80d..0000000000 --- a/gtk/a11y/gtkwindowaccessible.c +++ /dev/null @@ -1,346 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2011, F123 Consulting & Mais Diferenças - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtkwindowaccessibleprivate.h" - -#include "gtkaccessibility.h" -#include "gtktoplevelaccessible.h" -#include "gtkwidgetaccessibleprivate.h" - -#include "gtklabel.h" -#include "gtkwidgetprivate.h" -#include "gtkwindowprivate.h" -#include "gtknative.h" - -/* atkcomponent.h */ - -static void gtk_window_accessible_get_extents (AtkComponent *component, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coord_type); -static void gtk_window_accessible_get_size (AtkComponent *component, - int *width, - int *height); - -static void atk_component_interface_init (AtkComponentIface *iface); -static void atk_window_interface_init (AtkWindowIface *iface); - -G_DEFINE_TYPE_WITH_CODE (GtkWindowAccessible, - gtk_window_accessible, - GTK_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, - atk_component_interface_init) - G_IMPLEMENT_INTERFACE (ATK_TYPE_WINDOW, - atk_window_interface_init)); - - -static void -gtk_window_accessible_focus_event (AtkObject *obj, - gboolean focus_in) -{ - atk_object_notify_state_change (obj, ATK_STATE_ACTIVE, focus_in); -} - -static void -on_title_changed (GObject *gobject, - GParamSpec *pspec, - GtkWindowAccessible *self) -{ - AtkObject *atk_obj = ATK_OBJECT (self); - - g_object_notify (G_OBJECT (atk_obj), "accessible-name"); - g_signal_emit_by_name (atk_obj, "visible-data-changed"); -} - -static const char * -gtk_window_accessible_get_name (AtkObject *accessible) -{ - const char * name; - GtkWidget* widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return NULL; - - name = ATK_OBJECT_CLASS (gtk_window_accessible_parent_class)->get_name (accessible); - if (name != NULL) - return name; - - if (GTK_IS_WINDOW (widget)) - { - GtkWindow *window = GTK_WINDOW (widget); - - name = gtk_window_get_title (window); - } - return name; -} - -static int -gtk_window_accessible_get_index_in_parent (AtkObject *accessible) -{ - GtkWidget* widget; - AtkObject* atk_obj; - int index = -1; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return -1; - - index = ATK_OBJECT_CLASS (gtk_window_accessible_parent_class)->get_index_in_parent (accessible); - if (index != -1) - return index; - - atk_obj = atk_get_root (); - - if (GTK_IS_WINDOW (widget)) - { - GtkWindow *window = GTK_WINDOW (widget); - if (GTK_IS_TOPLEVEL_ACCESSIBLE (atk_obj)) - { - GtkToplevelAccessible *toplevel = GTK_TOPLEVEL_ACCESSIBLE (atk_obj); - index = g_list_index (gtk_toplevel_accessible_get_children (toplevel), window); - } - else - { - int i, sibling_count; - - sibling_count = atk_object_get_n_accessible_children (atk_obj); - for (i = 0; i < sibling_count && index == -1; ++i) - { - AtkObject *child = atk_object_ref_accessible_child (atk_obj, i); - if (accessible == child) - index = i; - g_object_unref (G_OBJECT (child)); - } - } - } - return index; -} - -static AtkRelationSet * -gtk_window_accessible_ref_relation_set (AtkObject *obj) -{ - GtkWidget *widget; - AtkRelationSet *relation_set; - AtkObject *array[1]; - AtkRelation* relation; - GtkWidget *current_widget; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); - if (widget == NULL) - return NULL; - - relation_set = ATK_OBJECT_CLASS (gtk_window_accessible_parent_class)->ref_relation_set (obj); - - if (atk_object_get_role (obj) == ATK_ROLE_TOOL_TIP) - { - relation = atk_relation_set_get_relation_by_type (relation_set, ATK_RELATION_POPUP_FOR); - if (relation) - atk_relation_set_remove (relation_set, relation); - - if (0) /* FIXME need a way to go from tooltip window to widget */ - { - array[0] = gtk_widget_get_accessible (current_widget); - relation = atk_relation_new (array, 1, ATK_RELATION_POPUP_FOR); - atk_relation_set_add (relation_set, relation); - g_object_unref (relation); - } - } - return relation_set; -} - -static AtkStateSet * -gtk_window_accessible_ref_state_set (AtkObject *accessible) -{ - AtkStateSet *state_set; - GtkWidget *widget; - GtkWindow *window; - GdkSurface *gdk_surface; - GdkSurfaceState state; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return NULL; - - state_set = ATK_OBJECT_CLASS (gtk_window_accessible_parent_class)->ref_state_set (accessible); - - window = GTK_WINDOW (widget); - - if (gtk_window_is_active (window)) - atk_state_set_add_state (state_set, ATK_STATE_ACTIVE); - - gdk_surface = gtk_native_get_surface (GTK_NATIVE (window)); - if (GDK_IS_TOPLEVEL (gdk_surface)) - { - state = gdk_toplevel_get_state (GDK_TOPLEVEL (gdk_surface)); - if (state & GDK_SURFACE_STATE_MINIMIZED) - atk_state_set_add_state (state_set, ATK_STATE_ICONIFIED); - } - if (gtk_window_get_modal (window)) - atk_state_set_add_state (state_set, ATK_STATE_MODAL); - - if (gtk_window_get_resizable (window)) - atk_state_set_add_state (state_set, ATK_STATE_RESIZABLE); - - return state_set; -} - -static int -gtk_window_accessible_get_n_children (AtkObject *object) -{ - GtkWidget *window; - GtkWidget *child; - int count = 0; - - window = gtk_accessible_get_widget (GTK_ACCESSIBLE (object)); - for (child = gtk_widget_get_first_child (GTK_WIDGET (window)); - child != NULL; - child = gtk_widget_get_next_sibling (child)) - count++; - - return count; -} - -static AtkObject * -gtk_window_accessible_ref_child (AtkObject *object, - int i) -{ - GtkWidget *window, *child; - int pos; - - window = gtk_accessible_get_widget (GTK_ACCESSIBLE (object)); - for (child = gtk_widget_get_first_child (GTK_WIDGET (window)), pos = 0; - child != NULL; - child = gtk_widget_get_next_sibling (child), pos++) - { - if (pos == i) - return g_object_ref (gtk_widget_get_accessible (child)); - } - - return NULL; -} - -static void -gtk_window_accessible_initialize (AtkObject *object, - gpointer data) -{ - GtkWidget *window = data; - - g_signal_connect (window, "notify::title", G_CALLBACK (on_title_changed), object); -} - -static void -gtk_window_accessible_class_init (GtkWindowAccessibleClass *klass) -{ - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - class->initialize = gtk_window_accessible_initialize; - class->get_name = gtk_window_accessible_get_name; - class->get_index_in_parent = gtk_window_accessible_get_index_in_parent; - class->ref_relation_set = gtk_window_accessible_ref_relation_set; - class->ref_state_set = gtk_window_accessible_ref_state_set; - class->focus_event = gtk_window_accessible_focus_event; - class->get_n_children = gtk_window_accessible_get_n_children; - class->ref_child = gtk_window_accessible_ref_child; -} - -static void -gtk_window_accessible_init (GtkWindowAccessible *accessible) -{ -} - -static void -gtk_window_accessible_get_extents (AtkComponent *component, - int *x, - int *y, - int *width, - int *height, - AtkCoordType coord_type) -{ - GtkWidget *widget; - GdkSurface *surface; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component)); - if (widget == NULL) - return; - - surface = gtk_native_get_surface (GTK_NATIVE (widget)); - if (surface == NULL) - return; - - *x = 0; - *y = 0; - *width = gdk_surface_get_width (surface); - *height = gdk_surface_get_height (surface); - if (!gtk_widget_is_drawable (widget)) - { - *x = G_MININT; - *y = G_MININT; - return; - } -} - -static void -gtk_window_accessible_get_size (AtkComponent *component, - int *width, - int *height) -{ - GtkWidget *widget; - GdkSurface *surface; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component)); - if (widget == NULL) - return; - - surface = gtk_native_get_surface (GTK_NATIVE (widget)); - if (surface == NULL) - return; - - *width = gdk_surface_get_width (surface); - *height = gdk_surface_get_height (surface); -} - -void -_gtk_window_accessible_set_is_active (GtkWindow *window, - gboolean is_active) -{ - AtkObject *accessible = _gtk_widget_peek_accessible (GTK_WIDGET (window)); - - if (accessible == NULL) - return; - - g_signal_emit_by_name (accessible, is_active ? "activate" : "deactivate"); -} - - -static void -atk_component_interface_init (AtkComponentIface *iface) -{ - iface->get_extents = gtk_window_accessible_get_extents; - iface->get_size = gtk_window_accessible_get_size; -} - -static void -atk_window_interface_init (AtkWindowIface *iface) -{ - /* At this moment AtkWindow is just about signals */ -} diff --git a/gtk/a11y/gtkwindowaccessible.h b/gtk/a11y/gtkwindowaccessible.h deleted file mode 100644 index 39250190cb..0000000000 --- a/gtk/a11y/gtkwindowaccessible.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright 2001 Sun Microsystems Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_WINDOW_ACCESSIBLE_H__ -#define __GTK_WINDOW_ACCESSIBLE_H__ - -#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk-a11y.h> can be included directly." -#endif - -#include <gtk/a11y/gtkwidgetaccessible.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_WINDOW_ACCESSIBLE (gtk_window_accessible_get_type ()) -#define GTK_WINDOW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_WINDOW_ACCESSIBLE, GtkWindowAccessible)) -#define GTK_WINDOW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_WINDOW_ACCESSIBLE, GtkWindowAccessibleClass)) -#define GTK_IS_WINDOW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_WINDOW_ACCESSIBLE)) -#define GTK_IS_WINDOW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_WINDOW_ACCESSIBLE)) -#define GTK_WINDOW_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_WINDOW_ACCESSIBLE, GtkWindowAccessibleClass)) - -typedef struct _GtkWindowAccessible GtkWindowAccessible; -typedef struct _GtkWindowAccessibleClass GtkWindowAccessibleClass; -typedef struct _GtkWindowAccessiblePrivate GtkWindowAccessiblePrivate; - -struct _GtkWindowAccessible -{ - GtkWidgetAccessible parent; - - GtkWindowAccessiblePrivate *priv; -}; - -struct _GtkWindowAccessibleClass -{ - GtkWidgetAccessibleClass parent_class; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_window_accessible_get_type (void); - -G_END_DECLS - -#endif /* __GTK_WINDOW_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkwindowaccessibleprivate.h b/gtk/a11y/gtkwindowaccessibleprivate.h deleted file mode 100644 index ba2fbfb9e8..0000000000 --- a/gtk/a11y/gtkwindowaccessibleprivate.h +++ /dev/null @@ -1,30 +0,0 @@ -/* GTK+ - accessibility implementations - * Copyright (C) 2018 Benjamin Otte <otte@gnome.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_WINDOW_ACCESSIBLE_PRIVATE_H__ -#define __GTK_WINDOW_ACCESSIBLE_PRIVATE_H__ - -#include <gtk/a11y/gtkwindowaccessible.h> - -G_BEGIN_DECLS - -void _gtk_window_accessible_set_is_active (GtkWindow *window, - gboolean is_active); - -G_END_DECLS - -#endif /* __GTK_WINDOW_ACCESSIBLE_PRIVATE_H__ */ diff --git a/gtk/a11y/meson.build b/gtk/a11y/meson.build deleted file mode 100644 index 10d74907f9..0000000000 --- a/gtk/a11y/meson.build +++ /dev/null @@ -1,109 +0,0 @@ -a11y_sources = files([ - 'gtkaccessibility.c', - 'gtkaccessibilityutil.c', - 'gtkbooleancellaccessible.c', - 'gtkbuttonaccessible.c', - 'gtkcellaccessible.c', - 'gtkcellaccessibleparent.c', - 'gtkcolorswatchaccessible.c', - 'gtkcomboboxaccessible.c', - 'gtkcompositeaccessible.c', - 'gtkcontainercellaccessible.c', - 'gtkentryaccessible.c', - 'gtkexpanderaccessible.c', - 'gtkflowboxaccessible.c', - 'gtkflowboxchildaccessible.c', - 'gtkframeaccessible.c', - 'gtkiconviewaccessible.c', - 'gtkimageaccessible.c', - 'gtkimagecellaccessible.c', - 'gtklabelaccessible.c', - 'gtklevelbaraccessible.c', - 'gtklinkbuttonaccessible.c', - 'gtklistboxaccessible.c', - 'gtklistboxrowaccessible.c', - 'gtklockbuttonaccessible.c', - 'gtkmenubuttonaccessible.c', - 'gtknotebookaccessible.c', - 'gtknotebookpageaccessible.c', - 'gtkpanedaccessible.c', - 'gtkpasswordentryaccessible.c', - 'gtkpictureaccessible.c', - 'gtkpopoveraccessible.c', - 'gtkprogressbaraccessible.c', - 'gtkradiobuttonaccessible.c', - 'gtkrangeaccessible.c', - 'gtkrenderercellaccessible.c', - 'gtkscaleaccessible.c', - 'gtkscalebuttonaccessible.c', - 'gtkscrollbaraccessible.c', - 'gtkscrolledwindowaccessible.c', - 'gtksearchentryaccessible.c', - 'gtkspinbuttonaccessible.c', - 'gtkspinneraccessible.c', - 'gtkstackaccessible.c', - 'gtkstatusbaraccessible.c', - 'gtkswitchaccessible.c', - 'gtktextaccessible.c', - 'gtktextcellaccessible.c', - 'gtktextviewaccessible.c', - 'gtktogglebuttonaccessible.c', - 'gtktoplevelaccessible.c', - 'gtktreeviewaccessible.c', - 'gtkwidgetaccessible.c', - 'gtkwindowaccessible.c', -]) - -a11y_headers = files([ - 'gtk-a11y-autocleanups.h', - 'gtkbooleancellaccessible.h', - 'gtkbuttonaccessible.h', - 'gtkcellaccessible.h', - 'gtkcellaccessibleparent.h', - 'gtkcomboboxaccessible.h', - 'gtkcompositeaccessible.h', - 'gtkcontainercellaccessible.h', - 'gtkentryaccessible.h', - 'gtkexpanderaccessible.h', - 'gtkflowboxaccessible.h', - 'gtkflowboxchildaccessible.h', - 'gtkframeaccessible.h', - 'gtkiconviewaccessible.h', - 'gtkimageaccessible.h', - 'gtkimagecellaccessible.h', - 'gtklabelaccessible.h', - 'gtklevelbaraccessible.h', - 'gtklinkbuttonaccessible.h', - 'gtklistboxaccessible.h', - 'gtklistboxrowaccessible.h', - 'gtklockbuttonaccessible.h', - 'gtkmenubuttonaccessible.h', - 'gtknotebookaccessible.h', - 'gtknotebookpageaccessible.h', - 'gtkpanedaccessible.h', - 'gtkpasswordentryaccessible.h', - 'gtkpopoveraccessible.h', - 'gtkprogressbaraccessible.h', - 'gtkradiobuttonaccessible.h', - 'gtkrangeaccessible.h', - 'gtkrenderercellaccessible.h', - 'gtkscaleaccessible.h', - 'gtkscalebuttonaccessible.h', - 'gtkscrollbaraccessible.h', - 'gtkscrolledwindowaccessible.h', - 'gtksearchentryaccessible.h', - 'gtkspinbuttonaccessible.h', - 'gtkspinneraccessible.h', - 'gtkstackaccessible.h', - 'gtkstatusbaraccessible.h', - 'gtkswitchaccessible.h', - 'gtktextaccessible.h', - 'gtktextcellaccessible.h', - 'gtktextviewaccessible.h', - 'gtktogglebuttonaccessible.h', - 'gtktoplevelaccessible.h', - 'gtktreeviewaccessible.h', - 'gtkwidgetaccessible.h', - 'gtkwindowaccessible.h', -]) -install_headers(a11y_headers, subdir : 'gtk-4.0/gtk/a11y') diff --git a/gtk/gtk-a11y.h b/gtk/gtk-a11y.h deleted file mode 100644 index 3199b23156..0000000000 --- a/gtk/gtk-a11y.h +++ /dev/null @@ -1,85 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * 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, see <http://www.gnu.org/licenses/>. - */ - -/* - * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef __GTK_A11Y_H__ -#define __GTK_A11Y_H__ - -#define __GTK_A11Y_H_INSIDE__ - -#include <gtk/gtk.h> -#include <gtk/a11y/gtkbooleancellaccessible.h> -#include <gtk/a11y/gtkbuttonaccessible.h> -#include <gtk/a11y/gtkcellaccessible.h> -#include <gtk/a11y/gtkcellaccessibleparent.h> -#include <gtk/a11y/gtkcomboboxaccessible.h> -#include <gtk/a11y/gtkcompositeaccessible.h> -#include <gtk/a11y/gtkcontainercellaccessible.h> -#include <gtk/a11y/gtkentryaccessible.h> -#include <gtk/a11y/gtkexpanderaccessible.h> -#include <gtk/a11y/gtkflowboxaccessible.h> -#include <gtk/a11y/gtkflowboxchildaccessible.h> -#include <gtk/a11y/gtkframeaccessible.h> -#include <gtk/a11y/gtkiconviewaccessible.h> -#include <gtk/a11y/gtkimageaccessible.h> -#include <gtk/a11y/gtkimagecellaccessible.h> -#include <gtk/a11y/gtklabelaccessible.h> -#include <gtk/a11y/gtklevelbaraccessible.h> -#include <gtk/a11y/gtklinkbuttonaccessible.h> -#include <gtk/a11y/gtklistboxaccessible.h> -#include <gtk/a11y/gtklistboxrowaccessible.h> -#include <gtk/a11y/gtklockbuttonaccessible.h> -#include <gtk/a11y/gtkmenubuttonaccessible.h> -#include <gtk/a11y/gtknotebookaccessible.h> -#include <gtk/a11y/gtknotebookpageaccessible.h> -#include <gtk/a11y/gtkpanedaccessible.h> -#include <gtk/a11y/gtkpasswordentryaccessible.h> -#include <gtk/a11y/gtkpopoveraccessible.h> -#include <gtk/a11y/gtkprogressbaraccessible.h> -#include <gtk/a11y/gtkradiobuttonaccessible.h> -#include <gtk/a11y/gtkrangeaccessible.h> -#include <gtk/a11y/gtkrenderercellaccessible.h> -#include <gtk/a11y/gtkscaleaccessible.h> -#include <gtk/a11y/gtkscalebuttonaccessible.h> -#include <gtk/a11y/gtkscrolledwindowaccessible.h> -#include <gtk/a11y/gtkscrollbaraccessible.h> -#include <gtk/a11y/gtksearchentryaccessible.h> -#include <gtk/a11y/gtkspinbuttonaccessible.h> -#include <gtk/a11y/gtkspinneraccessible.h> -#include <gtk/a11y/gtkstackaccessible.h> -#include <gtk/a11y/gtkstatusbaraccessible.h> -#include <gtk/a11y/gtkswitchaccessible.h> -#include <gtk/a11y/gtktextaccessible.h> -#include <gtk/a11y/gtktextcellaccessible.h> -#include <gtk/a11y/gtktextviewaccessible.h> -#include <gtk/a11y/gtktogglebuttonaccessible.h> -#include <gtk/a11y/gtktoplevelaccessible.h> -#include <gtk/a11y/gtktreeviewaccessible.h> -#include <gtk/a11y/gtkwidgetaccessible.h> -#include <gtk/a11y/gtkwindowaccessible.h> - -#include <gtk/a11y/gtk-a11y-autocleanups.h> - -#undef __GTK_A11Y_H_INSIDE__ - -#endif /* __GTK_A11Y_H__ */ @@ -34,7 +34,6 @@ #include <gtk/gtkaboutdialog.h> #include <gtk/gtkaccelgroup.h> #include <gtk/gtkaccellabel.h> -#include <gtk/gtkaccessible.h> #include <gtk/gtkactionable.h> #include <gtk/gtkactionbar.h> #include <gtk/gtkadjustment.h> diff --git a/gtk/gtkaccellabel.c b/gtk/gtkaccellabel.c index 2a498a907c..fc313b0e15 100644 --- a/gtk/gtkaccellabel.c +++ b/gtk/gtkaccellabel.c @@ -128,8 +128,6 @@ gtk_accel_label_class_init (GtkAccelLabelClass *class) gobject_class->set_property = gtk_accel_label_set_property; gobject_class->get_property = gtk_accel_label_get_property; - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_ACCEL_LABEL); - props[PROP_LABEL] = g_param_spec_string ("label", P_("Label"), diff --git a/gtk/gtkaccessible.c b/gtk/gtkaccessible.c deleted file mode 100644 index ae0ba101c0..0000000000 --- a/gtk/gtkaccessible.c +++ /dev/null @@ -1,215 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright 2001 Sun Microsystems Inc. - * Copyright 2020 GNOME Foundation - * - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" -#include <string.h> - -#include "gtkwidget.h" -#include "gtkintl.h" -#include "gtkaccessible.h" - -/** - * SECTION:gtkaccessible - * @Short_description: Accessibility support for widgets - * @Title: GtkAccessible - * - * The #GtkAccessible class is the base class for accessible - * implementations for #GtkWidget subclasses. It is a thin - * wrapper around #AtkObject, which adds facilities for associating - * a widget with its accessible object. - * - * An accessible implementation for a third-party widget should - * derive from #GtkAccessible and implement the suitable interfaces - * from ATK, such as #AtkText or #AtkSelection. To establish - * the connection between the widget class and its corresponding - * accessible implementation, override the get_accessible vfunc - * in #GtkWidgetClass. - */ - -typedef struct -{ - GtkWidget *widget; -} GtkAccessiblePrivate; - -enum -{ - PROP_0, - PROP_WIDGET -}; - -G_DEFINE_TYPE_WITH_PRIVATE (GtkAccessible, gtk_accessible, ATK_TYPE_OBJECT) - -static void -gtk_accessible_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GtkAccessible *accessible = GTK_ACCESSIBLE (object); - - switch (prop_id) - { - case PROP_WIDGET: - gtk_accessible_set_widget (accessible, g_value_get_object (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gtk_accessible_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GtkAccessible *accessible = GTK_ACCESSIBLE (object); - GtkAccessiblePrivate *priv = gtk_accessible_get_instance_private (accessible); - - switch (prop_id) - { - case PROP_WIDGET: - g_value_set_object (value, priv->widget); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gtk_accessible_init (GtkAccessible *accessible) -{ -} - -static AtkStateSet * -gtk_accessible_ref_state_set (AtkObject *object) -{ - GtkAccessible *accessible = GTK_ACCESSIBLE (object); - GtkAccessiblePrivate *priv = gtk_accessible_get_instance_private (accessible); - AtkStateSet *state_set; - - state_set = ATK_OBJECT_CLASS (gtk_accessible_parent_class)->ref_state_set (object); - - if (priv->widget == NULL) - atk_state_set_add_state (state_set, ATK_STATE_DEFUNCT); - - return state_set; -} - -static void -gtk_accessible_real_widget_set (GtkAccessible *accessible) -{ - atk_object_notify_state_change (ATK_OBJECT (accessible), ATK_STATE_DEFUNCT, FALSE); -} - -static void -gtk_accessible_real_widget_unset (GtkAccessible *accessible) -{ - atk_object_notify_state_change (ATK_OBJECT (accessible), ATK_STATE_DEFUNCT, TRUE); -} - -static void -gtk_accessible_dispose (GObject *object) -{ - GtkAccessible *accessible = GTK_ACCESSIBLE (object); - - gtk_accessible_set_widget (accessible, NULL); - - G_OBJECT_CLASS (gtk_accessible_parent_class)->dispose (object); -} - -static void -gtk_accessible_class_init (GtkAccessibleClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - AtkObjectClass *atkobject_class = ATK_OBJECT_CLASS (klass); - - klass->widget_set = gtk_accessible_real_widget_set; - klass->widget_unset = gtk_accessible_real_widget_unset; - - atkobject_class->ref_state_set = gtk_accessible_ref_state_set; - gobject_class->get_property = gtk_accessible_get_property; - gobject_class->set_property = gtk_accessible_set_property; - gobject_class->dispose = gtk_accessible_dispose; - - g_object_class_install_property (gobject_class, - PROP_WIDGET, - g_param_spec_object ("widget", - P_("Widget"), - P_("The widget referenced by this accessible."), - GTK_TYPE_WIDGET, - G_PARAM_READWRITE)); -} - -/** - * gtk_accessible_set_widget: - * @accessible: a #GtkAccessible - * @widget: (allow-none): a #GtkWidget or %NULL to unset - * - * Sets the #GtkWidget corresponding to the #GtkAccessible. - * - * @accessible will not hold a reference to @widget. - * It is the caller’s responsibility to ensure that when @widget - * is destroyed, the widget is unset by calling this function - * again with @widget set to %NULL. - */ -void -gtk_accessible_set_widget (GtkAccessible *accessible, - GtkWidget *widget) -{ - GtkAccessiblePrivate *priv = gtk_accessible_get_instance_private (accessible); - GtkAccessibleClass *klass; - - g_return_if_fail (GTK_IS_ACCESSIBLE (accessible)); - - if (priv->widget == widget) - return; - - klass = GTK_ACCESSIBLE_GET_CLASS (accessible); - if (priv->widget) - klass->widget_unset (accessible); - - priv->widget = widget; - if (priv->widget) - klass->widget_set (accessible); - - g_object_notify (G_OBJECT (accessible), "widget"); -} - -/** - * gtk_accessible_get_widget: - * @accessible: a #GtkAccessible - * - * Gets the #GtkWidget corresponding to the #GtkAccessible. - * The returned widget does not have a reference added, so - * you do not need to unref it. - * - * Returns: (nullable) (transfer none): pointer to the #GtkWidget - * corresponding to the #GtkAccessible, or %NULL. - */ -GtkWidget* -gtk_accessible_get_widget (GtkAccessible *accessible) -{ - GtkAccessiblePrivate *priv = gtk_accessible_get_instance_private (accessible); - - g_return_val_if_fail (GTK_IS_ACCESSIBLE (accessible), NULL); - - return priv->widget; -} diff --git a/gtk/gtkaccessible.h b/gtk/gtkaccessible.h deleted file mode 100644 index 26125f0ca4..0000000000 --- a/gtk/gtkaccessible.h +++ /dev/null @@ -1,58 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright 2001 Sun Microsystems Inc. - * Copyright 2020 GNOME Foundation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __GTK_ACCESSIBLE_H__ -#define __GTK_ACCESSIBLE_H__ - -#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk.h> can be included directly." -#endif - -#include <atk/atk.h> -#include <gtk/gtkwidget.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_ACCESSIBLE (gtk_accessible_get_type ()) - -#if !ATK_CHECK_VERSION(2, 37, 0) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(AtkObject, g_object_unref) -#endif - -GDK_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE (GtkAccessible, gtk_accessible, GTK, ACCESSIBLE, AtkObject) - -struct _GtkAccessibleClass -{ - AtkObjectClass parent_class; - - void (* widget_set) (GtkAccessible *accessible); - void (* widget_unset) (GtkAccessible *accessible); - - gpointer _padding[8]; -}; - -GDK_AVAILABLE_IN_ALL -void gtk_accessible_set_widget (GtkAccessible *accessible, - GtkWidget *widget); -GDK_AVAILABLE_IN_ALL -GtkWidget *gtk_accessible_get_widget (GtkAccessible *accessible); - -G_END_DECLS - -#endif /* __GTK_ACCESSIBLE_H__ */ diff --git a/gtk/gtkactionbar.c b/gtk/gtkactionbar.c index ae4393966a..6846f41cd7 100644 --- a/gtk/gtkactionbar.c +++ b/gtk/gtkactionbar.c @@ -21,7 +21,6 @@ #include "gtkactionbar.h" #include "gtkintl.h" -#include "gtkaccessible.h" #include "gtkbuildable.h" #include "gtktypebuiltins.h" #include "gtkbox.h" @@ -159,7 +158,6 @@ gtk_action_bar_class_init (GtkActionBarClass *klass) g_object_class_install_properties (object_class, LAST_PROP, props); - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_PANEL); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_set_css_name (widget_class, I_("actionbar")); } diff --git a/gtk/gtkassistant.c b/gtk/gtkassistant.c index 558f5bda5f..27acfdf4f5 100644 --- a/gtk/gtkassistant.c +++ b/gtk/gtkassistant.c @@ -84,9 +84,6 @@ #include "gtkstylecontext.h" #include "gtktypebuiltins.h" -#include "a11y/gtkwindowaccessible.h" - - typedef struct _GtkAssistantPageClass GtkAssistantPageClass; struct _GtkAssistantPage @@ -206,8 +203,6 @@ static int gtk_assistant_add_page (GtkAssistant *assi GtkAssistantPage *page_info, int position); -GType _gtk_assistant_accessible_get_type (void); - enum { CHILD_PROP_0, @@ -487,8 +482,6 @@ gtk_assistant_class_init (GtkAssistantClass *class) widget_class->map = gtk_assistant_map; widget_class->unmap = gtk_assistant_unmap; - gtk_widget_class_set_accessible_type (widget_class, _gtk_assistant_accessible_get_type ()); - window_class->close_request = gtk_assistant_close_request; /** @@ -2092,89 +2085,6 @@ gtk_assistant_commit (GtkAssistant *assistant) update_buttons_state (assistant); } -/* accessible implementation */ - -/* dummy typedefs */ -typedef GtkWindowAccessible GtkAssistantAccessible; -typedef GtkWindowAccessibleClass GtkAssistantAccessibleClass; - -G_DEFINE_TYPE (GtkAssistantAccessible, _gtk_assistant_accessible, GTK_TYPE_WINDOW_ACCESSIBLE); - -static int -gtk_assistant_accessible_get_n_children (AtkObject *accessible) -{ - GtkWidget *widget; - GtkAssistant *assistant; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return 0; - - assistant = GTK_ASSISTANT (widget); - return g_list_length (assistant->pages) + 2; -} - -static AtkObject * -gtk_assistant_accessible_ref_child (AtkObject *accessible, - int index) -{ - GtkAssistant *assistant; - GtkWidget *widget, *child; - int n_pages; - AtkObject *obj; - const char *title; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return NULL; - - assistant = GTK_ASSISTANT (widget); - n_pages = g_list_length (assistant->pages); - - if (index < 0) - return NULL; - else if (index < n_pages) - { - GtkAssistantPage *page = g_list_nth_data (assistant->pages, index); - - child = page->page; - title = gtk_assistant_get_page_title (assistant, child); - } - else if (index == n_pages) - { - child = assistant->action_area; - title = NULL; - } - else if (index == n_pages + 1) - { - child = assistant->headerbar; - title = NULL; - } - else - return NULL; - - obj = gtk_widget_get_accessible (child); - - if (title) - atk_object_set_name (obj, title); - - return g_object_ref (obj); -} - -static void -_gtk_assistant_accessible_class_init (GtkAssistantAccessibleClass *klass) -{ - AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass); - - atk_class->get_n_children = gtk_assistant_accessible_get_n_children; - atk_class->ref_child = gtk_assistant_accessible_ref_child; -} - -static void -_gtk_assistant_accessible_init (GtkAssistantAccessible *self) -{ -} - /* buildable implementation */ static GtkBuildableIface *parent_buildable_iface; diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c index 11d430ffab..667f7f7ef5 100644 --- a/gtk/gtkbox.c +++ b/gtk/gtkbox.c @@ -278,7 +278,6 @@ gtk_box_class_init (GtkBoxClass *class) g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT); - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_FILLER); gtk_widget_class_set_css_name (widget_class, I_("box")); } static void diff --git a/gtk/gtkbutton.c b/gtk/gtkbutton.c index 7ed25e1699..f9fd20e0f5 100644 --- a/gtk/gtkbutton.c +++ b/gtk/gtkbutton.c @@ -71,8 +71,6 @@ #include "gtktypebuiltins.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkbuttonaccessible.h" - #include <string.h> /* Time out before giving up on getting a key release when animating @@ -292,7 +290,6 @@ gtk_button_class_init (GtkButtonClass *klass) widget_class->activate_signal = button_signals[ACTIVATE]; gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_BUTTON_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("button")); gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_space, 0, @@ -850,14 +847,6 @@ gtk_button_set_label (GtkButton *button, gtk_label_set_label (GTK_LABEL (priv->child), label); gtk_button_set_child_type (button, LABEL_CHILD); - { - GtkButtonAccessible *accessible = - GTK_BUTTON_ACCESSIBLE (_gtk_widget_peek_accessible (GTK_WIDGET (button))); - - if (accessible != NULL) - gtk_button_accessible_update_label (accessible); - } - g_object_notify_by_pspec (G_OBJECT (button), props[PROP_LABEL]); } diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c index 0decdf544d..55c1bceec5 100644 --- a/gtk/gtkcalendar.c +++ b/gtk/gtkcalendar.c @@ -517,7 +517,6 @@ gtk_calendar_class_init (GtkCalendarClass *class) NULL, G_TYPE_NONE, 0); - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_CALENDAR); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT); gtk_widget_class_set_css_name (widget_class, I_("calendar")); } diff --git a/gtk/gtkcellrenderer.c b/gtk/gtkcellrenderer.c index 3df11d2bdd..b0dcdc9caf 100644 --- a/gtk/gtkcellrenderer.c +++ b/gtk/gtkcellrenderer.c @@ -27,9 +27,6 @@ #include "gtktreeprivate.h" #include "gtktypebuiltins.h" -#include "a11y/gtkrenderercellaccessible.h" - - /** * SECTION:gtkcellrenderer * @Short_description: An object for rendering a single cell @@ -138,11 +135,6 @@ struct _GtkCellRendererPrivate GdkRGBA cell_background; }; -struct _GtkCellRendererClassPrivate -{ - GType accessible_type; -}; - enum { PROP_0, PROP_MODE, @@ -425,16 +417,6 @@ gtk_cell_renderer_class_init (GtkCellRendererClass *class) if (GtkCellRenderer_private_offset != 0) g_type_class_adjust_private_offset (class, &GtkCellRenderer_private_offset); - - gtk_cell_renderer_class_set_accessible_type (class, GTK_TYPE_RENDERER_CELL_ACCESSIBLE); -} - -static void -gtk_cell_renderer_base_class_init (gpointer g_class) -{ - GtkCellRendererClass *klass = g_class; - - klass->priv = G_TYPE_CLASS_GET_PRIVATE (g_class, GTK_TYPE_CELL_RENDERER, GtkCellRendererClassPrivate); } GType @@ -447,7 +429,7 @@ gtk_cell_renderer_get_type (void) const GTypeInfo cell_renderer_info = { sizeof (GtkCellRendererClass), - gtk_cell_renderer_base_class_init, + NULL, NULL, (GClassInitFunc) gtk_cell_renderer_class_init, NULL, /* class_finalize */ @@ -462,7 +444,6 @@ gtk_cell_renderer_get_type (void) GtkCellRenderer_private_offset = g_type_add_instance_private (cell_renderer_type, sizeof (GtkCellRendererPrivate)); - g_type_add_class_private (cell_renderer_type, sizeof (GtkCellRendererClassPrivate)); } return cell_renderer_type; @@ -1776,39 +1757,3 @@ gtk_cell_renderer_get_is_expanded (GtkCellRenderer *cell) return priv->is_expanded; } - -/** - * gtk_cell_renderer_class_set_accessible_type: - * @renderer_class: class to set the accessible type for - * @type: The object type that implements the accessible for @widget_class. - * The type must be a subtype of #GtkRendererCellAccessible - * - * Sets the type to be used for creating accessibles for cells rendered by - * cell renderers of @renderer_class. Note that multiple accessibles will - * be created. - * - * This function should only be called from class init functions of cell - * renderers. - **/ -void -gtk_cell_renderer_class_set_accessible_type (GtkCellRendererClass *renderer_class, - GType type) -{ - GtkCellRendererClassPrivate *priv; - - g_return_if_fail (GTK_IS_CELL_RENDERER_CLASS (renderer_class)); - g_return_if_fail (g_type_is_a (type, GTK_TYPE_RENDERER_CELL_ACCESSIBLE)); - - priv = renderer_class->priv; - - priv->accessible_type = type; -} - -GType -_gtk_cell_renderer_get_accessible_type (GtkCellRenderer *renderer) -{ - g_return_val_if_fail (GTK_IS_CELL_RENDERER (renderer), GTK_TYPE_RENDERER_CELL_ACCESSIBLE); - - return GTK_CELL_RENDERER_GET_CLASS (renderer)->priv->accessible_type; -} - diff --git a/gtk/gtkcellrenderer.h b/gtk/gtkcellrenderer.h index 4be9b35552..353ca5ac3c 100644 --- a/gtk/gtkcellrenderer.h +++ b/gtk/gtkcellrenderer.h @@ -173,9 +173,6 @@ struct _GtkCellRendererClass const char *path); /*< private >*/ - - GtkCellRendererClassPrivate *priv; - gpointer padding[8]; }; @@ -317,13 +314,6 @@ GtkStateFlags gtk_cell_renderer_get_state (GtkCellRenderer *cell, GtkWidget *widget, GtkCellRendererState cell_state); -GDK_AVAILABLE_IN_ALL -void gtk_cell_renderer_class_set_accessible_type - (GtkCellRendererClass *renderer_class, - GType type); -GType _gtk_cell_renderer_get_accessible_type - (GtkCellRenderer * renderer); - G_END_DECLS #endif /* __GTK_CELL_RENDERER_H__ */ diff --git a/gtk/gtkcellrendererpixbuf.c b/gtk/gtkcellrendererpixbuf.c index 81d1da83df..09763afed5 100644 --- a/gtk/gtkcellrendererpixbuf.c +++ b/gtk/gtkcellrendererpixbuf.c @@ -27,8 +27,6 @@ #include "gtkstylecontextprivate.h" #include "gtktypebuiltins.h" -#include "a11y/gtkimagecellaccessible.h" - #include <cairo-gobject.h> #include <stdlib.h> @@ -227,10 +225,6 @@ gtk_cell_renderer_pixbuf_class_init (GtkCellRendererPixbufClass *class) P_("The GIcon being displayed"), G_TYPE_ICON, GTK_PARAM_READWRITE)); - - - - gtk_cell_renderer_class_set_accessible_type (cell_class, GTK_TYPE_IMAGE_CELL_ACCESSIBLE); } static void diff --git a/gtk/gtkcellrenderertext.c b/gtk/gtkcellrenderertext.c index e11e5c5fe6..2168129d3d 100644 --- a/gtk/gtkcellrenderertext.c +++ b/gtk/gtkcellrenderertext.c @@ -31,8 +31,6 @@ #include "gtkstylecontextprivate.h" #include "gtktreeprivate.h" -#include "a11y/gtktextcellaccessible.h" - #include <stdlib.h> /** @@ -642,8 +640,6 @@ gtk_cell_renderer_text_class_init (GtkCellRendererTextClass *class) g_signal_set_va_marshaller (text_cell_renderer_signals [EDITED], G_OBJECT_CLASS_TYPE (object_class), _gtk_marshal_VOID__STRING_STRINGv); - - gtk_cell_renderer_class_set_accessible_type (cell_class, GTK_TYPE_TEXT_CELL_ACCESSIBLE); } static void diff --git a/gtk/gtkcellrenderertoggle.c b/gtk/gtkcellrenderertoggle.c index 50de7e4309..580a4e6080 100644 --- a/gtk/gtkcellrenderertoggle.c +++ b/gtk/gtkcellrenderertoggle.c @@ -29,8 +29,6 @@ #include "gtkwidgetprivate.h" #include "gtktreeprivate.h" -#include "a11y/gtkbooleancellaccessible.h" - #include <stdlib.h> /** @@ -216,8 +214,6 @@ gtk_cell_renderer_toggle_class_init (GtkCellRendererToggleClass *class) NULL, G_TYPE_NONE, 1, G_TYPE_STRING); - - gtk_cell_renderer_class_set_accessible_type (cell_class, GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE); } static void diff --git a/gtk/gtkcenterbox.c b/gtk/gtkcenterbox.c index 3751ea5db3..c8deccf45f 100644 --- a/gtk/gtkcenterbox.c +++ b/gtk/gtkcenterbox.c @@ -209,7 +209,6 @@ gtk_center_box_class_init (GtkCenterBoxClass *klass) GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_FILLER); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_CENTER_LAYOUT); gtk_widget_class_set_css_name (widget_class, I_("box")); } diff --git a/gtk/gtkcheckbutton.c b/gtk/gtkcheckbutton.c index 3799bc1b1e..2f89874a64 100644 --- a/gtk/gtkcheckbutton.c +++ b/gtk/gtkcheckbutton.c @@ -200,7 +200,6 @@ gtk_check_button_class_init (GtkCheckButtonClass *class) g_object_class_install_properties (object_class, NUM_PROPERTIES, props); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT); - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_CHECK_BOX); gtk_widget_class_set_css_name (widget_class, I_("checkbutton")); } diff --git a/gtk/gtkcolorchooserwidget.c b/gtk/gtkcolorchooserwidget.c index 7727e40157..114a3db522 100644 --- a/gtk/gtkcolorchooserwidget.c +++ b/gtk/gtkcolorchooserwidget.c @@ -32,8 +32,6 @@ #include "gtkboxlayout.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkcompositeaccessible.h" - #include <math.h> /** @@ -265,31 +263,6 @@ update_from_editor (GtkColorEditor *editor, /* UI construction {{{1 */ -static guint -scale_round (double value, double scale) -{ - value = floor (value * scale + 0.5); - value = MAX (value, 0); - value = MIN (value, scale); - return (guint)value; -} - -static char * -accessible_color_name (GdkRGBA *color) -{ - if (color->alpha < 1.0) - return g_strdup_printf (_("Red %d%%, Green %d%%, Blue %d%%, Alpha %d%%"), - scale_round (color->red, 100), - scale_round (color->green, 100), - scale_round (color->blue, 100), - scale_round (color->alpha, 100)); - else - return g_strdup_printf (_("Red %d%%, Green %d%%, Blue %d%%"), - scale_round (color->red, 100), - scale_round (color->green, 100), - scale_round (color->blue, 100)); -} - static void remove_palette (GtkColorChooserWidget *cc) { @@ -326,7 +299,6 @@ add_palette (GtkColorChooserWidget *cc, { GtkWidget *grid; GtkWidget *p; - AtkObject *atk_obj; int line, pos; int i; int left, right; @@ -355,22 +327,6 @@ add_palette (GtkColorChooserWidget *cc, for (i = 0; i < n_colors; i++) { p = gtk_color_swatch_new (); - atk_obj = gtk_widget_get_accessible (p); - if (names) - { - atk_object_set_name (atk_obj, - g_dpgettext2 (GETTEXT_PACKAGE, "Color name", names[i])); - } - else - { - char *text, *name; - - name = accessible_color_name (&colors[i]); - text = g_strdup_printf (_("Color: %s"), name); - atk_object_set_name (atk_obj, text); - g_free (text); - g_free (name); - } gtk_color_swatch_set_rgba (GTK_COLOR_SWATCH (p), &colors[i]); connect_swatch_signals (p, cc); @@ -543,8 +499,6 @@ gtk_color_chooser_widget_init (GtkColorChooserWidget *cc) GVariant *variant; GVariantIter iter; gboolean selected; - AtkObject *atk_obj; - char *text, *name; cc->use_alpha = TRUE; @@ -564,9 +518,6 @@ gtk_color_chooser_widget_init (GtkColorChooserWidget *cc) cc->button = button = gtk_color_swatch_new (); gtk_widget_set_name (button, "add-color-button"); - atk_obj = gtk_widget_get_accessible (button); - atk_object_set_name (atk_obj, _("Custom color")); - atk_object_set_description (atk_obj, _("Create a custom color")); connect_button_signals (button, cc); gtk_color_swatch_set_icon (GTK_COLOR_SWATCH (button), "list-add-symbolic"); gtk_color_swatch_set_selectable (GTK_COLOR_SWATCH (button), FALSE); @@ -589,12 +540,6 @@ gtk_color_chooser_widget_init (GtkColorChooserWidget *cc) gtk_color_swatch_set_rgba (GTK_COLOR_SWATCH (p), &rgba); gtk_color_swatch_set_can_drop (GTK_COLOR_SWATCH (p), TRUE); - atk_obj = gtk_widget_get_accessible (p); - name = accessible_color_name (&rgba); - text = g_strdup_printf (_("Custom color %d: %s"), i, name); - atk_object_set_name (atk_obj, text); - g_free (text); - g_free (name); connect_custom_signals (p, cc); gtk_box_append (GTK_BOX (box), p); @@ -753,8 +698,6 @@ gtk_color_chooser_widget_class_init (GtkColorChooserWidgetClass *class) */ gtk_widget_class_install_action (widget_class, "color.customize", "(dddd)", gtk_color_chooser_widget_activate_color_customize); - - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_COMPOSITE_ACCESSIBLE); } /* GtkColorChooser implementation {{{1 */ diff --git a/gtk/gtkcolorplane.c b/gtk/gtkcolorplane.c index 0aa56a2a8b..b75d2761a6 100644 --- a/gtk/gtkcolorplane.c +++ b/gtk/gtkcolorplane.c @@ -19,7 +19,6 @@ #include "gtkcolorplaneprivate.h" -#include "gtkaccessible.h" #include "gtkadjustment.h" #include "gtkcolorutils.h" #include "gtkgesturedrag.h" @@ -406,20 +405,12 @@ gtk_color_plane_init (GtkColorPlane *plane) { GtkEventController *controller; GtkGesture *gesture; - AtkObject *atk_obj; GtkShortcutTrigger *trigger; GtkShortcutAction *action; GtkShortcut *shortcut; gtk_widget_set_focusable (GTK_WIDGET (plane), TRUE); - atk_obj = gtk_widget_get_accessible (GTK_WIDGET (plane)); - if (GTK_IS_ACCESSIBLE (atk_obj)) - { - atk_object_set_name (atk_obj, _("Color Plane")); - atk_object_set_role (atk_obj, ATK_ROLE_COLOR_CHOOSER); - } - gesture = gtk_gesture_drag_new (); g_signal_connect (gesture, "drag-begin", G_CALLBACK (plane_drag_gesture_begin), plane); diff --git a/gtk/gtkcolorscale.c b/gtk/gtkcolorscale.c index ec5d2c5367..90da05b8ec 100644 --- a/gtk/gtkcolorscale.c +++ b/gtk/gtkcolorscale.c @@ -25,7 +25,6 @@ #include "gtkcolorutils.h" #include "gtkorientable.h" #include "gtkrangeprivate.h" -#include "gtkaccessible.h" #include "gtkprivate.h" #include "gtkintl.h" #include "gtksnapshot.h" @@ -224,19 +223,8 @@ scale_set_type (GtkColorScale *scale, GtkColorScaleType type) { GtkColorScalePrivate *priv = gtk_color_scale_get_instance_private (scale); - AtkObject *atk_obj; priv->type = type; - - atk_obj = gtk_widget_get_accessible (GTK_WIDGET (scale)); - if (GTK_IS_ACCESSIBLE (atk_obj)) - { - if (type == GTK_COLOR_SCALE_HUE) - atk_object_set_name (atk_obj, C_("Color channel", "Hue")); - else if (type == GTK_COLOR_SCALE_ALPHA) - atk_object_set_name (atk_obj, C_("Color channel", "Alpha")); - atk_object_set_role (atk_obj, ATK_ROLE_COLOR_CHOOSER); - } } static void diff --git a/gtk/gtkcolorswatch.c b/gtk/gtkcolorswatch.c index 63688eb448..cafe71a281 100644 --- a/gtk/gtkcolorswatch.c +++ b/gtk/gtkcolorswatch.c @@ -40,8 +40,6 @@ #include "gtkeventcontrollerkey.h" #include "gtknative.h" -#include "a11y/gtkcolorswatchaccessibleprivate.h" - /* * GtkColorSwatch has two CSS nodes, the main one named colorswatch * and a subnode named overlay. The main node gets the .light or .dark @@ -506,7 +504,6 @@ gtk_color_swatch_class_init (GtkColorSwatchClass *class) "menu.popup", NULL); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_COLOR_SWATCH_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("colorswatch")); } diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c index 6c66f0a521..015fe479d6 100644 --- a/gtk/gtkcombobox.c +++ b/gtk/gtkcombobox.c @@ -39,8 +39,6 @@ #include "gtktypebuiltins.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkcomboboxaccessible.h" - #include <gobject/gvaluecollector.h> #include <string.h> #include <stdarg.h> @@ -798,7 +796,6 @@ gtk_combo_box_class_init (GtkComboBoxClass *klass) gtk_widget_class_bind_template_callback (widget_class, gtk_combo_box_menu_show); gtk_widget_class_bind_template_callback (widget_class, gtk_combo_box_menu_hide); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_COMBO_BOX_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("combobox")); } @@ -2533,29 +2530,6 @@ gtk_combo_box_get_popup_fixed_width (GtkComboBox *combo_box) return priv->popup_fixed_width; } - -/** - * gtk_combo_box_get_popup_accessible: - * @combo_box: a #GtkComboBox - * - * Gets the accessible object corresponding to the combo box’s popup. - * - * This function is mostly intended for use by accessibility technologies; - * applications should have little use for it. - * - * Returns: (transfer none): the accessible object corresponding - * to the combo box’s popup. - */ -AtkObject* -gtk_combo_box_get_popup_accessible (GtkComboBox *combo_box) -{ - GtkComboBoxPrivate *priv = gtk_combo_box_get_instance_private (combo_box); - - g_return_val_if_fail (GTK_IS_COMBO_BOX (combo_box), NULL); - - return gtk_widget_get_accessible (priv->popup_widget); -} - /** * gtk_combo_box_get_row_separator_func: (skip) * @combo_box: a #GtkComboBox diff --git a/gtk/gtkcombobox.h b/gtk/gtkcombobox.h index c47a53ca2b..9631e2043e 100644 --- a/gtk/gtkcombobox.h +++ b/gtk/gtkcombobox.h @@ -135,8 +135,6 @@ void gtk_combo_box_popup_for_device (GtkComboBox *combo_box, GdkDevice *device); GDK_AVAILABLE_IN_ALL void gtk_combo_box_popdown (GtkComboBox *combo_box); -GDK_AVAILABLE_IN_ALL -AtkObject* gtk_combo_box_get_popup_accessible (GtkComboBox *combo_box); GDK_AVAILABLE_IN_ALL int gtk_combo_box_get_id_column (GtkComboBox *combo_box); diff --git a/gtk/gtkdialog.c b/gtk/gtkdialog.c index d06ff6d918..13245c5890 100644 --- a/gtk/gtkdialog.c +++ b/gtk/gtkdialog.c @@ -486,8 +486,6 @@ gtk_dialog_class_init (GtkDialogClass *class) window_class->close_request = gtk_dialog_close_request; - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_DIALOG); - class->close = gtk_dialog_close; /** diff --git a/gtk/gtkdrawingarea.c b/gtk/gtkdrawingarea.c index b501f3b07c..7306869910 100644 --- a/gtk/gtkdrawingarea.c +++ b/gtk/gtkdrawingarea.c @@ -329,8 +329,6 @@ gtk_drawing_area_class_init (GtkDrawingAreaClass *class) g_signal_set_va_marshaller (signals[RESIZE], G_TYPE_FROM_CLASS (class), _gtk_marshal_VOID__INT_INTv); - - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_DRAWING_AREA); } static void diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index d95c5f3b72..5c940fbb0a 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -70,8 +70,6 @@ #include "gtkdragicon.h" #include "gtkwidgetpaintable.h" -#include "a11y/gtkentryaccessible.h" - #include <cairo-gobject.h> #include <string.h> @@ -984,7 +982,6 @@ gtk_entry_class_init (GtkEntryClass *class) G_TYPE_NONE, 1, GTK_TYPE_ENTRY_ICON_POSITION); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_ENTRY_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("entry")); } diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c index fb8782f639..d048112b93 100644 --- a/gtk/gtkentrycompletion.c +++ b/gtk/gtkentrycompletion.c @@ -2062,36 +2062,6 @@ connect_completion_signals (GtkEntryCompletion *completion) } static void -set_accessible_relation (GtkWidget *window, - GtkWidget *entry) -{ - AtkObject *window_accessible; - AtkObject *entry_accessible; - - window_accessible = gtk_widget_get_accessible (window); - entry_accessible = gtk_widget_get_accessible (entry); - - atk_object_add_relationship (window_accessible, - ATK_RELATION_POPUP_FOR, - entry_accessible); -} - -static void -unset_accessible_relation (GtkWidget *window, - GtkWidget *entry) -{ - AtkObject *window_accessible; - AtkObject *entry_accessible; - - window_accessible = gtk_widget_get_accessible (window); - entry_accessible = gtk_widget_get_accessible (entry); - - atk_object_remove_relationship (window_accessible, - ATK_RELATION_POPUP_FOR, - entry_accessible); -} - -static void disconnect_completion_signals (GtkEntryCompletion *completion) { GtkText *text = gtk_entry_get_text_widget (GTK_ENTRY (completion->entry)); @@ -2135,8 +2105,6 @@ _gtk_entry_completion_disconnect (GtkEntryCompletion *completion) disconnect_completion_signals (completion); - unset_accessible_relation (completion->popup_window, - completion->entry); gtk_widget_unparent (completion->popup_window); completion->entry = NULL; @@ -2148,8 +2116,6 @@ _gtk_entry_completion_connect (GtkEntryCompletion *completion, { completion->entry = GTK_WIDGET (entry); - set_accessible_relation (completion->popup_window, - completion->entry); gtk_widget_set_parent (completion->popup_window, GTK_WIDGET (entry)); connect_completion_signals (completion); diff --git a/gtk/gtkexpander.c b/gtk/gtkexpander.c index a5864d5f47..7993e506d4 100644 --- a/gtk/gtkexpander.c +++ b/gtk/gtkexpander.c @@ -126,8 +126,6 @@ #include "gtkstylecontextprivate.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkexpanderaccessibleprivate.h" - #include <string.h> #define TIMEOUT_EXPAND 500 @@ -375,7 +373,6 @@ gtk_expander_class_init (GtkExpanderClass *klass) NULL, G_TYPE_NONE, 0); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_EXPANDER_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("expander-widget")); } @@ -880,14 +877,6 @@ gtk_expander_set_expanded (GtkExpander *expander, gtk_expander_resize_toplevel (expander); } - { - AtkObject *accessible = _gtk_widget_peek_accessible (GTK_WIDGET (expander)); - - if (accessible != NULL) - gtk_expander_accessible_update_state (GTK_EXPANDER_ACCESSIBLE (accessible), - expander->expanded); - } - g_object_notify (G_OBJECT (expander), "expanded"); } @@ -941,13 +930,6 @@ gtk_expander_set_label (GtkExpander *expander, gtk_expander_set_label_widget (expander, child); } - { - AtkObject *accessible = _gtk_widget_peek_accessible (GTK_WIDGET (expander)); - - if (accessible != NULL) - gtk_expander_accessible_update_label (GTK_EXPANDER_ACCESSIBLE (accessible)); - } - g_object_notify (G_OBJECT (expander), "label"); } diff --git a/gtk/gtkfilechooserdialog.c b/gtk/gtkfilechooserdialog.c index 54cb4cc015..9eebd2dae0 100644 --- a/gtk/gtkfilechooserdialog.c +++ b/gtk/gtkfilechooserdialog.c @@ -293,8 +293,6 @@ gtk_file_chooser_dialog_class_init (GtkFileChooserDialogClass *class) widget_class->unmap = gtk_file_chooser_dialog_unmap; widget_class->size_allocate = gtk_file_chooser_dialog_size_allocate; - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_FILE_CHOOSER); - _gtk_file_chooser_install_properties (gobject_class); /* Bind class to template diff --git a/gtk/gtkflowbox.c b/gtk/gtkflowbox.c index 169e18d4a7..ef4aaf809b 100644 --- a/gtk/gtkflowbox.c +++ b/gtk/gtkflowbox.c @@ -98,9 +98,6 @@ #include "gtkviewport.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkflowboxaccessibleprivate.h" -#include "a11y/gtkflowboxchildaccessible.h" - /* Forward declarations and utilities {{{1 */ static void gtk_flow_box_update_cursor (GtkFlowBox *box, @@ -537,7 +534,6 @@ gtk_flow_box_child_class_init (GtkFlowBoxChildClass *class) widget_class->activate_signal = child_signals[CHILD_ACTIVATE]; gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_LIST_ITEM); gtk_widget_class_set_css_name (widget_class, I_("flowboxchild")); } @@ -961,7 +957,6 @@ gtk_flow_box_update_cursor (GtkFlowBox *box, { BOX_PRIV (box)->cursor_child = child; gtk_widget_grab_focus (GTK_WIDGET (child)); - _gtk_flow_box_accessible_update_cursor (GTK_WIDGET (box), GTK_WIDGET (child)); } static void @@ -3379,7 +3374,6 @@ gtk_flow_box_move_cursor (GtkFlowBox *box, static void gtk_flow_box_selected_children_changed (GtkFlowBox *box) { - _gtk_flow_box_accessible_selection_changed (GTK_WIDGET (box)); } /* GObject implementation {{{2 */ @@ -3877,7 +3871,6 @@ gtk_flow_box_class_init (GtkFlowBoxClass *class) "unselect-all", NULL); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_FLOW_BOX_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("flowbox")); } diff --git a/gtk/gtkfontchooserdialog.c b/gtk/gtkfontchooserdialog.c index b31fd4059e..6181db6836 100644 --- a/gtk/gtkfontchooserdialog.c +++ b/gtk/gtkfontchooserdialog.c @@ -21,8 +21,6 @@ #include <glib/gprintf.h> #include <string.h> -#include <atk/atk.h> - #include "gtkfontchooserdialog.h" #include "gtkfontchooser.h" #include "gtkfontchooserwidget.h" @@ -30,7 +28,6 @@ #include "gtkfontchooserutils.h" #include "gtkbox.h" #include "gtkintl.h" -#include "gtkaccessible.h" #include "gtkbuildable.h" #include "gtkprivate.h" #include "gtkwidget.h" diff --git a/gtk/gtkfontchooserwidget.c b/gtk/gtkfontchooserwidget.c index e56b13ad42..fcdf19192b 100644 --- a/gtk/gtkfontchooserwidget.c +++ b/gtk/gtkfontchooserwidget.c @@ -21,8 +21,6 @@ #include <glib/gprintf.h> #include <string.h> -#include <atk/atk.h> - #include "gtkfontchooserwidget.h" #include "gtkfontchooserwidgetprivate.h" diff --git a/gtk/gtkframe.c b/gtk/gtkframe.c index efa8ddcec1..bd904a57fd 100644 --- a/gtk/gtkframe.c +++ b/gtk/gtkframe.c @@ -36,8 +36,6 @@ #include "gtkcssstylepropertyprivate.h" #include "gtklabel.h" -#include "a11y/gtkframeaccessible.h" - /** * SECTION:gtkframe * @Short_description: A widget with a decorative frame and optional label @@ -194,7 +192,6 @@ gtk_frame_class_init (GtkFrameClass *class) g_object_class_install_properties (gobject_class, LAST_PROP, frame_props); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_FRAME_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("frame")); } diff --git a/gtk/gtkglarea.c b/gtk/gtkglarea.c index ddb079c9e9..09b4d35fff 100644 --- a/gtk/gtkglarea.c +++ b/gtk/gtkglarea.c @@ -784,8 +784,6 @@ gtk_gl_area_class_init (GtkGLAreaClass *klass) widget_class->size_allocate = gtk_gl_area_size_allocate; widget_class->snapshot = gtk_gl_area_snapshot; - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_DRAWING_AREA); - /** * GtkGLArea:context: * diff --git a/gtk/gtkheaderbar.c b/gtk/gtkheaderbar.c index 9e6a91f3b4..d2ce3fb3a3 100644 --- a/gtk/gtkheaderbar.c +++ b/gtk/gtkheaderbar.c @@ -599,7 +599,6 @@ gtk_header_bar_class_init (GtkHeaderBarClass *class) g_object_class_install_properties (object_class, LAST_PROP, header_bar_props); - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_PANEL); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_set_css_name (widget_class, I_("headerbar")); } diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c index c80c43fe22..57e3404cc9 100644 --- a/gtk/gtkiconview.c +++ b/gtk/gtkiconview.c @@ -19,7 +19,6 @@ #include "gtkiconviewprivate.h" -#include "gtkaccessible.h" #include "gtkadjustmentprivate.h" #include "gtkcellareabox.h" #include "gtkcellareacontext.h" @@ -48,8 +47,6 @@ #include "gtkdragicon.h" #include "gtknative.h" -#include "a11y/gtkiconviewaccessibleprivate.h" - #include <string.h> /** @@ -256,9 +253,6 @@ static void gtk_icon_view_ensure_cell_area (GtkIco static GtkCellArea *gtk_icon_view_cell_layout_get_area (GtkCellLayout *layout); -static void gtk_icon_view_item_selected_changed (GtkIconView *icon_view, - GtkIconViewItem *item); - static void gtk_icon_view_add_editable (GtkCellArea *area, GtkCellRenderer *renderer, GtkCellEditable *editable, @@ -885,7 +879,6 @@ gtk_icon_view_class_init (GtkIconViewClass *klass) gtk_icon_view_add_move_binding (widget_class, GDK_KEY_KP_Left, 0, GTK_MOVEMENT_VISUAL_POSITIONS, -1); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_ICON_VIEW_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("iconview")); } @@ -1917,25 +1910,6 @@ gtk_icon_view_remove (GtkIconView *icon_view, } } -static void -gtk_icon_view_item_selected_changed (GtkIconView *icon_view, - GtkIconViewItem *item) -{ - AtkObject *obj; - AtkObject *item_obj; - - obj = gtk_widget_get_accessible (GTK_WIDGET (icon_view)); - if (obj != NULL) - { - item_obj = atk_object_ref_accessible_child (obj, item->index); - if (item_obj != NULL) - { - atk_object_notify_state_change (item_obj, ATK_STATE_SELECTED, item->selected); - g_object_unref (item_obj); - } - } -} - static void gtk_icon_view_add_editable (GtkCellArea *area, GtkCellRenderer *renderer, @@ -2472,7 +2446,6 @@ gtk_icon_view_unselect_all_internal (GtkIconView *icon_view) item->selected = FALSE; dirty = TRUE; gtk_icon_view_queue_draw_item (icon_view, item); - gtk_icon_view_item_selected_changed (icon_view, item); } } @@ -2551,7 +2524,6 @@ gtk_icon_view_real_toggle_cursor_item (GtkIconView *icon_view) icon_view->priv->cursor_item->selected = !icon_view->priv->cursor_item->selected; g_signal_emit (icon_view, icon_view_signals[SELECTION_CHANGED], 0); - gtk_icon_view_item_selected_changed (icon_view, icon_view->priv->cursor_item); gtk_icon_view_queue_draw_item (icon_view, icon_view->priv->cursor_item); break; } @@ -2686,14 +2658,8 @@ gtk_icon_view_adjustment_changed (GtkAdjustment *adjustment, if (gtk_widget_get_realized (widget)) { - GtkIconViewAccessible *accessible = - GTK_ICON_VIEW_ACCESSIBLE (_gtk_widget_peek_accessible (GTK_WIDGET (icon_view))); - if (icon_view->priv->doing_rubberband) gtk_icon_view_update_rubberband (icon_view); - - if (accessible != NULL) - gtk_icon_view_accessible_adjustment_changed (accessible); } gtk_widget_queue_draw (GTK_WIDGET (icon_view)); @@ -2982,14 +2948,9 @@ _gtk_icon_view_set_cursor_item (GtkIconView *icon_view, GtkIconViewItem *item, GtkCellRenderer *cursor_cell) { - AtkObject *obj; - AtkObject *item_obj; - AtkObject *cursor_item_obj; - - /* When hitting this path from keynav, the focus cell is - * already set, we dont need to notify the atk object - * but we still need to queue the draw here (in the case - * that the focus cell changes but not the cursor item). + /* When hitting this path from keynav, the focus cell is already set, + * but we still need to queue the draw here (in the case that the focus + * cell changes but not the cursor item). */ gtk_icon_view_queue_draw_item (icon_view, item); @@ -2997,17 +2958,9 @@ _gtk_icon_view_set_cursor_item (GtkIconView *icon_view, (cursor_cell == NULL || cursor_cell == gtk_cell_area_get_focus_cell (icon_view->priv->cell_area))) return; - obj = gtk_widget_get_accessible (GTK_WIDGET (icon_view)); if (icon_view->priv->cursor_item != NULL) - { - gtk_icon_view_queue_draw_item (icon_view, icon_view->priv->cursor_item); - if (obj != NULL) - { - cursor_item_obj = atk_object_ref_accessible_child (obj, icon_view->priv->cursor_item->index); - if (cursor_item_obj != NULL) - atk_object_notify_state_change (cursor_item_obj, ATK_STATE_FOCUSED, FALSE); - } - } + gtk_icon_view_queue_draw_item (icon_view, icon_view->priv->cursor_item); + icon_view->priv->cursor_item = item; if (cursor_cell) @@ -3018,18 +2971,6 @@ _gtk_icon_view_set_cursor_item (GtkIconView *icon_view, if (!gtk_cell_area_get_focus_cell (icon_view->priv->cell_area)) gtk_cell_area_focus (icon_view->priv->cell_area, GTK_DIR_TAB_FORWARD); } - - /* Notify that accessible focus object has changed */ - item_obj = atk_object_ref_accessible_child (obj, item->index); - - if (item_obj != NULL) - { - G_GNUC_BEGIN_IGNORE_DEPRECATIONS; - atk_focus_tracker_notify (item_obj); - G_GNUC_END_IGNORE_DEPRECATIONS; - atk_object_notify_state_change (item_obj, ATK_STATE_FOCUSED, TRUE); - g_object_unref (item_obj); - } } @@ -3122,7 +3063,6 @@ _gtk_icon_view_select_item (GtkIconView *icon_view, item->selected = TRUE; - gtk_icon_view_item_selected_changed (icon_view, item); g_signal_emit (icon_view, icon_view_signals[SELECTION_CHANGED], 0); gtk_icon_view_queue_draw_item (icon_view, item); @@ -3145,7 +3085,6 @@ _gtk_icon_view_unselect_item (GtkIconView *icon_view, item->selected = FALSE; - gtk_icon_view_item_selected_changed (icon_view, item); g_signal_emit (icon_view, icon_view_signals[SELECTION_CHANGED], 0); gtk_icon_view_queue_draw_item (icon_view, item); @@ -3582,7 +3521,6 @@ gtk_icon_view_select_all_between (GtkIconView *icon_view, { dirty = TRUE; item->selected = TRUE; - gtk_icon_view_item_selected_changed (icon_view, item); } gtk_icon_view_queue_draw_item (icon_view, item); } @@ -4713,14 +4651,6 @@ gtk_icon_view_set_model (GtkIconView *icon_view, gtk_icon_view_build_items (icon_view); } - { - GtkIconViewAccessible *accessible = - GTK_ICON_VIEW_ACCESSIBLE (_gtk_widget_peek_accessible (GTK_WIDGET (icon_view))); - - if (accessible != NULL) - gtk_icon_view_accessible_update_model (accessible, icon_view->priv->model); - } - g_object_notify (G_OBJECT (icon_view), "model"); if (dirty) diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c index 2534bb933d..e03cc45f06 100644 --- a/gtk/gtkimage.c +++ b/gtk/gtkimage.c @@ -36,8 +36,6 @@ #include "gtktypebuiltins.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkimageaccessible.h" - #include <math.h> #include <string.h> #include <cairo-gobject.h> @@ -262,7 +260,6 @@ gtk_image_class_init (GtkImageClass *class) g_object_class_install_properties (gobject_class, NUM_PROPERTIES, image_props); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_IMAGE_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("image")); } diff --git a/gtk/gtkinfobar.c b/gtk/gtkinfobar.c index aa4f6f0726..54e2120fa9 100644 --- a/gtk/gtkinfobar.c +++ b/gtk/gtkinfobar.c @@ -32,7 +32,6 @@ #include <stdlib.h> #include "gtkinfobar.h" -#include "gtkaccessible.h" #include "gtkbuildable.h" #include "gtkbuilderprivate.h" #include "gtkbox.h" @@ -1072,7 +1071,6 @@ gtk_info_bar_set_message_type (GtkInfoBar *info_bar, if (info_bar->message_type != message_type) { - AtkObject *atk_obj; const char *type_class[] = { GTK_STYLE_CLASS_INFO, GTK_STYLE_CLASS_WARNING, @@ -1088,43 +1086,6 @@ gtk_info_bar_set_message_type (GtkInfoBar *info_bar, gtk_widget_queue_draw (GTK_WIDGET (info_bar)); - atk_obj = gtk_widget_get_accessible (GTK_WIDGET (info_bar)); - if (GTK_IS_ACCESSIBLE (atk_obj)) - { - const char *name = NULL; - - atk_object_set_role (atk_obj, ATK_ROLE_INFO_BAR); - - switch (message_type) - { - case GTK_MESSAGE_INFO: - name = _("Information"); - break; - - case GTK_MESSAGE_QUESTION: - name = _("Question"); - break; - - case GTK_MESSAGE_WARNING: - name = _("Warning"); - break; - - case GTK_MESSAGE_ERROR: - name = _("Error"); - break; - - case GTK_MESSAGE_OTHER: - break; - - default: - g_warning ("Unknown GtkMessageType %u", message_type); - break; - } - - if (name) - atk_object_set_name (atk_obj, name); - } - if (type_class[info_bar->message_type]) gtk_widget_add_css_class (GTK_WIDGET (info_bar), type_class[info_bar->message_type]); diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index b1926f45c6..ae671f0885 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -58,8 +58,6 @@ #include "gtkdragicon.h" #include "gtkcsscolorvalueprivate.h" -#include "a11y/gtklabelaccessibleprivate.h" - #include <math.h> #include <string.h> @@ -1074,8 +1072,6 @@ gtk_label_class_init (GtkLabelClass *class) "activate-current-link", NULL); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_LABEL_ACCESSIBLE); - gtk_widget_class_set_css_name (widget_class, I_("label")); quark_mnemonics_visible_connected = g_quark_from_static_string ("gtk-label-mnemonics-visible-connected"); @@ -1690,12 +1686,9 @@ gtk_label_set_text_internal (GtkLabel *self, return; } - _gtk_label_accessible_text_deleted (self); g_free (self->text); self->text = str; - _gtk_label_accessible_text_inserted (self); - gtk_label_select_region_index (self, 0, 0); } @@ -2291,7 +2284,6 @@ gtk_label_set_markup_internal (GtkLabel *self, gtk_label_ensure_select_info (self); self->select_info->links = g_steal_pointer (&links); self->select_info->n_links = n_links; - _gtk_label_accessible_update_links (self); gtk_label_ensure_has_tooltip (self); gtk_widget_add_css_class (GTK_WIDGET (self), "link"); } @@ -3744,7 +3736,6 @@ gtk_label_grab_focus (GtkWidget *widget) { self->select_info->selection_anchor = link->start; self->select_info->selection_end = link->start; - _gtk_label_accessible_focus_link_changed (self); break; } } @@ -3778,7 +3769,6 @@ gtk_label_focus (GtkWidget *widget, { info->selection_anchor = focus_link->start; info->selection_end = focus_link->start; - _gtk_label_accessible_focus_link_changed (self); } } } @@ -3813,7 +3803,6 @@ gtk_label_focus (GtkWidget *widget, if (!range_is_in_ellipsis (self, link->start, link->end)) { gtk_label_select_region_index (self, link->start, link->start); - _gtk_label_accessible_focus_link_changed (self); return TRUE; } } @@ -3831,7 +3820,6 @@ gtk_label_focus (GtkWidget *widget, if (!range_is_in_ellipsis (self, link->start, link->end)) { gtk_label_select_region_index (self, link->start, link->start); - _gtk_label_accessible_focus_link_changed (self); return TRUE; } } @@ -3897,7 +3885,6 @@ gtk_label_focus (GtkWidget *widget, focus_link = &info->links[new_index]; info->selection_anchor = focus_link->start; info->selection_end = focus_link->start; - _gtk_label_accessible_focus_link_changed (self); gtk_widget_queue_draw (widget); return TRUE; @@ -4509,8 +4496,6 @@ gtk_label_set_selectable (GtkLabel *self, { g_object_freeze_notify (G_OBJECT (self)); g_object_notify_by_pspec (G_OBJECT (self), label_props[PROP_SELECTABLE]); - _gtk_label_accessible_selection_bound_changed (self); - _gtk_label_accessible_cursor_position_changed (self); g_object_thaw_notify (G_OBJECT (self)); gtk_widget_queue_draw (GTK_WIDGET (self)); } @@ -4538,8 +4523,6 @@ gtk_label_select_region_index (GtkLabel *self, int end_index) { g_return_if_fail (GTK_IS_LABEL (self)); - gboolean anchor_changed; - gboolean bound_changed; if (self->select_info && self->select_info->selectable) { @@ -4605,17 +4588,9 @@ gtk_label_select_region_index (GtkLabel *self, g_object_freeze_notify (G_OBJECT (self)); - anchor_changed = self->select_info->selection_anchor != anchor_index; - bound_changed = self->select_info->selection_end != end_index; - self->select_info->selection_anchor = anchor_index; self->select_info->selection_end = end_index; - if (anchor_changed) - _gtk_label_accessible_selection_bound_changed (self); - if (bound_changed) - _gtk_label_accessible_cursor_position_changed (self); - clipboard = gtk_widget_get_primary_clipboard (GTK_WIDGET (self)); if (anchor_index != end_index) @@ -5505,8 +5480,6 @@ gtk_label_clear_links (GtkLabel *self) self->select_info->n_links = 0; self->select_info->active_link = NULL; gtk_widget_remove_css_class (GTK_WIDGET (self), "link"); - - _gtk_label_accessible_update_links (self); } static gboolean diff --git a/gtk/gtklevelbar.c b/gtk/gtklevelbar.c index ace50c2202..b0e286fff3 100644 --- a/gtk/gtklevelbar.c +++ b/gtk/gtklevelbar.c @@ -133,8 +133,6 @@ #include "gtktypebuiltins.h" #include "gtkwidgetprivate.h" -#include "a11y/gtklevelbaraccessible.h" - #include <math.h> #include <stdlib.h> @@ -1007,7 +1005,6 @@ gtk_level_bar_class_init (GtkLevelBarClass *klass) g_object_class_install_properties (oclass, LAST_PROPERTY, properties); - gtk_widget_class_set_accessible_type (wclass, GTK_TYPE_LEVEL_BAR_ACCESSIBLE); gtk_widget_class_set_layout_manager_type (wclass, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_set_css_name (wclass, I_("levelbar")); } diff --git a/gtk/gtklinkbutton.c b/gtk/gtklinkbutton.c index 155f43450c..df25f264ae 100644 --- a/gtk/gtklinkbutton.c +++ b/gtk/gtklinkbutton.c @@ -68,8 +68,6 @@ #include "gtktooltip.h" #include "gtkwidgetprivate.h" -#include "a11y/gtklinkbuttonaccessible.h" - #include <string.h> typedef struct _GtkLinkButtonClass GtkLinkButtonClass; @@ -218,7 +216,6 @@ gtk_link_button_class_init (GtkLinkButtonClass *klass) _gtk_marshal_BOOLEAN__VOID, G_TYPE_BOOLEAN, 0); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_LINK_BUTTON_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("button")); /** diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c index 3d3a1a720a..fb06f24ed4 100644 --- a/gtk/gtklistbox.c +++ b/gtk/gtklistbox.c @@ -33,9 +33,6 @@ #include "gtktypebuiltins.h" #include "gtkwidgetprivate.h" -#include "a11y/gtklistboxaccessibleprivate.h" -#include "a11y/gtklistboxrowaccessible.h" - #include <float.h> #include <math.h> #include <string.h> @@ -678,8 +675,6 @@ gtk_list_box_class_init (GtkListBoxClass *klass) NULL); gtk_widget_class_set_css_name (widget_class, I_("list")); - - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_LIST_BOX_ACCESSIBLE); } static void @@ -902,7 +897,6 @@ gtk_list_box_unselect_all (GtkListBox *box) static void gtk_list_box_selected_rows_changed (GtkListBox *box) { - _gtk_list_box_accessible_selection_changed (box); } /** @@ -1524,7 +1518,6 @@ gtk_list_box_update_cursor (GtkListBox *box, gtk_widget_grab_focus (GTK_WIDGET (row)); } gtk_widget_queue_draw (GTK_WIDGET (row)); - _gtk_list_box_accessible_update_cursor (box, row); } static GtkListBox * @@ -3463,7 +3456,6 @@ gtk_list_box_row_class_init (GtkListBoxRowClass *klass) g_object_class_override_property (object_class, ROW_PROP_ACTION_TARGET, "action-target"); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("row")); } diff --git a/gtk/gtklockbutton.c b/gtk/gtklockbutton.c index bdca740d7b..c831306657 100644 --- a/gtk/gtklockbutton.c +++ b/gtk/gtklockbutton.c @@ -28,8 +28,6 @@ #include "gtkstack.h" #include "gtkstylecontext.h" -#include "a11y/gtklockbuttonaccessibleprivate.h" - /** * SECTION:gtklockbutton * @title: GtkLockButton @@ -198,12 +196,10 @@ gtk_lock_button_set_property (GObject *object, case PROP_TEXT_LOCK: gtk_label_set_text (GTK_LABEL (button->label_lock), g_value_get_string (value)); - _gtk_lock_button_accessible_name_changed (button); break; case PROP_TEXT_UNLOCK: gtk_label_set_text (GTK_LABEL (button->label_unlock), g_value_get_string (value)); - _gtk_lock_button_accessible_name_changed (button); break; case PROP_TOOLTIP_LOCK: @@ -326,7 +322,6 @@ gtk_lock_button_class_init (GtkLockButtonClass *klass) gtk_widget_class_bind_template_child (widget_class, GtkLockButton, label_unlock); gtk_widget_class_bind_template_child (widget_class, GtkLockButton, stack); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_LOCK_BUTTON_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("button")); } @@ -390,7 +385,6 @@ update_state (GtkLockButton *button) gtk_image_set_from_gicon (GTK_IMAGE (button->image), icon); gtk_stack_set_visible_child (GTK_STACK (button->stack), allowed ? button->label_lock : button->label_unlock); - _gtk_lock_button_accessible_name_changed (button); gtk_widget_set_tooltip_markup (GTK_WIDGET (button), tooltip); gtk_widget_set_sensitive (GTK_WIDGET (button), sensitive); gtk_widget_set_visible (GTK_WIDGET (button), visible); diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index e33e73cd83..6d2f3cf3b1 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -134,7 +134,6 @@ #include "gtkroot.h" #include "gtknative.h" -#include "a11y/gtkaccessibility.h" #include "inspector/window.h" #define GDK_ARRAY_ELEMENT_TYPE GtkWidget * @@ -644,7 +643,6 @@ static void default_display_notify_cb (GdkDisplayManager *dm) { debug_flags[0].display = gdk_display_get_default (); - _gtk_accessibility_init (); } static void diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c index 9a8b854437..22829e18cb 100644 --- a/gtk/gtkmenubutton.c +++ b/gtk/gtkmenubutton.c @@ -110,7 +110,6 @@ #include "config.h" -#include "gtkaccessible.h" #include "gtkactionable.h" #include "gtkimage.h" #include "gtkintl.h" @@ -128,8 +127,6 @@ #include "gtkbuttonprivate.h" #include "gtknative.h" -#include "a11y/gtkmenubuttonaccessible.h" - typedef struct _GtkMenuButtonClass GtkMenuButtonClass; typedef struct _GtkMenuButtonPrivate GtkMenuButtonPrivate; @@ -420,7 +417,6 @@ gtk_menu_button_class_init (GtkMenuButtonClass *klass) g_object_class_install_properties (gobject_class, LAST_PROP, menu_button_props); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_MENU_BUTTON_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("menubutton")); } diff --git a/gtk/gtkmessagedialog.c b/gtk/gtkmessagedialog.c index 0f4b49f20d..e9d5ab6668 100644 --- a/gtk/gtkmessagedialog.c +++ b/gtk/gtkmessagedialog.c @@ -27,7 +27,6 @@ #include "gtkmessagedialog.h" -#include "gtkaccessible.h" #include "gtkbox.h" #include "gtkbuildable.h" #include "gtkdialogprivate.h" @@ -150,8 +149,6 @@ gtk_message_dialog_class_init (GtkMessageDialogClass *class) widget_class = GTK_WIDGET_CLASS (class); gobject_class = G_OBJECT_CLASS (class); - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_ALERT); - gobject_class->constructed = gtk_message_dialog_constructed; gobject_class->set_property = gtk_message_dialog_set_property; gobject_class->get_property = gtk_message_dialog_get_property; @@ -287,48 +284,12 @@ setup_type (GtkMessageDialog *dialog, GtkMessageType type) { GtkMessageDialogPrivate *priv = gtk_message_dialog_get_instance_private (dialog); - const char *name = NULL; - AtkObject *atk_obj; if (priv->message_type == type) return; priv->message_type = type; - switch (type) - { - case GTK_MESSAGE_INFO: - name = _("Information"); - break; - - case GTK_MESSAGE_QUESTION: - name = _("Question"); - break; - - case GTK_MESSAGE_WARNING: - name = _("Warning"); - break; - - case GTK_MESSAGE_ERROR: - name = _("Error"); - break; - - case GTK_MESSAGE_OTHER: - break; - - default: - g_warning ("Unknown GtkMessageType %u", type); - break; - } - - atk_obj = gtk_widget_get_accessible (GTK_WIDGET (dialog)); - if (GTK_IS_ACCESSIBLE (atk_obj)) - { - atk_object_set_role (atk_obj, ATK_ROLE_ALERT); - if (name) - atk_object_set_name (atk_obj, name); - } - g_object_notify (G_OBJECT (dialog), "message-type"); } diff --git a/gtk/gtkmodelbutton.c b/gtk/gtkmodelbutton.c index c577accb6b..815493a994 100644 --- a/gtk/gtkmodelbutton.c +++ b/gtk/gtkmodelbutton.c @@ -421,15 +421,6 @@ gtk_model_button_update_state (GtkModelButton *self) indicator_state = get_start_indicator_state (self); if (self->iconic) gtk_widget_set_state_flags (GTK_WIDGET (self), indicator_state, TRUE); - - if (self->role == GTK_BUTTON_ROLE_CHECK || - self->role == GTK_BUTTON_ROLE_RADIO) - { - AtkObject *object = _gtk_widget_peek_accessible (GTK_WIDGET (self)); - if (object) - atk_object_notify_state_change (object, ATK_STATE_CHECKED, - (indicator_state & GTK_STATE_FLAG_CHECKED)); - } } static void @@ -456,21 +447,16 @@ gtk_model_button_direction_changed (GtkWidget *widget, static void update_node_name (GtkModelButton *self) { - AtkObject *accessible; - AtkRole a11y_role; const char *start_name; const char *end_name; - accessible = gtk_widget_get_accessible (GTK_WIDGET (self)); switch (self->role) { case GTK_BUTTON_ROLE_TITLE: - a11y_role = ATK_ROLE_PUSH_BUTTON; start_name = "arrow"; end_name = NULL; break; case GTK_BUTTON_ROLE_NORMAL: - a11y_role = ATK_ROLE_PUSH_BUTTON; start_name = NULL; if (self->menu_name || self->popover) end_name = "arrow"; @@ -479,13 +465,11 @@ update_node_name (GtkModelButton *self) break; case GTK_BUTTON_ROLE_CHECK: - a11y_role = ATK_ROLE_CHECK_BOX; start_name = "check"; end_name = NULL; break; case GTK_BUTTON_ROLE_RADIO: - a11y_role = ATK_ROLE_RADIO_BUTTON; start_name = "radio"; end_name = NULL; break; @@ -500,8 +484,6 @@ update_node_name (GtkModelButton *self) end_name = NULL; } - atk_object_set_role (accessible, a11y_role); - if (start_name && !self->start_indicator) { self->start_indicator = gtk_builtin_icon_new (start_name); @@ -1067,18 +1049,6 @@ gtk_model_button_focus (GtkWidget *widget, return FALSE; } -static AtkObject * -gtk_model_button_get_accessible (GtkWidget *widget) -{ - AtkObject *object; - - object = GTK_WIDGET_CLASS (gtk_model_button_parent_class)->get_accessible (widget); - - gtk_model_button_update_state (GTK_MODEL_BUTTON (widget)); - - return object; -} - static void gtk_model_button_class_init (GtkModelButtonClass *class) { @@ -1093,7 +1063,6 @@ gtk_model_button_class_init (GtkModelButtonClass *class) widget_class->state_flags_changed = gtk_model_button_state_flags_changed; widget_class->direction_changed = gtk_model_button_direction_changed; widget_class->focus = gtk_model_button_focus; - widget_class->get_accessible = gtk_model_button_get_accessible; class->clicked = gtk_model_button_clicked; @@ -1231,7 +1200,6 @@ gtk_model_button_class_init (GtkModelButtonClass *class) widget_class->activate_signal = signals[SIGNAL_CLICKED]; - gtk_widget_class_set_accessible_role (GTK_WIDGET_CLASS (class), ATK_ROLE_PUSH_BUTTON); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT); gtk_widget_class_set_css_name (GTK_WIDGET_CLASS (class), I_("modelbutton")); } diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c index fea2d3064d..ddcb9d64b9 100644 --- a/gtk/gtknotebook.c +++ b/gtk/gtknotebook.c @@ -55,8 +55,6 @@ #include "gtkwidgetpaintable.h" #include "gtknative.h" -#include "a11y/gtknotebookaccessibleprivate.h" - #include <stdio.h> #include <string.h> #include <math.h> @@ -1364,7 +1362,6 @@ gtk_notebook_class_init (GtkNotebookClass *class) add_tab_bindings (widget_class, GDK_CONTROL_MASK, GTK_DIR_TAB_FORWARD); add_tab_bindings (widget_class, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_NOTEBOOK_ACCESSIBLE); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT); gtk_widget_class_set_css_name (widget_class, I_("notebook")); } @@ -5292,7 +5289,6 @@ gtk_notebook_real_switch_page (GtkNotebook *notebook, { GList *list = gtk_notebook_find_child (notebook, GTK_WIDGET (child)); GtkNotebookPage *page = GTK_NOTEBOOK_PAGE_FROM_LIST (list); - AtkObject *accessible; gboolean child_has_focus; if (notebook->cur_page == page || !gtk_widget_get_visible (GTK_WIDGET (child))) @@ -5338,11 +5334,6 @@ gtk_notebook_real_switch_page (GtkNotebook *notebook, update_arrow_state (notebook); - accessible = _gtk_widget_peek_accessible (GTK_WIDGET (notebook)); - if (accessible != NULL) - gtk_notebook_accessible_update_page (GTK_NOTEBOOK_ACCESSIBLE (accessible), - gtk_notebook_get_current_page (notebook)); - gtk_widget_queue_resize (GTK_WIDGET (notebook)); gtk_widget_queue_resize (notebook->tabs_widget); g_object_notify_by_pspec (G_OBJECT (notebook), properties[PROP_PAGE]); diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c index a8873a6293..83b6e280b6 100644 --- a/gtk/gtkpaned.c +++ b/gtk/gtkpaned.c @@ -44,8 +44,6 @@ #include "gtkcssboxesprivate.h" #include "gtkbuildable.h" -#include "a11y/gtkpanedaccessible.h" - #include <math.h> /** @@ -775,7 +773,6 @@ gtk_paned_class_init (GtkPanedClass *class) add_move_binding (widget_class, GDK_KEY_End, 0, GTK_SCROLL_END); add_move_binding (widget_class, GDK_KEY_KP_End, 0, GTK_SCROLL_END); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_PANED_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("paned")); } diff --git a/gtk/gtkpango.c b/gtk/gtkpango.c index f8b0a54866..58c43c8cf2 100644 --- a/gtk/gtkpango.c +++ b/gtk/gtkpango.c @@ -28,1023 +28,6 @@ #include "gtkintl.h" #include "gtkbuilderprivate.h" -static AtkAttributeSet * -add_attribute (AtkAttributeSet *attributes, - AtkTextAttribute attr, - const char *value) -{ - AtkAttribute *at; - - at = g_new (AtkAttribute, 1); - at->name = g_strdup (atk_text_attribute_get_name (attr)); - at->value = g_strdup (value); - - return g_slist_prepend (attributes, at); -} - -/* - * _gtk_pango_get_default_attributes: - * @attributes: a #AtkAttributeSet to add the attributes to - * @layout: the #PangoLayout from which to get attributes - * - * Adds the default text attributes from @layout to @attributes, - * after translating them from Pango attributes to ATK attributes. - * - * This is a convenience function that can be used to implement - * support for the #AtkText interface in widgets using Pango - * layouts. - * - * Returns: the modified @attributes - */ -AtkAttributeSet* -_gtk_pango_get_default_attributes (AtkAttributeSet *attributes, - PangoLayout *layout) -{ - PangoContext *context; - int i; - PangoWrapMode mode; - - context = pango_layout_get_context (layout); - if (context) - { - PangoLanguage *language; - PangoFontDescription *font; - - language = pango_context_get_language (context); - if (language) - attributes = add_attribute (attributes, ATK_TEXT_ATTR_LANGUAGE, - pango_language_to_string (language)); - - font = pango_context_get_font_description (context); - if (font) - { - char buf[60]; - attributes = add_attribute (attributes, ATK_TEXT_ATTR_STYLE, - atk_text_attribute_get_value (ATK_TEXT_ATTR_STYLE, - pango_font_description_get_style (font))); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_VARIANT, - atk_text_attribute_get_value (ATK_TEXT_ATTR_VARIANT, - pango_font_description_get_variant (font))); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_STRETCH, - atk_text_attribute_get_value (ATK_TEXT_ATTR_STRETCH, - pango_font_description_get_stretch (font))); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_FAMILY_NAME, - pango_font_description_get_family (font)); - g_snprintf (buf, 60, "%d", pango_font_description_get_weight (font)); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_WEIGHT, buf); - g_snprintf (buf, 60, "%i", pango_font_description_get_size (font) / PANGO_SCALE); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_SIZE, buf); - } - } - if (pango_layout_get_justify (layout)) - { - i = 3; - } - else - { - PangoAlignment align; - - align = pango_layout_get_alignment (layout); - if (align == PANGO_ALIGN_LEFT) - i = 0; - else if (align == PANGO_ALIGN_CENTER) - i = 2; - else /* PANGO_ALIGN_RIGHT */ - i = 1; - } - attributes = add_attribute (attributes, ATK_TEXT_ATTR_JUSTIFICATION, - atk_text_attribute_get_value (ATK_TEXT_ATTR_JUSTIFICATION, i)); - mode = pango_layout_get_wrap (layout); - if (mode == PANGO_WRAP_WORD) - i = 2; - else /* PANGO_WRAP_CHAR */ - i = 1; - attributes = add_attribute (attributes, ATK_TEXT_ATTR_WRAP_MODE, - atk_text_attribute_get_value (ATK_TEXT_ATTR_WRAP_MODE, i)); - - attributes = add_attribute (attributes, ATK_TEXT_ATTR_STRIKETHROUGH, - atk_text_attribute_get_value (ATK_TEXT_ATTR_STRIKETHROUGH, 0)); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_UNDERLINE, - atk_text_attribute_get_value (ATK_TEXT_ATTR_UNDERLINE, 0)); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_RISE, "0"); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_SCALE, "1"); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_BG_FULL_HEIGHT, "0"); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_PIXELS_INSIDE_WRAP, "0"); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_PIXELS_BELOW_LINES, "0"); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_PIXELS_ABOVE_LINES, "0"); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_EDITABLE, - atk_text_attribute_get_value (ATK_TEXT_ATTR_EDITABLE, 0)); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_INVISIBLE, - atk_text_attribute_get_value (ATK_TEXT_ATTR_INVISIBLE, 0)); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_INDENT, "0"); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_RIGHT_MARGIN, "0"); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_LEFT_MARGIN, "0"); - - return attributes; -} - -/* - * _gtk_pango_get_run_attributes: - * @attributes: a #AtkAttributeSet to add attributes to - * @layout: the #PangoLayout to get the attributes from - * @offset: the offset at which the attributes are wanted - * @start_offset: return location for the starting offset - * of the current run - * @end_offset: return location for the ending offset of the - * current run - * - * Finds the “run” around index (i.e. the maximal range of characters - * where the set of applicable attributes remains constant) and - * returns the starting and ending offsets for it. - * - * The attributes for the run are added to @attributes, after - * translating them from Pango attributes to ATK attributes. - * - * This is a convenience function that can be used to implement - * support for the #AtkText interface in widgets using Pango - * layouts. - * - * Returns: the modified #AtkAttributeSet - */ -AtkAttributeSet * -_gtk_pango_get_run_attributes (AtkAttributeSet *attributes, - PangoLayout *layout, - int offset, - int *start_offset, - int *end_offset) -{ - PangoAttrIterator *iter; - PangoAttrList *attr; - PangoAttrString *pango_string; - PangoAttrInt *pango_int; - PangoAttrColor *pango_color; - PangoAttrLanguage *pango_lang; - PangoAttrFloat *pango_float; - int index, start_index, end_index; - gboolean is_next; - glong len; - const char *text; - char *value; - - text = pango_layout_get_text (layout); - len = g_utf8_strlen (text, -1); - - /* Grab the attributes of the PangoLayout, if any */ - attr = pango_layout_get_attributes (layout); - - if (attr == NULL) - { - *start_offset = 0; - *end_offset = len; - return attributes; - } - - iter = pango_attr_list_get_iterator (attr); - /* Get invariant range offsets */ - /* If offset out of range, set offset in range */ - if (offset > len) - offset = len; - else if (offset < 0) - offset = 0; - - index = g_utf8_offset_to_pointer (text, offset) - text; - pango_attr_iterator_range (iter, &start_index, &end_index); - is_next = TRUE; - while (is_next) - { - if (index >= start_index && index < end_index) - { - *start_offset = g_utf8_pointer_to_offset (text, text + start_index); - if (end_index == G_MAXINT) /* Last iterator */ - end_index = len; - - *end_offset = g_utf8_pointer_to_offset (text, text + end_index); - break; - } - is_next = pango_attr_iterator_next (iter); - pango_attr_iterator_range (iter, &start_index, &end_index); - } - - /* Get attributes */ - pango_string = (PangoAttrString*) pango_attr_iterator_get (iter, PANGO_ATTR_FAMILY); - if (pango_string != NULL) - { - value = g_strdup_printf ("%s", pango_string->value); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_FAMILY_NAME, value); - g_free (value); - } - pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_STYLE); - if (pango_int != NULL) - { - attributes = add_attribute (attributes, ATK_TEXT_ATTR_STYLE, - atk_text_attribute_get_value (ATK_TEXT_ATTR_STYLE, pango_int->value)); - } - pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_WEIGHT); - if (pango_int != NULL) - { - value = g_strdup_printf ("%i", pango_int->value); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_WEIGHT, value); - g_free (value); - } - pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_VARIANT); - if (pango_int != NULL) - { - attributes = add_attribute (attributes, ATK_TEXT_ATTR_VARIANT, - atk_text_attribute_get_value (ATK_TEXT_ATTR_VARIANT, pango_int->value)); - } - pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_STRETCH); - if (pango_int != NULL) - { - attributes = add_attribute (attributes, ATK_TEXT_ATTR_STRETCH, - atk_text_attribute_get_value (ATK_TEXT_ATTR_STRETCH, pango_int->value)); - } - pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_SIZE); - if (pango_int != NULL) - { - value = g_strdup_printf ("%i", pango_int->value / PANGO_SCALE); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_SIZE, value); - g_free (value); - } - pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_UNDERLINE); - if (pango_int != NULL) - { - attributes = add_attribute (attributes, ATK_TEXT_ATTR_UNDERLINE, - atk_text_attribute_get_value (ATK_TEXT_ATTR_UNDERLINE, pango_int->value)); - } - pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_STRIKETHROUGH); - if (pango_int != NULL) - { - attributes = add_attribute (attributes, ATK_TEXT_ATTR_STRIKETHROUGH, - atk_text_attribute_get_value (ATK_TEXT_ATTR_STRIKETHROUGH, pango_int->value)); - } - pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_RISE); - if (pango_int != NULL) - { - value = g_strdup_printf ("%i", pango_int->value); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_RISE, value); - g_free (value); - } - pango_lang = (PangoAttrLanguage*) pango_attr_iterator_get (iter, PANGO_ATTR_LANGUAGE); - if (pango_lang != NULL) - { - attributes = add_attribute (attributes, ATK_TEXT_ATTR_LANGUAGE, - pango_language_to_string (pango_lang->value)); - } - pango_float = (PangoAttrFloat*) pango_attr_iterator_get (iter, PANGO_ATTR_SCALE); - if (pango_float != NULL) - { - value = g_strdup_printf ("%g", pango_float->value); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_SCALE, value); - g_free (value); - } - pango_color = (PangoAttrColor*) pango_attr_iterator_get (iter, PANGO_ATTR_FOREGROUND); - if (pango_color != NULL) - { - value = g_strdup_printf ("%u,%u,%u", - pango_color->color.red, - pango_color->color.green, - pango_color->color.blue); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_FG_COLOR, value); - g_free (value); - } - pango_color = (PangoAttrColor*) pango_attr_iterator_get (iter, PANGO_ATTR_BACKGROUND); - if (pango_color != NULL) - { - value = g_strdup_printf ("%u,%u,%u", - pango_color->color.red, - pango_color->color.green, - pango_color->color.blue); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_BG_COLOR, value); - g_free (value); - } - pango_attr_iterator_destroy (iter); - - return attributes; -} - -/* - * _gtk_pango_move_chars: - * @layout: a #PangoLayout - * @offset: a character offset in @layout - * @count: the number of characters to move from @offset - * - * Returns the position that is @count characters from the - * given @offset. @count may be positive or negative. - * - * For the purpose of this function, characters are defined - * by what Pango considers cursor positions. - * - * Returns: the new position - */ -static int -_gtk_pango_move_chars (PangoLayout *layout, - int offset, - int count) -{ - const PangoLogAttr *attrs; - int n_attrs; - - attrs = pango_layout_get_log_attrs_readonly (layout, &n_attrs); - - while (count > 0 && offset < n_attrs - 1) - { - do - offset++; - while (offset < n_attrs - 1 && !attrs[offset].is_cursor_position); - - count--; - } - while (count < 0 && offset > 0) - { - do - offset--; - while (offset > 0 && !attrs[offset].is_cursor_position); - - count++; - } - - return offset; -} - -/* - * _gtk_pango_move_words: - * @layout: a #PangoLayout - * @offset: a character offset in @layout - * @count: the number of words to move from @offset - * - * Returns the position that is @count words from the - * given @offset. @count may be positive or negative. - * - * If @count is positive, the returned position will - * be a word end, otherwise it will be a word start. - * See the Pango documentation for details on how - * word starts and ends are defined. - * - * Returns: the new position - */ -static int -_gtk_pango_move_words (PangoLayout *layout, - int offset, - int count) -{ - const PangoLogAttr *attrs; - int n_attrs; - - attrs = pango_layout_get_log_attrs_readonly (layout, &n_attrs); - - while (count > 0 && offset < n_attrs - 1) - { - do - offset++; - while (offset < n_attrs - 1 && !attrs[offset].is_word_end); - - count--; - } - while (count < 0 && offset > 0) - { - do - offset--; - while (offset > 0 && !attrs[offset].is_word_start); - - count++; - } - - return offset; -} - -/* - * _gtk_pango_move_sentences: - * @layout: a #PangoLayout - * @offset: a character offset in @layout - * @count: the number of sentences to move from @offset - * - * Returns the position that is @count sentences from the - * given @offset. @count may be positive or negative. - * - * If @count is positive, the returned position will - * be a sentence end, otherwise it will be a sentence start. - * See the Pango documentation for details on how - * sentence starts and ends are defined. - * - * Returns: the new position - */ -static int -_gtk_pango_move_sentences (PangoLayout *layout, - int offset, - int count) -{ - const PangoLogAttr *attrs; - int n_attrs; - - attrs = pango_layout_get_log_attrs_readonly (layout, &n_attrs); - - while (count > 0 && offset < n_attrs - 1) - { - do - offset++; - while (offset < n_attrs - 1 && !attrs[offset].is_sentence_end); - - count--; - } - while (count < 0 && offset > 0) - { - do - offset--; - while (offset > 0 && !attrs[offset].is_sentence_start); - - count++; - } - - return offset; -} - -/* - * _gtk_pango_is_inside_word: - * @layout: a #PangoLayout - * @offset: a character offset in @layout - * - * Returns whether the given position is inside - * a word. - * - * Returns: %TRUE if @offset is inside a word - */ -static gboolean -_gtk_pango_is_inside_word (PangoLayout *layout, - int offset) -{ - const PangoLogAttr *attrs; - int n_attrs; - - attrs = pango_layout_get_log_attrs_readonly (layout, &n_attrs); - - while (offset >= 0 && - !(attrs[offset].is_word_start || attrs[offset].is_word_end)) - offset--; - - if (offset >= 0) - return attrs[offset].is_word_start; - - return FALSE; -} - -/* - * _gtk_pango_is_inside_sentence: - * @layout: a #PangoLayout - * @offset: a character offset in @layout - * - * Returns whether the given position is inside - * a sentence. - * - * Returns: %TRUE if @offset is inside a sentence - */ -static gboolean -_gtk_pango_is_inside_sentence (PangoLayout *layout, - int offset) -{ - const PangoLogAttr *attrs; - int n_attrs; - - attrs = pango_layout_get_log_attrs_readonly (layout, &n_attrs); - - while (offset >= 0 && - !(attrs[offset].is_sentence_start || attrs[offset].is_sentence_end)) - offset--; - - if (offset >= 0) - return attrs[offset].is_sentence_start; - - return FALSE; -} - -static void -pango_layout_get_line_before (PangoLayout *layout, - AtkTextBoundary boundary_type, - int offset, - int *start_offset, - int *end_offset) -{ - PangoLayoutIter *iter; - PangoLayoutLine *line, *prev_line = NULL, *prev_prev_line = NULL; - int index, start_index, end_index; - const char *text; - gboolean found = FALSE; - - text = pango_layout_get_text (layout); - index = g_utf8_offset_to_pointer (text, offset) - text; - iter = pango_layout_get_iter (layout); - do - { - line = pango_layout_iter_get_line (iter); - start_index = line->start_index; - end_index = start_index + line->length; - - if (index >= start_index && index <= end_index) - { - /* Found line for offset */ - if (prev_line) - { - switch (boundary_type) - { - case ATK_TEXT_BOUNDARY_LINE_START: - end_index = start_index; - start_index = prev_line->start_index; - break; - case ATK_TEXT_BOUNDARY_LINE_END: - if (prev_prev_line) - start_index = prev_prev_line->start_index + prev_prev_line->length; - else - start_index = 0; - end_index = prev_line->start_index + prev_line->length; - break; - case ATK_TEXT_BOUNDARY_CHAR: - case ATK_TEXT_BOUNDARY_WORD_START: - case ATK_TEXT_BOUNDARY_WORD_END: - case ATK_TEXT_BOUNDARY_SENTENCE_START: - case ATK_TEXT_BOUNDARY_SENTENCE_END: - default: - g_assert_not_reached(); - break; - } - } - else - start_index = end_index = 0; - - found = TRUE; - break; - } - - prev_prev_line = prev_line; - prev_line = line; - } - while (pango_layout_iter_next_line (iter)); - - if (!found) - { - start_index = prev_line->start_index + prev_line->length; - end_index = start_index; - } - pango_layout_iter_free (iter); - - *start_offset = g_utf8_pointer_to_offset (text, text + start_index); - *end_offset = g_utf8_pointer_to_offset (text, text + end_index); -} - -static void -pango_layout_get_line_at (PangoLayout *layout, - AtkTextBoundary boundary_type, - int offset, - int *start_offset, - int *end_offset) -{ - PangoLayoutIter *iter; - PangoLayoutLine *line, *prev_line = NULL; - int index, start_index, end_index; - const char *text; - gboolean found = FALSE; - - text = pango_layout_get_text (layout); - index = g_utf8_offset_to_pointer (text, offset) - text; - iter = pango_layout_get_iter (layout); - do - { - line = pango_layout_iter_get_line (iter); - start_index = line->start_index; - end_index = start_index + line->length; - - if (index >= start_index && index <= end_index) - { - /* Found line for offset */ - switch (boundary_type) - { - case ATK_TEXT_BOUNDARY_LINE_START: - if (pango_layout_iter_next_line (iter)) - end_index = pango_layout_iter_get_line (iter)->start_index; - break; - case ATK_TEXT_BOUNDARY_LINE_END: - if (prev_line) - start_index = prev_line->start_index + prev_line->length; - break; - case ATK_TEXT_BOUNDARY_CHAR: - case ATK_TEXT_BOUNDARY_WORD_START: - case ATK_TEXT_BOUNDARY_WORD_END: - case ATK_TEXT_BOUNDARY_SENTENCE_START: - case ATK_TEXT_BOUNDARY_SENTENCE_END: - default: - g_assert_not_reached(); - break; - } - - found = TRUE; - break; - } - - prev_line = line; - } - while (pango_layout_iter_next_line (iter)); - - if (!found) - { - start_index = prev_line->start_index + prev_line->length; - end_index = start_index; - } - pango_layout_iter_free (iter); - - *start_offset = g_utf8_pointer_to_offset (text, text + start_index); - *end_offset = g_utf8_pointer_to_offset (text, text + end_index); -} - -static void -pango_layout_get_line_after (PangoLayout *layout, - AtkTextBoundary boundary_type, - int offset, - int *start_offset, - int *end_offset) -{ - PangoLayoutIter *iter; - PangoLayoutLine *line, *prev_line = NULL; - int index, start_index, end_index; - const char *text; - gboolean found = FALSE; - - text = pango_layout_get_text (layout); - index = g_utf8_offset_to_pointer (text, offset) - text; - iter = pango_layout_get_iter (layout); - do - { - line = pango_layout_iter_get_line (iter); - start_index = line->start_index; - end_index = start_index + line->length; - - if (index >= start_index && index <= end_index) - { - /* Found line for offset */ - if (pango_layout_iter_next_line (iter)) - { - line = pango_layout_iter_get_line (iter); - switch (boundary_type) - { - case ATK_TEXT_BOUNDARY_LINE_START: - start_index = line->start_index; - if (pango_layout_iter_next_line (iter)) - end_index = pango_layout_iter_get_line (iter)->start_index; - else - end_index = start_index + line->length; - break; - case ATK_TEXT_BOUNDARY_LINE_END: - start_index = end_index; - end_index = line->start_index + line->length; - break; - case ATK_TEXT_BOUNDARY_CHAR: - case ATK_TEXT_BOUNDARY_WORD_START: - case ATK_TEXT_BOUNDARY_WORD_END: - case ATK_TEXT_BOUNDARY_SENTENCE_START: - case ATK_TEXT_BOUNDARY_SENTENCE_END: - default: - g_assert_not_reached(); - break; - } - } - else - start_index = end_index; - - found = TRUE; - break; - } - - prev_line = line; - } - while (pango_layout_iter_next_line (iter)); - - if (!found) - { - start_index = prev_line->start_index + prev_line->length; - end_index = start_index; - } - pango_layout_iter_free (iter); - - *start_offset = g_utf8_pointer_to_offset (text, text + start_index); - *end_offset = g_utf8_pointer_to_offset (text, text + end_index); -} - -/* - * _gtk_pango_get_text_before: - * @layout: a #PangoLayout - * @boundary_type: a #AtkTextBoundary - * @offset: a character offset in @layout - * @start_offset: return location for the start of the returned text - * @end_offset: return location for the end of the return text - * - * Gets a slice of the text from @layout before @offset. - * - * The @boundary_type determines the size of the returned slice of - * text. For the exact semantics of this function, see - * atk_text_get_text_before_offset(). - * - * Returns: a newly allocated string containing a slice of text - * from layout. Free with g_free(). - */ -char * -_gtk_pango_get_text_before (PangoLayout *layout, - AtkTextBoundary boundary_type, - int offset, - int *start_offset, - int *end_offset) -{ - const char *text; - int start, end; - const PangoLogAttr *attrs; - int n_attrs; - - text = pango_layout_get_text (layout); - - if (text[0] == 0) - { - *start_offset = 0; - *end_offset = 0; - return g_strdup (""); - } - - attrs = pango_layout_get_log_attrs_readonly (layout, &n_attrs); - - start = offset; - end = start; - - switch (boundary_type) - { - case ATK_TEXT_BOUNDARY_CHAR: - start = _gtk_pango_move_chars (layout, start, -1); - break; - - case ATK_TEXT_BOUNDARY_WORD_START: - if (!attrs[start].is_word_start) - start = _gtk_pango_move_words (layout, start, -1); - end = start; - start = _gtk_pango_move_words (layout, start, -1); - break; - - case ATK_TEXT_BOUNDARY_WORD_END: - if (_gtk_pango_is_inside_word (layout, start) && - !attrs[start].is_word_start) - start = _gtk_pango_move_words (layout, start, -1); - while (!attrs[start].is_word_end && start > 0) - start = _gtk_pango_move_chars (layout, start, -1); - end = start; - start = _gtk_pango_move_words (layout, start, -1); - while (!attrs[start].is_word_end && start > 0) - start = _gtk_pango_move_chars (layout, start, -1); - break; - - case ATK_TEXT_BOUNDARY_SENTENCE_START: - if (!attrs[start].is_sentence_start) - start = _gtk_pango_move_sentences (layout, start, -1); - end = start; - start = _gtk_pango_move_sentences (layout, start, -1); - break; - - case ATK_TEXT_BOUNDARY_SENTENCE_END: - if (_gtk_pango_is_inside_sentence (layout, start) && - !attrs[start].is_sentence_start) - start = _gtk_pango_move_sentences (layout, start, -1); - while (!attrs[start].is_sentence_end && start > 0) - start = _gtk_pango_move_chars (layout, start, -1); - end = start; - start = _gtk_pango_move_sentences (layout, start, -1); - while (!attrs[start].is_sentence_end && start > 0) - start = _gtk_pango_move_chars (layout, start, -1); - break; - - case ATK_TEXT_BOUNDARY_LINE_START: - case ATK_TEXT_BOUNDARY_LINE_END: - pango_layout_get_line_before (layout, boundary_type, offset, &start, &end); - break; - - default: - g_assert_not_reached (); - break; - } - - *start_offset = start; - *end_offset = end; - - g_assert (start <= end); - - return g_utf8_substring (text, start, end); -} - -/* - * _gtk_pango_get_text_after: - * @layout: a #PangoLayout - * @boundary_type: a #AtkTextBoundary - * @offset: a character offset in @layout - * @start_offset: return location for the start of the returned text - * @end_offset: return location for the end of the return text - * - * Gets a slice of the text from @layout after @offset. - * - * The @boundary_type determines the size of the returned slice of - * text. For the exact semantics of this function, see - * atk_text_get_text_after_offset(). - * - * Returns: a newly allocated string containing a slice of text - * from layout. Free with g_free(). - */ -char * -_gtk_pango_get_text_after (PangoLayout *layout, - AtkTextBoundary boundary_type, - int offset, - int *start_offset, - int *end_offset) -{ - const char *text; - int start, end; - const PangoLogAttr *attrs; - int n_attrs; - - text = pango_layout_get_text (layout); - - if (text[0] == 0) - { - *start_offset = 0; - *end_offset = 0; - return g_strdup (""); - } - - attrs = pango_layout_get_log_attrs_readonly (layout, &n_attrs); - - start = offset; - end = start; - - switch (boundary_type) - { - case ATK_TEXT_BOUNDARY_CHAR: - start = _gtk_pango_move_chars (layout, start, 1); - end = start; - end = _gtk_pango_move_chars (layout, end, 1); - break; - - case ATK_TEXT_BOUNDARY_WORD_START: - if (_gtk_pango_is_inside_word (layout, end)) - end = _gtk_pango_move_words (layout, end, 1); - while (!attrs[end].is_word_start && end < n_attrs - 1) - end = _gtk_pango_move_chars (layout, end, 1); - start = end; - if (end < n_attrs - 1) - { - end = _gtk_pango_move_words (layout, end, 1); - while (!attrs[end].is_word_start && end < n_attrs - 1) - end = _gtk_pango_move_chars (layout, end, 1); - } - break; - - case ATK_TEXT_BOUNDARY_WORD_END: - end = _gtk_pango_move_words (layout, end, 1); - start = end; - if (end < n_attrs - 1) - end = _gtk_pango_move_words (layout, end, 1); - break; - - case ATK_TEXT_BOUNDARY_SENTENCE_START: - if (_gtk_pango_is_inside_sentence (layout, end)) - end = _gtk_pango_move_sentences (layout, end, 1); - while (!attrs[end].is_sentence_start && end < n_attrs - 1) - end = _gtk_pango_move_chars (layout, end, 1); - start = end; - if (end < n_attrs - 1) - { - end = _gtk_pango_move_sentences (layout, end, 1); - while (!attrs[end].is_sentence_start && end < n_attrs - 1) - end = _gtk_pango_move_chars (layout, end, 1); - } - break; - - case ATK_TEXT_BOUNDARY_SENTENCE_END: - end = _gtk_pango_move_sentences (layout, end, 1); - start = end; - if (end < n_attrs - 1) - end = _gtk_pango_move_sentences (layout, end, 1); - break; - - case ATK_TEXT_BOUNDARY_LINE_START: - case ATK_TEXT_BOUNDARY_LINE_END: - pango_layout_get_line_after (layout, boundary_type, offset, &start, &end); - break; - - default: - g_assert_not_reached (); - break; - } - - *start_offset = start; - *end_offset = end; - - g_assert (start <= end); - - return g_utf8_substring (text, start, end); -} - -/* - * _gtk_pango_get_text_at: - * @layout: a #PangoLayout - * @boundary_type: a #AtkTextBoundary - * @offset: a character offset in @layout - * @start_offset: return location for the start of the returned text - * @end_offset: return location for the end of the return text - * - * Gets a slice of the text from @layout at @offset. - * - * The @boundary_type determines the size of the returned slice of - * text. For the exact semantics of this function, see - * atk_text_get_text_after_offset(). - * - * Returns: a newly allocated string containing a slice of text - * from layout. Free with g_free(). - */ -char * -_gtk_pango_get_text_at (PangoLayout *layout, - AtkTextBoundary boundary_type, - int offset, - int *start_offset, - int *end_offset) -{ - const char *text; - int start, end; - const PangoLogAttr *attrs; - int n_attrs; - - text = pango_layout_get_text (layout); - - if (text[0] == 0) - { - *start_offset = 0; - *end_offset = 0; - return g_strdup (""); - } - - attrs = pango_layout_get_log_attrs_readonly (layout, &n_attrs); - - start = offset; - end = start; - - switch (boundary_type) - { - case ATK_TEXT_BOUNDARY_CHAR: - end = _gtk_pango_move_chars (layout, end, 1); - break; - - case ATK_TEXT_BOUNDARY_WORD_START: - if (!attrs[start].is_word_start) - start = _gtk_pango_move_words (layout, start, -1); - if (_gtk_pango_is_inside_word (layout, end)) - end = _gtk_pango_move_words (layout, end, 1); - while (!attrs[end].is_word_start && end < n_attrs - 1) - end = _gtk_pango_move_chars (layout, end, 1); - break; - - case ATK_TEXT_BOUNDARY_WORD_END: - if (_gtk_pango_is_inside_word (layout, start) && - !attrs[start].is_word_start) - start = _gtk_pango_move_words (layout, start, -1); - while (!attrs[start].is_word_end && start > 0) - start = _gtk_pango_move_chars (layout, start, -1); - end = _gtk_pango_move_words (layout, end, 1); - break; - - case ATK_TEXT_BOUNDARY_SENTENCE_START: - if (!attrs[start].is_sentence_start) - start = _gtk_pango_move_sentences (layout, start, -1); - if (_gtk_pango_is_inside_sentence (layout, end)) - end = _gtk_pango_move_sentences (layout, end, 1); - while (!attrs[end].is_sentence_start && end < n_attrs - 1) - end = _gtk_pango_move_chars (layout, end, 1); - break; - - case ATK_TEXT_BOUNDARY_SENTENCE_END: - if (_gtk_pango_is_inside_sentence (layout, start) && - !attrs[start].is_sentence_start) - start = _gtk_pango_move_sentences (layout, start, -1); - while (!attrs[start].is_sentence_end && start > 0) - start = _gtk_pango_move_chars (layout, start, -1); - end = _gtk_pango_move_sentences (layout, end, 1); - break; - - case ATK_TEXT_BOUNDARY_LINE_START: - case ATK_TEXT_BOUNDARY_LINE_END: - pango_layout_get_line_at (layout, boundary_type, offset, &start, &end); - break; - - default: - g_assert_not_reached (); - break; - } - - *start_offset = start; - *end_offset = end; - - g_assert (start <= end); - - return g_utf8_substring (text, start, end); -} - static gboolean attr_list_merge_filter (PangoAttribute *attribute, gpointer list) diff --git a/gtk/gtkpango.h b/gtk/gtkpango.h index 1f60925a98..a7eae932c3 100644 --- a/gtk/gtkpango.h +++ b/gtk/gtkpango.h @@ -25,38 +25,11 @@ #ifndef __GTK_PANGO_H__ #define __GTK_PANGO_H__ - #include <pango/pangocairo.h> -#include <atk/atk.h> #include "gtkbuildable.h" G_BEGIN_DECLS -AtkAttributeSet *_gtk_pango_get_default_attributes (AtkAttributeSet *attributes, - PangoLayout *layout); - -AtkAttributeSet *_gtk_pango_get_run_attributes (AtkAttributeSet *attributes, - PangoLayout *layout, - int offset, - int *start_offset, - int *end_offset); - -char *_gtk_pango_get_text_before (PangoLayout *layout, - AtkTextBoundary boundary_type, - int offset, - int *start_offset, - int *end_offset); -char *_gtk_pango_get_text_at (PangoLayout *layout, - AtkTextBoundary boundary_type, - int offset, - int *start_offset, - int *end_offset); -char *_gtk_pango_get_text_after (PangoLayout *layout, - AtkTextBoundary boundary_type, - int offset, - int *start_offset, - int *end_offset); - PangoAttrList *_gtk_pango_attr_list_merge (PangoAttrList *into, PangoAttrList *from); diff --git a/gtk/gtkpasswordentry.c b/gtk/gtkpasswordentry.c index 30e0950490..93d560e49e 100644 --- a/gtk/gtkpasswordentry.c +++ b/gtk/gtkpasswordentry.c @@ -22,7 +22,6 @@ #include "gtkpasswordentryprivate.h" -#include "gtkaccessible.h" #include "gtktextprivate.h" #include "gtkeditable.h" #include "gtkgestureclick.h" @@ -35,8 +34,6 @@ #include "gtkstylecontext.h" #include "gtkeventcontrollerkey.h" -#include "a11y/gtkpasswordentryaccessibleprivate.h" - /** * SECTION:gtkpasswordentry * @Short_description: An entry for secrets @@ -130,11 +127,6 @@ gtk_password_entry_toggle_peek (GtkPasswordEntry *entry) visibility = gtk_text_get_visibility (GTK_TEXT (priv->entry)); gtk_text_set_visibility (GTK_TEXT (priv->entry), !visibility); - - /* Update the accessible object to reflect the change of visibility */ - GtkAccessible *accessible = GTK_ACCESSIBLE (_gtk_widget_peek_accessible (GTK_WIDGET (entry))); - if (accessible != NULL) - gtk_password_entry_accessible_update_visibility (GTK_PASSWORD_ENTRY_ACCESSIBLE (accessible)); } static void @@ -431,7 +423,6 @@ gtk_password_entry_class_init (GtkPasswordEntryClass *klass) g_object_class_install_properties (object_class, NUM_PROPERTIES, props); gtk_editable_install_properties (object_class, NUM_PROPERTIES); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_PASSWORD_ENTRY_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("entry")); } diff --git a/gtk/gtkpathbar.c b/gtk/gtkpathbar.c index e3e0b284b4..bf9ec5e67f 100644 --- a/gtk/gtkpathbar.c +++ b/gtk/gtkpathbar.c @@ -1037,7 +1037,6 @@ make_directory_button (GtkPathBar *path_bar, gboolean current_dir, gboolean file_is_hidden) { - AtkObject *atk_obj; GtkWidget *child = NULL; ButtonData *button_data; GdkContentProvider *content; @@ -1048,7 +1047,6 @@ make_directory_button (GtkPathBar *path_bar, button_data = g_new0 (ButtonData, 1); button_data->type = find_button_type (path_bar, file); button_data->button = gtk_toggle_button_new (); - atk_obj = gtk_widget_get_accessible (button_data->button); gtk_widget_set_focus_on_click (button_data->button, FALSE); switch (button_data->type) @@ -1057,7 +1055,6 @@ make_directory_button (GtkPathBar *path_bar, button_data->image = gtk_image_new (); child = button_data->image; button_data->label = NULL; - atk_object_set_name (atk_obj, _("File System Root")); break; case HOME_BUTTON: case DESKTOP_BUTTON: diff --git a/gtk/gtkpicture.c b/gtk/gtkpicture.c index a60f7c626d..4ac9675175 100644 --- a/gtk/gtkpicture.c +++ b/gtk/gtkpicture.c @@ -30,8 +30,6 @@ #include "gtksnapshot.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkpictureaccessibleprivate.h" - /** * SECTION:gtkpicture * @Short_description: A widget displaying a #GdkPaintable @@ -366,7 +364,6 @@ gtk_picture_class_init (GtkPictureClass *class) g_object_class_install_properties (gobject_class, NUM_PROPERTIES, properties); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_PICTURE_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("picture")); } diff --git a/gtk/gtkprogressbar.c b/gtk/gtkprogressbar.c index 3a1fecf23c..5be9cf1430 100644 --- a/gtk/gtkprogressbar.c +++ b/gtk/gtkprogressbar.c @@ -39,8 +39,6 @@ #include "gtkstylecontextprivate.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkprogressbaraccessibleprivate.h" - #include <string.h> /** @@ -250,7 +248,6 @@ gtk_progress_bar_class_init (GtkProgressBarClass *class) g_object_class_install_properties (gobject_class, NUM_PROPERTIES, progress_props); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_PROGRESS_BAR_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("progressbar")); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT); } @@ -732,14 +729,6 @@ gtk_progress_bar_set_fraction (GtkProgressBar *pbar, gtk_widget_queue_allocate (pbar->trough_widget); update_fraction_classes (pbar); - { - AtkObject *accessible = - _gtk_widget_peek_accessible (GTK_WIDGET (pbar)); - - if (accessible != NULL) - gtk_progress_bar_accessible_update_value (GTK_PROGRESS_BAR_ACCESSIBLE (accessible)); - } - g_object_notify_by_pspec (G_OBJECT (pbar), progress_props[PROP_FRACTION]); } diff --git a/gtk/gtkradiobutton.c b/gtk/gtkradiobutton.c index 5a7e4a825b..79abccdb66 100644 --- a/gtk/gtkradiobutton.c +++ b/gtk/gtkradiobutton.c @@ -32,7 +32,6 @@ #include "gtkmarshalers.h" #include "gtkprivate.h" #include "gtkintl.h" -#include "a11y/gtkradiobuttonaccessible.h" #include "gtkstylecontextprivate.h" /** @@ -229,7 +228,6 @@ gtk_radio_button_class_init (GtkRadioButtonClass *class) NULL, G_TYPE_NONE, 0); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_RADIO_BUTTON_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("radiobutton")); } diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c index 454240cfff..dc2a90b2bf 100644 --- a/gtk/gtkrange.c +++ b/gtk/gtkrange.c @@ -43,8 +43,6 @@ #include "gtktypebuiltins.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkrangeaccessible.h" - #include <stdio.h> #include <math.h> @@ -429,7 +427,6 @@ gtk_range_class_init (GtkRangeClass *class) g_object_class_install_properties (gobject_class, LAST_PROP, properties); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_RANGE_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("range")); } @@ -663,14 +660,6 @@ gtk_range_set_adjustment (GtkRange *range, gtk_range_adjustment_changed (adjustment, range); gtk_range_adjustment_value_changed (adjustment, range); - { - GtkRangeAccessible *accessible = - GTK_RANGE_ACCESSIBLE (_gtk_widget_peek_accessible (GTK_WIDGET (range))); - - if (accessible != NULL) - gtk_range_accessible_update_adjustment (accessible); - } - g_object_notify_by_pspec (G_OBJECT (range), properties[PROP_ADJUSTMENT]); } } diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c index 3c8056e635..5acc0fc8dc 100644 --- a/gtk/gtkscale.c +++ b/gtk/gtkscale.c @@ -43,8 +43,6 @@ #include "gtktypebuiltins.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkscaleaccessible.h" - #include <math.h> #include <stdlib.h> @@ -817,7 +815,6 @@ gtk_scale_class_init (GtkScaleClass *class) add_slider_binding (binding_set, GDK_KEY_KP_End, 0, GTK_SCROLL_END); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SCALE_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("scale")); } diff --git a/gtk/gtkscalebutton.c b/gtk/gtkscalebutton.c index 11ddc585e2..ecdf50644a 100644 --- a/gtk/gtkscalebutton.c +++ b/gtk/gtkscalebutton.c @@ -56,8 +56,6 @@ #include "gtkwindowprivate.h" #include "gtknative.h" -#include "a11y/gtkscalebuttonaccessible.h" - #include <math.h> #include <stdlib.h> #include <string.h> @@ -343,7 +341,6 @@ gtk_scale_button_class_init (GtkScaleButtonClass *klass) gtk_widget_class_bind_template_callback (widget_class, cb_scale_value_changed); gtk_widget_class_bind_template_callback (widget_class, cb_popup_mapped); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SCALE_BUTTON_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("scalebutton")); } diff --git a/gtk/gtkscrollbar.c b/gtk/gtkscrollbar.c index 7e9bdaae80..da489dc4f1 100644 --- a/gtk/gtkscrollbar.c +++ b/gtk/gtkscrollbar.c @@ -35,8 +35,6 @@ #include "gtkwidgetprivate.h" #include "gtkboxlayout.h" -#include "a11y/gtkscrollbaraccessible.h" - /** * SECTION:gtkscrollbar @@ -205,7 +203,6 @@ gtk_scrollbar_class_init (GtkScrollbarClass *class) g_object_class_override_property (object_class, PROP_ORIENTATION, "orientation"); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SCROLLBAR_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("scrollbar")); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT); } diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index 91d6c2e91c..e9c62dbcf8 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -53,8 +53,6 @@ #include "gtkviewport.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkscrolledwindowaccessible.h" - #include <math.h> /** @@ -872,7 +870,6 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class) add_tab_bindings (widget_class, GDK_CONTROL_MASK, GTK_DIR_TAB_FORWARD); add_tab_bindings (widget_class, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SCROLLED_WINDOW_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("scrolledwindow")); } diff --git a/gtk/gtksearchentry.c b/gtk/gtksearchentry.c index 4be02d57a7..ab94d0718c 100644 --- a/gtk/gtksearchentry.c +++ b/gtk/gtksearchentry.c @@ -29,7 +29,6 @@ #include "gtksearchentryprivate.h" -#include "gtkaccessible.h" #include "gtkeditable.h" #include "gtkboxlayout.h" #include "gtkgestureclick.h" @@ -41,7 +40,6 @@ #include "gtkstylecontext.h" #include "gtkeventcontrollerkey.h" #include "gtkwidgetprivate.h" -#include "a11y/gtksearchentryaccessible.h" /** @@ -398,7 +396,6 @@ gtk_search_entry_class_init (GtkSearchEntryClass *klass) "stop-search", NULL); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SEARCH_ENTRY_ACCESSIBLE); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT); gtk_widget_class_set_css_name (widget_class, I_("entry")); } diff --git a/gtk/gtkseparator.c b/gtk/gtkseparator.c index 4c2f23adb0..6a515dbf89 100644 --- a/gtk/gtkseparator.c +++ b/gtk/gtkseparator.c @@ -136,7 +136,6 @@ gtk_separator_class_init (GtkSeparatorClass *class) g_object_class_override_property (object_class, PROP_ORIENTATION, "orientation"); - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_SEPARATOR); gtk_widget_class_set_css_name (widget_class, I_("separator")); } diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c index 7e7460490f..00dae1a003 100644 --- a/gtk/gtkspinbutton.c +++ b/gtk/gtkspinbutton.c @@ -55,8 +55,6 @@ #include "gtkboxlayout.h" #include "gtktextprivate.h" -#include "a11y/gtkspinbuttonaccessible.h" - #include <stdio.h> #include <stdlib.h> #include <math.h> @@ -549,7 +547,6 @@ gtk_spin_button_class_init (GtkSpinButtonClass *class) add_spin_binding (widget_class, GDK_KEY_Page_Up, GDK_CONTROL_MASK, GTK_SCROLL_END); add_spin_binding (widget_class, GDK_KEY_Page_Down, GDK_CONTROL_MASK, GTK_SCROLL_START); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SPIN_BUTTON_ACCESSIBLE); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT); gtk_widget_class_set_css_name (widget_class, I_("spinbutton")); } diff --git a/gtk/gtkspinner.c b/gtk/gtkspinner.c index cb83e568f0..dfa87c4bd2 100644 --- a/gtk/gtkspinner.c +++ b/gtk/gtkspinner.c @@ -37,7 +37,6 @@ #include "gtkstylecontext.h" #include "gtkstylecontextprivate.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkspinneraccessible.h" #include "gtkcssnumbervalueprivate.h" #include "gtkrendericonprivate.h" @@ -242,7 +241,6 @@ gtk_spinner_class_init (GtkSpinnerClass *klass) FALSE, GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SPINNER_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("spinner")); } diff --git a/gtk/gtkstack.c b/gtk/gtkstack.c index 98cdc4093a..51a39bfd1f 100644 --- a/gtk/gtkstack.c +++ b/gtk/gtkstack.c @@ -31,8 +31,6 @@ #include "gtkwidgetprivate.h" #include "gtksingleselection.h" #include "gtklistlistmodelprivate.h" -#include "a11y/gtkstackaccessible.h" -#include "a11y/gtkstackaccessibleprivate.h" #include <math.h> #include <string.h> @@ -750,8 +748,6 @@ gtk_stack_class_init (GtkStackClass *klass) g_object_class_install_properties (object_class, LAST_PROP, stack_props); - - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_STACK_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("stack")); } @@ -1172,10 +1168,6 @@ set_visible_child (GtkStack *stack, } } - gtk_stack_accessible_update_visible_child (stack, - priv->visible_child ? priv->visible_child->widget : NULL, - child_info ? child_info->widget : NULL); - priv->visible_child = child_info; if (child_info) diff --git a/gtk/gtkstackswitcher.c b/gtk/gtkstackswitcher.c index 67e0c37f6d..76985afdf6 100644 --- a/gtk/gtkstackswitcher.c +++ b/gtk/gtkstackswitcher.c @@ -33,8 +33,6 @@ #include "gtktypebuiltins.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkcompositeaccessible.h" - /** * SECTION:gtkstackswitcher * @Short_description: A controller for GtkStack @@ -502,7 +500,6 @@ gtk_stack_switcher_class_init (GtkStackSwitcherClass *class) gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT); gtk_widget_class_set_css_name (widget_class, I_("stackswitcher")); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_COMPOSITE_ACCESSIBLE); } /** diff --git a/gtk/gtkstatusbar.c b/gtk/gtkstatusbar.c index b836c80942..3a656b9c87 100644 --- a/gtk/gtkstatusbar.c +++ b/gtk/gtkstatusbar.c @@ -36,7 +36,6 @@ #include "gtkorientable.h" #include "gtktypebuiltins.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkstatusbaraccessible.h" /** * SECTION:gtkstatusbar @@ -203,7 +202,6 @@ gtk_statusbar_class_init (GtkStatusbarClass *class) gtk_widget_class_bind_template_child_internal (widget_class, GtkStatusbar, message_area); gtk_widget_class_bind_template_child (widget_class, GtkStatusbar, label); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_STATUSBAR_ACCESSIBLE); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_set_css_name (widget_class, I_("statusbar")); } diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c index f32e0d7c6e..36fa633f5a 100644 --- a/gtk/gtkstylecontext.c +++ b/gtk/gtkstylecontext.c @@ -1321,58 +1321,6 @@ gtk_snapshot_render_insertion_cursor (GtkSnapshot *snapshot, } } -static AtkAttributeSet * -add_attribute (AtkAttributeSet *attributes, - AtkTextAttribute attr, - const char *value) -{ - AtkAttribute *at; - - at = g_new (AtkAttribute, 1); - at->name = g_strdup (atk_text_attribute_get_name (attr)); - at->value = g_strdup (value); - - return g_slist_prepend (attributes, at); -} - -/* - * _gtk_style_context_get_attributes: - * @attributes: a #AtkAttributeSet to add attributes to - * @context: the #GtkStyleContext to get attributes from - * @flags: the state to use with @context - * - * Adds the foreground and background color from @context to - * @attributes, after translating them to ATK attributes. - * - * This is a convenience function that can be used in - * implementing the #AtkText interface in widgets. - * - * Returns: the modified #AtkAttributeSet - */ -AtkAttributeSet * -_gtk_style_context_get_attributes (AtkAttributeSet *attributes, - GtkStyleContext *context) -{ - const GdkRGBA *color; - char *value; - - color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BACKGROUND_COLOR)); - value = g_strdup_printf ("%u,%u,%u", - (guint) ceil (color->red * 65536 - color->red), - (guint) ceil (color->green * 65536 - color->green), - (guint) ceil (color->blue * 65536 - color->blue)); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_BG_COLOR, value); - - color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR)); - value = g_strdup_printf ("%u,%u,%u", - (guint) ceil (color->red * 65536 - color->red), - (guint) ceil (color->green * 65536 - color->green), - (guint) ceil (color->blue * 65536 - color->blue)); - attributes = add_attribute (attributes, ATK_TEXT_ATTR_FG_COLOR, value); - - return attributes; -} - /** * GtkStyleContextPrintFlags: * @GTK_STYLE_CONTEXT_PRINT_NONE: Default value. diff --git a/gtk/gtkstylecontextprivate.h b/gtk/gtkstylecontextprivate.h index b902bb5b99..09fde7ce11 100644 --- a/gtk/gtkstylecontextprivate.h +++ b/gtk/gtkstylecontextprivate.h @@ -26,8 +26,6 @@ #include "gtkbitmaskprivate.h" #include "gtkcssvalueprivate.h" -#include <atk/atk.h> - G_BEGIN_DECLS GtkStyleContext *gtk_style_context_new_for_node (GtkCssNode *node); @@ -46,10 +44,6 @@ void _gtk_style_context_get_cursor_color (GtkStyleContext GdkRGBA *primary_color, GdkRGBA *secondary_color); -/* Accessibility support */ -AtkAttributeSet *_gtk_style_context_get_attributes (AtkAttributeSet *attributes, - GtkStyleContext *context); - G_END_DECLS #endif /* __GTK_STYLE_CONTEXT_PRIVATE_H__ */ diff --git a/gtk/gtkswitch.c b/gtk/gtkswitch.c index 040519506e..64e9cc379b 100644 --- a/gtk/gtkswitch.c +++ b/gtk/gtkswitch.c @@ -69,8 +69,6 @@ #include "gtkstylecontextprivate.h" #include "gtkwidgetprivate.h" -#include "a11y/gtkswitchaccessible.h" - typedef struct _GtkSwitchClass GtkSwitchClass; /** @@ -607,9 +605,6 @@ gtk_switch_class_init (GtkSwitchClass *klass) g_object_class_override_property (gobject_class, PROP_ACTION_NAME, "action-name"); g_object_class_override_property (gobject_class, PROP_ACTION_TARGET, "action-target"); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SWITCH_ACCESSIBLE); - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_TOGGLE_BUTTON); - gtk_widget_class_set_css_name (widget_class, I_("switch")); } @@ -692,7 +687,6 @@ gtk_switch_set_active (GtkSwitch *self, if (self->is_active != is_active) { - AtkObject *accessible; gboolean handled; self->is_active = is_active; @@ -706,9 +700,6 @@ gtk_switch_set_active (GtkSwitch *self, g_object_notify_by_pspec (G_OBJECT (self), switch_props[PROP_ACTIVE]); - accessible = gtk_widget_get_accessible (GTK_WIDGET (self)); - atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, self->is_active); - gtk_widget_queue_allocate (GTK_WIDGET (self)); } } diff --git a/gtk/gtktext.c b/gtk/gtktext.c index 1dfd553022..2d2985978f 100644 --- a/gtk/gtktext.c +++ b/gtk/gtktext.c @@ -66,8 +66,6 @@ #include "gtknative.h" #include "gtkactionmuxerprivate.h" -#include "a11y/gtktextaccessible.h" - #include <cairo-gobject.h> #include <string.h> @@ -1480,8 +1478,6 @@ gtk_text_class_init (GtkTextClass *class) GDK_KEY_z, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "text.redo", NULL); - - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_TEXT_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("text")); } diff --git a/gtk/gtktextbuffer.c b/gtk/gtktextbuffer.c index 7626d29671..3e7e12c0fa 100644 --- a/gtk/gtktextbuffer.c +++ b/gtk/gtktextbuffer.c @@ -4376,316 +4376,6 @@ _gtk_text_buffer_spew (GtkTextBuffer *buffer) _gtk_text_btree_spew (get_btree (buffer)); } -void -_gtk_text_buffer_get_text_before (GtkTextBuffer *buffer, - AtkTextBoundary boundary_type, - GtkTextIter *position, - GtkTextIter *start, - GtkTextIter *end) -{ - int line_number; - - *start = *position; - *end = *start; - - switch (boundary_type) - { - case ATK_TEXT_BOUNDARY_CHAR: - gtk_text_iter_backward_char (start); - break; - - case ATK_TEXT_BOUNDARY_WORD_START: - if (!gtk_text_iter_starts_word (start)) - gtk_text_iter_backward_word_start (start); - *end = *start; - gtk_text_iter_backward_word_start (start); - break; - - case ATK_TEXT_BOUNDARY_WORD_END: - if (gtk_text_iter_inside_word (start) && - !gtk_text_iter_starts_word (start)) - gtk_text_iter_backward_word_start (start); - while (!gtk_text_iter_ends_word (start)) - { - if (!gtk_text_iter_backward_char (start)) - break; - } - *end = *start; - gtk_text_iter_backward_word_start (start); - while (!gtk_text_iter_ends_word (start)) - { - if (!gtk_text_iter_backward_char (start)) - break; - } - break; - - case ATK_TEXT_BOUNDARY_SENTENCE_START: - if (!gtk_text_iter_starts_sentence (start)) - gtk_text_iter_backward_sentence_start (start); - *end = *start; - gtk_text_iter_backward_sentence_start (start); - break; - - case ATK_TEXT_BOUNDARY_SENTENCE_END: - if (gtk_text_iter_inside_sentence (start) && - !gtk_text_iter_starts_sentence (start)) - gtk_text_iter_backward_sentence_start (start); - while (!gtk_text_iter_ends_sentence (start)) - { - if (!gtk_text_iter_backward_char (start)) - break; - } - *end = *start; - gtk_text_iter_backward_sentence_start (start); - while (!gtk_text_iter_ends_sentence (start)) - { - if (!gtk_text_iter_backward_char (start)) - break; - } - break; - - case ATK_TEXT_BOUNDARY_LINE_START: - line_number = gtk_text_iter_get_line (start); - if (line_number == 0) - { - gtk_text_buffer_get_iter_at_offset (buffer, start, 0); - } - else - { - gtk_text_iter_backward_line (start); - gtk_text_iter_forward_line (start); - } - *end = *start; - gtk_text_iter_backward_line (start); - break; - - case ATK_TEXT_BOUNDARY_LINE_END: - line_number = gtk_text_iter_get_line (start); - if (line_number == 0) - { - gtk_text_buffer_get_iter_at_offset (buffer, start, 0); - *end = *start; - } - else - { - gtk_text_iter_backward_line (start); - *end = *start; - while (!gtk_text_iter_ends_line (start)) - { - if (!gtk_text_iter_backward_char (start)) - break; - } - gtk_text_iter_forward_to_line_end (end); - } - break; - - default: - g_assert_not_reached (); - break; - } -} - -void -_gtk_text_buffer_get_text_at (GtkTextBuffer *buffer, - AtkTextBoundary boundary_type, - GtkTextIter *position, - GtkTextIter *start, - GtkTextIter *end) -{ - int line_number; - - *start = *position; - *end = *start; - - switch (boundary_type) - { - case ATK_TEXT_BOUNDARY_CHAR: - gtk_text_iter_forward_char (end); - break; - - case ATK_TEXT_BOUNDARY_WORD_START: - if (!gtk_text_iter_starts_word (start)) - gtk_text_iter_backward_word_start (start); - if (gtk_text_iter_inside_word (end)) - gtk_text_iter_forward_word_end (end); - while (!gtk_text_iter_starts_word (end)) - { - if (!gtk_text_iter_forward_char (end)) - break; - } - break; - - case ATK_TEXT_BOUNDARY_WORD_END: - if (gtk_text_iter_inside_word (start) && - !gtk_text_iter_starts_word (start)) - gtk_text_iter_backward_word_start (start); - while (!gtk_text_iter_ends_word (start)) - { - if (!gtk_text_iter_backward_char (start)) - break; - } - gtk_text_iter_forward_word_end (end); - break; - - case ATK_TEXT_BOUNDARY_SENTENCE_START: - if (!gtk_text_iter_starts_sentence (start)) - gtk_text_iter_backward_sentence_start (start); - if (gtk_text_iter_inside_sentence (end)) - gtk_text_iter_forward_sentence_end (end); - while (!gtk_text_iter_starts_sentence (end)) - { - if (!gtk_text_iter_forward_char (end)) - break; - } - break; - - case ATK_TEXT_BOUNDARY_SENTENCE_END: - if (gtk_text_iter_inside_sentence (start) && - !gtk_text_iter_starts_sentence (start)) - gtk_text_iter_backward_sentence_start (start); - while (!gtk_text_iter_ends_sentence (start)) - { - if (!gtk_text_iter_backward_char (start)) - break; - } - gtk_text_iter_forward_sentence_end (end); - break; - - case ATK_TEXT_BOUNDARY_LINE_START: - line_number = gtk_text_iter_get_line (start); - if (line_number == 0) - { - gtk_text_buffer_get_iter_at_offset (buffer, start, 0); - } - else - { - gtk_text_iter_backward_line (start); - gtk_text_iter_forward_line (start); - } - gtk_text_iter_forward_line (end); - break; - - case ATK_TEXT_BOUNDARY_LINE_END: - line_number = gtk_text_iter_get_line (start); - if (line_number == 0) - { - gtk_text_buffer_get_iter_at_offset (buffer, start, 0); - } - else - { - gtk_text_iter_backward_line (start); - gtk_text_iter_forward_line (start); - } - while (!gtk_text_iter_ends_line (start)) - { - if (!gtk_text_iter_backward_char (start)) - break; - } - gtk_text_iter_forward_to_line_end (end); - break; - - default: - g_assert_not_reached (); - break; - } -} - -void -_gtk_text_buffer_get_text_after (GtkTextBuffer *buffer, - AtkTextBoundary boundary_type, - GtkTextIter *position, - GtkTextIter *start, - GtkTextIter *end) -{ - *start = *position; - *end = *start; - - switch (boundary_type) - { - case ATK_TEXT_BOUNDARY_CHAR: - gtk_text_iter_forward_char (start); - gtk_text_iter_forward_chars (end, 2); - break; - - case ATK_TEXT_BOUNDARY_WORD_START: - if (gtk_text_iter_inside_word (end)) - gtk_text_iter_forward_word_end (end); - while (!gtk_text_iter_starts_word (end)) - { - if (!gtk_text_iter_forward_char (end)) - break; - } - *start = *end; - if (!gtk_text_iter_is_end (end)) - { - gtk_text_iter_forward_word_end (end); - while (!gtk_text_iter_starts_word (end)) - { - if (!gtk_text_iter_forward_char (end)) - break; - } - } - break; - - case ATK_TEXT_BOUNDARY_WORD_END: - gtk_text_iter_forward_word_end (end); - *start = *end; - if (!gtk_text_iter_is_end (end)) - gtk_text_iter_forward_word_end (end); - break; - - case ATK_TEXT_BOUNDARY_SENTENCE_START: - if (gtk_text_iter_inside_sentence (end)) - gtk_text_iter_forward_sentence_end (end); - while (!gtk_text_iter_starts_sentence (end)) - { - if (!gtk_text_iter_forward_char (end)) - break; - } - *start = *end; - if (!gtk_text_iter_is_end (end)) - { - gtk_text_iter_forward_sentence_end (end); - while (!gtk_text_iter_starts_sentence (end)) - { - if (!gtk_text_iter_forward_char (end)) - break; - } - } - break; - - case ATK_TEXT_BOUNDARY_SENTENCE_END: - gtk_text_iter_forward_sentence_end (end); - *start = *end; - if (!gtk_text_iter_is_end (end)) - gtk_text_iter_forward_sentence_end (end); - break; - - case ATK_TEXT_BOUNDARY_LINE_START: - gtk_text_iter_forward_line (end); - *start = *end; - gtk_text_iter_forward_line (end); - break; - - case ATK_TEXT_BOUNDARY_LINE_END: - gtk_text_iter_forward_line (start); - *end = *start; - if (!gtk_text_iter_is_end (start)) - { - while (!gtk_text_iter_ends_line (start)) - { - if (!gtk_text_iter_backward_char (start)) - break; - } - gtk_text_iter_forward_to_line_end (end); - } - break; - default: - g_assert_not_reached (); - break; - } -} - static GtkTextTag * get_tag_for_attributes (PangoAttrIterator *iter) { diff --git a/gtk/gtktextbufferprivate.h b/gtk/gtktextbufferprivate.h index 8386950344..87b2741cfe 100644 --- a/gtk/gtktextbufferprivate.h +++ b/gtk/gtktextbufferprivate.h @@ -34,22 +34,6 @@ const PangoLogAttr* _gtk_text_buffer_get_line_log_attrs (GtkTextBuffer *buff void _gtk_text_buffer_notify_will_remove_tag (GtkTextBuffer *buffer, GtkTextTag *tag); -void _gtk_text_buffer_get_text_before (GtkTextBuffer *buffer, - AtkTextBoundary boundary_type, - GtkTextIter *position, - GtkTextIter *start, - GtkTextIter *end); -void _gtk_text_buffer_get_text_at (GtkTextBuffer *buffer, - AtkTextBoundary boundary_type, - GtkTextIter *position, - GtkTextIter *start, - GtkTextIter *end); -void _gtk_text_buffer_get_text_after (GtkTextBuffer *buffer, - AtkTextBoundary boundary_type, - GtkTextIter *position, - GtkTextIter *start, - GtkTextIter *end); - G_END_DECLS #endif diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index f9d1ae8a2a..707aac23f4 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -56,8 +56,6 @@ #include "gtknative.h" #include "gtkwidgetprivate.h" -#include "a11y/gtktextviewaccessibleprivate.h" - /** * SECTION:gtktextview * @Short_description: Widget that displays a GtkTextBuffer @@ -1802,7 +1800,6 @@ gtk_text_view_class_init (GtkTextViewClass *klass) "move-focus", "(i)", GTK_DIR_TAB_BACKWARD); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_TEXT_VIEW_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("textview")); quark_text_selection_data = g_quark_from_static_string ("gtk-text-view-text-selection-data"); @@ -2143,7 +2140,6 @@ gtk_text_view_set_buffer (GtkTextView *text_view, gtk_widget_action_set_enabled (GTK_WIDGET (text_view), "text.redo", can_redo); } - _gtk_text_view_accessible_set_buffer (text_view, old_buffer); if (old_buffer) g_object_unref (old_buffer); diff --git a/gtk/gtktogglebutton.c b/gtk/gtktogglebutton.c index 07b16454d6..1968272dcf 100644 --- a/gtk/gtktogglebutton.c +++ b/gtk/gtktogglebutton.c @@ -34,9 +34,6 @@ #include "gtkprivate.h" #include "gtkstylecontext.h" -#include "a11y/gtktogglebuttonaccessible.h" - - /** * SECTION:gtktogglebutton * @Short_description: Create buttons which retain their state @@ -181,7 +178,6 @@ gtk_toggle_button_class_init (GtkToggleButtonClass *class) NULL, G_TYPE_NONE, 0); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_TOGGLE_BUTTON_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("button")); } diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c index 6eb1472a51..27ab711ef5 100644 --- a/gtk/gtktooltip.c +++ b/gtk/gtktooltip.c @@ -34,7 +34,6 @@ #include "gtktooltipwindowprivate.h" #include "gtkwindowprivate.h" #include "gtkwidgetprivate.h" -#include "gtkaccessible.h" #include "gtknative.h" /** diff --git a/gtk/gtktooltipwindow.c b/gtk/gtktooltipwindow.c index c30ebf1616..877738117c 100644 --- a/gtk/gtktooltipwindow.c +++ b/gtk/gtktooltipwindow.c @@ -29,7 +29,6 @@ #include "gtkprivate.h" #include "gtkintl.h" -#include "gtkaccessible.h" #include "gtkbox.h" #include "gtkimage.h" #include "gtklabel.h" @@ -382,7 +381,6 @@ gtk_tooltip_window_class_init (GtkTooltipWindowClass *klass) widget_class->hide = gtk_tooltip_window_hide; gtk_widget_class_set_css_name (widget_class, I_("tooltip")); - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_TOOL_TIP); gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/ui/gtktooltipwindow.ui"); gtk_widget_class_bind_template_child (widget_class, GtkTooltipWindow, box); diff --git a/gtk/gtktreeselection.c b/gtk/gtktreeselection.c index fc1e27039b..da4dfe844e 100644 --- a/gtk/gtktreeselection.c +++ b/gtk/gtktreeselection.c @@ -24,7 +24,6 @@ #include "gtkintl.h" #include "gtkprivate.h" #include "gtktypebuiltins.h" -#include "a11y/gtktreeviewaccessibleprivate.h" /** @@ -1560,12 +1559,10 @@ gtk_tree_selection_real_select_node (GtkTreeSelection *selection, if (!GTK_TREE_RBNODE_FLAG_SET (node, GTK_TREE_RBNODE_IS_SELECTED)) { GTK_TREE_RBNODE_SET_FLAG (node, GTK_TREE_RBNODE_IS_SELECTED); - _gtk_tree_view_accessible_add_state (selection->tree_view, tree, node, GTK_CELL_RENDERER_SELECTED); } else { GTK_TREE_RBNODE_UNSET_FLAG (node, GTK_TREE_RBNODE_IS_SELECTED); - _gtk_tree_view_accessible_remove_state (selection->tree_view, tree, node, GTK_CELL_RENDERER_SELECTED); } gtk_widget_queue_draw (GTK_WIDGET (selection->tree_view)); diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 8d03b23af7..5391b78172 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -65,8 +65,6 @@ #include "gtknative.h" #include "gtkpopover.h" -#include "a11y/gtktreeviewaccessibleprivate.h" - #include "gdk/gdkeventsprivate.h" #include "gdk/gdktextureprivate.h" @@ -1613,7 +1611,6 @@ gtk_tree_view_class_init (GtkTreeViewClass *class) gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_F, GDK_CONTROL_MASK, "start-interactive-search", NULL); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_TREE_VIEW_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("treeview")); } @@ -8059,8 +8056,6 @@ gtk_tree_view_row_changed (GtkTreeModel *model, if (tree == NULL) goto done; - _gtk_tree_view_accessible_changed (tree_view, tree, node); - if (priv->fixed_height_mode && priv->fixed_height >= 0) { @@ -8186,8 +8181,6 @@ gtk_tree_view_row_inserted (GtkTreeModel *model, tmpnode = gtk_tree_rbtree_insert_after (tree, tmpnode, height, FALSE); } - _gtk_tree_view_accessible_add (tree_view, tree, tmpnode); - done: if (height > 0) { @@ -8248,12 +8241,10 @@ gtk_tree_view_row_has_child_toggled (GtkTreeModel *model, if (has_child) { GTK_TREE_RBNODE_SET_FLAG (node, GTK_TREE_RBNODE_IS_PARENT); - _gtk_tree_view_accessible_add_state (tree_view, tree, node, GTK_CELL_RENDERER_EXPANDABLE); } else { GTK_TREE_RBNODE_UNSET_FLAG (node, GTK_TREE_RBNODE_IS_PARENT); - _gtk_tree_view_accessible_remove_state (tree_view, tree, node, GTK_CELL_RENDERER_EXPANDABLE); } if (has_child && priv->is_list) @@ -8386,15 +8377,10 @@ gtk_tree_view_row_deleted (GtkTreeModel *model, if (priv->tree == tree) priv->tree = NULL; - _gtk_tree_view_accessible_remove_state (tree_view, - tree->parent_tree, tree->parent_node, - GTK_CELL_RENDERER_EXPANDED); - _gtk_tree_view_accessible_remove (tree_view, tree, NULL); gtk_tree_rbtree_remove (tree); } else { - _gtk_tree_view_accessible_remove (tree_view, tree, node); gtk_tree_rbtree_remove_node (tree, node); } @@ -8469,8 +8455,6 @@ gtk_tree_view_rows_reordered (GtkTreeModel *model, gtk_tree_rbtree_reorder (tree, new_order, len); - _gtk_tree_view_accessible_reorder (tree_view); - gtk_widget_queue_draw (GTK_WIDGET (tree_view)); gtk_tree_view_dy_to_top_row (tree_view); @@ -9208,10 +9192,6 @@ _gtk_tree_view_set_focus_column (GtkTreeView *tree_view, return; priv->focus_column = column; - - _gtk_tree_view_accessible_update_focus_column (tree_view, - old_column, - column); } /* x and y are the mouse position @@ -10378,7 +10358,6 @@ gtk_tree_view_set_model (GtkTreeView *tree_view, { priv->tree = gtk_tree_rbtree_new (); gtk_tree_view_build_tree (tree_view, priv->tree, &iter, 1, FALSE); - _gtk_tree_view_accessible_add (tree_view, priv->tree, NULL); } gtk_tree_path_free (path); @@ -10388,14 +10367,6 @@ gtk_tree_view_set_model (GtkTreeView *tree_view, gtk_tree_view_real_set_cursor (tree_view, NULL, CURSOR_INVALID); - { - GtkTreeViewAccessible *accessible = - GTK_TREE_VIEW_ACCESSIBLE (_gtk_widget_peek_accessible (GTK_WIDGET (tree_view))); - - if (accessible != NULL) - gtk_tree_view_accessible_update_model (accessible, priv->model); - } - g_object_notify_by_pspec (G_OBJECT (tree_view), tree_view_props[PROP_MODEL]); if (priv->selection) @@ -10723,7 +10694,6 @@ gtk_tree_view_remove_column (GtkTreeView *tree_view, GtkTreeViewColumn *column) { GtkTreeViewPrivate *priv = gtk_tree_view_get_instance_private (tree_view); - guint position; g_return_val_if_fail (GTK_IS_TREE_VIEW (tree_view), -1); g_return_val_if_fail (GTK_IS_TREE_VIEW_COLUMN (column), -1); @@ -10747,8 +10717,6 @@ gtk_tree_view_remove_column (GtkTreeView *tree_view, G_CALLBACK (column_sizing_notify), tree_view); - position = g_list_index (priv->columns, column); - _gtk_tree_view_column_unset_tree_view (column); priv->columns = g_list_remove (priv->columns, column); @@ -10770,8 +10738,6 @@ gtk_tree_view_remove_column (GtkTreeView *tree_view, gtk_widget_queue_resize (GTK_WIDGET (tree_view)); } - _gtk_tree_view_accessible_remove_column (tree_view, column, position); - g_object_unref (column); g_signal_emit (tree_view, tree_view_signals[COLUMNS_CHANGED], 0); @@ -10837,8 +10803,6 @@ gtk_tree_view_insert_column (GtkTreeView *tree_view, gtk_widget_queue_resize (GTK_WIDGET (tree_view)); } - _gtk_tree_view_accessible_add_column (tree_view, column, position); - g_signal_emit (tree_view, tree_view_signals[COLUMNS_CHANGED], 0); return priv->n_columns; @@ -11059,8 +11023,6 @@ gtk_tree_view_move_column_after (GtkTreeView *tree_view, gtk_widget_queue_resize (GTK_WIDGET (tree_view)); - _gtk_tree_view_accessible_reorder_column (tree_view, column); - g_signal_emit (tree_view, tree_view_signals[COLUMNS_CHANGED], 0); } @@ -11539,11 +11501,6 @@ gtk_tree_view_real_expand_row (GtkTreeView *tree_view, gtk_tree_path_get_depth (path) + 1, open_all); - _gtk_tree_view_accessible_add (tree_view, node->children, NULL); - _gtk_tree_view_accessible_add_state (tree_view, - tree, node, - GTK_CELL_RENDERER_EXPANDED); - install_presize_handler (tree_view); g_signal_emit (tree_view, tree_view_signals[ROW_EXPANDED], 0, &iter, path); @@ -11676,11 +11633,6 @@ gtk_tree_view_real_collapse_row (GtkTreeView *tree_view, /* Stop a pending double click */ gtk_event_controller_reset (GTK_EVENT_CONTROLLER (priv->click_gesture)); - _gtk_tree_view_accessible_remove (tree_view, node->children, NULL); - _gtk_tree_view_accessible_remove_state (tree_view, - tree, node, - GTK_CELL_RENDERER_EXPANDED); - gtk_tree_rbtree_remove (node->children); if (cursor_changed) @@ -11905,13 +11857,7 @@ gtk_tree_view_real_set_cursor (GtkTreeView *tree_view, GtkTreeViewPrivate *priv = gtk_tree_view_get_instance_private (tree_view); if (!(flags & CURSOR_INVALID) && priv->cursor_node) - { - _gtk_tree_view_accessible_remove_state (tree_view, - priv->cursor_tree, - priv->cursor_node, - GTK_CELL_RENDERER_FOCUSED); - gtk_widget_queue_draw (GTK_WIDGET (tree_view)); - } + gtk_widget_queue_draw (GTK_WIDGET (tree_view)); /* One cannot set the cursor on a separator. Also, if * _gtk_tree_view_find_node returns TRUE, it ran out of tree @@ -11967,11 +11913,6 @@ gtk_tree_view_real_set_cursor (GtkTreeView *tree_view, priv->cursor_node); gtk_widget_queue_draw (GTK_WIDGET (tree_view)); } - - _gtk_tree_view_accessible_add_state (tree_view, - priv->cursor_tree, - priv->cursor_node, - GTK_CELL_RENDERER_FOCUSED); } if (!gtk_widget_in_destruction (GTK_WIDGET (tree_view))) diff --git a/gtk/gtktreeviewcolumn.c b/gtk/gtktreeviewcolumn.c index b1bc4d8eba..01313b1b7a 100644 --- a/gtk/gtktreeviewcolumn.c +++ b/gtk/gtktreeviewcolumn.c @@ -39,8 +39,6 @@ #include "gtkeventcontrollerfocus.h" #include "gtkeventcontrollerkey.h" -#include "a11y/gtktreeviewaccessibleprivate.h" - #include <string.h> @@ -1815,12 +1813,6 @@ gtk_tree_view_column_set_visible (GtkTreeViewColumn *tree_column, if (priv->visible) _gtk_tree_view_column_cell_set_dirty (tree_column, TRUE); - if (priv->tree_view) - { - _gtk_tree_view_accessible_toggle_visibility (GTK_TREE_VIEW (priv->tree_view), - tree_column); - } - gtk_tree_view_column_update_button (tree_column); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_VISIBLE]); } diff --git a/gtk/gtkviewport.c b/gtk/gtkviewport.c index 6e7097ec1f..e9f6a8cda5 100644 --- a/gtk/gtkviewport.c +++ b/gtk/gtkviewport.c @@ -367,8 +367,6 @@ gtk_viewport_class_init (GtkViewportClass *class) widget_class->compute_expand = gtk_viewport_compute_expand; widget_class->get_request_mode = gtk_viewport_get_request_mode; - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_VIEWPORT); - /* GtkScrollable implementation */ g_object_class_override_property (gobject_class, PROP_HADJUSTMENT, "hadjustment"); g_object_class_override_property (gobject_class, PROP_VADJUSTMENT, "vadjustment"); diff --git a/gtk/gtkvolumebutton.c b/gtk/gtkvolumebutton.c index c9145749b9..feae0ca790 100644 --- a/gtk/gtkvolumebutton.c +++ b/gtk/gtkvolumebutton.c @@ -189,10 +189,6 @@ gtk_volume_button_init (GtkVolumeButton *button) GtkWidget *widget = GTK_WIDGET (button); gtk_widget_init_template (widget); - - /* The atk action description is not supported by GtkBuilder */ - atk_action_set_description (ATK_ACTION (gtk_widget_get_accessible (GTK_WIDGET (widget))), - 1, _("Adjusts the volume")); } /** diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 7a9cb2b478..56104548f2 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -27,7 +27,6 @@ #include "gtkwidgetprivate.h" #include "gtkaccelgroupprivate.h" -#include "gtkaccessible.h" #include "gtkactionobserverprivate.h" #include "gtkapplicationprivate.h" #include "gtkbuildable.h" @@ -74,7 +73,6 @@ #include "gtkwindowgroup.h" #include "gtkwindowprivate.h" -#include "a11y/gtkwidgetaccessibleprivate.h" #include "inspector/window.h" #include "gdk/gdkeventsprivate.h" @@ -262,29 +260,6 @@ * </object> * ]| * - * In addition to accelerators, GtkWidget also support a custom <accessible> - * element, which supports actions and relations. Properties on the accessible - * implementation of an object can be set by accessing the internal child - * “accessible” of a #GtkWidget. - * - * An example of a UI definition fragment specifying an accessible: - * |[ - * <object class="GtkLabel" id="label1"/> - * <property name="label">I am a Label for a Button</property> - * </object> - * <object class="GtkButton" id="button1"> - * <accessibility> - * <action action_name="click" translatable="yes">Click the button.</action> - * <relation target="label1" type="labelled-by"/> - * </accessibility> - * <child internal-child="accessible"> - * <object class="AtkObject" id="a11y-button1"> - * <property name="accessible-name">Clickable Button</property> - * </object> - * </child> - * </object> - * ]| - * * If the parent widget uses a #GtkLayoutManager, #GtkWidget supports a * custom <layout> element, used to define layout properties: * @@ -623,9 +598,6 @@ static void gtk_widget_real_measure (GtkWidget int *natural_baseline); static void gtk_widget_real_state_flags_changed (GtkWidget *widget, GtkStateFlags old_state); -static AtkObject* gtk_widget_real_get_accessible (GtkWidget *widget); -static void gtk_widget_accessible_interface_init (AtkImplementorIface *iface); -static AtkObject* gtk_widget_ref_accessible (AtkImplementor *implementor); static void gtk_widget_buildable_interface_init (GtkBuildableIface *iface); static void gtk_widget_buildable_set_name (GtkBuildable *buildable, @@ -708,13 +680,6 @@ gtk_widget_get_type (void) NULL, /* value_table */ }; - const GInterfaceInfo accessibility_info = - { - (GInterfaceInitFunc) gtk_widget_accessible_interface_init, - (GInterfaceFinalizeFunc) NULL, - NULL /* interface data */ - }; - const GInterfaceInfo buildable_info = { (GInterfaceInitFunc) gtk_widget_buildable_interface_init, @@ -737,8 +702,6 @@ gtk_widget_get_type (void) GtkWidget_private_offset = g_type_add_instance_private (widget_type, sizeof (GtkWidgetPrivate)); - g_type_add_interface_static (widget_type, ATK_TYPE_IMPLEMENTOR, - &accessibility_info) ; g_type_add_interface_static (widget_type, GTK_TYPE_BUILDABLE, &buildable_info) ; g_type_add_interface_static (widget_type, GTK_TYPE_CONSTRAINT_TARGET, @@ -935,12 +898,6 @@ gtk_widget_class_init (GtkWidgetClass *klass) klass->query_tooltip = gtk_widget_real_query_tooltip; klass->css_changed = gtk_widget_real_css_changed; klass->system_setting_changed = gtk_widget_real_system_setting_changed; - - /* Accessibility support */ - klass->priv->accessible_type = GTK_TYPE_WIDGET_ACCESSIBLE; - klass->priv->accessible_role = ATK_ROLE_INVALID; - klass->get_accessible = gtk_widget_real_get_accessible; - klass->contains = gtk_widget_real_contains; widget_props[PROP_NAME] = @@ -2606,9 +2563,6 @@ gtk_widget_show (GtkWidget *widget) g_signal_emit (widget, widget_signals[SHOW], 0); g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_VISIBLE]); - if (priv->accessible != NULL) - gtk_widget_accessible_notify_visible (GTK_WIDGET_ACCESSIBLE (priv->accessible)); - gtk_widget_pop_verify_invariants (widget); g_object_unref (widget); } @@ -2669,9 +2623,6 @@ gtk_widget_hide (GtkWidget *widget) g_signal_emit (widget, widget_signals[HIDE], 0); g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_VISIBLE]); - if (priv->accessible != NULL) - gtk_widget_accessible_notify_visible (GTK_WIDGET_ACCESSIBLE (priv->accessible)); - parent = gtk_widget_get_parent (widget); if (parent) gtk_widget_queue_resize (parent); @@ -2731,16 +2682,11 @@ gtk_widget_map (GtkWidget *widget) if (!_gtk_widget_get_mapped (widget)) { - GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget); - gtk_widget_push_verify_invariants (widget); if (!_gtk_widget_get_realized (widget)) gtk_widget_realize (widget); - if (priv->accessible != NULL) - gtk_widget_accessible_notify_showing (GTK_WIDGET_ACCESSIBLE (priv->accessible)); - g_signal_emit (widget, widget_signals[MAP], 0); update_cursor_on_state_change (widget); @@ -2765,8 +2711,6 @@ gtk_widget_unmap (GtkWidget *widget) if (_gtk_widget_get_mapped (widget)) { - GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget); - g_object_ref (widget); gtk_widget_push_verify_invariants (widget); @@ -2775,9 +2719,6 @@ gtk_widget_unmap (GtkWidget *widget) g_signal_emit (widget, widget_signals[UNMAP], 0); - if (priv->accessible != NULL) - gtk_widget_accessible_notify_showing (GTK_WIDGET_ACCESSIBLE (priv->accessible)); - update_cursor_on_state_change (widget); gtk_widget_pop_verify_invariants (widget); @@ -3935,9 +3876,6 @@ gtk_widget_allocate (GtkWidget *widget, gtk_widget_update_paintables (widget); - if (priv->accessible != NULL) - gtk_widget_accessible_update_bounds (GTK_WIDGET_ACCESSIBLE (priv->accessible)); - skip_allocate: if (size_changed || baseline_changed) gtk_widget_queue_draw (widget); @@ -5614,9 +5552,6 @@ gtk_widget_set_sensitive (GtkWidget *widget, update_cursor_on_state_change (widget); } - if (priv->accessible != NULL) - gtk_widget_accessible_notify_sensitive (GTK_WIDGET_ACCESSIBLE (priv->accessible)); - g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_SENSITIVE]); } @@ -7102,9 +7037,7 @@ finalize_assertion_weak_ref (gpointer data, static void gtk_widget_real_destroy (GtkWidget *object) { - /* gtk_object_destroy() will already hold a refcount on object */ GtkWidget *widget = GTK_WIDGET (object); - GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget); if (g_object_get_qdata (G_OBJECT (widget), quark_auto_children)) { @@ -7211,13 +7144,6 @@ gtk_widget_real_destroy (GtkWidget *object) } } - if (priv->accessible) - { - gtk_accessible_set_widget (GTK_ACCESSIBLE (priv->accessible), NULL); - g_object_unref (priv->accessible); - priv->accessible = NULL; - } - /* Callers of add_mnemonic_label() should disconnect on ::destroy */ g_object_set_qdata (G_OBJECT (widget), quark_mnemonic_labels, NULL); @@ -7247,7 +7173,6 @@ gtk_widget_finalize (GObject *object) g_free (priv->tooltip_markup); g_free (priv->tooltip_text); - g_clear_object (&priv->accessible); g_clear_pointer (&priv->transform, gsk_transform_unref); g_clear_pointer (&priv->allocated_transform, gsk_transform_unref); @@ -7694,170 +7619,6 @@ G_DEFINE_BOXED_TYPE (GtkRequisition, gtk_requisition, gtk_requisition_copy, gtk_requisition_free) -/** - * gtk_widget_class_set_accessible_type: - * @widget_class: class to set the accessible type for - * @type: The object type that implements the accessible for @widget_class - * - * Sets the type to be used for creating accessibles for widgets of - * @widget_class. The given @type must be a subtype of the type used for - * accessibles of the parent class. - * - * This function should only be called from class init functions of widgets. - **/ -void -gtk_widget_class_set_accessible_type (GtkWidgetClass *widget_class, - GType type) -{ - GtkWidgetClassPrivate *priv; - - g_return_if_fail (GTK_IS_WIDGET_CLASS (widget_class)); - g_return_if_fail (g_type_is_a (type, widget_class->priv->accessible_type)); - - priv = widget_class->priv; - - priv->accessible_type = type; - /* reset this - honoring the type's role is better. */ - priv->accessible_role = ATK_ROLE_INVALID; -} - -/** - * gtk_widget_class_set_accessible_role: - * @widget_class: class to set the accessible role for - * @role: The role to use for accessibles created for @widget_class - * - * Sets the default #AtkRole to be set on accessibles created for - * widgets of @widget_class. Accessibles may decide to not honor this - * setting if their role reporting is more refined. Calls to - * gtk_widget_class_set_accessible_type() will reset this value. - * - * In cases where you want more fine-grained control over the role of - * accessibles created for @widget_class, you should provide your own - * accessible type and use gtk_widget_class_set_accessible_type() - * instead. - * - * If @role is #ATK_ROLE_INVALID, the default role will not be changed - * and the accessible’s default role will be used instead. - * - * This function should only be called from class init functions of widgets. - **/ -void -gtk_widget_class_set_accessible_role (GtkWidgetClass *widget_class, - AtkRole role) -{ - GtkWidgetClassPrivate *priv; - - g_return_if_fail (GTK_IS_WIDGET_CLASS (widget_class)); - - priv = widget_class->priv; - - priv->accessible_role = role; -} - -/** - * _gtk_widget_peek_accessible: - * @widget: a #GtkWidget - * - * Gets the accessible for @widget, if it has been created yet. - * Otherwise, this function returns %NULL. If the @widget’s implementation - * does not use the default way to create accessibles, %NULL will always be - * returned. - * - * Returns: (nullable): the accessible for @widget or %NULL if none has been - * created yet. - **/ -AtkObject * -_gtk_widget_peek_accessible (GtkWidget *widget) -{ - GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget); - - return priv->accessible; -} - -/** - * gtk_widget_get_accessible: - * @widget: a #GtkWidget - * - * Returns the accessible object that describes the widget to an - * assistive technology. - * - * If accessibility support is not available, this #AtkObject - * instance may be a no-op. Likewise, if no class-specific #AtkObject - * implementation is available for the widget instance in question, - * it will inherit an #AtkObject implementation from the first ancestor - * class for which such an implementation is defined. - * - * The documentation of the - * [ATK](http://developer.gnome.org/atk/stable/) - * library contains more information about accessible objects and their uses. - * - * Returns: (transfer none): the #AtkObject associated with @widget - */ -AtkObject* -gtk_widget_get_accessible (GtkWidget *widget) -{ - g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); - - return GTK_WIDGET_GET_CLASS (widget)->get_accessible (widget); -} - -static AtkObject* -gtk_widget_real_get_accessible (GtkWidget *widget) -{ - AtkObject* accessible; - - accessible = widget->priv->accessible; - - if (!accessible) - { - GtkWidgetClass *widget_class; - GtkWidgetClassPrivate *priv; - - widget_class = GTK_WIDGET_GET_CLASS (widget); - priv = widget_class->priv; - - accessible = g_object_new (priv->accessible_type, - "widget", widget, - NULL); - if (priv->accessible_role != ATK_ROLE_INVALID) - atk_object_set_role (accessible, priv->accessible_role); - - widget->priv->accessible = accessible; - - atk_object_initialize (accessible, widget); - - /* Set the role again, since we don't want a role set - * in some parent initialize() function to override - * our own. - */ - if (priv->accessible_role != ATK_ROLE_INVALID) - atk_object_set_role (accessible, priv->accessible_role); - } - - return accessible; -} - -/* - * Initialize an AtkImplementorIface instance’s virtual pointers as - * appropriate to this implementor’s class (GtkWidget). - */ -static void -gtk_widget_accessible_interface_init (AtkImplementorIface *iface) -{ - iface->ref_accessible = gtk_widget_ref_accessible; -} - -static AtkObject* -gtk_widget_ref_accessible (AtkImplementor *implementor) -{ - AtkObject *accessible; - - accessible = gtk_widget_get_accessible (GTK_WIDGET (implementor)); - if (accessible) - g_object_ref (accessible); - return accessible; -} - /* * Expand flag management */ @@ -8280,7 +8041,6 @@ gtk_widget_set_vexpand_set (GtkWidget *widget, /* * GtkBuildable implementation */ -static GQuark quark_builder_atk_relations = 0; static GQuark quark_builder_set_name = 0; static void @@ -8311,7 +8071,6 @@ gtk_widget_buildable_add_child (GtkBuildable *buildable, static void gtk_widget_buildable_interface_init (GtkBuildableIface *iface) { - quark_builder_atk_relations = g_quark_from_static_string ("gtk-builder-atk-relations"); quark_builder_set_name = g_quark_from_static_string ("gtk-builder-set-name"); iface->set_name = gtk_widget_buildable_set_name; @@ -8347,9 +8106,6 @@ gtk_widget_buildable_get_internal_child (GtkBuildable *buildable, GSList *l; GType internal_child_type = 0; - if (strcmp (childname, "accessible") == 0) - return G_OBJECT (gtk_widget_get_accessible (GTK_WIDGET (buildable))); - /* Find a widget type which has declared an automated child as internal by * the name 'childname', if any. */ @@ -8381,242 +8137,12 @@ gtk_widget_buildable_get_internal_child (GtkBuildable *buildable, return NULL; } -typedef struct -{ - char *action_name; - GString *description; - char *context; - gboolean translatable; -} AtkActionData; - -typedef struct -{ - char *target; - AtkRelationType type; - int line; - int col; -} AtkRelationData; - -static void -free_action (AtkActionData *data, gpointer user_data) -{ - g_free (data->action_name); - g_string_free (data->description, TRUE); - g_free (data->context); - g_slice_free (AtkActionData, data); -} - -static void -free_relation (AtkRelationData *data, gpointer user_data) -{ - g_free (data->target); - g_slice_free (AtkRelationData, data); -} - static void gtk_widget_buildable_parser_finished (GtkBuildable *buildable, GtkBuilder *builder) { - GSList *atk_relations; - - atk_relations = g_object_get_qdata (G_OBJECT (buildable), - quark_builder_atk_relations); - if (atk_relations) - { - AtkObject *accessible; - AtkRelationSet *relation_set; - GSList *l; - GObject *target; - AtkObject *target_accessible; - - accessible = gtk_widget_get_accessible (GTK_WIDGET (buildable)); - relation_set = atk_object_ref_relation_set (accessible); - - for (l = atk_relations; l; l = l->next) - { - AtkRelationData *relation = (AtkRelationData*)l->data; - - target = _gtk_builder_lookup_object (builder, relation->target, relation->line, relation->col); - if (!target) - continue; - target_accessible = gtk_widget_get_accessible (GTK_WIDGET (target)); - g_assert (target_accessible != NULL); - - atk_relation_set_add_relation_by_type (relation_set, relation->type, target_accessible); - } - g_object_unref (relation_set); - - g_slist_free_full (atk_relations, (GDestroyNotify) free_relation); - g_object_steal_qdata (G_OBJECT (buildable), quark_builder_atk_relations); - } -} - -typedef struct -{ - GtkBuilder *builder; - GSList *actions; - GSList *relations; - AtkRole role; -} AccessibilitySubParserData; - -static void -accessibility_start_element (GtkBuildableParseContext *context, - const char *element_name, - const char **names, - const char **values, - gpointer user_data, - GError **error) -{ - AccessibilitySubParserData *data = (AccessibilitySubParserData*)user_data; - - if (strcmp (element_name, "relation") == 0) - { - char *target = NULL; - char *type = NULL; - AtkRelationData *relation; - AtkRelationType relation_type; - - if (!_gtk_builder_check_parent (data->builder, context, "accessibility", error)) - return; - - if (!g_markup_collect_attributes (element_name, names, values, error, - G_MARKUP_COLLECT_STRING, "target", &target, - G_MARKUP_COLLECT_STRING, "type", &type, - G_MARKUP_COLLECT_INVALID)) - { - _gtk_builder_prefix_error (data->builder, context, error); - return; - } - - relation_type = atk_relation_type_for_name (type); - if (relation_type == ATK_RELATION_NULL) - { - g_set_error (error, - GTK_BUILDER_ERROR, - GTK_BUILDER_ERROR_INVALID_VALUE, - "No such relation type: '%s'", type); - _gtk_builder_prefix_error (data->builder, context, error); - return; - } - - relation = g_slice_new (AtkRelationData); - relation->target = g_strdup (target); - relation->type = relation_type; - - data->relations = g_slist_prepend (data->relations, relation); - } - else if (strcmp (element_name, "action") == 0) - { - const char *action_name; - const char *description = NULL; - const char *msg_context = NULL; - gboolean translatable = FALSE; - AtkActionData *action; - - if (!_gtk_builder_check_parent (data->builder, context, "accessibility", error)) - return; - - if (!g_markup_collect_attributes (element_name, names, values, error, - G_MARKUP_COLLECT_STRING, "action_name", &action_name, - G_MARKUP_COLLECT_STRING|G_MARKUP_COLLECT_OPTIONAL, "description", &description, - G_MARKUP_COLLECT_STRING|G_MARKUP_COLLECT_OPTIONAL, "comments", NULL, - G_MARKUP_COLLECT_STRING|G_MARKUP_COLLECT_OPTIONAL, "context", &msg_context, - G_MARKUP_COLLECT_BOOLEAN|G_MARKUP_COLLECT_OPTIONAL, "translatable", &translatable, - G_MARKUP_COLLECT_INVALID)) - { - _gtk_builder_prefix_error (data->builder, context, error); - return; - } - - action = g_slice_new (AtkActionData); - action->action_name = g_strdup (action_name); - action->description = g_string_new (description); - action->context = g_strdup (msg_context); - action->translatable = translatable; - - data->actions = g_slist_prepend (data->actions, action); - } - else if (strcmp (element_name, "role") == 0) - { - const char *type; - AtkRole role; - - if (!_gtk_builder_check_parent (data->builder, context, "accessibility", error)) - return; - - if (data->role != ATK_ROLE_INVALID) - { - g_set_error (error, - GTK_BUILDER_ERROR, - GTK_BUILDER_ERROR_INVALID_VALUE, - "Duplicate accessibility role definition"); - _gtk_builder_prefix_error (data->builder, context, error); - return; - } - - if (!g_markup_collect_attributes (element_name, names, values, error, - G_MARKUP_COLLECT_STRING, "type", &type, - G_MARKUP_COLLECT_INVALID)) - { - _gtk_builder_prefix_error (data->builder, context, error); - return; - } - - role = atk_role_for_name (type); - if (role == ATK_ROLE_INVALID) - { - g_set_error (error, - GTK_BUILDER_ERROR, - GTK_BUILDER_ERROR_INVALID_VALUE, - "No such role type: '%s'", type); - _gtk_builder_prefix_error (data->builder, context, error); - return; - } - - data->role = role; - } - else if (strcmp (element_name, "accessibility") == 0) - { - if (!_gtk_builder_check_parent (data->builder, context, "object", error)) - return; - - if (!g_markup_collect_attributes (element_name, names, values, error, - G_MARKUP_COLLECT_INVALID, NULL, NULL, - G_MARKUP_COLLECT_INVALID)) - _gtk_builder_prefix_error (data->builder, context, error); - } - else - { - _gtk_builder_error_unhandled_tag (data->builder, context, - "GtkWidget", element_name, - error); - } -} - -static void -accessibility_text (GtkBuildableParseContext *context, - const char *text, - gsize text_len, - gpointer user_data, - GError **error) -{ - AccessibilitySubParserData *data = (AccessibilitySubParserData*)user_data; - - if (strcmp (gtk_buildable_parse_context_get_element (context), "action") == 0) - { - AtkActionData *action = data->actions->data; - - g_string_append_len (action->description, text, text_len); - } } -static const GtkBuildableParser accessibility_parser = - { - accessibility_start_element, - NULL, - accessibility_text, - }; - typedef struct { GtkBuilder *builder; @@ -8820,19 +8346,6 @@ gtk_widget_buildable_custom_tag_start (GtkBuildable *buildable, GtkBuildableParser *parser, gpointer *parser_data) { - if (strcmp (tagname, "accessibility") == 0) - { - AccessibilitySubParserData *data; - - data = g_slice_new0 (AccessibilitySubParserData); - data->builder = builder; - - *parser = accessibility_parser; - *parser_data = data; - - return TRUE; - } - if (strcmp (tagname, "style") == 0) { StyleParserData *data; @@ -8945,69 +8458,7 @@ gtk_widget_buildable_custom_finished (GtkBuildable *buildable, const char *tagname, gpointer user_data) { - if (strcmp (tagname, "accessibility") == 0) - { - AccessibilitySubParserData *a11y_data; - - a11y_data = (AccessibilitySubParserData*)user_data; - - if (a11y_data->actions) - { - AtkObject *accessible; - AtkAction *action; - int i, n_actions; - GSList *l; - - accessible = gtk_widget_get_accessible (GTK_WIDGET (buildable)); - - if (ATK_IS_ACTION (accessible)) - { - action = ATK_ACTION (accessible); - n_actions = atk_action_get_n_actions (action); - - for (l = a11y_data->actions; l; l = l->next) - { - AtkActionData *action_data = (AtkActionData*)l->data; - - for (i = 0; i < n_actions; i++) - if (strcmp (atk_action_get_name (action, i), - action_data->action_name) == 0) - break; - - if (i < n_actions) - { - const char *description; - - if (action_data->translatable && action_data->description->len) - description = _gtk_builder_parser_translate (gtk_builder_get_translation_domain (builder), - action_data->context, - action_data->description->str); - else - description = action_data->description->str; - - atk_action_set_description (action, i, description); - } - } - } - else - g_warning ("accessibility action on a widget that does not implement AtkAction"); - - g_slist_free_full (a11y_data->actions, (GDestroyNotify) free_action); - } - - if (a11y_data->relations) - g_object_set_qdata (G_OBJECT (buildable), quark_builder_atk_relations, - a11y_data->relations); - - if (a11y_data->role != ATK_ROLE_INVALID) - { - AtkObject *accessible = gtk_widget_get_accessible (GTK_WIDGET (buildable)); - atk_object_set_role (accessible, a11y_data->role); - } - - g_slice_free (AccessibilitySubParserData, a11y_data); - } - else if (strcmp (tagname, "style") == 0) + if (strcmp (tagname, "style") == 0) { StyleParserData *style_data = (StyleParserData *)user_data; GSList *l; @@ -9649,9 +9100,6 @@ gtk_widget_set_has_tooltip (GtkWidget *widget, { priv->has_tooltip = has_tooltip; - if (priv->accessible != NULL) - gtk_widget_accessible_notify_tooltip (GTK_WIDGET_ACCESSIBLE (priv->accessible)); - g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_HAS_TOOLTIP]); } } @@ -10201,9 +9649,6 @@ gtk_widget_set_has_focus (GtkWidget *widget, priv->has_focus = has_focus; - if (priv->accessible != NULL) - gtk_widget_accessible_notify_focus (GTK_WIDGET_ACCESSIBLE (priv->accessible)); - g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_HAS_FOCUS]); } @@ -12607,8 +12052,6 @@ void gtk_widget_update_orientation (GtkWidget *widget, GtkOrientation orientation) { - GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget); - g_return_if_fail (GTK_IS_WIDGET (widget)); if (orientation == GTK_ORIENTATION_HORIZONTAL) @@ -12621,7 +12064,4 @@ gtk_widget_update_orientation (GtkWidget *widget, gtk_widget_add_css_class (widget, GTK_STYLE_CLASS_VERTICAL); gtk_widget_remove_css_class (widget, GTK_STYLE_CLASS_HORIZONTAL); } - - if (priv->accessible != NULL) - gtk_widget_accessible_notify_orientation (GTK_WIDGET_ACCESSIBLE (priv->accessible)); } diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h index 771e584ab4..c53198e0f9 100644 --- a/gtk/gtkwidget.h +++ b/gtk/gtkwidget.h @@ -36,7 +36,6 @@ #include <gtk/gtkshortcut.h> #include <gtk/gtkshortcutaction.h> #include <gtk/gtktypes.h> -#include <atk/atk.h> G_BEGIN_DECLS @@ -183,8 +182,6 @@ struct _GtkWidget * @set_focus_child: Sets the focused child of a widget. Must chain up * @move_focus: Signal emitted when a change of focus is requested * @keynav_failed: Signal emitted if keyboard navigation fails. - * @get_accessible: Returns the accessible object that describes the - * widget to an assistive technology. * @query_tooltip: Signal emitted when “has-tooltip” is %TRUE and the * hover timeout has expired with the cursor hovering “above” * widget; or emitted when widget got focus in keyboard mode. @@ -251,10 +248,6 @@ struct _GtkWidgetClass gboolean (* keynav_failed) (GtkWidget *widget, GtkDirectionType direction); - /* accessibility support - */ - AtkObject * (* get_accessible) (GtkWidget *widget); - gboolean (* query_tooltip) (GtkWidget *widget, int x, int y, @@ -587,17 +580,6 @@ GDK_AVAILABLE_IN_ALL gboolean gtk_widget_compute_expand (GtkWidget *widget, GtkOrientation orientation); -/* Accessibility support */ -GDK_AVAILABLE_IN_ALL -void gtk_widget_class_set_accessible_type (GtkWidgetClass *widget_class, - GType type); -GDK_AVAILABLE_IN_ALL -void gtk_widget_class_set_accessible_role (GtkWidgetClass *widget_class, - AtkRole role); -GDK_AVAILABLE_IN_ALL -AtkObject* gtk_widget_get_accessible (GtkWidget *widget); - - /* Margin and alignment */ GDK_AVAILABLE_IN_ALL GtkAlign gtk_widget_get_halign (GtkWidget *widget); diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h index 01090956ad..be51038ade 100644 --- a/gtk/gtkwidgetprivate.h +++ b/gtk/gtkwidgetprivate.h @@ -172,8 +172,6 @@ struct _GtkWidgetPrivate GPtrArray *controllers; - AtkObject *accessible; - /* Widget tree */ GtkWidget *parent; GtkWidget *prev_sibling; @@ -206,8 +204,6 @@ struct _GtkWidgetClassPrivate { GtkWidgetTemplate *template; GListStore *shortcuts; - GType accessible_type; - AtkRole accessible_role; GQuark css_name; GType layout_manager_type; GtkWidgetAction *actions; @@ -234,8 +230,6 @@ void _gtk_widget_remove_sizegroup (GtkWidget *widget, gpointer group); GSList *_gtk_widget_get_sizegroups (GtkWidget *widget); -AtkObject * _gtk_widget_peek_accessible (GtkWidget *widget); - void _gtk_widget_set_has_default (GtkWidget *widget, gboolean has_default); void _gtk_widget_set_has_grab (GtkWidget *widget, diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 274b6d7ab9..a0fdd39229 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -65,7 +65,6 @@ #include "gtkcssboxesimplprivate.h" #include "gtktooltipprivate.h" -#include "a11y/gtkwindowaccessibleprivate.h" #include "inspector/window.h" #include "gdk/gdktextureprivate.h" @@ -1114,8 +1113,6 @@ gtk_window_class_init (GtkWindowClass *klass) add_tab_bindings (widget_class, GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); add_tab_bindings (widget_class, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_WINDOW_ACCESSIBLE); - gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_FRAME); gtk_widget_class_set_css_name (widget_class, I_("window")); } @@ -6393,7 +6390,6 @@ _gtk_window_set_is_active (GtkWindow *window, priv->is_active = is_active; g_object_notify_by_pspec (G_OBJECT (window), window_props[PROP_IS_ACTIVE]); - _gtk_window_accessible_set_is_active (window, is_active); } /** diff --git a/gtk/gtkwindowcontrols.c b/gtk/gtkwindowcontrols.c index 78236cb43e..47978330ef 100644 --- a/gtk/gtkwindowcontrols.c +++ b/gtk/gtkwindowcontrols.c @@ -20,7 +20,6 @@ #include "gtkwindowcontrols.h" -#include "gtkaccessible.h" #include "gtkactionable.h" #include "gtkboxlayout.h" #include "gtkbutton.h" @@ -277,7 +276,6 @@ update_window_buttons (GtkWindowControls *self) { GtkWidget *button = NULL; GtkWidget *image = NULL; - AtkObject *accessible; if (strcmp (tokens[i], "icon") == 0 && is_sovereign_window) @@ -305,10 +303,6 @@ update_window_buttons (GtkWindowControls *self) gtk_widget_set_can_focus (button, FALSE); gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "window.minimize"); - - accessible = gtk_widget_get_accessible (button); - if (GTK_IS_ACCESSIBLE (accessible)) - atk_object_set_name (accessible, _("Minimize")); } else if (strcmp (tokens[i], "maximize") == 0 && resizable && @@ -326,10 +320,6 @@ update_window_buttons (GtkWindowControls *self) gtk_widget_set_can_focus (button, FALSE); gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "window.toggle-maximized"); - - accessible = gtk_widget_get_accessible (button); - if (GTK_IS_ACCESSIBLE (accessible)) - atk_object_set_name (accessible, maximized ? _("Restore") : _("Maximize")); } else if (strcmp (tokens[i], "close") == 0 && deletable) @@ -343,10 +333,6 @@ update_window_buttons (GtkWindowControls *self) gtk_widget_set_can_focus (button, FALSE); gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "window.close"); - - accessible = gtk_widget_get_accessible (button); - if (GTK_IS_ACCESSIBLE (accessible)) - atk_object_set_name (accessible, _("Close")); } if (button) diff --git a/gtk/inspector/misc-info.c b/gtk/inspector/misc-info.c index ffab43a93b..d2bb6d9503 100644 --- a/gtk/inspector/misc-info.c +++ b/gtk/inspector/misc-info.c @@ -72,12 +72,6 @@ struct _GtkInspectorMiscInfo GtkWidget *framerate; GtkWidget *framecount_row; GtkWidget *framecount; - GtkWidget *accessible_role_row; - GtkWidget *accessible_role; - GtkWidget *accessible_name_row; - GtkWidget *accessible_name; - GtkWidget *accessible_description_row; - GtkWidget *accessible_description; GtkWidget *mapped_row; GtkWidget *mapped; GtkWidget *realized_row; @@ -329,8 +323,6 @@ update_info (gpointer data) if (GTK_IS_WIDGET (sl->object)) { GtkWidget *child; - AtkObject *accessible; - AtkRole role; GList *list, *l; while ((child = gtk_widget_get_first_child (sl->mnemonic_label))) @@ -352,16 +344,6 @@ update_info (gpointer data) g_list_free (list); gtk_widget_set_visible (sl->tick_callback, gtk_widget_has_tick_callback (GTK_WIDGET (sl->object))); - - accessible = ATK_OBJECT (gtk_widget_get_accessible (GTK_WIDGET (sl->object))); - role = atk_object_get_role (accessible); - gtk_label_set_text (GTK_LABEL (sl->accessible_role), atk_role_get_name (role)); - gtk_label_set_text (GTK_LABEL (sl->accessible_name), atk_object_get_name (accessible)); - gtk_label_set_text (GTK_LABEL (sl->accessible_description), atk_object_get_description (accessible)); - gtk_widget_set_visible (sl->mapped, gtk_widget_get_mapped (GTK_WIDGET (sl->object))); - gtk_widget_set_visible (sl->realized, gtk_widget_get_realized (GTK_WIDGET (sl->object))); - gtk_widget_set_visible (sl->is_toplevel, GTK_IS_ROOT (sl->object)); - gtk_widget_set_visible (sl->child_visible, gtk_widget_get_child_visible (GTK_WIDGET (sl->object))); } update_surface (sl); @@ -441,9 +423,6 @@ gtk_inspector_misc_info_set_object (GtkInspectorMiscInfo *sl, gtk_widget_show (sl->baseline_row); gtk_widget_show (sl->mnemonic_label_row); gtk_widget_show (sl->tick_callback_row); - gtk_widget_show (sl->accessible_role_row); - gtk_widget_show (sl->accessible_name_row); - gtk_widget_show (sl->accessible_description_row); gtk_widget_show (sl->mapped_row); gtk_widget_show (sl->realized_row); gtk_widget_show (sl->is_toplevel_row); @@ -463,9 +442,6 @@ gtk_inspector_misc_info_set_object (GtkInspectorMiscInfo *sl, gtk_widget_hide (sl->allocated_size_row); gtk_widget_hide (sl->baseline_row); gtk_widget_hide (sl->tick_callback_row); - gtk_widget_hide (sl->accessible_role_row); - gtk_widget_hide (sl->accessible_name_row); - gtk_widget_hide (sl->accessible_description_row); gtk_widget_hide (sl->mapped_row); gtk_widget_hide (sl->realized_row); gtk_widget_hide (sl->is_toplevel_row); @@ -583,12 +559,6 @@ gtk_inspector_misc_info_class_init (GtkInspectorMiscInfoClass *klass) gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, framecount); gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, framerate_row); gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, framerate); - gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, accessible_role_row); - gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, accessible_role); - gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, accessible_name_row); - gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, accessible_name); - gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, accessible_description_row); - gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, accessible_description); gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, mapped_row); gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, mapped); gtk_widget_class_bind_template_child (widget_class, GtkInspectorMiscInfo, realized_row); @@ -606,4 +576,3 @@ gtk_inspector_misc_info_class_init (GtkInspectorMiscInfoClass *klass) } // vim: set et sw=2 ts=2: - diff --git a/gtk/inspector/misc-info.ui b/gtk/inspector/misc-info.ui index e19d381eb3..ca7fbc9639 100644 --- a/gtk/inspector/misc-info.ui +++ b/gtk/inspector/misc-info.ui @@ -488,97 +488,6 @@ </object> </child> <child> - <object class="GtkListBoxRow" id="accessible_role_row"> - <property name="activatable">0</property> - <child> - <object class="GtkBox"> - <property name="margin-start">10</property> - <property name="margin-end">10</property> - <property name="margin-top">10</property> - <property name="margin-bottom">10</property> - <property name="spacing">40</property> - <child> - <object class="GtkLabel"> - <property name="label" translatable="yes">Accessible Role</property> - <property name="halign">start</property> - <property name="valign">baseline</property> - <property name="xalign">0</property> - <property name="hexpand">1</property> - </object> - </child> - <child> - <object class="GtkLabel" id="accessible_role"> - <property name="halign">end</property> - <property name="valign">baseline</property> - </object> - </child> - </object> - </child> - </object> - </child> - <child> - <object class="GtkListBoxRow" id="accessible_name_row"> - <property name="activatable">0</property> - <child> - <object class="GtkBox"> - <property name="margin-start">10</property> - <property name="margin-end">10</property> - <property name="margin-top">10</property> - <property name="margin-bottom">10</property> - <property name="spacing">40</property> - <child> - <object class="GtkLabel"> - <property name="label" translatable="yes">Accessible Name</property> - <property name="halign">start</property> - <property name="valign">baseline</property> - <property name="xalign">0</property> - <property name="hexpand">1</property> - </object> - </child> - <child> - <object class="GtkLabel" id="accessible_name"> - <property name="halign">end</property> - <property name="valign">baseline</property> - <property name="ellipsize">end</property> - <property name="max-width-chars">50</property> - </object> - </child> - </object> - </child> - </object> - </child> - <child> - <object class="GtkListBoxRow" id="accessible_description_row"> - <property name="activatable">0</property> - <child> - <object class="GtkBox"> - <property name="margin-start">10</property> - <property name="margin-end">10</property> - <property name="margin-top">10</property> - <property name="margin-bottom">10</property> - <property name="spacing">40</property> - <child> - <object class="GtkLabel"> - <property name="label" translatable="yes">Accessible Description</property> - <property name="halign">start</property> - <property name="valign">baseline</property> - <property name="xalign">0</property> - <property name="hexpand">1</property> - </object> - </child> - <child> - <object class="GtkLabel" id="accessible_description"> - <property name="halign">end</property> - <property name="valign">baseline</property> - <property name="ellipsize">end</property> - <property name="max-width-chars">50</property> - </object> - </child> - </object> - </child> - </object> - </child> - <child> <object class="GtkListBoxRow" id="mapped_row"> <property name="activatable">0</property> <child> diff --git a/gtk/meson.build b/gtk/meson.build index 2e68135422..4ad1796e62 100644 --- a/gtk/meson.build +++ b/gtk/meson.build @@ -1,5 +1,4 @@ subdir('deprecated') -subdir('a11y') subdir('inspector') gtk_cargs = [ @@ -150,7 +149,6 @@ gtk_public_sources = files([ 'gtkaboutdialog.c', 'gtkaccelgroup.c', 'gtkaccellabel.c', - 'gtkaccessible.c', 'gtkactionable.c', 'gtkactionbar.c', 'gtkadjustment.c', @@ -438,7 +436,6 @@ gtk_public_headers = files([ 'gtkaboutdialog.h', 'gtkaccelgroup.h', 'gtkaccellabel.h', - 'gtkaccessible.h', 'gtkactionable.h', 'gtkactionbar.h', 'gtkadjustment.h', @@ -688,7 +685,6 @@ gtk_public_headers = files([ 'gtkwindowcontrols.h', 'gtkwindowgroup.h', 'gtkwindowhandle.h', - 'gtk-a11y.h', 'gtk-autocleanups.h', 'gtk.h', ]) @@ -884,7 +880,7 @@ gtkmarshalers = gnome.genmarshal('gtkmarshalers', gtkmarshal_h = gtkmarshalers[1] gtktypebuiltins = gnome.mkenums('gtktypebuiltins', - sources: gtk_public_headers + gtk_deprecated_headers + a11y_headers, + sources: gtk_public_headers + gtk_deprecated_headers, c_template: 'gtktypebuiltins.c.template', h_template: 'gtktypebuiltins.h.template', install_dir: join_paths(gtk_includedir, 'gtk-4.0/gtk'), @@ -944,7 +940,6 @@ gtk_sources += [ gtk_dbus_src, gtk_deprecated_sources, inspector_sources, - a11y_sources, gtkresources, gtkmarshalers, gtkprivatetypebuiltins, @@ -963,7 +958,6 @@ gtk_deps = [ cairo_dep, fontconfig_dep, pixbuf_dep, - atk_dep, epoxy_dep, libm, graphene_dep, @@ -1014,8 +1008,6 @@ if win32_enabled win32res = import('windows').compile_resources(gtkwin32rc, include_directories : win32rcinc) gtk_sources += win32res -else - gtk_deps += [ atkbridge_dep, ] endif # So we don't add these twice @@ -1165,8 +1157,6 @@ if build_gir gtk_css_public_sources, gtk_deprecated_headers, gtk_deprecated_sources, - a11y_headers, - a11y_sources, gtktypebuiltins_h, gtkversion, ] @@ -1186,13 +1176,12 @@ if build_gir identifier_prefix: 'Gtk', symbol_prefix: 'gtk', export_packages: 'gtk4', - includes: [ gdk_gir[0], gsk_gir[0], 'Atk-1.0', ], + includes: [ gdk_gir[0], gsk_gir[0], ], header: 'gtk/gtk.h', install: true, dependencies: gsk_gir_dep, extra_args: gir_args + [ '-DGTK_COMPILATION', - '--c-include=gtk/gtk-a11y.h', ]) gtk_dep_sources += gtk_gir endif diff --git a/gtk/ui/gtkcoloreditor.ui b/gtk/ui/gtkcoloreditor.ui index a66a29adb6..9c8b4da03a 100644 --- a/gtk/ui/gtkcoloreditor.ui +++ b/gtk/ui/gtkcoloreditor.ui @@ -66,11 +66,6 @@ </child> <child> <object class="GtkEntry" id="entry"> - <child internal-child="accessible"> - <object class="AtkObject" id="entry-atkobject"> - <property name="AtkObject::accessible-name" translatable="yes">Color Name</property> - </object> - </child> <signal name="activate" handler="entry_apply" swapped="no"/> <signal name="notify::has-focus" handler="entry_focus_changed" swapped="no"/> <signal name="notify::text" handler="entry_text_changed" swapped="no"/> @@ -157,11 +152,6 @@ <property name="width-chars">2</property> <property name="max-width-chars">2</property> <property name="climb-rate">1</property> - <child internal-child="accessible"> - <object class="AtkObject" id="a_entry-atkobject"> - <property name="AtkObject::accessible-name" translatable="yes">Alpha</property> - </object> - </child> <layout> <property name="left-attach">1</property> <property name="top-attach">0</property> @@ -198,11 +188,6 @@ <property name="width-chars">2</property> <property name="max-width-chars">2</property> <property name="climb-rate">1</property> - <child internal-child="accessible"> - <object class="AtkObject" id="h_entry-atkobject"> - <property name="AtkObject::accessible-name" translatable="yes">Hue</property> - </object> - </child> <layout> <property name="left-attach">1</property> <property name="top-attach">0</property> @@ -249,11 +234,6 @@ <property name="width-chars">2</property> <property name="max-width-chars">2</property> <property name="climb-rate">1</property> - <child internal-child="accessible"> - <object class="AtkObject" id="s_entry-atkobject"> - <property name="AtkObject::accessible-name" translatable="yes">Saturation</property> - </object> - </child> <layout> <property name="left-attach">1</property> <property name="top-attach">0</property> @@ -265,11 +245,6 @@ <property name="width-chars">2</property> <property name="max-width-chars">2</property> <property name="climb-rate">1</property> - <child internal-child="accessible"> - <object class="AtkObject" id="v_entry-atkobject"> - <property name="AtkObject::accessible-name" translatable="yes">Value</property> - </object> - </child> <layout> <property name="left-attach">1</property> <property name="top-attach">1</property> diff --git a/gtk/ui/gtkfilechooserwidget.ui b/gtk/ui/gtkfilechooserwidget.ui index 60eab69a72..4ad9078fb2 100644 --- a/gtk/ui/gtkfilechooserwidget.ui +++ b/gtk/ui/gtkfilechooserwidget.ui @@ -142,11 +142,6 @@ <object class="GtkTreeView" id="browse_files_tree_view"> <property name="has-tooltip">1</property> <property name="enable-search">0</property> - <child internal-child="accessible"> - <object class="AtkObject" id="browse_files_tree_view-atkobject"> - <property name="AtkObject::accessible-name" translatable="yes">Files</property> - </object> - </child> <child> <object class="GtkGestureLongPress"> <property name="touch-only">1</property> diff --git a/gtk/ui/gtkprintunixdialog.ui b/gtk/ui/gtkprintunixdialog.ui index 6d086c9da8..775cdc9bce 100644 --- a/gtk/ui/gtkprintunixdialog.ui +++ b/gtk/ui/gtkprintunixdialog.ui @@ -202,9 +202,6 @@ <attributes> <attribute name="weight" value="bold"></attribute> </attributes> - <accessibility> - <relation type="label-for" target="range_table"/> - </accessibility> </object> </child> <child> @@ -270,22 +267,12 @@ e.g. 1–3, 7, 11</property> <property name="activates-default">1</property> <signal name="notify::has-focus" handler="page_range_entry_focus_changed" swapped="no"/> - <child internal-child="accessible"> - <object class="AtkObject" id="page_range_entry-atkobject"> - <property name="AtkObject::accessible-name" translatable="yes">Pages</property> - <property name="AtkObject::accessible-description" translatable="yes">Specify one or more page ranges, - e.g. 1–3, 7, 11</property> - </object> - </child> <layout> <property name="left-attach">1</property> <property name="top-attach">3</property> </layout> </object> </child> - <accessibility> - <relation type="labelled-by" target="label_widget1"/> - </accessibility> </object> </child> </object> @@ -303,9 +290,6 @@ <attributes> <attribute name="weight" value="bold"></attribute> </attributes> - <accessibility> - <relation type="label-for" target="grid1"/> - </accessibility> </object> </child> <child> @@ -371,9 +355,6 @@ </layout> </object> </child> - <accessibility> - <relation type="labelled-by" target="label_widget2"/> - </accessibility> </object> </child> </object> @@ -415,9 +396,6 @@ <attributes> <attribute name="weight" value="bold"></attribute> </attributes> - <accessibility> - <relation type="label-for" target="grid2"/> - </accessibility> </object> </child> <child> @@ -562,9 +540,6 @@ </layout> </object> </child> - <accessibility> - <relation type="labelled-by" target="label_widget3"/> - </accessibility> </object> </child> </object> @@ -582,9 +557,6 @@ <attributes> <attribute name="weight" value="bold"></attribute> </attributes> - <accessibility> - <relation type="label-for" target="grid3"/> - </accessibility> </object> </child> <child> @@ -715,9 +687,6 @@ </layout> </object> </child> - <accessibility> - <relation type="labelled-by" target="label_widget4"/> - </accessibility> </object> </child> </object> @@ -766,9 +735,6 @@ <attributes> <attribute name="weight" value="bold"></attribute> </attributes> - <accessibility> - <relation type="label-for" target="grid5"/> - </accessibility> </object> </child> <child> @@ -818,9 +784,6 @@ </layout> </object> </child> - <accessibility> - <relation type="labelled-by" target="label_widget5"/> - </accessibility> </object> </child> <layout> @@ -841,9 +804,6 @@ <attributes> <attribute name="weight" value="bold"></attribute> </attributes> - <accessibility> - <relation type="label-for" target="grid6"/> - </accessibility> </object> </child> <child> @@ -891,13 +851,6 @@ e.g. 15∶30, 2∶35 pm, 14∶15∶20, 11∶46∶30 am, 4 pm</property> <property name="tooltip-text" translatable="yes" comments="Ability to parse the am/pm format depends on actual locale. You can remove the am/pm values below for your locale if they are not supported.">Specify the time of print, e.g. 15∶30, 2∶35 pm, 14∶15∶20, 11∶46∶30 am, 4 pm</property> - <child internal-child="accessible"> - <object class="AtkObject" id="print_at_entry-atkobject"> - <property name="AtkObject::accessible-name" translatable="yes">Time of print</property> - <property name="AtkObject::accessible-description" translatable="yes">Specify the time of print, - e.g. 15∶30, 2∶35 pm, 14∶15∶20, 11∶46∶30 am, 4 pm</property> - </object> - </child> <signal name="changed" handler="update_print_at_option" object="GtkPrintUnixDialog" swapped="yes"/> <layout> <property name="left-attach">1</property> @@ -922,9 +875,6 @@ </layout> </object> </child> - <accessibility> - <relation type="labelled-by" target="label_widget6"/> - </accessibility> </object> </child> <layout> @@ -945,9 +895,6 @@ <attributes> <attribute name="weight" value="bold"></attribute> </attributes> - <accessibility> - <relation type="label-for" target="grid7"/> - </accessibility> </object> </child> <child> @@ -997,9 +944,6 @@ </layout> </object> </child> - <accessibility> - <relation type="labelled-by" target="label_widget7"/> - </accessibility> </object> </child> <layout> diff --git a/gtk/ui/gtkvolumebutton.ui b/gtk/ui/gtkvolumebutton.ui index 3c658df0c5..7b065d251e 100644 --- a/gtk/ui/gtkvolumebutton.ui +++ b/gtk/ui/gtkvolumebutton.ui @@ -13,32 +13,14 @@ audio-volume-high audio-volume-low audio-volume-medium</property> - <child internal-child="accessible"> - <object class="AtkObject" id="GtkVolumeButton-atkobject"> - <property name="AtkObject::accessible-name" translatable="yes">Volume</property> - <property name="AtkObject::accessible-description" translatable="yes">Turns volume up or down</property> - </object> - </child> <signal name="query-tooltip" handler="cb_query_tooltip" swapped="no"/> <signal name="value-changed" handler="cb_value_changed" swapped="no"/> <child internal-child="plus_button"> <object class="GtkButton" id="scalebutton-plus_button1"> - <child internal-child="accessible"> - <object class="AtkObject" id="scalebutton-plus_button1-atkobject"> - <property name="AtkObject::accessible-name" translatable="yes">Volume Up</property> - <property name="AtkObject::accessible-description" translatable="yes">Increases the volume</property> - </object> - </child> </object> </child> <child internal-child="minus_button"> <object class="GtkButton" id="scalebutton-minus_button1"> - <child internal-child="accessible"> - <object class="AtkObject" id="scalebutton-minus_button1-atkobject"> - <property name="AtkObject::accessible-name" translatable="yes">Volume Down</property> - <property name="AtkObject::accessible-description" translatable="yes">Decreases the volume</property> - </object> - </child> </object> </child> </template> |