diff options
author | Matthias Clasen <mclasen@redhat.com> | 2014-01-04 10:47:22 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2014-01-04 10:54:03 -0500 |
commit | 9bf89f2b5e60fa64c279e7d07d8c7f1d16e45d70 (patch) | |
tree | 0da53722da97e6e1c168c6911eecc046c9528f74 /gtk/a11y/gtklabelaccessible.c | |
parent | b85a8001e0806bf83a641c901447d6da2e2abf52 (diff) | |
download | gtk+-9bf89f2b5e60fa64c279e7d07d8c7f1d16e45d70.tar.gz |
GtkLabelAccessible: reorganize the code
Separate the GtkLabelAccessible, GtkLabelAccessibleLink and
GtkLabelAccessibleLinkImpl implementations more clearly.
Diffstat (limited to 'gtk/a11y/gtklabelaccessible.c')
-rw-r--r-- | gtk/a11y/gtklabelaccessible.c | 319 |
1 files changed, 172 insertions, 147 deletions
diff --git a/gtk/a11y/gtklabelaccessible.c b/gtk/a11y/gtklabelaccessible.c index fdcd74ca09..a2bf47513a 100644 --- a/gtk/a11y/gtklabelaccessible.c +++ b/gtk/a11y/gtklabelaccessible.c @@ -15,6 +15,8 @@ * License along with this library. If not, see <http://www.gnu.org/licenses/>. */ +/* Preamble {{{1 */ + #include "config.h" #include <gtk/gtk.h> @@ -49,6 +51,9 @@ struct _GtkLabelAccessibleLinkClass AtkHyperlinkClass parent_class; }; +static GtkLabelAccessibleLink *gtk_label_accessible_link_new (GtkLabelAccessible *label, + gint idx); + typedef struct _GtkLabelAccessibleLinkImpl GtkLabelAccessibleLinkImpl; typedef struct _GtkLabelAccessibleLinkImplClass GtkLabelAccessibleLinkImplClass; @@ -64,44 +69,15 @@ struct _GtkLabelAccessibleLinkImplClass AtkObjectClass parent_class; }; -static void atk_action_interface_init (AtkActionIface *iface); -static void atk_hyperlink_impl_interface_init (AtkHyperlinkImplIface *iface); +/* GtkLabelAccessibleLinkImpl {{{1 */ -GType _gtk_label_accessible_link_get_type (void); GType _gtk_label_accessible_link_impl_get_type (void); -G_DEFINE_TYPE_WITH_CODE (GtkLabelAccessibleLink, _gtk_label_accessible_link, ATK_TYPE_HYPERLINK, - G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)) +static void atk_hyperlink_impl_interface_init (AtkHyperlinkImplIface *iface); G_DEFINE_TYPE_WITH_CODE (GtkLabelAccessibleLinkImpl, _gtk_label_accessible_link_impl, ATK_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (ATK_TYPE_HYPERLINK_IMPL, atk_hyperlink_impl_interface_init)) -static GtkLabelAccessibleLink * -gtk_label_accessible_link_new (GtkLabelAccessible *label, - gint idx) -{ - GtkLabelAccessibleLink *link; - - link = g_object_new (_gtk_label_accessible_link_get_type (), NULL); - link->label = label; - link->index = idx; - - return link; -} - -static GtkLabelAccessibleLinkImpl * -gtk_label_accessible_link_impl_new (GtkLabelAccessible *label, - gint idx) -{ - GtkLabelAccessibleLinkImpl *impl; - - impl = g_object_new (_gtk_label_accessible_link_impl_get_type (), NULL); - atk_object_set_parent (ATK_OBJECT (impl), ATK_OBJECT (label)); - impl->link = gtk_label_accessible_link_new (label, idx); - - return impl; -} - static AtkHyperlink * gtk_label_accessible_link_impl_get_hyperlink (AtkHyperlinkImpl *atk_impl) { @@ -172,6 +148,30 @@ _gtk_label_accessible_link_impl_class_init (GtkLabelAccessibleLinkImplClass *cla atk_obj_class->ref_state_set = gtk_label_accessible_link_impl_ref_state_set; } +/* 'Public' API {{{2 */ + +static GtkLabelAccessibleLinkImpl * +gtk_label_accessible_link_impl_new (GtkLabelAccessible *label, + gint idx) +{ + GtkLabelAccessibleLinkImpl *impl; + + impl = g_object_new (_gtk_label_accessible_link_impl_get_type (), NULL); + atk_object_set_parent (ATK_OBJECT (impl), ATK_OBJECT (label)); + impl->link = gtk_label_accessible_link_new (label, idx); + + return impl; +} + +/* GtkLabelAccessibleLink {{{1 */ + +GType _gtk_label_accessible_link_get_type (void); + +static void atk_action_interface_init (AtkActionIface *iface); + +G_DEFINE_TYPE_WITH_CODE (GtkLabelAccessibleLink, _gtk_label_accessible_link, ATK_TYPE_HYPERLINK, + G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)) + static gchar * gtk_label_accessible_link_get_uri (AtkHyperlink *atk_link, gint i) @@ -264,6 +264,23 @@ _gtk_label_accessible_link_class_init (GtkLabelAccessibleLinkClass *class) atk_link_class->get_end_index = gtk_label_accessible_link_get_end_index; } +/* 'Public' API {{{2 */ + +static GtkLabelAccessibleLink * +gtk_label_accessible_link_new (GtkLabelAccessible *label, + gint idx) +{ + GtkLabelAccessibleLink *link; + + link = g_object_new (_gtk_label_accessible_link_get_type (), NULL); + link->label = label; + link->index = idx; + + return link; +} + +/* AtkAction implementation {{{2 */ + static gboolean gtk_label_accessible_link_do_action (AtkAction *action, gint i) @@ -313,6 +330,8 @@ atk_action_interface_init (AtkActionIface *iface) iface->get_name = gtk_label_accessible_link_get_name; } +/* GtkLabelAccessible {{{1 */ + static void atk_text_interface_init (AtkTextIface *iface); static void atk_hypertext_interface_init (AtkHypertextIface *iface); @@ -379,46 +398,6 @@ check_for_selection_change (GtkLabelAccessible *accessible, return ret_val; } -void -_gtk_label_accessible_text_deleted (GtkLabel *label) -{ - AtkObject *obj; - const char *text; - guint length; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (label)); - if (obj == NULL) - return; - - text = gtk_label_get_text (label); - length = g_utf8_strlen (text, -1); - if (length > 0) - g_signal_emit_by_name (obj, "text-changed::delete", 0, length); -} - -void -_gtk_label_accessible_text_inserted (GtkLabel *label) -{ - AtkObject *obj; - const char *text; - guint length; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (label)); - if (obj == NULL) - return; - - text = gtk_label_get_text (label); - length = g_utf8_strlen (text, -1); - if (length > 0) - g_signal_emit_by_name (obj, "text-changed::insert", 0, length); - - if (obj->name == NULL) - /* The label has changed so notify a change in accessible-name */ - g_object_notify (G_OBJECT (obj), "accessible-name"); - - g_signal_emit_by_name (obj, "visible-data-changed"); -} - static void gtk_label_accessible_notify_gtk (GObject *obj, GParamSpec *pspec) @@ -609,7 +588,125 @@ gtk_label_accessible_class_init (GtkLabelAccessibleClass *klass) widget_class->notify_gtk = gtk_label_accessible_notify_gtk; } -/* atktext.h */ +/* 'Public' API {{{2 */ + +void +_gtk_label_accessible_text_deleted (GtkLabel *label) +{ + AtkObject *obj; + const char *text; + guint length; + + obj = _gtk_widget_peek_accessible (GTK_WIDGET (label)); + if (obj == NULL) + return; + + text = gtk_label_get_text (label); + length = g_utf8_strlen (text, -1); + if (length > 0) + g_signal_emit_by_name (obj, "text-changed::delete", 0, length); +} + +void +_gtk_label_accessible_text_inserted (GtkLabel *label) +{ + AtkObject *obj; + const char *text; + guint length; + + obj = _gtk_widget_peek_accessible (GTK_WIDGET (label)); + if (obj == NULL) + return; + + text = gtk_label_get_text (label); + length = g_utf8_strlen (text, -1); + if (length > 0) + g_signal_emit_by_name (obj, "text-changed::insert", 0, length); + + if (obj->name == NULL) + /* The label has changed so notify a change in accessible-name */ + g_object_notify (G_OBJECT (obj), "accessible-name"); + + g_signal_emit_by_name (obj, "visible-data-changed"); +} + +static void +clear_links (GtkLabelAccessible *accessible) +{ + GList *l; + gint i; + GtkLabelAccessibleLinkImpl *impl; + + for (l = accessible->priv->links, i = 0; l; l = l->next, i++) + { + impl = l->data; + g_signal_emit_by_name (accessible, "children-changed::remove", i, impl, NULL); + atk_object_set_parent (ATK_OBJECT (impl), NULL); + impl->link->label = NULL; + } + g_list_free_full (accessible->priv->links, g_object_unref); + accessible->priv->links = NULL; +} + +static void +create_links (GtkLabelAccessible *accessible) +{ + GtkWidget *widget; + gint n, i; + GtkLabelAccessibleLinkImpl *impl; + + widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); + + n = _gtk_label_get_n_links (GTK_LABEL (widget)); + for (i = 0; i < n; i++) + { + impl = gtk_label_accessible_link_impl_new (accessible, i); + accessible->priv->links = g_list_append (accessible->priv->links, impl); + g_signal_emit_by_name (accessible, "children-changed::add", i, impl, NULL); + } +} + +void +_gtk_label_accessible_update_links (GtkLabel *label) +{ + AtkObject *obj; + + obj = _gtk_widget_peek_accessible (GTK_WIDGET (label)); + if (obj == NULL) + return; + + clear_links (GTK_LABEL_ACCESSIBLE (obj)); + create_links (GTK_LABEL_ACCESSIBLE (obj)); +} + +void +_gtk_label_accessible_focus_link_changed (GtkLabel *label) +{ + AtkObject *obj; + GtkLabelAccessible *accessible; + GList *l; + GtkLabelAccessibleLinkImpl *impl; + gboolean focused; + + obj = _gtk_widget_peek_accessible (GTK_WIDGET (label)); + if (obj == NULL) + return; + + accessible = GTK_LABEL_ACCESSIBLE (obj); + + for (l = accessible->priv->links; l; l = l->next) + { + impl = l->data; + focused = _gtk_label_get_link_focused (label, impl->link->index); + if (impl->link->focused != focused) + { + impl->link->focused = focused; + atk_object_notify_state_change (ATK_OBJECT (impl), ATK_STATE_FOCUSED, focused); + } + } +} + +/* AtkText implementation {{{2 */ static gchar* gtk_label_accessible_get_text (AtkText *atk_text, @@ -1093,81 +1190,7 @@ atk_text_interface_init (AtkTextIface *iface) iface->get_default_attributes = gtk_label_accessible_get_default_attributes; } -static void -clear_links (GtkLabelAccessible *accessible) -{ - GList *l; - gint i; - GtkLabelAccessibleLinkImpl *impl; - - for (l = accessible->priv->links, i = 0; l; l = l->next, i++) - { - impl = l->data; - g_signal_emit_by_name (accessible, "children-changed::remove", i, impl, NULL); - atk_object_set_parent (ATK_OBJECT (impl), NULL); - impl->link->label = NULL; - } - g_list_free_full (accessible->priv->links, g_object_unref); - accessible->priv->links = NULL; -} - -static void -create_links (GtkLabelAccessible *accessible) -{ - GtkWidget *widget; - gint n, i; - GtkLabelAccessibleLinkImpl *impl; - - widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - - n = _gtk_label_get_n_links (GTK_LABEL (widget)); - for (i = 0; i < n; i++) - { - impl = gtk_label_accessible_link_impl_new (accessible, i); - accessible->priv->links = g_list_append (accessible->priv->links, impl); - g_signal_emit_by_name (accessible, "children-changed::add", i, impl, NULL); - } -} - -void -_gtk_label_accessible_update_links (GtkLabel *label) -{ - AtkObject *obj; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (label)); - if (obj == NULL) - return; - - clear_links (GTK_LABEL_ACCESSIBLE (obj)); - create_links (GTK_LABEL_ACCESSIBLE (obj)); -} - -void -_gtk_label_accessible_focus_link_changed (GtkLabel *label) -{ - AtkObject *obj; - GtkLabelAccessible *accessible; - GList *l; - GtkLabelAccessibleLinkImpl *impl; - gboolean focused; - - obj = _gtk_widget_peek_accessible (GTK_WIDGET (label)); - if (obj == NULL) - return; - - accessible = GTK_LABEL_ACCESSIBLE (obj); - - for (l = accessible->priv->links; l; l = l->next) - { - impl = l->data; - focused = _gtk_label_get_link_focused (label, impl->link->index); - if (impl->link->focused != focused) - { - impl->link->focused = focused; - atk_object_notify_state_change (ATK_OBJECT (impl), ATK_STATE_FOCUSED, focused); - } - } -} +/* AtkHypertext implementation {{{2 */ static AtkHyperlink * gtk_label_accessible_get_link (AtkHypertext *hypertext, @@ -1212,3 +1235,5 @@ atk_hypertext_interface_init (AtkHypertextIface *iface) iface->get_n_links = gtk_label_accessible_get_n_links; iface->get_link_index = gtk_label_accessible_get_link_index; } + +/* vim:set foldmethod=marker expandtab: */ |