* 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"
gtk_widget_accessible_initialize (AtkObject *obj,
gpointer data)
{
- GtkAccessible *accessible;
GtkWidget *widget;
widget = GTK_WIDGET (data);
- accessible = GTK_ACCESSIBLE (obj);
- gtk_accessible_set_widget (accessible, widget);
- gtk_accessible_connect_widget_destroyed (accessible);
g_signal_connect_after (widget, "focus-in-event", G_CALLBACK (focus_cb), NULL);
g_signal_connect_after (widget, "focus-out-event", G_CALLBACK (focus_cb), NULL);
g_signal_connect (widget, "notify", G_CALLBACK (notify_cb), NULL);
obj->role = ATK_ROLE_UNKNOWN;
}
-static void
-gtk_widget_accessible_destroyed (GtkWidget *widget,
- GtkAccessible *accessible)
-{
- gtk_accessible_set_widget (accessible, NULL);
- atk_object_notify_state_change (ATK_OBJECT (accessible), ATK_STATE_DEFUNCT, TRUE);
-}
-
-static void
-gtk_widget_accessible_connect_widget_destroyed (GtkAccessible *accessible)
-{
- GtkWidget *widget;
-
- widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
- if (widget)
- g_signal_connect_after (widget, "destroy",
- G_CALLBACK (gtk_widget_accessible_destroyed), accessible);
-}
-
static const gchar *
gtk_widget_accessible_get_description (AtkObject *accessible)
{
GList *labels;
GtkWidget *label;
GtkWidget *temp_widget;
+ GList *ptr;
labels = gtk_widget_list_mnemonic_labels (widget);
label = NULL;
- if (labels)
+ ptr = labels;
+ while (ptr)
{
- if (labels->data)
+ if (ptr->data)
{
- if (labels->next)
- g_warning ("Widget (%s) has more than one label", G_OBJECT_TYPE_NAME (widget));
- else
- label = labels->data;
+ label = ptr->data;
+ break;
}
- g_list_free (labels);
+ ptr = ptr->next;
}
+ g_list_free (labels);
/* Ignore a label within a button; bug #136602 */
if (label && GTK_IS_BUTTON (widget))
state = ATK_STATE_SENSITIVE;
value = gtk_widget_get_sensitive (widget);
}
- else if (g_strcmp0 (pspec->name, "orientation") == 0)
+ else if (g_strcmp0 (pspec->name, "orientation") == 0 &&
+ GTK_IS_ORIENTABLE (widget))
{
GtkOrientable *orientable;
_gtk_widget_accessible_class_init (GtkWidgetAccessibleClass *klass)
{
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
- GtkAccessibleClass *accessible_class = GTK_ACCESSIBLE_CLASS (klass);
klass->notify_gtk = gtk_widget_accessible_notify_gtk;
- accessible_class->connect_widget_destroyed = gtk_widget_accessible_connect_widget_destroyed;
-
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;