]> Pileus Git - ~andy/gtk/blobdiff - gtk/a11y/gtkwidgetaccessible.c
a11y: Only care about GtkOrientable::orientation
[~andy/gtk] / gtk / a11y / gtkwidgetaccessible.c
index 5a1fa4f216d0fac7790ef6a8c7b696c7a4206fe4..c386eb3ef9c63a570bf5c7212488a0fb2b7ddaf3 100644 (file)
@@ -12,9 +12,7 @@
  * 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"
@@ -112,14 +110,10 @@ static void
 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);
@@ -131,25 +125,6 @@ gtk_widget_accessible_initialize (AtkObject *obj,
   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)
 {
@@ -220,20 +195,21 @@ find_label (GtkWidget *widget)
   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))
@@ -489,7 +465,8 @@ gtk_widget_accessible_notify_gtk (GObject    *obj,
       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;
 
@@ -528,12 +505,9 @@ static void
 _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;