[gtk/wip/ebassi/a11y-2: 433/442] a11y: Simplify GtkColorSwatchAccessible



commit c3eafed4728612668558b0470ddd6cd1fa534733
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Thu May 28 15:09:02 2020 +0100

    a11y: Simplify GtkColorSwatchAccessible
    
    Drop the GtkWidgetAccessible.notify_gtk override.

 gtk/a11y/gtkcolorswatchaccessible.c | 65 +++++++++++++++++++------------------
 1 file changed, 34 insertions(+), 31 deletions(-)
---
diff --git a/gtk/a11y/gtkcolorswatchaccessible.c b/gtk/a11y/gtkcolorswatchaccessible.c
index 5e60d2040e..1c52fda18c 100644
--- a/gtk/a11y/gtkcolorswatchaccessible.c
+++ b/gtk/a11y/gtkcolorswatchaccessible.c
@@ -17,10 +17,10 @@
 
 #include "config.h"
 
-#include <glib/gi18n-lib.h>
-#include <gtk/gtk.h>
-#include "gtkcolorswatchprivate.h"
 #include "gtkcolorswatchaccessibleprivate.h"
+#include "gtkcolorswatchprivate.h"
+
+#include <glib/gi18n-lib.h>
 
 static void atk_action_interface_init (AtkActionIface *iface);
 
@@ -29,9 +29,9 @@ G_DEFINE_TYPE_WITH_CODE (GtkColorSwatchAccessible, _gtk_color_swatch_accessible,
 
 static void
 state_changed_cb (GtkWidget     *widget,
-                  GtkStateFlags  previous_flags)
+                  GtkStateFlags  previous_flags,
+                  AtkObject     *accessible)
 {
-  AtkObject *accessible;
   GtkStateFlags flags;
   gboolean was_selected;
   gboolean selected;
@@ -41,23 +41,46 @@ state_changed_cb (GtkWidget     *widget,
   was_selected = (previous_flags & GTK_STATE_FLAG_SELECTED) != 0;
   selected = (flags & GTK_STATE_FLAG_SELECTED) != 0;
 
-  accessible = gtk_widget_get_accessible (widget);
   if (selected && !was_selected)
     atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, TRUE);
   else if (!selected && was_selected)
     atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, FALSE);
 }
 
+static void
+on_selectable_changed_cb (GObject    *gobject,
+                          GParamSpec *pspec,
+                          AtkObject  *accessible)
+{
+  GtkColorSwatch *swatch = GTK_COLOR_SWATCH (gobject);
+  AtkRole role;
+
+  if (gtk_color_swatch_get_selectable (swatch))
+    role = ATK_ROLE_RADIO_BUTTON;
+  else
+    role = ATK_ROLE_PUSH_BUTTON;
+
+  atk_object_set_role (accessible, role);
+}
+
 static void
 gtk_color_swatch_accessible_initialize (AtkObject *obj,
                                         gpointer   data)
 {
+  GtkColorSwatch *swatch = data;
+
   ATK_OBJECT_CLASS (_gtk_color_swatch_accessible_parent_class)->initialize (obj, data);
 
   g_signal_connect (data, "state-flags-changed",
-                    G_CALLBACK (state_changed_cb), NULL);
-
-  atk_object_set_role (obj, ATK_ROLE_RADIO_BUTTON);
+                    G_CALLBACK (state_changed_cb),
+                    obj);
+  g_signal_connect (data, "notify::selectable",
+                    G_CALLBACK (on_selectable_changed_cb),
+                    obj);
+
+  obj->role = gtk_color_swatch_get_selectable (swatch)
+            ? ATK_ROLE_RADIO_BUTTON
+            : ATK_ROLE_PUSH_BUTTON;
 }
 
 static AtkStateSet *
@@ -78,39 +101,19 @@ gtk_color_swatch_accessible_ref_state_set (AtkObject *accessible)
   return state_set;
 }
 
-static void
-gtk_color_swatch_accessible_notify_gtk (GObject    *obj,
-                                        GParamSpec *pspec)
-{
-  GtkWidget *widget = GTK_WIDGET (obj);
-  AtkObject *atk_obj = gtk_widget_get_accessible (widget);
-
-  if (strcmp (pspec->name, "selectable") == 0)
-    {
-      if (gtk_color_swatch_get_selectable (GTK_COLOR_SWATCH (widget)))
-        atk_object_set_role (atk_obj, ATK_ROLE_RADIO_BUTTON);
-      else
-        atk_object_set_role (atk_obj, ATK_ROLE_PUSH_BUTTON);
-    }
-  else
-    GTK_WIDGET_ACCESSIBLE_CLASS (_gtk_color_swatch_accessible_parent_class)->notify_gtk (obj, pspec);
-}
-
 static void
 _gtk_color_swatch_accessible_class_init (GtkColorSwatchAccessibleClass *klass)
 {
   AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
-  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass *)klass;
 
   atk_class->initialize = gtk_color_swatch_accessible_initialize;
   atk_class->ref_state_set = gtk_color_swatch_accessible_ref_state_set;
-
-  widget_class->notify_gtk = gtk_color_swatch_accessible_notify_gtk;
 }
 
 static void
-_gtk_color_swatch_accessible_init (GtkColorSwatchAccessible *scale)
+_gtk_color_swatch_accessible_init (GtkColorSwatchAccessible *self)
 {
+  ATK_OBJECT (self)->role = ATK_ROLE_RADIO_BUTTON;
 }
 
 static gint


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]