Add a private function for accessible factory registration

This avoids repeating the same code for each widget that
has its own accessible implementation inside GTK+.
This commit is contained in:
Matthias Clasen 2011-02-17 01:24:43 -05:00
parent 4a4004b706
commit 9d321437b6
3 changed files with 63 additions and 0 deletions

View File

@ -376,6 +376,7 @@ endif
gtk_private_h_sources = \
gtk9slice.h \
gtkaccelgroupprivate.h \
gtkaccessibleprivate.h \
gtkanimationdescription.h \
gtkappchooserprivate.h \
gtkappchoosermodule.h \

View File

@ -131,3 +131,34 @@ gtk_accessible_real_connect_widget_destroyed (GtkAccessible *accessible)
&priv->widget);
}
}
/*
* _gtk_accessible_set_factory_type:
* @widget_type: a #GtkWidget subtype
* @factory_type: a #AtkObjectFactory subtype
*
* A wrapper around atk_registry_set_factory_type().
*
* Only installs the factory if accessibility is
* enabled.
*/
void
_gtk_accessible_set_factory_type (GType widget_type,
GType factory_type)
{
AtkObjectFactory *factory;
AtkRegistry *registry;
GType accessible_type;
/*
* Figure out whether accessibility is enabled by looking
* at the type of the accessible object which would be created
* for GtkWidget.
*/
registry = atk_get_default_registry ();
factory = atk_registry_get_factory (registry, GTK_TYPE_WIDGET);
accessible_type = atk_object_factory_get_accessible_type (factory);
if (g_type_is_a (accessible_type, GTK_TYPE_ACCESSIBLE))
atk_registry_set_factory_type (registry, widget_type, factory_type);
}

View File

@ -0,0 +1,31 @@
/* GTK - The GIMP Toolkit
* Copyright (C) 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, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __GTK_ACCESSIBLE_PRIVATE_H__
#define __GTK_ACCESSIBLE_PRIVATE_H__
#include "gtkaccessible.h"
G_BEGIN_DECLS
void _gtk_accessible_set_factory_type (GType widget_type,
GType factory_type);
G_END_DECLS
#endif /* __GTK_ACCESSIBLE_PRIVATE_H__ */