diff --git a/gtk/a11y/Makefile.inc b/gtk/a11y/Makefile.inc index 35c35cfc0d..c116a1f131 100644 --- a/gtk/a11y/Makefile.inc +++ b/gtk/a11y/Makefile.inc @@ -11,6 +11,7 @@ a11y_h_sources = \ a11y/gtkcontainercellaccessible.h \ a11y/gtkentryaccessible.h \ a11y/gtkexpanderaccessible.h \ + a11y/gtkfilechooserwidgetaccessible.h \ a11y/gtkflowboxaccessible.h \ a11y/gtkflowboxchildaccessible.h \ a11y/gtkframeaccessible.h \ @@ -88,6 +89,7 @@ a11y_c_sources = \ a11y/gtkcontainercellaccessible.c \ a11y/gtkentryaccessible.c \ a11y/gtkexpanderaccessible.c \ + a11y/gtkfilechooserwidgetaccessible.c \ a11y/gtkflowboxaccessible.c \ a11y/gtkflowboxchildaccessible.c \ a11y/gtkframeaccessible.c \ diff --git a/gtk/a11y/gtkfilechooserwidgetaccessible.c b/gtk/a11y/gtkfilechooserwidgetaccessible.c new file mode 100644 index 0000000000..9f4e362efb --- /dev/null +++ b/gtk/a11y/gtkfilechooserwidgetaccessible.c @@ -0,0 +1,122 @@ +/* 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 . + */ + +#include "config.h" + +#include +#include +#include +#include "gtkfilechooserwidgetaccessible.h" + + +static void atk_action_interface_init (AtkActionIface *iface); + +G_DEFINE_TYPE_WITH_CODE (GtkFileChooserWidgetAccessible, gtk_file_chooser_widget_accessible, GTK_TYPE_CONTAINER_ACCESSIBLE, + G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)) + +static void +gtk_file_chooser_widget_accessible_initialize (AtkObject *obj, + gpointer data) +{ + ATK_OBJECT_CLASS (gtk_file_chooser_widget_accessible_parent_class)->initialize (obj, data); + obj->role = ATK_ROLE_FILE_CHOOSER; +} + +static void +gtk_file_chooser_widget_accessible_class_init (GtkFileChooserWidgetAccessibleClass *klass) +{ + AtkObjectClass *class = ATK_OBJECT_CLASS (klass); + GtkContainerAccessibleClass *container_class = (GtkContainerAccessibleClass*)klass; + + class->initialize = gtk_file_chooser_widget_accessible_initialize; + + container_class->add_gtk = NULL; + container_class->remove_gtk = NULL; +} + +static void +gtk_file_chooser_widget_accessible_init (GtkFileChooserWidgetAccessible *file_chooser_widget) +{ +} + +static gboolean +gtk_file_chooser_widget_accessible_do_action (AtkAction *action, + gint 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 (GTK_FILE_CHOOSER_WIDGET (widget), "location-popup", ""); + return TRUE; + default: + break; + } + + return FALSE; +} + +static gint +gtk_file_chooser_widget_accessible_get_n_actions (AtkAction *action) +{ + return 1; +} + +static const gchar * +gtk_file_chooser_widget_accessible_action_get_name (AtkAction *action, + gint i) +{ + if (i == 0) + return "show_location"; + return NULL; +} + +static const gchar * +gtk_file_chooser_widget_accessible_action_get_localized_name (AtkAction *action, + gint i) +{ + if (i == 0) + return C_("Action name", "Show location"); + return NULL; +} + +static const gchar * +gtk_file_chooser_widget_accessible_action_get_description (AtkAction *action, + gint i) +{ + if (i == 0) + return C_("Action description", "Show the File Chooser's Location text field"); + return NULL; +} + +static void +atk_action_interface_init (AtkActionIface *iface) +{ + iface->do_action = gtk_file_chooser_widget_accessible_do_action; + iface->get_n_actions = gtk_file_chooser_widget_accessible_get_n_actions; + iface->get_name = gtk_file_chooser_widget_accessible_action_get_name; + iface->get_localized_name = gtk_file_chooser_widget_accessible_action_get_localized_name; + iface->get_description = gtk_file_chooser_widget_accessible_action_get_description; +} diff --git a/gtk/a11y/gtkfilechooserwidgetaccessible.h b/gtk/a11y/gtkfilechooserwidgetaccessible.h new file mode 100644 index 0000000000..6310c35921 --- /dev/null +++ b/gtk/a11y/gtkfilechooserwidgetaccessible.h @@ -0,0 +1,57 @@ +/* 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 . + */ + +#ifndef __GTK_FILE_CHOOSER_WIDGET_ACCESSIBLE_H__ +#define __GTK_FILE_CHOOSER_WIDGET_ACCESSIBLE_H__ + +#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION) +#error "Only can be included directly." +#endif + +#include + +G_BEGIN_DECLS + +#define GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE (gtk_file_chooser_widget_accessible_get_type ()) +#define GTK_FILE_CHOOSER_WIDGET_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE, GtkFileChooserWidgetAccessible)) +#define GTK_FILE_CHOOSER_WIDGET_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE, GtkFileChooserWidgetAccessibleClass)) +#define GTK_IS_FILE_CHOOSER_WIDGET_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE)) +#define GTK_IS_FILE_CHOOSER_WIDGET_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE)) +#define GTK_FILE_CHOOSER_WIDGET_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE, GtkFileChooserWidgetAccessibleClass)) + +typedef struct _GtkFileChooserWidgetAccessible GtkFileChooserWidgetAccessible; +typedef struct _GtkFileChooserWidgetAccessibleClass GtkFileChooserWidgetAccessibleClass; +typedef struct _GtkFileChooserWidgetAccessiblePrivate GtkFileChooserWidgetAccessiblePrivate; + +struct _GtkFileChooserWidgetAccessible +{ + GtkContainerAccessible parent; + + GtkFileChooserWidgetAccessiblePrivate *priv; +}; + +struct _GtkFileChooserWidgetAccessibleClass +{ + GtkContainerAccessibleClass parent_class; +}; + +GDK_AVAILABLE_IN_ALL +GType gtk_file_chooser_widget_accessible_get_type (void); + +G_END_DECLS + +#endif /* __GTK_FILE_CHOOSER_WIDGET_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/meson.build b/gtk/a11y/meson.build index a250319c77..8c615c84cf 100644 --- a/gtk/a11y/meson.build +++ b/gtk/a11y/meson.build @@ -14,6 +14,7 @@ a11y_sources = files( 'gtkcontainercellaccessible.c', 'gtkentryaccessible.c', 'gtkexpanderaccessible.c', + 'gtkfilechooserwidgetaccessible.c', 'gtkflowboxaccessible.c', 'gtkflowboxchildaccessible.c', 'gtkframeaccessible.c', @@ -72,6 +73,7 @@ a11y_headers = files( 'gtkcontainercellaccessible.h', 'gtkentryaccessible.h', 'gtkexpanderaccessible.h', + 'gtkfilechooserwidgetaccessible.h', 'gtkflowboxaccessible.h', 'gtkflowboxchildaccessible.h', 'gtkframeaccessible.h', diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index d75a3f7857..6a29f3fcf8 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -69,6 +69,7 @@ #include "gtkcheckbutton.h" #include "gtkwindowgroup.h" #include "gtkintl.h" +#include "a11y/gtkfilechooserwidgetaccessible.h" #include "gtkshow.h" #include "gtkmain.h" #include "gtkscrollable.h" @@ -8752,6 +8753,7 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class) gtk_widget_class_bind_template_callback (widget_class, rename_file_rename_clicked); gtk_widget_class_bind_template_callback (widget_class, rename_file_end); + gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, "filechooser"); }