summaryrefslogtreecommitdiff
path: root/gtk/a11y/gtkexpanderaccessible.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2020-06-16 16:41:59 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2020-07-26 20:31:14 +0100
commitc63087a5631e72cd1c45bdc5a41bf605195be64c (patch)
tree5336167dacb3d88a5d23220d0846f7847605590c /gtk/a11y/gtkexpanderaccessible.c
parentea0fc7619ddd0ad20cd7c83e3e8c8672004c20c9 (diff)
downloadgtk+-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/a11y/gtkexpanderaccessible.c')
-rw-r--r--gtk/a11y/gtkexpanderaccessible.c251
1 files changed, 0 insertions, 251 deletions
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;
-}