From ad0e2c940b58f7ba9642d8990e830235136d8a4a Mon Sep 17 00:00:00 2001 From: Bilal Elmoussaoui Date: Wed, 16 Oct 2024 12:32:04 +0200 Subject: [PATCH] st: Use macros to generate type boilerplate Also mark certain types as final when they are not meant to be used externally Part-of: --- src/st/st-button.c | 38 ++++++----------------------- src/st/st-entry.c | 23 ++++++------------ src/st/st-generic-accessible.c | 15 ++++++++---- src/st/st-generic-accessible.h | 27 ++++----------------- src/st/st-label.c | 44 +++++++--------------------------- src/st/st-widget-accessible.h | 33 ++++--------------------- src/st/st-widget.c | 25 +++++++++---------- 7 files changed, 52 insertions(+), 153 deletions(-) diff --git a/src/st/st-button.c b/src/st/st-button.c index a79098306..f379f131b 100644 --- a/src/st/st-button.c +++ b/src/st/st-button.c @@ -89,7 +89,10 @@ static guint button_signals[LAST_SIGNAL] = { 0, }; G_DEFINE_TYPE_WITH_PRIVATE (StButton, st_button, ST_TYPE_BIN); -static GType st_button_accessible_get_type (void) G_GNUC_CONST; +G_DECLARE_FINAL_TYPE (StButtonAccessible, + st_button_accessible, + ST, BUTTON_ACCESSIBLE, + StWidgetAccessible) static void st_button_update_label_style (StButton *button) @@ -909,44 +912,17 @@ st_button_fake_release (StButton *button) #define ST_TYPE_BUTTON_ACCESSIBLE st_button_accessible_get_type () -#define ST_BUTTON_ACCESSIBLE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - ST_TYPE_BUTTON_ACCESSIBLE, StButtonAccessible)) - -#define ST_IS_BUTTON_ACCESSIBLE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - ST_TYPE_BUTTON_ACCESSIBLE)) - -#define ST_BUTTON_ACCESSIBLE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), \ - ST_TYPE_BUTTON_ACCESSIBLE, StButtonAccessibleClass)) - -#define ST_IS_BUTTON_ACCESSIBLE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - ST_TYPE_BUTTON_ACCESSIBLE)) - -#define ST_BUTTON_ACCESSIBLE_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - ST_TYPE_BUTTON_ACCESSIBLE, StButtonAccessibleClass)) - -typedef struct _StButtonAccessible StButtonAccessible; -typedef struct _StButtonAccessibleClass StButtonAccessibleClass; - -struct _StButtonAccessible +typedef struct _StButtonAccessible { StWidgetAccessible parent; -}; +} StButtonAccessible; -struct _StButtonAccessibleClass -{ - StWidgetAccessibleClass parent_class; -}; /* AtkObject */ static void st_button_accessible_initialize (AtkObject *obj, gpointer data); -G_DEFINE_TYPE (StButtonAccessible, st_button_accessible, ST_TYPE_WIDGET_ACCESSIBLE) +G_DEFINE_FINAL_TYPE (StButtonAccessible, st_button_accessible, ST_TYPE_WIDGET_ACCESSIBLE) static const gchar * st_button_accessible_get_name (AtkObject *obj) diff --git a/src/st/st-entry.c b/src/st/st-entry.c index f219e7908..2aa72bd2d 100644 --- a/src/st/st-entry.c +++ b/src/st/st-entry.c @@ -114,7 +114,10 @@ static guint entry_signals[LAST_SIGNAL] = { 0, }; G_DEFINE_TYPE_WITH_PRIVATE (StEntry, st_entry, ST_TYPE_WIDGET); -static GType st_entry_accessible_get_type (void) G_GNUC_CONST; +G_DECLARE_FINAL_TYPE (StEntryAccessible, + st_entry_accessible, + ST, ENTRY_ACCESSIBLE, + StWidgetAccessible) static void st_entry_set_property (GObject *gobject, @@ -1508,26 +1511,14 @@ st_entry_get_hint_actor (StEntry *entry) /******************************************************************************/ #define ST_TYPE_ENTRY_ACCESSIBLE (st_entry_accessible_get_type ()) -#define ST_ENTRY_ACCESSIBLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ST_TYPE_ENTRY_ACCESSIBLE, StEntryAccessible)) -#define ST_IS_ENTRY_ACCESSIBLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ST_TYPE_ENTRY_ACCESSIBLE)) -#define ST_ENTRY_ACCESSIBLE_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), ST_TYPE_ENTRY_ACCESSIBLE, StEntryAccessibleClass)) -#define ST_IS_ENTRY_ACCESSIBLE_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), ST_TYPE_ENTRY_ACCESSIBLE)) -#define ST_ENTRY_ACCESSIBLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ST_TYPE_ENTRY_ACCESSIBLE, StEntryAccessibleClass)) -typedef struct _StEntryAccessible StEntryAccessible; -typedef struct _StEntryAccessibleClass StEntryAccessibleClass; -struct _StEntryAccessible +typedef struct _StEntryAccessible { StWidgetAccessible parent; -}; +} StEntryAccessible; -struct _StEntryAccessibleClass -{ - StWidgetAccessibleClass parent_class; -}; - -G_DEFINE_TYPE (StEntryAccessible, st_entry_accessible, ST_TYPE_WIDGET_ACCESSIBLE) +G_DEFINE_FINAL_TYPE (StEntryAccessible, st_entry_accessible, ST_TYPE_WIDGET_ACCESSIBLE) static void st_entry_accessible_init (StEntryAccessible *self) diff --git a/src/st/st-generic-accessible.c b/src/st/st-generic-accessible.c index 33feef20f..3d51b0210 100644 --- a/src/st/st-generic-accessible.c +++ b/src/st/st-generic-accessible.c @@ -36,11 +36,16 @@ static void atk_value_iface_init (AtkValueIface *iface); -G_DEFINE_TYPE_WITH_CODE(StGenericAccessible, - st_generic_accessible, - ST_TYPE_WIDGET_ACCESSIBLE, - G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, - atk_value_iface_init)); +typedef struct _StGenericAccessible +{ + StWidgetAccessible parent_class; +} StGenericAccessible; + +G_DEFINE_FINAL_TYPE_WITH_CODE (StGenericAccessible, + st_generic_accessible, + ST_TYPE_WIDGET_ACCESSIBLE, + G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, + atk_value_iface_init)); /* Signals */ enum { diff --git a/src/st/st-generic-accessible.h b/src/st/st-generic-accessible.h index b180c05fb..7999dcaf6 100644 --- a/src/st/st-generic-accessible.h +++ b/src/st/st-generic-accessible.h @@ -29,30 +29,11 @@ G_BEGIN_DECLS #define ST_TYPE_GENERIC_ACCESSIBLE (st_generic_accessible_get_type ()) -#define ST_GENERIC_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_GENERIC_ACCESSIBLE, StGenericAccessible)) -#define ST_GENERIC_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_GENERIC_ACCESSIBLE, StGenericAccessibleClass)) -#define ST_IS_GENERIC_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_GENERIC_ACCESSIBLE)) -#define ST_IS_GENERIC_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_GENERIC_ACCESSIBLE)) -#define ST_GENERIC_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_GENERIC_ACCESSIBLE, StGenericAccessibleClass)) -typedef struct _StGenericAccessible StGenericAccessible; -typedef struct _StGenericAccessibleClass StGenericAccessibleClass; - -typedef struct _StGenericAccessiblePrivate StGenericAccessiblePrivate; - -struct _StGenericAccessible -{ - StWidgetAccessible parent; - - StGenericAccessiblePrivate *priv; -}; - -struct _StGenericAccessibleClass -{ - StWidgetAccessibleClass parent_class; -}; - -GType st_generic_accessible_get_type (void) G_GNUC_CONST; +G_DECLARE_FINAL_TYPE (StGenericAccessible, + st_generic_accessible, + ST, GENERIC_ACCESSIBLE, + StWidgetAccessible) AtkObject* st_generic_accessible_new_for_actor (ClutterActor *actor); diff --git a/src/st/st-label.c b/src/st/st-label.c index a45f8d138..f39cf6fce 100644 --- a/src/st/st-label.c +++ b/src/st/st-label.c @@ -69,7 +69,10 @@ struct _StLabelPrivate G_DEFINE_TYPE_WITH_PRIVATE (StLabel, st_label, ST_TYPE_WIDGET); -static GType st_label_accessible_get_type (void) G_GNUC_CONST; +G_DECLARE_FINAL_TYPE (StLabelAccessible, + st_label_accessible, + ST, LABEL_ACCESSIBLE, + StWidgetAccessible) static void st_label_set_property (GObject *gobject, @@ -439,45 +442,16 @@ st_label_get_clutter_text (StLabel *label) #define ST_TYPE_LABEL_ACCESSIBLE st_label_accessible_get_type () -#define ST_LABEL_ACCESSIBLE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - ST_TYPE_LABEL_ACCESSIBLE, StLabelAccessible)) - -#define ST_IS_LABEL_ACCESSIBLE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - ST_TYPE_LABEL_ACCESSIBLE)) - -#define ST_LABEL_ACCESSIBLE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), \ - ST_TYPE_LABEL_ACCESSIBLE, StLabelAccessibleClass)) - -#define ST_IS_LABEL_ACCESSIBLE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - ST_TYPE_LABEL_ACCESSIBLE)) - -#define ST_LABEL_ACCESSIBLE_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - ST_TYPE_LABEL_ACCESSIBLE, StLabelAccessibleClass)) - -typedef struct _StLabelAccessible StLabelAccessible; -typedef struct _StLabelAccessibleClass StLabelAccessibleClass; - -struct _StLabelAccessible -{ - StWidgetAccessible parent; -}; - -struct _StLabelAccessibleClass -{ - StWidgetAccessibleClass parent_class; -}; - /* AtkObject */ static void st_label_accessible_initialize (AtkObject *obj, gpointer data); static const gchar * st_label_accessible_get_name (AtkObject *obj); -G_DEFINE_TYPE (StLabelAccessible, st_label_accessible, ST_TYPE_WIDGET_ACCESSIBLE) +typedef struct _StLabelAccessible { + StWidgetAccessible parent_class; +} StLabelAccessible; + +G_DEFINE_FINAL_TYPE (StLabelAccessible, st_label_accessible, ST_TYPE_WIDGET_ACCESSIBLE) static void st_label_accessible_class_init (StLabelAccessibleClass *klass) diff --git a/src/st/st-widget-accessible.h b/src/st/st-widget-accessible.h index e3d00187c..4c2c84f97 100644 --- a/src/st/st-widget-accessible.h +++ b/src/st/st-widget-accessible.h @@ -31,43 +31,18 @@ G_BEGIN_DECLS #define ST_TYPE_WIDGET_ACCESSIBLE st_widget_accessible_get_type () -#define ST_WIDGET_ACCESSIBLE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - ST_TYPE_WIDGET_ACCESSIBLE, StWidgetAccessible)) +G_DECLARE_DERIVABLE_TYPE (StWidgetAccessible, + st_widget_accessible, + ST, WIDGET_ACCESSIBLE, + ClutterActorAccessible) -#define ST_IS_WIDGET_ACCESSIBLE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - ST_TYPE_WIDGET_ACCESSIBLE)) - -#define ST_WIDGET_ACCESSIBLE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), \ - ST_TYPE_WIDGET_ACCESSIBLE, StWidgetAccessibleClass)) - -#define ST_IS_WIDGET_ACCESSIBLE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - ST_TYPE_WIDGET_ACCESSIBLE)) - -#define ST_WIDGET_ACCESSIBLE_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - ST_TYPE_WIDGET_ACCESSIBLE, StWidgetAccessibleClass)) - -typedef struct _StWidgetAccessible StWidgetAccessible; typedef struct _StWidgetAccessibleClass StWidgetAccessibleClass; -typedef struct _StWidgetAccessiblePrivate StWidgetAccessiblePrivate; -struct _StWidgetAccessible -{ - ClutterActorAccessible parent; - - /*< private >*/ - StWidgetAccessiblePrivate *priv; -}; struct _StWidgetAccessibleClass { ClutterActorAccessibleClass parent_class; }; -GType st_widget_accessible_get_type (void) G_GNUC_CONST; G_END_DECLS diff --git a/src/st/st-widget.c b/src/st/st-widget.c index 9422f9818..797d629d1 100644 --- a/src/st/st-widget.c +++ b/src/st/st-widget.c @@ -2453,7 +2453,7 @@ static AtkStateSet *st_widget_accessible_ref_state_set (AtkObject *obj); static void st_widget_accessible_initialize (AtkObject *obj, gpointer data); -struct _StWidgetAccessiblePrivate +typedef struct _StWidgetAccessiblePrivate { /* Cached values (used to avoid extra notifications) */ gboolean selected; @@ -2463,7 +2463,7 @@ struct _StWidgetAccessiblePrivate * relationships between this object and the label */ AtkObject *current_label; -}; +} StWidgetAccessiblePrivate; G_DEFINE_TYPE_WITH_PRIVATE (StWidgetAccessible, st_widget_accessible, CLUTTER_TYPE_ACTOR_ACCESSIBLE) @@ -2482,21 +2482,16 @@ st_widget_accessible_class_init (StWidgetAccessibleClass *klass) static void st_widget_accessible_init (StWidgetAccessible *self) { - StWidgetAccessiblePrivate *priv = st_widget_accessible_get_instance_private (self); - - self->priv = priv; } static void st_widget_accessible_dispose (GObject *gobject) { StWidgetAccessible *self = ST_WIDGET_ACCESSIBLE (gobject); + StWidgetAccessiblePrivate *priv = + st_widget_accessible_get_instance_private (self); - if (self->priv->current_label) - { - g_object_unref (self->priv->current_label); - self->priv->current_label = NULL; - } + g_clear_object (&priv->current_label); G_OBJECT_CLASS (st_widget_accessible_parent_class)->dispose (gobject); } @@ -2524,6 +2519,7 @@ st_widget_accessible_ref_state_set (AtkObject *obj) StWidget *widget = NULL; StWidgetPrivate *widget_priv; StWidgetAccessible *self = NULL; + StWidgetAccessiblePrivate *priv; result = ATK_OBJECT_CLASS (st_widget_accessible_parent_class)->ref_state_set (obj); @@ -2534,15 +2530,16 @@ st_widget_accessible_ref_state_set (AtkObject *obj) widget = ST_WIDGET (actor); self = ST_WIDGET_ACCESSIBLE (obj); + priv = st_widget_accessible_get_instance_private (self); widget_priv = st_widget_get_instance_private (widget); /* priv->selected should be properly updated on the * ATK_STATE_SELECTED notification callbacks */ - if (self->priv->selected) + if (priv->selected) atk_state_set_add_state (result, ATK_STATE_SELECTED); - if (self->priv->checked) + if (priv->checked) atk_state_set_add_state (result, ATK_STATE_CHECKED); /* On clutter there isn't any tip to know if a actor is focusable or @@ -2596,7 +2593,7 @@ check_pseudo_class (StWidget *widget) if (!accessible) return; - priv = ST_WIDGET_ACCESSIBLE (accessible)->priv; + priv = st_widget_accessible_get_instance_private (ST_WIDGET_ACCESSIBLE (accessible)); found = st_widget_has_style_pseudo_class (widget, "selected"); @@ -2631,7 +2628,7 @@ check_labels (StWidget *widget) if (!accessible) return; - priv = ST_WIDGET_ACCESSIBLE (accessible)->priv; + priv = st_widget_accessible_get_instance_private (ST_WIDGET_ACCESSIBLE (accessible)); /* We only call this method at startup, and when the label changes, * so it is fine to remove the previous relationships if we have the