* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
+#include "gail.h"
+
#include <stdio.h>
#include <stdlib.h>
+#include <gdk/gdk.h>
#include <gtk/gtkx.h>
-#include "gailtoplevel.h"
+#include <gtk/gtkentry.h>
+#include <gtk/gtknotebook.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenubar.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtkaccessible.h>
#include "gailutil.h"
+#include "gailmisc.h"
-#define GNOME_ACCESSIBILITY_ENV "GNOME_ACCESSIBILITY"
+#ifdef GDK_WINDOWING_X11
+#include <atk-bridge.h>
+#endif
static gboolean gail_focus_watcher (GSignalInvocationHint *ihint,
guint n_param_values,
static void gail_set_focus_object (AtkObject *focus_obj,
AtkObject *obj);
-GtkWidget* focus_widget = NULL;
+GtkWidget* _focus_widget = NULL;
static GtkWidget* next_focus_widget = NULL;
static gboolean was_deselect = FALSE;
static GtkWidget* subsequent_focus_widget = NULL;
static guint focus_notify_handler = 0;
static guint focus_tracker_id = 0;
static GQuark quark_focus_object = 0;
+static int initialized = FALSE;
static AtkObject*
gail_get_accessible_for_widget (GtkWidget *widget,
{
if (event->type == GDK_MOTION_NOTIFY && gtk_widget_has_focus (widget))
{
- if (widget == focus_widget)
+ if (widget == _focus_widget)
{
return TRUE;
}
* If previously focused widget is not a GtkMenuItem or a GtkMenu,
* keep track of it so we can return to it after menubar is deactivated
*/
- if (focus_widget &&
- !GTK_IS_MENU_ITEM (focus_widget) &&
- !GTK_IS_MENU (focus_widget))
+ if (_focus_widget &&
+ !GTK_IS_MENU_ITEM (_focus_widget) &&
+ !GTK_IS_MENU (_focus_widget))
{
void *vp_focus_before_menu = &focus_before_menu;
- focus_before_menu = focus_widget;
+ focus_before_menu = _focus_widget;
g_object_add_weak_pointer (G_OBJECT (focus_before_menu), vp_focus_before_menu);
}
AtkObject *atk_obj;
gboolean transient;
- if (widget != focus_widget)
+ if (widget != _focus_widget)
{
- if (focus_widget)
+ if (_focus_widget)
{
- void *vp_focus_widget = &focus_widget;
- g_object_remove_weak_pointer (G_OBJECT (focus_widget), vp_focus_widget);
+ void *vp_focus_widget = &_focus_widget;
+ g_object_remove_weak_pointer (G_OBJECT (_focus_widget), vp_focus_widget);
}
- focus_widget = widget;
- if (focus_widget)
+ _focus_widget = widget;
+ if (_focus_widget)
{
- void *vp_focus_widget = &focus_widget;
- g_object_add_weak_pointer (G_OBJECT (focus_widget), vp_focus_widget);
+ void *vp_focus_widget = &_focus_widget;
+ g_object_add_weak_pointer (G_OBJECT (_focus_widget), vp_focus_widget);
/*
* The UI may not have been updated yet; e.g. in gtkhtml2
* html_view_layout() is called in a idle handler
*/
- if (focus_widget == focus_before_menu)
+ if (_focus_widget == focus_before_menu)
{
void *vp_focus_before_menu = &focus_before_menu;
g_object_remove_weak_pointer (G_OBJECT (focus_before_menu), vp_focus_before_menu);
focus_before_menu = NULL;
}
}
- gail_focus_notify_when_idle (focus_widget);
+ gail_focus_notify_when_idle (_focus_widget);
}
else
{
- if (focus_widget)
- atk_obj = gail_get_accessible_for_widget (focus_widget, &transient);
+ if (_focus_widget)
+ atk_obj = gail_get_accessible_for_widget (_focus_widget, &transient);
else
atk_obj = NULL;
/*
}
}
-static int gail_initialized = FALSE;
-
void
-gail_accessibility_module_init (void)
+_gtk_accessibility_shutdown (void)
{
- const char *env_a_t_support;
- gboolean a_t_support = FALSE;
+ if (!initialized)
+ return;
- if (gail_initialized)
- {
- return;
- }
- gail_initialized = TRUE;
- quark_focus_object = g_quark_from_static_string ("gail-focus-object");
+ initialized = FALSE;
- env_a_t_support = g_getenv (GNOME_ACCESSIBILITY_ENV);
+ g_clear_object (&atk_misc_instance);
- if (env_a_t_support)
- a_t_support = atoi (env_a_t_support);
- if (a_t_support)
- fprintf (stderr, "GTK Accessibility Module initialized\n");
+#ifdef GDK_WINDOWING_X11
+ atk_bridge_adaptor_cleanup ();
+#endif
+ _gail_util_uninstall ();
+}
+
+void
+_gtk_accessibility_init (void)
+{
+
+ if (initialized)
+ return;
+
+ initialized = TRUE;
+ quark_focus_object = g_quark_from_static_string ("gail-focus-object");
atk_focus_tracker_init (gail_focus_tracker_init);
focus_tracker_id = atk_add_focus_tracker (gail_focus_tracker);
- /* Initialize the GailUtility class */
- g_type_class_unref (g_type_class_ref (GAIL_TYPE_UTIL));
- g_type_class_unref (g_type_class_ref (GAIL_TYPE_MISC));
+ _gail_util_install ();
+#ifdef GDK_WINDOWING_X11
+ atk_bridge_adaptor_init (NULL, NULL);
+#endif
+
+ atk_misc_instance = g_object_new (GAIL_TYPE_MISC, NULL);
}